1.0.1 • Published 11 months ago

makyo v1.0.1

Weekly downloads
-
License
ISC
Repository
github
Last release
11 months ago

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!

acceptsacornacorn-jsxacorn-walkajvajv-formatsansi-regexansi-stylesany-promiseanymatchargargparsearia-queryarray-flattenarray-unionassertion-errorast-typesautoprefixeravailable-typed-arraysbabel-corebabel-plugin-macrosbabel-plugin-polyfill-corejs2babel-plugin-polyfill-corejs3babel-plugin-polyfill-regeneratorbalanced-matchbase64-jsbinary-extensionsblbody-parserbrace-expansionbracesbrowser-assertbrowserslistbufferbuffer-frombytescall-bindcallsitescamelcase-csscaniuse-litechaichalkcheck-errorchokidarchownrchromaticcittycli-cursorcli-spinnerscliuicloneclone-deepcolor-convertcolor-namecommandercommondircompare-versionscomputedsconcat-mapconcurrentlyconfboxconsolacontent-dispositioncontent-typeconvert-source-mapcookiecookie-signaturecore-js-compatcosmiconfigcross-spawncrypto-random-stringcss.escapecssesccsstypedate-fnsde-indentdebugdeep-eqldeep-isdefaultsdefine-data-propertydefudepddequaldestroydetect-indentdidyoumeandiff-sequencesdir-globdlvdoctrinedom-accessibility-apidom-helperseastasianwidthee-firstelectron-to-chromiumemoji-regexencodeurlentitiesenvinfoerror-exes-define-propertyes-errorses-module-lexeresbuildesbuild-registerescaladeescape-htmlescape-string-regexpescodegeneslinteslint-plugin-react-hookseslint-plugin-react-refresheslint-plugin-storybookeslint-scopeeslint-visitor-keysespreeesprimaesqueryesrecurseestraverseestree-walkeresutilsetagexecaexpressfast-deep-equalfast-globfast-json-stable-stringifyfast-levenshteinfast-urifastqfd-package-jsonfile-entry-cachefilesizefill-rangefinalhandlerfind-cache-dirfind-rootfind-upflat-cacheflattedflow-parserfor-eachforeground-childforwardedfraction.jsfreshfs-extrafs-minipassfs.realpathfunction-bindgensyncget-caller-fileget-func-nameget-intrinsicget-streamgigetgithub-sluggerglobglob-parentglob-promiseglobalsglobbygopdgraceful-fsgraphemerhas-flaghas-property-descriptorshas-protohas-symbolshas-tostringtaghasownhast-util-heading-rankhast-util-is-elementhast-util-to-stringhehoist-non-react-staticshtml-tagshttp-errorshuman-signalsiconv-liteieee754ignoreimport-freshimport-lazyimurmurhashindent-stringinflightinheritsipaddr.jsis-absolute-urlis-argumentsis-arrayishis-binary-pathis-callableis-core-moduleis-extglobis-fullwidth-code-pointis-generator-functionis-globis-interactiveis-numberis-path-insideis-plain-objectis-streamis-typed-arrayis-unicode-supportedisexeisobjectjackspeakjitijjujs-tokensjs-yamljscodeshiftjsescjson-bufferjson-parse-even-better-errorsjson-schema-traversejson-stable-stringify-without-jsonifyjson5jsonfilekeyvkind-ofkleurkoloristlevenlevnlilconfiglines-and-columnslocal-pkglocate-pathlodashlodash.debouncelodash.mergelog-symbolsloose-envifyloupelru-cachelz-stringmagic-stringmake-dirmap-or-similarmarkdown-to-jsxmedia-typermemoize-onememoizerificmerge-descriptorsmerge-streammerge2methodsmicromatchmimemime-dbmime-typesmimic-fnmin-indentminimatchminimistminipassminizlibmkdirpmllymsmuggle-stringmznanoidnatural-comparenegotiatorneo-asyncnode-dirnode-fetch-nativenode-releasesnormalize-pathnormalize-rangenpm-run-pathnypmobject-assignobject-hashobject-inspectohashon-finishedonceonetimeoptionatororap-limitp-locatep-trypackage-json-from-distparent-moduleparse-jsonparseurlpath-browserifypath-existspath-is-absolutepath-keypath-parsepath-scurrypath-to-regexppath-typepathepathvalpicocolorspicomatchpifypiratespkg-dirpkg-typespolishedpossible-typed-array-namespostcsspostcss-importpostcss-jspostcss-load-configpostcss-nestedpostcss-selector-parserpostcss-value-parserprelude-lsprettierpretty-formatprocesspromptsprop-typesproxy-addrpunycodeqsqueue-microtaskrange-parserraw-bodyreactreact-colorfulreact-confettireact-docgenreact-docgen-typescriptreact-domreact-element-to-jsx-stringreact-iconsreact-isreact-refreshreact-selectreact-transition-groupread-cachereadable-streamreaddirprecastredentregenerateregenerate-unicode-propertiesregenerator-runtimeregenerator-transformregexpu-coreregjsparserrehype-external-linksrehype-slugrequire-directoryrequire-from-stringrequireindexresolveresolve-fromrestore-cursorreusifyrimrafrolluprun-parallelrxjssafe-buffersafer-bufferschedulersemversendserve-staticset-function-lengthsetprototypeofshallow-cloneshebang-commandshebang-regexshell-quoteside-channelsignal-exitsisteransislashsource-mapsource-map-jssource-map-supportspace-separated-tokensspawn-commandsprintf-jsstatusesstorybookstring-argvstring-widthstring-width-cjsstring_decoderstrip-ansistrip-ansi-cjsstrip-bomstrip-final-newlinestrip-indentstrip-json-commentsstylissucrasesupports-colorsupports-preserve-symlinks-flagtailwindcsstartelejsontemptemp-dirtempytext-tablethenifythenify-alltiny-invarianttinyspyto-fast-propertiesto-regex-rangetoidentifiertree-killts-api-utilsts-dedentts-interface-checkertsconfig-pathstslibtsutilstween-functionstype-checktype-detecttype-festtype-istypescriptufoundici-typesunicode-canonical-property-names-ecmascriptunicode-match-property-ecmascriptunicode-match-property-value-ecmascriptunicode-property-aliases-ecmascriptunicorn-magicunique-stringunist-util-isunist-util-visitunist-util-visit-parentsuniversalifyunpipeunpluginupdate-browserslist-dburi-jsuse-isomorphic-layout-effectutilutil-deprecateutils-mergeuuidvaryvitevite-plugin-dtsvscode-urivue-template-compilervue-tscwalk-up-pathwcwidthwebpack-sourceswebpack-virtual-moduleswhichwhich-typed-arrayword-wrapwrap-ansiwrap-ansi-cjswrappywrite-file-atomicwsy18nyallistyamlyargsyargs-parseryocto-queue
1.0.1

11 months ago

1.0.0

11 months ago