npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-new-input

v2.3.11

Published

React Multi-Select with automatic checkboxes/radios

Downloads

27

Readme

Demo with Storybook

https://brennemankyle.github.io/react-new-input/

Features

A robust multi-select that automatically uses Radios, Checkboxes, or a Switch if they'll fit on one line

  • Deterministic even with dynamic/live prop updates
  • Completely customizable: replace any internal component, styling, icon, text, or search filter by changing props
  • Automatically uses Radios, Checkboxes, or a Switch if it fits on one line (updates on live screen resizes)
  • Search using fuzzy matching: mossisippi > Mississippi, py > Pi. Powered by https://glench.github.io/fuzzyset.js/
  • Fully usable with only the Keyboard
  • Creatable options (managed by a prop not a separate component)
  • Selectable Option Groups (parent group can be selected)
  • Small npm package size
  • No Jquery
  • Modern browser support: Chrome, Safari, Edge, Firefox, iOS, Android
  • And much more!

Install

npm install react-new-input

// Example File
import React, { useState } from 'react'
import NewInput from 'react-new-input'

// With React Function/Hooks
let SomeHook = () => {
  const [selection, setSelection] = useState()
  let options = [
    {value: '1', label: 'Option 1'},
    {value: '2', label: 'Option 2'},
  ]

  return <NewInput
    name="example"
    selection={selection}
    onChange={(e) => setSelection(e.target.value)}
    options={options} />
}

// OR With React Component
class SomeComponent extends React.Component {
  constructor(props) {
    super(props)
    this.state = {selection}
    this.options = [
      {value: '1', label: 'Option 1'},
      {value: '2', label: 'Option 2'},
    ]
  }

  onChange(e) {
    this.setState({
      selection: e.target.value
    })
  }

  render() {
    return <NewInput
      name="example"
      selection={this.state.selection}
      onChange={this.onChange}
      options={this.options} />
  }
}

Comparison

| Name | Bundle Size | | - | - | | react-new-input | gzip 21.1kB (https://bundlephobia.com/result?p=react-new-input) | | react-select (competitor) | gzip 26.1kb (https://bundlephobia.com/result?p=react-select) |

Property Defaults

| Name | Default Value | | - | - | | onChange | undefined | | onBlur | noop | | onFocus | noop | | name | undefined | | selection | [] | | options | [] | | placeholder | 'Select...' | | multiple | false | | disabled | false | | creatable | false | | removable | true | | appendToBody | false | | rightToLeft | false | | allowDuplicates | true | | alwaysReturnArray | false | | filterOptions | filterOptions | | massageDataIn | massageDataIn | | massageDataOut | massageDataOut | | optionKeys | ['value', 'label'] | | checkRadioMaxCount | 10 | | parseTo | string | | Text Props || | text_placeholder | '' | | text_noOptions | 'No Options' | | text_create | 'Create' | | Component Props || | component_Select | Select | | component_CheckRadio | CheckRadio | | component_CheckBox | CheckBox | | component_Radio | Radio | | component_Switch | Switch | | component_HtmlFieldData | HtmlFieldData | | component_Wrapper | Wrapper | | component_Selection | Selection | | component_SelectionList | SelectionList | | component_OptionList | OptionList | | component_Option | Option | | component_Search | Search | | component_SelectionWrapper | SelectionWrapper | | component_OptionsWrapper | OptionsWrapper | | component_AppendToBodyOptionsWrapper | AppendToBodyOptionsWrapper | | component_StyledAppendToBodyOptionsWrapper | StyledAppendToBodyOptionsWrapper | | SVG Props || | svg_Checkmark | Checkmark | | svg_Remove | Remove | | svg_Expand | Expand | | Style Props || | styles_fontSize | '1em' | | styles_borderRadius | '.2em' | | styles_paddingTop | '.25em' | | styles_paddingBottom | '.25em' | | styles_paddingLeft | '.25em' | | styles_paddingRight | '.25em' | | styles_selection_paddingTop | '.2em' | | styles_selection_paddingBottom | '.2em' | | styles_selection_paddingLeft | '.4em' | | styles_selection_paddingRight | '.4em' | | styles_selection_margin | '.2em' | | styles_option_paddingTop | '.25em' | | styles_option_paddingBottom | '.25em' | | styles_option_paddingLeft | '.25em' | | styles_option_paddingRight | '.25em' | | styles_checkRadio_borderWidth | '2px' | | styles_checkRadio_marginBetween | '1em' | | styles_checkRadio_labelMargin | '.2em' | | styles_checkRadio_paddingTop | '.2em' | | styles_checkRadio_paddingBottom | '.2em' | | styles_checkRadio_paddingLeft | '.2em' | | styles_checkRadio_paddingRight | '.2em' | | styles_search_size | 5 | | styles_icon_width | '1em' | | styles_colors_primary | 'black' | | styles_colors_secondary | '#C3C3C3' | | styles_colors_highlight | 'lightblue' | | styles_colors_warning | '#FABAAC' | | styles_colors_warningBold | '#FA2222' | | styles_colors_disabled | '#ECECEC' | | styles_colors_background | 'white' |

Property Descriptions

| Name | Description | | - | - | | onChange | Event when selection changes | | onBlur | Event when focus is lost | | onFocus | Event when focus is gained | | name | The HTML name in the form | | selection | The currently selected items | | options | The options to choose from | | placeholder | The placeholder of the search field | | multiple | Whether multiple items can be selected | | disabled | Whether component is disabled | | creatable | Whether new selected items can be created | | removable | Whether selected items are removable | | appendToBody | Whether options append to the body tag (can prevent options from being clipped) | | rightToLeft | Whether to show text from right to left instead | | allowDuplicates | Whether duplicate selection items are allowed | | alwaysReturnArray | Always return an array from onChange, instead of only when multiple | | filterOptions | The function which filters options based on search text | | massageDataIn | The function that massages the props coming in | | massageDataOut | The function massaging the selection returned from the onChange event | | optionKeys | The name of the keys in an option object | | checkRadioMaxCount | The maximum radio buttons allowed before rendering a Select instead | | parseTo | parse value from onChange to a js type: string, number, int, float, boolean | | Text Props || | text_placeholder | Same as placeholder with a more descriptive name | | text_noOptions | The text shown when there are no options | | text_create | The text shown when a new selection can be created | | Component Props || | component_Select | Multi/Single select component | | component_CheckRadio | Groups checkbox and radio components | | component_CheckBox | Checkbox component | | component_Radio | Radio button component | | component_Switch | On/Off switch component | | component_HtmlFieldData | Hidden component which keeps current selection in the HTML form | | component_Wrapper | Wraps the entire select component | | component_Selection | Component showing one selected item | | component_SelectionList | List of selected items | | component_OptionList | List of options | | component_Option | Component showing one option | | component_Search | Component responsable for the search text | | component_SelectionWrapper | Displays everything for the Select except the options | | component_OptionsWrapper | Wraps the OptionList | | component_AppendToBodyOptionsWrapper | Appends the OptionList to body tag | | component_StyledAppendToBodyOptionsWrapper | Styleable version of AppendToBodyOptionsWrapper wrapped inside of it | | SVG Props || | svg_Checkmark | The checkmark image | | svg_Remove | The remove image | | svg_Expand | the expand image | | Style Props || | styles_fontSize | Controls the entire size of the component | | styles_borderRadius | The amount of curve of the border | | styles_paddingTop | The padding top | | styles_paddingBottom | The padding bottom | | styles_paddingLeft | The padding left | | styles_paddingRight | The padding right | | styles_selection_paddingTop | The selection's padding top | | styles_selection_paddingBottom | The selection's padding bottom | | styles_selection_paddingLeft | The selection's padding left | | styles_selection_paddingRight | The selection's padding right | | styles_selection_margin | The selection's margin | | styles_option_paddingTop | The option's padding top | | styles_option_paddingBottom | The option's padding bottom | | styles_option_paddingLeft | The option's padding left | | styles_option_paddingRight | The option's padding right | | styles_checkRadio_borderWidth | The border width for checkbox, radio, and switch | | styles_checkRadio_marginBetween | The margin between radios and checkboxes | | styles_checkRadio_labelMargin | The margin between the label and it's radio/checkbox/switch | | styles_checkRadio_paddingTop | The padding top for radio/checkbox/switch group | | styles_checkRadio_paddingBottom | The padding bottom for radio/checkbox/switch group | | styles_checkRadio_paddingLeft | The padding left for radio/checkbox/switch group | | styles_checkRadio_paddingRight | The padding right for radio/checkbox/switch group | | styles_search_size | The size of the search component | | styles_icon_width | The width of all icon/SVGs | | styles_colors_primary | The primary color used | | styles_colors_secondary | The secondary color used | | styles_colors_highlight | The color of a highlighted option | | styles_colors_warning | The color of remove selection background | | styles_colors_warningBold | The color of the remove selection icon | | styles_colors_disabled | The color for disabled elements | | styles_colors_background | The background color used |