{"id":13394678,"url":"https://github.com/alexkuz/react-input-enhancements","last_synced_at":"2025-09-29T00:32:29.949Z","repository":{"id":57095448,"uuid":"47020096","full_name":"alexkuz/react-input-enhancements","owner":"alexkuz","description":"Set of enhancements for input control","archived":true,"fork":false,"pushed_at":"2022-10-27T08:23:27.000Z","size":4017,"stargazers_count":1371,"open_issues_count":25,"forks_count":68,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-09-22T02:29:39.303Z","etag":null,"topics":["autocomplete","autosize","autosuggest","datepicker","dropdown","input","input-mask","javascript","react","typeahead"],"latest_commit_sha":null,"homepage":"http://alexkuz.github.io/react-input-enhancements/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexkuz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-28T11:01:58.000Z","updated_at":"2025-06-10T13:50:37.000Z","dependencies_parsed_at":"2023-01-20T17:46:53.283Z","dependency_job_id":null,"html_url":"https://github.com/alexkuz/react-input-enhancements","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/alexkuz/react-input-enhancements","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexkuz%2Freact-input-enhancements","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexkuz%2Freact-input-enhancements/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexkuz%2Freact-input-enhancements/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexkuz%2Freact-input-enhancements/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexkuz","download_url":"https://codeload.github.com/alexkuz/react-input-enhancements/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexkuz%2Freact-input-enhancements/sbom","scorecard":{"id":181996,"data":{"date":"2025-08-11","repo":{"name":"github.com/alexkuz/react-input-enhancements","commit":"e9a0fdc380c24a04f54a6cc95432d96d3bf882bf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 1/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"159 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-whgm-jr23-g3j9","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-wxhq-pm8v-cw75","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-rq8g-5pc5-wrhr","Warn: Project is vulnerable to: GHSA-p28h-cc7q-c4fg","Warn: Project is vulnerable to: GHSA-hr2v-3952-633q","Warn: Project is vulnerable to: GHSA-h6ch-v84p-w6p9","Warn: Project is vulnerable to: GHSA-3wcq-x3mq-6r9p","Warn: Project is vulnerable to: GHSA-ff7x-qrg7-qggm","Warn: Project is vulnerable to: GHSA-vh7m-p724-62c2","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-6h5x-7c5m-7cr7","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-qrmc-fj45-qfc2","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-xf7w-r453-m56c","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-q42p-pg8m-cqh6","Warn: Project is vulnerable to: GHSA-w457-6q6x-cgp9","Warn: Project is vulnerable to: GHSA-62gr-4qp9-h98f","Warn: Project is vulnerable to: GHSA-f52g-6jhx-586p","Warn: Project is vulnerable to: GHSA-2cf5-4w76-r9qv","Warn: Project is vulnerable to: GHSA-3cqr-58rm-57f8","Warn: Project is vulnerable to: GHSA-g9r4-xpmj-mj65","Warn: Project is vulnerable to: GHSA-q2c6-c6pm-g3gh","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-44pw-h2cw-w3vq","Warn: Project is vulnerable to: GHSA-jp4x-w63m-7wgm","Warn: Project is vulnerable to: GHSA-c429-5p7v-vgjp","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-6x33-pw7p-hmpq","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-2pr6-76vf-7546","Warn: Project is vulnerable to: GHSA-8j8c-7jfh-h6hx","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-fvqr-27wr-82fm","Warn: Project is vulnerable to: GHSA-4xc9-xhrj-v574","Warn: Project is vulnerable to: GHSA-x5rq-j2xg-h7qm","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-2m96-9w4j-wgv7","Warn: Project is vulnerable to: GHSA-h726-x36v-rx45","Warn: Project is vulnerable to: GHSA-pp57-mqmh-44h7","Warn: Project is vulnerable to: GHSA-p9wx-2529-fp83","Warn: Project is vulnerable to: GHSA-5v2h-r2cx-5xgj","Warn: Project is vulnerable to: GHSA-rrrm-qjm4-v8hf","Warn: Project is vulnerable to: GHSA-4xcv-9jjx-gfj3","Warn: Project is vulnerable to: GHSA-f9cm-qmx5-m98h","Warn: Project is vulnerable to: GHSA-7wpw-2hjm-89gp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-92xj-mqp7-vmcj","Warn: Project is vulnerable to: GHSA-wxgw-qj99-44c2","Warn: Project is vulnerable to: GHSA-5rrq-pxf6-6jx5","Warn: Project is vulnerable to: GHSA-8fr3-hfg3-gpgp","Warn: Project is vulnerable to: GHSA-gf8q-jrpm-jvxq","Warn: Project is vulnerable to: GHSA-2r2c-g63r-vccr","Warn: Project is vulnerable to: GHSA-cfm4-qjh2-4765","Warn: Project is vulnerable to: GHSA-x4jg-mjrx-434g","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-6394-6h9h-cfjg","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-hxcm-v35h-mg2x","Warn: Project is vulnerable to: GHSA-6g33-f262-xjp4","Warn: Project is vulnerable to: GHSA-29gp-92wp-94q8","Warn: Project is vulnerable to: GHSA-5q6m-3h65-w53x","Warn: Project is vulnerable to: GHSA-mvjj-gqq2-p4hw","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-c9g6-9335-x697","Warn: Project is vulnerable to: GHSA-2m39-62fm-q8r3","Warn: Project is vulnerable to: GHSA-mf6x-7mm4-x2g7","Warn: Project is vulnerable to: GHSA-j44m-qm6p-hp7m","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-7p7h-4mm5-852v","Warn: Project is vulnerable to: GHSA-662x-fhqg-9p8v","Warn: Project is vulnerable to: GHSA-394c-5j6w-4xmx","Warn: Project is vulnerable to: GHSA-78cj-fxph-m83p","Warn: Project is vulnerable to: GHSA-fhg7-m89q-25r3","Warn: Project is vulnerable to: GHSA-3329-pjwv-fjpg","Warn: Project is vulnerable to: GHSA-p6j9-7xhc-rhwp","Warn: Project is vulnerable to: GHSA-89gv-h8wf-cg8r","Warn: Project is vulnerable to: GHSA-gcv8-gh4r-25x6","Warn: Project is vulnerable to: GHSA-gmv4-r438-p67f","Warn: Project is vulnerable to: GHSA-8h2f-7jc4-7m3m","Warn: Project is vulnerable to: GHSA-3vjf-82ff-p4r3","Warn: Project is vulnerable to: GHSA-g694-m8vq-gv9h","Warn: Project is vulnerable to: GHSA-pv4c-p2j5-38j4","Warn: Project is vulnerable to: GHSA-46c4-8wrp-j99v","Warn: Project is vulnerable to: GHSA-9m6j-fcg5-2442","Warn: Project is vulnerable to: GHSA-hh27-ffr2-f2jc","Warn: Project is vulnerable to: GHSA-rqff-837h-mm52","Warn: Project is vulnerable to: GHSA-8v38-pw62-9cw2","Warn: Project is vulnerable to: GHSA-hgjh-723h-mx2j","Warn: Project is vulnerable to: GHSA-jf5r-8hm2-f872","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-cf66-xwfp-gvc4","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-g78m-2chm-r7qv","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T19:01:07.083Z","repository_id":57095448,"created_at":"2025-08-16T19:01:07.083Z","updated_at":"2025-08-16T19:01:07.083Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277450939,"owners_count":25819971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-28T02:00:08.834Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autocomplete","autosize","autosuggest","datepicker","dropdown","input","input-mask","javascript","react","typeahead"],"created_at":"2024-07-30T17:01:27.953Z","updated_at":"2025-09-29T00:32:29.603Z","avatar_url":"https://github.com/alexkuz.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","UI Components","Uncategorized","Demos","\u003csummary\u003eUI Components\u003c/summary\u003e"],"sub_categories":["Form Components","Uncategorized"],"readme":"\u003ctable\u003e\u003ctr\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003ch3\u003e🏚\u003c/h3\u003e\u003c/td\u003e\u003ctd\u003e\n\n**This project was originally thought to be an experiment and currently is unmaintained (and buggy)**\n\n**Use it at your own risk**\n\nAlso, consider using more modern, WAI-ARIA compliant approach like [downshift](https://github.com/downshift-js/downshift)\n\n\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\n# react-input-enhancements [![Gitter chat](https://img.shields.io/gitter/room/gitterHQ/gitter.svg)](https://gitter.im/react-input-enhancements)\n\nSet of enhancements for input control\n\nThe intention of creating this library was to bring `input` component out of the dropdown/autocomplete/whatever code, so it could be easily replaced with your custom component, and also to split independent functionality into different components, which could be combined with each other (still not quite sure it was worth it, though).\n\nThere are currently five components:\n\n1. [`\u003cAutosize /\u003e`](#autosize)\n2. [`\u003cAutocomplete /\u003e`](#autocomplete)\n3. [`\u003cDropdown /\u003e`](#dropdown)\n4. [`\u003cMask /\u003e`](#mask)\n5. [`\u003cDatePicker /\u003e`](#datepicker)\n\n[`\u003cCombobox /\u003e`](#combobox) is a combination of `Dropdown`, `Autosize` and/or `Autocomplete` components.\n\n## Demo\n\nhttp://alexkuz.github.io/react-input-enhancements/\n\n## How it works\n\n* Each component is responsible for a corresponding behaviour (`\u003cAutosize\u003e` resizes `\u003cinput\u003e` according to it's content length, `\u003cDropdown\u003e` adds popup with options, and so on).\n* All components accept `function` as a child, providing props as a first argument, which you should pass to your `input` component. If there is nothing else except `input`, it could be passed as a child directly (for simplicity).\n* If you need to have combined behaviour in your component, let's say `\u003cAutosize\u003e` with `\u003cAutocomplete\u003e` just pass `\u003cAutocomplete\u003e` as a child to `\u003cAutosize\u003e` (see `\u003cCombobox\u003e` source code for reference)\n\n#### Registering `\u003cinput\u003e`\n\nAll components needs an access to `\u003cinput\u003e` DOM element. To provide it, use `getInputComponent` prop:\n\n```jsx\nlet input;\n\ngetInput() {\n  return input;\n}\n\n\u003cAutocomplete\n  options={options}\n  getInputComponent={getInput}\n\u003e\n  {props =\u003e\n    \u003cinput\n      ref={c =\u003e input = c}\n      {...props}\n    /\u003e\n  }\n\u003c/Autocomplete\u003e\n```\nOr, if you don't want to store the node in your component:\n\n```jsx\n\u003cAutocomplete\n  options={options}\n\u003e\n  {(props, otherProps, registerInput) =\u003e\n    \u003cinput\n      ref={c =\u003e registerInput(c)}\n      {...props}\n    /\u003e\n  }\n\u003c/Autocomplete\u003e\n```\nThe first option also allows you to use shorter form with implicit parameters passing:\n```jsx\nlet input;\n\ngetInput() {\n  return input;\n}\n\n\u003cAutocomplete\n  options={options}\n  getInputComponent={getInput}\n\u003e\n  \u003cinput\n    ref={c =\u003e input = c}\n  /\u003e\n\u003c/Autocomplete\u003e\n```\nHowever, this is not preferable as there is too much magic happening.\n\nIf `\u003cinput\u003e` element wasn't provided, component tries to find node automatically, however this behaviour is deprecated and will be removed in future versions.\n\n## Autosize\n\n`Autosize` resizes component to fit it's content.\n\n```jsx\n\u003cAutosize defaultValue={value}\n          minWidth={100}\u003e\n  {(inputProps, { width, registerInput }) =\u003e\n    \u003cinput type='text' {...inputProps} ref={c =\u003e registerInput(c)} /\u003e\n  }\n\u003c/Autosize\u003e\n```\n\n### Autosize Props\n\n* **`value`** *string* - Input value (for a controlled component)\n* **`defaultValue`** *string* - Initial value (for a uncontrolled component)\n* **`getInputElement`** *function()* - Optional callback that provides `\u003cinput\u003e` DOM element\n* **`registerInput`** *function* - Registers `\u003cinput\u003e` DOM element\n* **`defaultWidth`** *number* - Minimum input width\n\n## Autocomplete\n\n`Autocomplete` prompts a value based on provided `options` (see also [react-autocomplete](https://github.com/reactjs/react-autocomplete) for the same behaviour)\n\n```jsx\n\u003cAutocomplete defaultValue={value}\n              options={options}\u003e\n  {(inputProps, { matchingText, value, registerInput }) =\u003e\n    \u003cinput type='text' {...inputProps} ref={c =\u003e registerInput(c)} /\u003e\n  }\n\u003c/Autocomplete\u003e\n```\n\n### Autocomplete Props\n\n* **`value`** *string* - Input value (for a controlled component)\n* **`defaultValue`** *string* - Initial value (for a uncontrolled component)\n* **`getInputElement`** *function* - Optional callback that provides `\u003cinput\u003e` DOM element\n* **`registerInput`** *function* - Registers `\u003cinput\u003e` DOM element\n* **`options`** *array* - Array of options that are used to predict a value\n\n`options` is an array of strings or objects with a `text` or `value` string properties.\n\n## Dropdown\n\n`Dropdown` shows a dropdown with a (optionally filtered) list of suitable options.\n\n```jsx\n\u003cDropdown defaultValue={value}\n          options={options}\u003e\n  {(inputProps, { textValue }) =\u003e\n    \u003cinput type='text' {...inputProps} /\u003e\n  }\n\u003c/Dropdown\u003e\n```\n\n### Dropdown Props\n\n* **`value`** *string* - Input value (for a controlled component)\n* **`defaultValue`** *string* - Initial value (for a uncontrolled component)\n* **`options`** *array* - Array of shown options\n* **`onRenderOption`** *function(className, style, option)* - Renders option in list\n* **`onRenderCaret`** *function(className, style, isActive, children)* - Renders a caret\n* **`onRenderList`** *function(className, style, isActive, listShown, children, header)* - Renders list of options\n* **`onRenderListHeader`** *function(allCount, shownCount, staticCount)* - Renders list header\n* **`dropdownProps`** *object* - Custom props passed to dropdown root element\n* **`optionFilters`** *array* - List of option filters\n* **`getInputElement`** *function* - Optional callback that provides `\u003cinput\u003e` DOM element\n* **`registerInput`** *function* - Registers `\u003cinput\u003e` DOM element\n\n`options` is an array of strings or objects with a shape:\n\n* **`value`** - \"real\" value of on option\n* **`text`** - text used as input value when option is selected\n* **`label`** - text or component rendered in list\n* **`static`** - option is never filtered out or sorted\n* **`disabled`** - option is not selectable\n\n`null` option is rendered as a separator\n\n`optionFilters` is an array of filters for options (for convenience). By default, these filters are used:\n\n* `filters.filterByMatchingTextWithThreshold(20)` - filters options by matching value, if options length is more than 20\n* `filters.sortByMatchingText` - sorting by matching value\n* `filters.limitBy(100)` - cuts options longer than 100\n* `filters.notFoundMessage('No matches found')` - shows option with 'No matches found' label if all options are filtered out\n* `filters.filterRedudantSeparators` - removes redudant separators (duplicated or at the begin/end of the list)\n\n## Mask\n\n`Mask` formats input value.\n\n```jsx\n\u003cMask defaultValue={value}\n      pattern='0000-0000-0000-0000'\u003e\n  {(inputProps, { value }) =\u003e\n    \u003cinput type='text' {...inputProps} /\u003e\n  }\n\u003c/Mask\u003e\n```\n\n### Mask Props\n\n* **`value`** *string* - Input value (for a controlled component)\n* **`defaultValue`** *string* - Initial value (for a uncontrolled component)\n* **`getInputElement`** *function* - Optional callback that provides `\u003cinput\u003e` DOM element\n* **`registerInput`** *function* - Registers `\u003cinput\u003e` DOM element\n* **`pattern`** *string* - String formatting pattern. Only '0' (digit) or 'a' (letter) pattern chars are currently supported.\n* **`emptyChar`** *string* - Character used as an empty symbol (`' '` by default)\n* **`placeholder`** *string* - If set, it is shown when `unmaskedValue` is empty\n* **`onUnmaskedValueChange`** *function(text)* - Fires when value is changed, providing unmasked value\n* **`onValuePreUpdate`** *function* - Optional callback to update value before it is parsed by `Mask`\n\n## DatePicker\n\n`DatePicker` uses `Mask` to format date and shows calendar ([react-date-picker](https://github.com/zippyui/react-date-picker) by default) in popup.\n\n```jsx\n\u003cDatePicker defaultValue={moment(value).format('ddd DD/MM/YYYY')}\n            placeholder={moment().format('ddd DD/MM/YYYY')}\n            pattern='ddd DD/MM/YYYY'\n            locale='en'\u003e\n  {(inputProps, { value }) =\u003e\n    \u003cinput type='text' {...inputProps} /\u003e\n  }\n\u003c/DatePicker\u003e\n```\n\n### DatePicker Props\n\n* **`value`** *string* - Input value (for a controlled component)\n* **`defaultValue`** *string* - Initial value (for a uncontrolled component)\n* **`pattern`** *string* - Date formatting pattern. For now, only these tokens are supported:\n  * `DD` - day of month\n  * `MM` - month\n  * `YYYY` - year\n  * `ddd` - day of week *(not editable)*\n* **`placeholder`** *string* - If set, it is shown when `unmaskedValue` is empty\n* **`locale`** *string* - Date locale\n* **`todayButtonText`** *string* - Text for 'Go to Today' button label\n* **`onRenderCalendar`** *function({ styling, style, date, isActive, popupShown, onSelect, locale, todayButtonText })* - Returns calendar component shown in popup ([react-day-picker-themeable](https://github.com/alexkuz/react-day-picker-themeable) by default)\n* **`onChange`** *function(date)* - Fires when date is selected, providing [moment.js](http://momentjs.com/) object\n* **`getInputElement`** *function* - Optional callback that provides `\u003cinput\u003e` DOM element\n* **`registerInput`** *function* - Registers `\u003cinput\u003e` DOM element\n* **`onValuePreUpdate`** *function* - Optional callback to update value before it is parsed by `DatePicker`. In this example, it parses inserted timestamp:\n```js\nonValuePreUpdate={v =\u003e parseInt(v, 10) \u003e 1e8 ?\n  moment(parseInt(v, 10)).format('ddd DD/MM/YYYY') : v\n}\n```\n\n## Combobox\n\n`Combobox` combines `Dropdown`, `Autosize` and/or `Autocomplete` components.\n\n```jsx\n\u003cCombobox defaultValue={value}\n          options={options}\n          autosize\n          autocomplete\u003e\n  {(inputProps, { matchingText, width }) =\u003e\n    \u003cinput type='text' {...inputProps} /\u003e\n  }\n\u003c/Combobox\u003e\n```\n\n`Autosize` and `Autocomlete` are enabled with corresponding bool props, other properties are proxied to `Dropdown` component.\n\nSee [demo](http://alexkuz.github.io/react-input-enhancements/) for code examples.\n\n## Some other (probably better) implementations\n\n* [react-autocomplete](https://github.com/rackt/react-autocomplete) - Dropdown with autocompletion by Ryan Florence (that led me to create this library)\n* [react-maskedinput](https://github.com/insin/react-maskedinput) - More advanced masked input by Jonny Buchanan\n* [react-autosuggest](https://github.com/moroshko/react-autosuggest) - Beautifully crafted input with dropdown suggestions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexkuz%2Freact-input-enhancements","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexkuz%2Freact-input-enhancements","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexkuz%2Freact-input-enhancements/lists"}