Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-var-ui

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-var-ui

  • 1.0.6
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
92
increased by39.39%
Maintainers
1
Weekly downloads
 
Created
Source

Screenshot

workflow npm npm NPM

react-var-ui is a simple React component library for variable setting and preview, inspired by iOS settings, react-dat-gui and dat.gui.

While some code from react-dat-gui was used, this library functions in a completely different way. The codebase uses modern React code practices such as hooks and functional components. Instead of iterating over the children array, react-var-ui uses a Context. Creation of custom components is also easier.

Installation

Install react-var-ui with either npm or yarn:

yarn add react-var-ui
# or
npm install react-var-ui

Then include the CSS with:

/* In your CSS/SCSS file: */
@import 'react-var-ui/dist/index.css';

or:

// In your JS/TS file (assuming your bundler supports loading CSS files):
import 'react-var-ui/dist/index.css';

Example usage

const [values, setValues] = React.useState({
  toggle: true,
  color: '#FF0000',
  select: 1,
  slider: 0.4,
  xy: [0, 0.2],
  string: 'Hello world!'
});

return (
  <VarUI updateValues={setValues} values={values}>
    <VarCategory label="Example">
      <VarColor path="color" label="Color" />
      <VarToggle path="toggle" label="Toggle" />
      <VarSelect
        path="select"
        label="Select"
        options={[
          { key: 0, label: 'Zero' },
          { key: 1, label: 'One' }
        ]}
      />
      <VarSlider
        label="VarSlider"
        path="slider"
        min={0.2}
        max={0.8}
        step={0.1}
      />
      <VarString label="VarString" path="string" />
      <VarXY label="VarXY" path="xy" />
      <VarButton buttonLabel="VarButton" onClick={() => alert('clicked!')} />
    </VarCategory>
  </VarUI>
);

Theme customization

The colors can be customized as such (provided are default values):

.react-var-ui {
  /* Foreground color, used for text. */
  --react-var-ui-foreground-color: #ddd;

  /* Background color, used for category header backgrounds. */
  --react-var-ui-background-color: #11111a;

  /* Accent color, used for active parts of sliders, toggles and XY. */
  --react-var-ui-accent-color: #77f;

  /* Input background color. */
  --react-var-ui-input-background-color: #353542;

  /* Input background color (when hovered). */
  --react-var-ui-input-background-hover-color: #424253;

  /* Input background color (when pressed). Only applies to buttons. */
  --react-var-ui-input-background-pressed-color: #2b2b37;

  /* Label background color. */
  --react-var-ui-label-background-normal-color: #22222a;

  /* Label background color (when hovered). */
  --react-var-ui-label-background-hover-color: #2a2a33;

  /* Label border color. */
  --react-var-ui-label-border-color: #33333a;
}

Utility components

<VarUI />

This is the main component which provides a Context for other components. It is not required to use this component - other components accept onChange and value properties which provide a similar functionality.

required
PropertyDescriptionType
valuesA JavaScript object or array to be mutated by the input components.object
updateValuesThe function to be called whenever an update is available.(values: object) => void
optional
PropertyDescriptionType
classNameAdditional class names for the wrapper object.string

<VarCategory />

VarCategory screenshot

Category component for grouping inputs.

required
PropertyDescriptionType
labelCategory label.ReactNode
optional
PropertyDescriptionType
classNameAdditional class names on the wrapping div element.string

Input components

Base properties

Most input components accept the following base properties.

Does not apply to <VarButton />.

optional

T is component's value type.

PropertyDescriptionType
labelLabel to be shown left to the input.ReactNode
classNameAdditional class names on the wrapping div element.string
pathVariable path in the data object.string
valueCurrent value (only used if context and path aren't available).
In most cases you aren't going to need this.
T
defaultValueDefault value for components that support resetting (on double click for example).T
disabledShould the component be disabled.boolean
onChangeOn change event, called with the new value if provided.
In most cases you aren't going to need this.
(value: T) => void
childrenChildren. Only rendered when provided directly to the VarBase component.ReactNode

<VarAngle />

VarAngle screenshot

Angle picker component. Accepts and provides numbers (radians).

T = number (rad)

<VarBase />

Base VarUI input component. Doesn't do anything besides displaying the label.

Used to construct other components from.

<VarButton />

VarButton screenshot

Button component.

Does not accept any of the base component properties.

required
PropertyDescriptionType
buttonLabelCategory label.ReactNode
optional
PropertyDescriptionType
onClickCalled when the button is clicked.() => void
disabledShould the component be disabled.boolean

<VarColor />

VarColor screenshot

Color picker component. Returns and accepts values in form of hex color strings.

Uses react-color under the hood.

T = string (#XXXXXX)

optional
PropertyDescriptionType
alphaShould allow picking alpha values?
If true, the result hex code will contain extra two characters representing the alpha value, from 00 to FF.
boolean

<VarDisplay />

VarDisplay screenshot

A simple component that displays a string or a numeric value.

Only accepts path and value. Does not change any values.

T = string | number

<VarNumber />

VarNumber screenshot

Integer/float number component. Accepts and provides numbers.

T = number

optional
PropertyDescriptionType
minMinimum value.number
maxMaximum value.number
stepStep.number
integerShould the end result be rounded to an integer value.boolean
showInputIf true will display an editable input, otherwise shows a read only value.boolean
showButtonsIf true will display buttons that increase and decrease the value by step.boolean

<VarSelect />

VarSelect screenshot

Select component. Returns and accepts either value from option object or key when value is not provided.

T = any

required
PropertyDescriptionType
optionsOptions to be displayed.IVarSelectOption[]
Interface: IVarSelectOption

Required:

PropertyDescriptionType
keyKey for the option. Also used as value if value is not specified.ReactText
labelOption label.string

Optional:

PropertyDescriptionType
valueOption value. Key will be used if not specified.
Note: Will be serialized to JSON and deserialized when selected.
any

<VarSlider />

VarSlider screenshot

Integer/float slider component. Accepts and provides numbers.

T = number

required
PropertyDescriptionType
minMinimum value.number
maxMaximum value.number
stepStep.number
optional
PropertyDescriptionType
integerShould the end result be rounded to an integer value.boolean
showInputIf true will display an editable input, otherwise shows a read only value.boolean
showButtonsIf true will display buttons that increase and decrease the value by step.boolean

<VarString />

VarString screenshot

String input component. Accepts and provides a string value.

T = string

optional
PropertyDescriptionType
maxLengthMaximum length of the text.number
multilineShould the field be a textarea?boolean

<VarToggle />

VarToggle screenshot

Checkbox/toggle component. Accepts and returns a boolean (true/false).

T = boolean

<VarXY />

VarXY screenshot

XY offset picker. Accepts and provides an array in form of [x, y].

T = [number (x), number (y)]

optional
PropertyDescriptionType
minMinimum value.[number (x), number (y)]
maxMaximum value.[number (x), number (y)]
stepStep.[number (x), number (y)]

Creation of custom components

react-var-ui provides a <VarBase /> component and a useVarUIValue hook designed to facilitate creation of custom components.

Example usage

import React, { FC } from 'react';
import { useVarUIValue, IVarBaseInputProps, VarBase } from 'react-var-ui';

// Please specify the <T>.
export interface IVarCustomProps extends IVarBaseInputProps<string> {}

/**
 * Custom input component. In this example, it's a simple text input.
 */
export const VarCustom: FC<IVarCustomProps> = ({
  label,
  path,
  value,
  onChange,
  disabled,
  className
}) => {
  /**
   * currentValue will contain the current value from the value object
   * (at a given path) or value from properties if that's not available.
   *
   * setCurrentValue will set the value onto a given path in the object
   * and call onChange if available.
   *
   * All arguments are optional, path/object-based value changes take
   * precedence.
   */
  const [currentValue, setCurrentValue] = useVarUIValue(path, value, onChange);

  /**
   * We're wrapping our component in VarBase which provides the default
   * label.
   *
   * It is necessary to wrap what should appear on the right in a <span>.
   * If this behavior is undesired, a <div> with grid-column: 1 / 3; can
   * be used.
   */
  return (
    <VarBase label={label} disabled={disabled} className={className}>
      <span>
        <input
          type="text"
          maxLength={maxLength}
          value={currentValue}
          onChange={e => setCurrentValue(e.target.value)}
        />
      </span>
    </VarBase>
  );
};

Keywords

FAQs

Package last updated on 19 Jun 2021

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc