Selectable Text

A selectable text region.

Installation

1
Run the following command:
npx nwui-cli@latest add selectable-text
🚀
Ship.
1
Add the following dependencies to your project:
npx expo install react-native-uitextview
2
Copy/paste the following code to the specified file path:
~/components/nativewindui/Text.tsx
import { VariantProps, cva } from 'class-variance-authority';
import { cssInterop } from 'nativewind';
import * as React from 'react';
import { UITextView } from 'react-native-uitextview';

import { cn } from '~/lib/cn';

cssInterop(UITextView, { className: 'style' });

const textVariants = cva('text-foreground', {
  variants: {
    variant: {
      largeTitle: 'text-4xl',
      title1: 'text-2xl',
      title2: 'text-[22px] leading-7',
      title3: 'text-xl',
      heading: 'text-[17px] leading-6 font-semibold',
      body: 'text-[17px] leading-6',
      callout: 'text-base',
      subhead: 'text-[15px] leading-6',
      footnote: 'text-[13px] leading-5',
      caption1: 'text-xs',
      caption2: 'text-[11px] leading-4',
    },
    color: {
      primary: '',
      secondary: 'text-secondary-foreground/90',
      tertiary: 'text-muted-foreground/90',
      quarternary: 'text-muted-foreground/50',
    },
  },
  defaultVariants: {
    variant: 'body',
    color: 'primary',
  },
});

const TextClassContext = React.createContext<string | undefined>(undefined);

function Text({
  className,
  variant,
  color,
  ...props
}: React.ComponentPropsWithoutRef<typeof UITextView> & VariantProps<typeof textVariants>) {
  const textClassName = React.useContext(TextClassContext);
  return (
    <UITextView
      className={cn(textVariants({ variant, color }), textClassName, className)}
      {...props}
    />
  );
}

export { Text, TextClassContext, textVariants };
🚢
Ship.

Usage

index.tsx
import { View } from 'react-native';
    
import {Text} from '~/components/nativewindui/Text';

export default function SelectableTextScreen() {
  return (
    <View className="flex-1 items-center justify-center">
      <Text uiTextView selectable>
        Long press or double press this text
      </Text>
    </View>
  );
}
© Ronin Technologies LLC 2024