Skip to content

Inayat567/react-native-ruler-view

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

react-native-ruler-view

A customizable, interactive ruler picker component for React Native. Perfect for selecting values in a range using a ruler-style interface. This library is a fork and modification of react-native-ruler-picker, with added enhancements and improved functionality.

Full credits to the original author of react-native-ruler-picker.

Preview

Features

  • Vertical and horizontal orientations.
  • Highly customizable step sizes, unit labels, and themes.
  • Animated step movement with support for spring or timing animations.
  • Haptic feedback and accessibility support.
  • Supports both integer and fractional values.
  • Fine-tuned customization for step heights, widths, and gaps.
  • Ability to configure a range of values with min, max, and step parameters.
  • Option to show labels and unit names next to the value.
  • Full customization over the ruler's theme (colors, text style, background, etc.).

Installation

To install react-native-ruler-view into your project, use the following command:

npm install react-native-ruler-view or if you're using yarn yarn add react-native-ruler-view

For iOS:

Make sure to install the necessary CocoaPods dependencies: cd ios; pod install; cd ..

Usage

Basic Examples

import * as React from 'react';
import { ScrollView, StyleSheet } from 'react-native';
import { RulerPicker } from 'react-native-ruler-view';

export default function App() {
  return (
    <ScrollView
      style={styles.container}
      contentContainerStyle={{ alignItems: 'center', justifyContent: 'center' }}
    >
      {/* Basic Ruler */}
      <RulerPicker
        min={0}
        unit="cm"
        max={240}
        step={1}
        width={300}
        height={300}
        fractionDigits={0}
        initialValue={0}
        onValueChange={(number) => console.log('onValueChange', number)}
        onValueChangeEnd={(number) => console.log('onValueChangeEnd', number)}
      />

      {/* Vertical Ruler */}
      <RulerPicker
        min={0}
        max={200}
        height={300}
        width={300}
        step={1}
        initialValue={0}
        vertical
      />

      {/* Ruler with Custom Theme */}
      <RulerPicker
        min={0}
        max={200}
        step={2}
        width={240}
        indicatorHeight={70}
        height={400}
        vertical
        showLabels={false}
        containerStyle={{
          backgroundColor: '#876796'
        }}
        accessibility={{
          enabled: true,
          labelFormat: 'Value: ${value} centimeters',
          announceValues: true,
        }}
        animationConfig={{
          type: 'spring',
          springConfig: {
            tension: 40,
            friction: 7,
          },
        }}
      />

      {/* Custom themed ruler with haptic feedback */}
      <RulerPicker
        min={0}
        max={200}
        step={1}
        hapticFeedback
        width={300}
        height={200}
        containerStyle={{
          backgroundColor: 'red'
        }}
        theme={{
          indicatorColor: 'green',
          shortStepColor: 'green',
          longStepColor: 'blue',
          textColor: 'green',
          backgroundColor: 'light',
        }}
      />
    </ScrollView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: 20,
  },
});

Props

RulerPickerProps

Name Type Required Default Value Description
width number No windowWidth Width of the ruler picker
height number No 300 Height of the ruler picker
min number Yes - Minimum value of the ruler picker
max number Yes - Maximum value of the ruler picker
step number No 1 Step of the ruler picker
initialValue number No min Initial value of the ruler picker
fractionDigits number No 1 Number of digits after the decimal point
unit string No 'cm' Unit of the ruler picker
indicatorHeight number No 80 Height of the indicator
vertical boolean No false Enables vertical orientation
theme RulerTheme or ThemeName No 'light' Theme for the ruler picker
hapticFeedback boolean No false Enables haptic feedback
animated boolean No true Enables animation
valueTextStyle TextStyle No - Text style of the value
unitTextStyle TextStyle No - Text style of the unit
decelerationRate 'fast' | 'normal' | number No 'normal' Deceleration rate of the ruler picker
accessibility RulerAccessibilityConfig No - Accessibility configuration
showLabels boolean No true Show labels
onValueChange (value: number) => void No - Callback when the value changes
onValueChangeEnd (value: string) => void No - Callback when the value changes end

RulerPickerItemProps

Name Type Required Default Value Description
gapBetweenSteps number No 10 Gap between steps
shortStepHeight number No 20 Height of the short step
longStepHeight number No 40 Height of the long step
stepWidth number No 2 Width of the steps
shortStepColor string No 'lightgray' Color of the short steps
longStepColor string No 'darkgray' Color of the long steps
vertical boolean No false Enables vertical orientation
containerStyle ViewStyle No - Style of the container
stepStyle ViewStyle No - Style of the steps

RulerTheme

Name Type Required Default Value Description
indicatorColor string No 'black' Color of the center line
shortStepColor string No 'lightgray' Color of the short steps
longStepColor string No 'darkgray' Color of the long steps
textColor string No 'black' Text color
backgroundColor string No 'white' Background color

RulerAccessibilityConfig

Name Type Required Default Value Description
enabled boolean No false Enables accessibility
labelFormat string No - Format for accessibility labels
announceValues boolean No false Announce values during adjustment
minimumAdjustment number No - Minimum adjustment value
incrementAnnouncement string No - Announcement for increment action
decrementAnnouncement string No - Announcement for decrement action

Contributing

Contributions are welcome! Please fork the repository, make your changes, and submit a pull request.

This library is forked from the original react-native-ruler-picker repository, and full credit goes to them. This is my first npm package, so there might be bugs. Let’s use it, find and fix issues, and add new features together!

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

This project is licensed under the MIT License. See the LICENSE file for details.

Made with create-react-native-ruler-view

About

⚡ Lightning-fast and customizable Ruler Picker component for React Native

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 88.0%
  • JavaScript 12.0%