Skip to content

VanOns/react-native-selectable-text

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

144 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Disclaimer -

I tested this code in my own projects, but this code has been with heavy assistance from Claude Code. If you see a problem - submit a ticket!

react-native-selectable-text

A React Native library for custom text selection menus, redesigned from the ground up for React Native 0.81.1 with full support for the new architecture (Fabric).

The SelectableTextView component wraps your text content and provides custom menu options that appear when users select text. It supports nested text styling and cross-platform event handling.

Features

  • Cross-platform support (iOS & Android)
  • Support for nested text with different styles
  • Custom menu options with callback handling

Installation

npm install @rob117/react-native-selectable-text

For iOS, run pod install:

cd ios && pod install

Usage

Basic Example

import React, { useState } from 'react';
import { View, Text, Alert } from 'react-native';
import { SelectableTextView } from '@rob117/react-native-selectable-text';

export default function App() {

  const handleSelection = (event) => {
    const { chosenOption, highlightedText } = event;
    Alert.alert(
      'Selection Event',
      `Option: ${chosenOption}\nSelected Text: ${highlightedText}`
    );
  };

  return (
    <View>

      <SelectableTextView
        menuOptions={['look up', 'copy', 'share']}
        onSelection={handleSelection}
        style={{ margin: 20 }}
      >
        <Text>This is simple selectable text</Text>
      </SelectableTextView>
    </View>
  );
}

Advanced Example with Nested Text Styling

<SelectableTextView
  menuOptions={['Action 1', 'Action 2', 'Custom Action']}
  onSelection={handleSelection}
  style={{ marginHorizontal: 20 }}
>
  <Text style={{ color: 'black', fontSize: 16 }}>
    This text is black{' '}
    <Text style={{ textDecorationLine: 'underline', color: 'red' }}>
      this part is underlined and red
    </Text>{' '}
    and this is black again. All of it is selectable with custom menu options!
  </Text>
</SelectableTextView>

API Reference

SelectableTextView Props

Prop Type Required Description
children React.ReactNode Yes Text components to make selectable
menuOptions string[] Yes Array of menu option strings
onSelection (event: SelectionEvent) => void No Callback fired when menu option is selected
style ViewStyle No Style object for the container

SelectionEvent

The onSelection callback receives an event object with:

interface SelectionEvent {
  chosenOption: string;    // The menu option that was selected
  highlightedText: string; // The text that was highlighted by the user
}

Requirements

  • React Native 0.81.1+
  • iOS 11.0+
  • Android API level 21+
  • React Native's new architecture (Fabric) enabled

Platform Differences

The library handles platform differences internally:

  • iOS: Uses direct event handlers for optimal performance
  • Android: Uses DeviceEventEmitter for reliable event delivery

Both platforms provide the same API and functionality.

License

MIT


Made with create-react-native-library

About

Capture text selection and customize the action menu

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Objective-C++ 56.1%
  • Kotlin 18.5%
  • TypeScript 10.0%
  • JavaScript 5.9%
  • Ruby 5.4%
  • Swift 3.0%
  • Objective-C 1.1%