🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

react-custom-roulette

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-custom-roulette

Customizable React roulette wheel with spinning animation

1.4.1
latest
Source
npm
Version published
Weekly downloads
5.7K
-6.33%
Maintainers
1
Weekly downloads
 
Created
Source

React Custom Roulette

npm version Types npm downloads

Customizable React roulette wheel with spinning animation

React Custom Roulette

Features

  • Customizable design
  • Prize selection with props
  • Spinning animation (customizable spin duration)
  • [NEW!] Images as items (see Types)
  • [NEW!] Customizable pointer image
  • Multiple consecutive spins (see Multi Spin)
  • Compatible with TypeScript

Install

$ npm install react-custom-roulette

or

$ yarn add react-custom-roulette

Quickstart

Wheel Component

import React from 'react'
import { Wheel } from 'react-custom-roulette'

const data = [
  { option: '0', style: { backgroundColor: 'green', textColor: 'black' } },
  { option: '1', style: { backgroundColor: 'white' } },
  { option: '2' },
]

export default () => (
  <>
    <Wheel
      mustStartSpinning={mustSpin}
      prizeNumber={3}
      data={data}
      backgroundColors={['#3e3e3e', '#df3428']}
      textColors={['#ffffff']}
    />
  </>
)

Props

PropTypeDefaultDescription
mustStartSpinning (required)boolean-Sets when the roulette must start the spinning animation
prizeNumber (required)number-Sets the winning option. It's value must be between 0 and data.lenght-1
data (required)Array<WheelData>-Array of options. Can contain styling information for a specific option (see WheelData)
onStopSpinningfunction() => nullCallback function that is called when the roulette ends the spinning animation
backgroundColorsArray<string>['darkgrey', 'lightgrey']Array of colors that will fill the background of the roulette options, starting from option 0
textColorsArray<string>['black']Array of colors that will fill the text of the roulette options, starting from option 0
outerBorderColorstring'black'Color of the roulette's outer border line
outerBorderWidthnumber5Width of the roulette's outer border line (0 represents no outer border line)
innerRadiusnumber [0..100]0Distance of the inner radius from the center of the roulette
innerBorderColorstring'black'Color of the roulette's inner border line
innerBorderWidthnumber0Width of the roulette's inner border line (0 represents no inner border line)
radiusLineColorstring'black'Color of the radial lines that separate each option
radiusLineWidthnumber5Width of the radial lines that separate each option (0 represents no radial lines)
fontFamilystring'Helvetica, Arial'Global font family of the option string. Non-Web safe fonts are fetched from https://fonts.google.com/. All available fonts can be found there.
fontSizenumber20Global font size of the option string
fontWeight`numberstring`'bold'
fontStylestring'normal'Global font style of the option string
perpendicularTextbooleanfalseWhen 'true', sets the option texts perpendicular to the roulette's radial lines
textDistancenumber [0..100]60Distance of the option texts from the center of the roulette
spinDurationnumber [0.01 ..]1.0Coefficient to adjust the default spin duration
startingOptionIndexnumber-Set which option (through its index in the data array) will be initially selected by the roulette (before spinning). If not specified the roulette will render without choosing a starting option
pointerPropsPointerProps{ src: roulettePointer }Image source and CSS styling to apply to the pointer image.
disableInitialAnimationbooleanfalseWhen 'true', disables the initial backwards wheel animation

Types

WheelData

interface WheelData {
  option?: string;
  image?: ImageProps;
  style?: StyleType; // Optional
  optionSize?: number; // Optional
}
PropTypeDefaultDescription
optionstring''String to be rendered inside an option.
imageImageProps-Image to be rendered inside an option. It is configured through ImageProps
styleStyleType-Styles for option. It is configured through StyleType
optionSizenumber1Integer that sets the size of the option measured in roulette pieces. For example: if data provides 2 options A and B, and you set A's optionSize to 2, B's optionSize to 1, the roulette will render 3 pieces: 2 corresponding to A and 1 corresponding to B. Therefore, A will appear to be twice as big as B.

StyleType

interface StyleType {
  backgroundColor?: string; // Optional
  textColor?: string; // Optional
  fontFamily?: string; // Optional
  fontSize?: number; // Optional
  fontWeight?: number | string; // Optional
  fontStyle?: string; // Optional
}
PropTypeDefaultDescription
backgroundColorstring'darkgrey' or 'lightgrey'Background color for option
textColorstring'black'Text color
fontFamilystring'Helvetica, Arial'String containing text font and its fallbacks separated by commas
fontSizenumber20Font size number
fontWeight`numberstring`'bold'
fontStylestring'normal'Font style string

ImageProps

interface ImageProps {
  uri: string;
  offsetX?: number; // Optional
  offsetY?: number; // Optional
  sizeMultiplier?: number; // Optional
  landscape?: boolean; // Optional
}
PropTypeDefaultDescription
uristring-Image source. It can be url or path.
offsetXnumber0Image offset in its X axis
offsetYnumber0Image offset in its Y axis
sizeMultipliernumber1A value of 1 means image height is calculated as 200px * sizeMultiplier and width will be calculated to keep aspect ratio.
landscapebooleanfalseIf true, image will be rotated 90 degrees so as to render in a landscape orientation.

PointerProps

interface PointerProps {
  src?: string; // Optional
  style?: React.CSSProperties; // Optional
}
PropTypeDefaultDescription
srcstring-Image src.
styleReact.CSSProperties-Styling for pointer image.

Multi Spin

Example (using useState)

import React, { useState } from 'react'
import { Wheel } from 'react-custom-roulette'

const data = [
  { option: '0' },
  { option: '1' },
  { option: '2' },
]

export default () => {
  const [mustSpin, setMustSpin] = useState(false);
  const [prizeNumber, setPrizeNumber] = useState(0);

  const handleSpinClick = () => {
    if (!mustSpin) {
      const newPrizeNumber = Math.floor(Math.random() * data.length);
      setPrizeNumber(newPrizeNumber);
      setMustSpin(true);
    }
  }

  return (
    <>
      <Wheel
        mustStartSpinning={mustSpin}
        prizeNumber={prizeNumber}
        data={data}

        onStopSpinning={() => {
          setMustSpin(false);
        }}
      />
      <button onClick={handleSpinClick}>SPIN</button>
    </>
  )
}

Contributors

This project exists thanks to all the people who contribute!

License

This project is licensed under the MIT license, Copyright (c) 2023 Effectus Software. [License]

Keywords

react

FAQs

Package last updated on 20 Apr 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts