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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dmitriig/react-select

v0.3.0

Published

ReactJS multi select dropdown

Readme

React Select

A react dropdown multiselect component powered by react-virtualized for ability to display a long list of values

Installation

yarn add @dmitriig/react-select

Props

// Options should be provided as {value,label} pairs 
export interface IItem {
  value: number,
  label: string
}

// Component props
export interface IReactSelectProps {
  // possible options
  options: IItem[],
  // string placeholder
  placeholder: string,
  // callback on selection change
  onChange: (items: IItem[]) => void,
  // custom cell renderer
  rowRenderer?: (item: any, index: number) => void,
  // custom container style
  style?: any,
  // custom input style
  inputStyle?: any,
  // custom list dropdown style
  listStyle?: any,
  // custom list row height
  listRowHeight?: number,
  // custom input font size
  inputFontSize?: number,
  // custom message for no search results
  noResultsMessage?: string
  // controlled selection array
  selection?: IItem[]
}

Usage

Basic
// Format data into value and label pair
const options = [];
for (let i = 0; i < 10000; i++) {
  options.push({
    value: i,
    label: Math.random().toString(36).substring(7)
  })
}

return <ReactSelect options={options} placeholder="Select something.."
                 onChange={(items)=>console.log(items)}/>

Demo: https://codesandbox.io/embed/hopeful-jang-zzv8e?fontsize=14

Controlled
function Controlled(props) {
  const {options} = props;
  // use an initial selection
  const [selection] = React.useState(options.slice(0, index));
  const [flag, setFlag] = React.useState(false);

  // dynamically update the selection  
  function handleAdd() {
    selection.push(options[index++]);
    setFlag(!flag);
  }

  // dynamically update the selection
  function handleRemove() {
    selection.splice(0, 1);
    setFlag(!flag);
  }

  return <div style={{padding: '20px 20px'}}>
    <div>
      <div style={styles.button} onClick={handleAdd}>
        Add a token
      </div>
      <div style={styles.button} onClick={handleRemove}>
        Remove a token
      </div>
    </div>
    <ReactSelect options={options} placeholder="Select something.." selection={selection}
                 onChange={action('changed')}/>
  </div>
}