NativeUI Primitives

Collapsible

Create expandable sections with smooth animations and full accessibility across all platforms.


Preview

Interactive Demo

Installation

npm install @native-ui-org/primitives
pnpm add @native-ui-org/primitives
yarn add @native-ui-org/primitives
bun add @native-ui-org/primitives

Overview

Collapsible is a compound component for building expandable/collapsible content sections with proper state management and accessibility.

FeatureDescriptionPlatforms
CollapsibleRoot container managing stateiOS, Android, Web
TriggerButton to toggle open/closed stateiOS, Android, Web
ContentAnimated content areaiOS, Android, Web

Setup & Usage Guide

Collapsible provides the structure for expandable sections. Add your own styling and animations.

1. Install and Import

Install from npm:

npm install @native-ui-org/primitives

Then import from the package:

import { 
  Collapsible, 
  CollapsibleTrigger, 
  CollapsibleContent 
} from "@native-ui-org/primitives";

2. Basic Usage (Uncontrolled)

Let the component manage its own state:

    <Collapsible defaultOpen={false}>
  <CollapsibleTrigger>
    <Text>Toggle Content</Text>
      </CollapsibleTrigger>
      
  <CollapsibleContent>
    <Text>Hidden content that appears when opened</Text>
      </CollapsibleContent>
    </Collapsible>

3. Controlled State

Manage the open/closed state yourself:

const [isOpen, setIsOpen] = useState(false);

<Collapsible open={isOpen} onOpenChange={setIsOpen}>
        <CollapsibleTrigger>
    <Text>{isOpen ? 'Close' : 'Open'}</Text>
        </CollapsibleTrigger>
        
        <CollapsibleContent>
          <Text>Controlled content</Text>
        </CollapsibleContent>
      </Collapsible>

4. With Custom Styling

Add styles and icons:

      <Collapsible>
  <CollapsibleTrigger style={styles.trigger}>
    <Text>FAQ Question</Text>
    <Icon name={isOpen ? "chevron-up" : "chevron-down"} />
      </CollapsibleTrigger>
      
  <CollapsibleContent style={styles.content}>
    <Text>Answer to the question...</Text>
      </CollapsibleContent>
    </Collapsible>

API Reference

Collapsible

Root container managing state and context.

PropTypeDefaultDescription
openbooleanControlled open state
defaultOpenbooleanfalseInitial open state (uncontrolled)
onOpenChange(open: boolean) => voidCallback when state changes
disabledbooleanfalseDisable all interactions
asChildbooleanfalseUse Slot pattern

CollapsibleTrigger

Button that toggles the collapsible state.

PropTypeDefaultDescription
asChildbooleanfalseUse Slot pattern
onPressfunctionAdditional press handler
...propsanyStandard Pressable props

CollapsibleContent

Container for collapsible content.

PropTypeDefaultDescription
forceMountbooleanfalseKeep mounted when closed
asChildbooleanfalseUse Slot pattern

Platform Behavior

PlatformImplementationCharacteristics
iOS / AndroidReact Native Animated APINative 60fps animations
WebCSS transitions with JS controlHardware accelerated
All PlatformsConsistent APISame props, same behavior

Accessibility

Web:

  • role="button" on trigger
  • aria-expanded reflects state
  • aria-controls links trigger to content
  • Keyboard navigation (Space/Enter)

Mobile:

  • Proper accessibility roles
  • Screen reader announces state
  • Works with VoiceOver and TalkBack

Version History

VersionNotes
0.1.0Initial release — compound component with controlled/uncontrolled state support.

Summary: Collapsible provides the foundation for expandable content sections. Use it for FAQs, accordions, dropdown sections, or any collapsible UI pattern. Add your own animations and styling for complete control over appearance.