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

makyo

v1.0.1

Published

Makyo asessment

Readme

SelectDropdown Component

The SelectDropdown component is a versatile dropdown selector for React applications. It supports both single and multiple selections, customizable search functionality, and various styling options.

Features

  • Single and Multiple Selection: Choose whether the dropdown allows single or multiple selections.
  • Searchable Options: Include a search input to filter options.
  • Customizable Styling: Apply custom styles and classes.
  • Accessibility: Handles keyboard navigation and focus management.

Installation

To use the SelectDropdown component, ensure you have the necessary dependencies:

bash

Copy code

npm install react react-dom

Usage

Importing the Component

First, import the SelectDropdown component into your React component:

tsx

Copy code

import { SelectDropdown, SelectOption } from './SelectDropdown';

Component Props

Here’s a breakdown of the props you can use with SelectDropdown:

  • options (required): Array of options to display in the dropdown. Each option should be an object with label and value properties.
  • multiple (optional): Set to true for multiple selections; defaults to false.
  • value (optional): The currently selected value(s). For single selection, this should be an object; for multiple, it should be an array of objects.
  • onChange (required): Callback function that receives the selected value(s) when changed.
  • withSearch (optional): Boolean to enable or disable the search input; defaults to true.
  • outlined (optional): Boolean to add outline styling to the dropdown; defaults to false.
  • disabled (optional): Boolean to disable the dropdown; defaults to false.
  • optionLabel (optional): Label for the dropdown; defaults to "Label".
  • id (optional): Optional ID for the dropdown element.

Example Usage

Single Select

tsx

Copy code

`import React, { useState } from 'react';
import { SelectDropdown, SelectOption } from './SelectDropdown';

const singleSelectOptions: SelectOption[] = [
  { label: 'Option 1', value: 1 },
  { label: 'Option 2', value: 2 },
  { label: 'Option 3', value: 3 }
];

const SingleSelectExample: React.FC = () => {
  const [selectedOption, setSelectedOption] = useState<SelectOption | undefined>(undefined);

  const handleChange = (value: SelectOption | undefined) => {
    setSelectedOption(value);
  };

  return (
    <SelectDropdown
      options={singleSelectOptions}
      value={selectedOption}
      onChange={handleChange}
    />
  );
};

export default SingleSelectExample;` 

Multiple Select

tsx

Copy code

`import React, { useState } from 'react';
import { SelectDropdown, SelectOption } from './SelectDropdown';

const multipleSelectOptions: SelectOption[] = [
  { label: 'Option 1', value: 1 },
  { label: 'Option 2', value: 2 },
  { label: 'Option 3', value: 3 }
];

const MultipleSelectExample: React.FC = () => {
  const [selectedOptions, setSelectedOptions] = useState<SelectOption[]>([]);

  const handleChange = (value: SelectOption[]) => {
    setSelectedOptions(value);
  };

  return (
    <SelectDropdown
      multiple
      options={multipleSelectOptions}
      value={selectedOptions}
      onChange={handleChange}
    />
  );
};

export default MultipleSelectExample;` 

Styling

The SelectDropdown component uses CSS modules for styling. Ensure you have the corresponding CSS file (SelectDropdown.module.css) included in your project to apply the default styles. You can customize these styles as needed.

Example CSS Module

css

Copy code

`/* SelectDropdown.module.css */

.wrapper {
  /* Wrapper styles */
}

.container {
  /* Dropdown container styles */
}

.outlined {
  /* Outlined dropdown styles */
}

.disabled {
  /* Disabled dropdown styles */
}

.options {
  /* Options list styles */
}

.option {
  /* Option item styles */
}

.highlight {
  /* Highlighted text styles */
}

.searchContainer {
  /* Search input container styles */
}

.searchInput {
  /* Search input styles */
}

.clearButton {
  /* Clear button styles */
}

.arrowIcon {
  /* Arrow icon styles */
}` 

Accessibility

The SelectDropdown component is designed with basic accessibility features:

  • Supports keyboard navigation (Enter, Space, ArrowUp, ArrowDown, Escape).
  • Focus management for the search input.

Contributing

Feel free to submit issues or pull requests to improve the component. For any questions or feature requests, please open an issue in the repository.


Feel free to adjust any details or add more information based on your needs!