Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/HichamELBSI/react-native-body-highlighter

react-native-body-highlighter 💪
https://github.com/HichamELBSI/react-native-body-highlighter

Last synced: 3 months ago
JSON representation

react-native-body-highlighter 💪

Awesome Lists containing this project

README

        

# react-native-body-highlighter

[![npm](https://img.shields.io/npm/v/react-native-body-highlighter.svg)](https://www.npmjs.com/package/react-native-body-highlighter) [![Downloads](https://img.shields.io/npm/dt/react-native-body-highlighter.svg)](https://www.npmjs.com/package/react-native-body-highlighter)
[![CircleCI](https://circleci.com/gh/HichamELBSI/react-native-body-highlighter.svg?style=svg)](https://circleci.com/gh/HichamELBSI/react-native-body-highlighter)

> SVG human body parts highlighter for react-native (Expo compatible).


body-highlighter
body-highlighter
body-highlighter
body-highlighter

## Installation

npm

```bash
$ npm install react-native-body-highlighter
```

yarn

```bash
$ yarn add react-native-body-highlighter
```

## Usage

### Basic example

```jsx
import { useState } from "react";
import Body from "react-native-body-highlighter";

export default function App() {
return (



);
}

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
```

Complete example

```jsx
import { StyleSheet, Switch, Text, View } from "react-native";
import { useState } from "react";
import Body from "react-native-body-highlighter";

export default function App() {
const [bodyPartSelected, setBodyPartSelected] = useState({
slug: "biceps",
intensity: 2,
});
const [isBackSideEnabled, setIsBackSideEnabled] = useState(false);
const [isMale, setIsMale] = useState(true);
const toggleSwitch = () =>
setIsBackSideEnabled((previousState) => !previousState);

const toggleGenderSwitch = () => setIsMale((previousState) => !previousState);

return (


setBodyPartSelected({ slug: e.slug, intensity: 2 })
}
gender={isMale ? "male" : "female"}
side={isBackSideEnabled ? "back" : "front"}
scale={1.7}
/>


Side ({isBackSideEnabled ? "Back" : "Front"})



Gender ({isMale ? "Male" : "Female"})




);
}

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
switchContainer: {
flexDirection: "row",
gap: 30,
},
switch: {
flex: 1,
alignItems: "center",
justifyContent: "center",
},
});
```

## v3.X.X Props

| Prop | Required | Purpose |
| --------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
| data | Yes | `BodyPartObject[]` - Array of `BodyPartObject` to highlight |
| onBodyPartPress | No | `Func` - (bodyPart: BodyPartObject) => {} Callback called when a user tap a body part |
| colors | No | `String[]` - Defaults to `['#0984e3', '#74b9ff']` |
| side | No | `string` - Can be "back" or "front", Defaults to `front` |
| gender | No | `string` - Can be "male" or "female", Defaults to `male` - :warning: Please consider `female` as a beta work in progress |
| scale | No | `Float` - Defaults to `1` |

## v2.X.X Props

| Prop | Required | Purpose |
| ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------- |
| data | Yes | (Array) Array of `BodyPartObject` to highlight |
| onMusclePress | No | (Func) (bodyPart: BodyPartObject) => {} Callback called when a user tap a body part, disabled if zoomOnPress is set to true |
| colors | No | (Array) Defaults to `['#0984e3', '#74b9ff']` |
| frontOnly | No | (Boolean) Display only the front, Defaults to `false` |
| backOnly | No | (Boolean) Display only the back, Defaults to `false` |
| zoomOnPress | No | (Boolean) Defaults to false |
| scale | No | (Float) Defaults to `1` |

## BodyPart object model

- #### BodyPartObject : `{ slug: BodyPartName, intensity: IntensityNumber }`

- #### BodyPartName : Body part name to highlight (See the list of available body parts below)

- #### IntensityNumber : Color intensity (if the `colors` property is set: from 1 to `colors.length` + 1. If not, intensity can be 1 or 2)

## List of body parts

| BodyParts | v2 | v3 | Side |
| --------------- | ------------------ | ------------------ | ----- |
| trapezius | :white_check_mark: | :white_check_mark: | Both |
| triceps | :white_check_mark: | :white_check_mark: | Both |
| forearm | :white_check_mark: | :white_check_mark: | Both |
| obliques | :white_check_mark: | :white_check_mark: | Both |
| adductors | :white_check_mark: | :white_check_mark: | Both |
| calves | :white_check_mark: | :white_check_mark: | Both |
| head | :white_check_mark: | :white_check_mark: | Both |
| neck | :white_check_mark: | :white_check_mark: | Both |
| chest | :white_check_mark: | :white_check_mark: | Front |
| biceps | :white_check_mark: | :white_check_mark: | Front |
| abs   | :white_check_mark: | :white_check_mark: | Front |
| upper-back | :white_check_mark: | :white_check_mark: | Back |
| lower-back | :white_check_mark: | :white_check_mark: | Back |
| hamstring | :white_check_mark: | :white_check_mark: | Back |
| gluteal | :white_check_mark: | :white_check_mark: | Back |
| deltoids   | :x: | :white_check_mark: | Both |
| hands | :x: | :white_check_mark: | Both |
| feet | :x: | :white_check_mark: | Both |
| ankles | :x: | :white_check_mark: | Both |
| tibialis | :x: | :white_check_mark: | Both |
| adductor | :white_check_mark: | :x: | Both |
| front-deltoids  | :white_check_mark: | :x: | Front |
| abductors | :white_check_mark: | :x: | Front |
| back-deltoids   | :white_check_mark: | :x: | Back |