{"_id":"@19h47/combobox","_rev":"9-00140b9945d958b5154e1c83265428e3","name":"@19h47/combobox","dist-tags":{"latest":"2.0.0"},"versions":{"0.0.1":{"name":"@19h47/combobox","version":"0.0.1","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.1","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"d4993e810b33443d5fb80083f481a2a921518b00","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.1.tgz","fileCount":3,"integrity":"sha512-8W69Nq1rFZEhSilb0BkYsOJ8SdRh2xcR4Yc4j/udgqMhCummIWHu7KR+p5WyRcX7c39PoV9i2AjnziVN+o9NvA==","signatures":[{"sig":"MEYCIQC4wBOnFyCiXTu/E8e1pDPK6dyDRyE4pXV+Omw8ej9zzQIhAJ5Zjt13fuUpkoZvd4azCtWet9ozVRjowO9f3DNQLmYA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfs7VYCRA9TVsSAnZWagAAd/QP/REzhtnHneK+fP/+P9/c\naogMrcugHh0HHmg/FC27HnW2nALae74YwrJiToAtJIlQAg9y08pZB0MHXpur\nE8Xkcv9RvnwSfTVVnXRN1o/P6/o5aYXBLTPakR9kt6RePGUA5E2nBhpPYob3\n2NV6dgYwldLotcOmeotM2LJs/zJilHMv+GO9qbYgq1Y7wDAaYoB3KboP6VJU\nEYspYCzEobZtkGXZ44lGcKlNjcAFDVqzm9HbM6f2jlYnh/gvt8rYzBvwCTOz\nLkJS5M/v9Sk8XZ/MqNY/Ls2vqJuAxyT5hCOoLuxwq/O+3qODx27SEEd/4XfR\ncBVVV68KyRRq5CCkt2U2tFS/NE55mdNIROY2vZxccVIZDk2bi4WmZWqXgWJa\n8nIy/K0IGO0aIXGjVbKZkOGAjVSrSTQkM/RTqwiEQa699/nvo2zMwOALZDEP\naI28PaH57aZoC8VRJcUzRWak0uvsL1NnpaW8Msu0M6qX27eibEE7SGfrjFGe\nWcm+icWd7d/K9ClMVfd8lEUA0rOvfKu5DANRmiVXIJvszUWCQGui5yL/fSqy\nwEVf9j16nn6mkKq4FT6rbms267KHMM28fSt/UOMuaB4NxCNBRX8jOle4EMXI\nTb55UBgAqr01gWzXhTQINzP2hnkJGUnKXUnPV4FQHHc7O2Su97aZ4WRwWNO3\nn/8b\r\n=UCB6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"ee9cafd3cea242bfda5ab10944a79cb2981d7b10","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.11.0","webpack":"4.44.2","prettier":"^2.1.2","@babel/core":"^7.12.3","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.0.6","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.8.0","@babel/preset-env":"^7.12.1","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.2.1","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.1","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.1_1605612888285_0.33150355201338266","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@19h47/combobox","version":"0.0.2","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.2","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"549761c7c627ab156714dd3fc400c742342c67d7","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.2.tgz","fileCount":3,"integrity":"sha512-qS3l8ntMqolqGoe3EbwG5MdwHK3ukAvdMyRYmYqFSv3waJZeWYXWi/mKH4gaUi+nhDGYjsHocE5bwl4Ny83Wxg==","signatures":[{"sig":"MEQCIBZM9wj5xAZw/q8yN8YbwpSt6zn+TuG8Z4fIRfCMvk6TAiBud4rLQYhJcJc/1V41yDJqb34GdgSWTPd/0ncDLuIyGA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftHMrCRA9TVsSAnZWagAApU4P/1iVIf4/KEW3wEobpxzh\n96i9JycNQg4Pm4v4bcMp2SC2oBn8VL5DWlawcyIkY+xt0QfxDAqmiQfVg74T\n/cFq60heurVdXTOMxN1c0odPB8dH6a/SnyIj/Lc9pTa5JcqSPaPDPBK139Wi\nmwlwRedrXDjezGEQ/it06dAJy1064Cp2hEeUm0kVPL+OZOs75nZarEpjbSgc\n5t9bwXMJhy57pBTuOxtpT4Qg5L8RkgukU2sndRwjCFix9PojX/ynN9jcM6ih\nt2UHPNTTZA+TCMi0eCOfUVJQDXnJV34pDmwioPZ0aeEM3bW46ujxujpIh1n5\npuUcDL/IlCseBvtLMIhJuhkECgMbzo4M+TTW55dmLwAMlSthArAiX6kauW6u\nSrzmX3CiO60mrVS+G2VumcawvduH4/oQa2Etdn9BWs6HyT1nDNO1gd6bqDAW\n/aas68N7MeEqdOVO/iAzI7ZX9ve69EMTYxJbKxShOsSUx5Vnflvq5wyUqzcO\n2YZBG6M767AOLe/zyNxHArXR0OBfTFL/K5OCutfKEdldgDkCXQybkj7buuM/\nBVIGUaSMGj7p+x9UgoXuRizihFe/p4YNm/dKNyuYpFVy0SLnWy5xN3dmDlxB\nGzjRau0K5mVnGo7QAc5EbQwz4PWpbafrG9+FKBkiS4NEZwfuO3NXCHOOeSS/\n+vZW\r\n=rzVs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"2b4d0247c24badeb3538409cab5109817ed7be9b","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.11.0","webpack":"4.44.2","prettier":"^2.1.2","@babel/core":"^7.12.3","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.0.6","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.8.0","@babel/preset-env":"^7.12.1","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.2.1","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.1","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.2_1605661483440_0.7933925730112059","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@19h47/combobox","version":"0.0.3","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.3","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"126ba8c7692e0f2c8f405ee5135145f95949fc57","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.3.tgz","fileCount":3,"integrity":"sha512-NAUJAzd8GeOGpPRKaunrTyaW2VEeJB+126jn6il8RjpAlUA+hbHI0S7l81jCkFPGAIj/GteU+2mubs6l8TaKqA==","signatures":[{"sig":"MEUCIQDXhpQz6ugMRubLGmAYW37xgNcz242X7B/KXqNg+vPRIQIgdODHNqMqoJ6sIYIIBDcFHu0cA1WROBK4sEZkgteCGd0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftVHqCRA9TVsSAnZWagAACHsP/jT3ncRhJygbLF/BGe2Q\n1shoANiln+CZzC4yxtKDUsMpoZVoY3nuGZMaMc6/1/yACa8BKUHwSqzZSJlK\npphWBd+O40SJInpMt3oJQY683/w1FxpNHKyW5XpZ4XS1BjrJufq+8b/PMWJk\nF68rkPpequrHWkCckuU5AUV5hFMkbsOZLrdRsVCAaMzhys4pjwH0s1d4fL88\ntox+XEig/D5sRamOSOHPm5lzNMmmlDpEukZg+bQzgTUe4QONVArVuJ24SBUw\nDo5yZinVB5BfQVcGfxwdNslpzp/kZbRjcCvLM4n+u/PzBODqGD0dFCHPjZ7N\npXPBggiYLGfMxiu14BckesV6gWcS1iziLw5r52HmXwvR/lCJqAfQLacPAX7k\nhD2EAe0kBNMhD0DAIDGkfWnIenNUgaNdEuvupCy9iMKQyHQMmlp0GkaMXqmz\nm+0AY1IfORRALHguMWV0hde7cReMn3hS3ynnfEJN9mE5Mx8C3oKSvzaJfsa3\n3ohxKt8X9FcZd5VdpSVE3478iKxEFG4sekf33GiAmPT3YH9pxXIQZFzKrDgq\neqcmuHzbm9ZF22B4d5u6Dgp3/Qq0PgWQxQMiuQUSLA0PB8BXeufaU9Z+m+Ib\nTPO7yYBUOwlK9g2Fhpl/C0W65C/R/nT5ViKuvWCh/jb8WH7gYKLK7KkoqtBM\nLgIX\r\n=zxEi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"2b4d0247c24badeb3538409cab5109817ed7be9b","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.11.0","webpack":"4.44.2","prettier":"^2.1.2","@babel/core":"^7.12.3","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.0.6","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.8.0","@babel/preset-env":"^7.12.1","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.2.1","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.2","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.3_1605718505511_0.7912141498335465","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@19h47/combobox","version":"0.0.4","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.4","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"ecc9ff3dd795b4b8d4a6c548f42c905d610d15b9","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.4.tgz","fileCount":3,"integrity":"sha512-/cW45RIiCg7jpoUJEHrS1yaRmRwQGS0EtXbqrsYeprOTRLKvLhx/8w4MAh1mR1ng9Lu8Ll8x77Ndgz/5bnLB6w==","signatures":[{"sig":"MEQCIAICBl3JvnjJJY85tftg+FC5T5QZFlWQA+r5wPm2/roIAiB1jARK4RJDGD0A7U4ftr+1zJIZhNSlvJqI1jmQEktx0Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftkYNCRA9TVsSAnZWagAA3fIQAJMTOLQoVqXqhgwq3QRu\nZZdkL5hIv6rix9NbFL0ZSl1gfS5AwNwPGj67TlSIPb1ZXc3vjUuZxclPxqBZ\nRMH5qyXsdYhqlFcPZCXTmRyhIqOhnXi6fNBI4LXzuKZaUEax67fnmfEt9jZL\nTHdzBUEcL38VbJ+3qk0tKJFtnrKc/yZkOb4r25eyNPyN+p5ri8UYdL7heaWB\nAtaObuAsnjTtinVtiO4lg5znv2DFtmEJ4ZSPkoE2yZOYnkQ09/FEtX+HvDHe\nkSoCKj/9MScFAMWP+gCb08SG9wVyr+Ede6vRYYwcJsi5ihW/XD5EAhBp8l6u\n9TwWAHS+0Dqrce5G/Yz7OxFyH+V6XrjEU3cZZW2wovS5OAv8LNUnxGQV7hvR\n3py2RdRkODjGBQEVlPqncyhbxUua4fHaJtpO5TzA6RMrq/kVcxYHDRmuJPuA\nYZKCMKGYwnP1RZS0wq/IxR2aX5VkDsawR8NH2v3pB6DnohjZMJ8NoyPSLQFj\nuMR2gwTIzb7Wh7uueoAsvl5X7IVk1bZQluU9esyYjhZCCCuhzR/xcQjmJke2\noiUoynzT+LBTsmly616yArGAQI4A2zQrYn/KYFCSgMb0yfMKzBmIhJd13P8K\nf57koXbgS56YfY4L4wf8+QHvXdUSGXFSgQs83MlSpseN/l7SFvhyhIfUganb\nq/kZ\r\n=GzS6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"58a119c3691a640ad77953ed1ad98c4c579592a2","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.11.0","webpack":"4.44.2","prettier":"^2.1.2","@babel/core":"^7.12.3","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.0.6","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.8.0","@babel/preset-env":"^7.12.1","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.2.1","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.2","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.4_1605781004553_0.987754677016164","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@19h47/combobox","version":"0.0.5","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.5","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"fbba97925614d771c486e90bc7f900777312d010","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.5.tgz","fileCount":3,"integrity":"sha512-FB1G9G2O5GwldeKc4k6TdttdenX40ohIMoGFafv7WuAB6v1HJvH6VmR3QbQmKkQ34jRcU0++Jb68/vfTW6xZZg==","signatures":[{"sig":"MEYCIQC8RRR0jhXEQefZm/ktPG5Al8qKJ8i5PAd+S9K3YF+awAIhAOqk08QbZNutXtVr8eezMUQBRfu5BbwBwjbZXe6pZ0lw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19669,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJftredCRA9TVsSAnZWagAAW+EP/1RNYWGO7mRc0K1w/qbd\nwywuw6tScQ1MxGNiUqDc2gN9/NalGafFsbTt7+ZwLMFMVNfW6R0Arp2L4L1c\nQ4DK0X3ZoIEBDOZszq3XB3KhUjT8T3D9cSggTatB+KIfK313YXoF0L7qG/z5\nccPnOHbxVZc37hNEkhw1d6uC4riYeP6SrWK8WDjyraBV48mzrIDeZdQIe3VA\n6nf3Z+b+CqWQddCIOdwSxKK8L/8KYtPu6JJJHTwYLOW/O3q47vIw1Ctbys+q\nTnB/pbAebjDdwuRDkJwxQRTOqCtvhr4PWmOny/7cMCz5vu5RGmTNeKIanmjd\naWxFTlI6P83xIQLx+d0HqTA1rLn6SKW8D0ItHIYYahRe4EaqW5N0l9JiKvuv\nJ7pgbFm+St0AaYudxuHjapcA7SNczVSUdPjQVWgO8V3ifxqzqviyKPqmcBEk\nrywSqh19Ugw3/65yMCmaMy4SzKgtYBXwIMWR/B12Xs3MYZZ3TGu0BKmkBEXl\nQri5lYGhlp+teQmjYSADhrJi//TY9cF3VQhpAb0o9e5dD+KEtVNIs9dXlDNk\nwTGUD8amLGSaZVJWhn3jI6p1bKDwek49DbNz32Ct7MjVPCPQJfty1jsIJE6R\n5kjyeDDTRijt4XXHhWpPI3YUfB7Am3THQ/o1TrmhkdnTplhBDHFn7Ibukp2I\n2l1d\r\n=RI2y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"023c062adc380e53440e1147106dbb3f7d88574d","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.11.0","webpack":"4.44.2","prettier":"^2.1.2","@babel/core":"^7.12.3","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.0.6","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.8.0","@babel/preset-env":"^7.12.1","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.3.2","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.2","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.5_1605810077347_0.6560853976101688","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@19h47/combobox","version":"0.0.6","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.6","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"aff0e73c2454d1c1b3ca43f5634e2cad43a30449","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.6.tgz","fileCount":3,"integrity":"sha512-VMWdMWX1VP4OHTSA4F6xHvVmwqQV85XsVJei7HDVVH1FHutjYfz6dgmxDVji7ouAxGG7aGqcGmpooso/ffQ2mw==","signatures":[{"sig":"MEUCIQCJmSbjTKqYejvB9v4HFNg7SS7NdhsWfOKWXRCsyAP8FQIgXi6JYRepJ/SWILxt3SQlOveX/R0QZwraALDZe1SEupc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfuDCxCRA9TVsSAnZWagAAxiYQAJWdzAdREswZ4cfQcgn8\n33LFitGN6sPw70hGuD9K1t3dltH9Uz+/QfhMMItyElATvcumK5eS0gFhbeA/\nwTRo6g/KRnMC1XGbA97E0cftpYSkjARJ6DjsZwfddyPeZFnepAQ9sbh/7WM7\nK/2T7z9SW7Ly8XVDymnf2UlXhvOCZOyoK8LJyChitZcneba+oz4AKLWrEry4\n439cG+4fqDgCzmUAdC3AvgXH85K/FK7d1LAn1xqEweKBUbZdrvJQ1Jonk0DJ\nQH8u3qGRorrrrZoVrzQuLt90rpOrhEU85kOM5zeJlsFSEK1tmocENN8+Zoqg\nW+Mi0JcwhBWVk+BiHVZYrBCUFRcE4RumrmA1yeUNXVpMlinGqR5147WcRkNf\niM7lNYSt6zX3lsDjo9UtZ4Tz6UskuvJyU6IVQLXV0Vg8zwm836zt4GZBd748\nEE7nFyDXlJsl19nPZRVHov8YbpDtVJVFqY+3cBBvgtRn6ExxKhecFsIYClqO\nHlE+oMDUaXw+QLxhULiJglb9Cdqo7wiS3tg65SVcGZPJlrJy8Q08xVhdNJme\nCUUYTyiWn7fTxmOZ202CGySWkzbgwhqpLrQIiz1SZzdnWkUSOxgXfyCzB7Og\nLSJgoDDE5k5cZE4L/WBzdp9GZxISKt0/NxO+8qgM4+7YUuddFWFJsZsFAasN\nX+4e\r\n=aT+j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"02633b70b99155c738260e1f6857d1f83c210c27","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.11.0","webpack":"4.44.2","prettier":"^2.1.2","@babel/core":"^7.12.3","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.0.6","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.8.0","@babel/preset-env":"^7.12.1","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.3.2","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.2","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.6_1605906608787_0.6163637216550968","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@19h47/combobox","version":"0.0.7","keywords":["combobox","listbox","ES6"],"author":{"url":"https://19h47.fr","name":"Jérémy Levron","email":"jeremylevron@19h47.fr"},"license":"ISC","_id":"@19h47/combobox@0.0.7","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"dist":{"shasum":"ecfb1f758faa6e6d58d60ffd52fd1e6459af6aa7","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-0.0.7.tgz","fileCount":3,"integrity":"sha512-xyu7D/QVE0/cI471aUATtEhMOIyVz8cl2o+1lKTMZxV9z6zvQ+EDZJECjZze8CLav9hAhyGgDFpPGFSil/JzmQ==","signatures":[{"sig":"MEYCIQDIVdFAac5McPDlpS2QwG5VjXV3/pD0239/nScovUD7GAIhALnYk7K/HGi0LSTB1K5TvNtrcaLH8J705RLIzfQDCbLa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19645,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6LiCRA9TVsSAnZWagAApIEP/2NLQUEiah1jYSqMjpJ2\nIMw+oTOAfuADzLBAMXQgVSmrSPBAgufC2Iwjv78zZJjvukKdkc6FkIVZbZWn\n2zlgY4lhFgevP/Ux3i7YJOlZyGD3nSVoC/a2sgPWAuFcyma+JmX7btaudrQm\nTSZvaZqalzbtHj2PxItuJmoIBjIlGhIhfaO9xds3st9+HLFF78EF+VZaDMKn\nogzA5gWIjMJhvu5dASD4lEC2Zy4NAAAemKDE+O30JxzSeec6b0CMaWDSgZCY\n95zS9+yaRU0vtzJHwFmUV/k+OkdJvX3ziHalrBxY8S3+YqGMyWXloc9/JHk0\n5W79s2QvjnVCrQQNaReC9oa2Bt5Sq66kd5Y0EpzoPFkYgF7gO6ROGxy/DAdc\nSDwvxinbg+xF7EUBxFRuigf+sg7z0ffgSlrI6BR3BF8m3xvNwnqH0ajbs2Fg\nNCvm88n5RK1y0720wJelCEZ8VxYpTdvRW8digkz1fbYpeKffZGj5PcFVTUUM\nujsapFgPUdPpWU4JkCuQkhyCqgtY88u4wLmlvsrsJBCdS++X0Tqr4R1m9zss\ntu66g6JNEItlZeSZUq3YXXII7x+qqWmkL6/iNyaNYHtWaHtPYriKOjnZCtGZ\n1czLOt2GvMG6TSa9XLN//Rn8yXsXcgCiAfNLkwv5bAeycG1UunkMe0Jt6oz1\nnXUh\r\n=31vV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.js","gitHead":"f719aeeb5cf5b9d469fa8bb1aade366da31f7cc8","scripts":{"dev":"webpack --mode=development --config webpack/webpack.config.js","prod":"webpack --mode=production --config webpack/webpack.config.js","start":"webpack-dev-server --mode=development --hot --config webpack/webpack.config.js","deploy":"yarn login && yarn prod && npm publish --access public"},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"repository":{"url":"git://github.com/19h47/19h47-combobox.git","type":"git"},"_npmVersion":"6.14.8","description":"Combobox and Listbox","directories":{},"_nodeVersion":"14.15.0","dependencies":{"events":"^3.2.0","@19h47/keycode":"3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.14.0","webpack":"4.44.2","prettier":"^2.2.1","@babel/core":"^7.12.9","webpack-cli":"3.3.12","babel-eslint":"^10.1.0","babel-loader":"^8.2.2","eslint-loader":"^4.0.2","webpack-merge":"^5.2.0","@babel/runtime":"^7.12.1","webpack-notifier":"^1.11.0","@babel/preset-env":"^7.12.7","eslint-plugin-node":"^11.0.0","webpack-dev-server":"^3.10.1","copy-webpack-plugin":"^6.3.2","html-webpack-plugin":"^4.5.0","@babel/eslint-plugin":"^7.12.1","clean-webpack-plugin":"^3.0.0","eslint-plugin-import":"^2.22.1","eslint-plugin-promise":"^4.2.1","@19h47/prettier-config":"^1.0.0","eslint-config-prettier":"^6.14.0","eslint-config-standard":"^16.0.2","eslint-plugin-standard":"^4.0.2","webpack-format-messages":"^2.0.6","eslint-config-airbnb-base":"^14.2.0","eslint-import-resolver-webpack":"^0.13.0","@babel/plugin-transform-runtime":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/combobox_0.0.7_1606918881864_0.5204648781379935","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@19h47/combobox","version":"2.0.0","description":"Accessible editable combobox with list autocomplete (W3C APG)","keywords":["combobox","listbox","autocomplete","accessibility","a11y","ARIA","APG"],"homepage":"https://github.com/19h47/19h47-combobox#readme","bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"repository":{"type":"git","url":"git://github.com/19h47/19h47-combobox.git"},"license":"ISC","author":{"name":"Jérémy Levron","email":"jeremylevron@19h47.fr","url":"https://19h47.fr"},"type":"module","main":"./dist/combobox.umd.cjs","module":"./dist/combobox.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/combobox.js","require":"./dist/combobox.umd.cjs"}},"devDependencies":{"@19h47/prettier-config":"^2.0.0","happy-dom":"^20.10.6","prettier":"^3.9.5","typescript":"^7.0.2","vite":"^8.1.4","vitest":"^4.1.10"},"prettier":"@19h47/prettier-config","scripts":{"dev":"vite","test":"vitest run","build":"vite build && tsc && vite build --config vite.config.docs.js","build:docs":"vite build --config vite.config.docs.js","deploy":"pnpm login && pnpm run build && pnpm publish --access public --no-git-checks"},"_id":"@19h47/combobox@2.0.0","_integrity":"sha512-Dsb57Ih7LB+mywFRpr8Yy5W5LqWDHYiyQ8gwy5ViC3HtsIslhnCCz2iuilpbxxU/5aI7Q4/DCUGtyUjlSzfG2g==","_resolved":"/private/var/folders/vt/kpbgrh4d7k14zvxmcm01bfxh0000gn/T/e135210e2e58b4fe393748c3dcbfea18/19h47-combobox-2.0.0.tgz","_from":"file:19h47-combobox-2.0.0.tgz","_nodeVersion":"22.22.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-Dsb57Ih7LB+mywFRpr8Yy5W5LqWDHYiyQ8gwy5ViC3HtsIslhnCCz2iuilpbxxU/5aI7Q4/DCUGtyUjlSzfG2g==","shasum":"b077e87f47a9d6a4a5f1c1393903b41978e20fde","tarball":"https://registry.npmjs.org/@19h47/combobox/-/combobox-2.0.0.tgz","fileCount":14,"unpackedSize":46152,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCjAqKS/yfdo/LledYNOnp8PU7YFyT67GtvZr8kSu6fCwIgQZLhrf5m3RQu5/4vrCf/axoVCF7y27c6aNV3czpJo+g="}]},"_npmUser":{"name":"19h47","email":"jeremylevron@19h47.fr"},"directories":{},"maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/combobox_2.0.0_1784269354207_0.7851825940804145"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-17T11:34:48.231Z","modified":"2026-07-17T06:22:34.531Z","0.0.1":"2020-11-17T11:34:48.413Z","0.0.2":"2020-11-18T01:04:43.584Z","0.0.3":"2020-11-18T16:55:05.668Z","0.0.4":"2020-11-19T10:16:44.741Z","0.0.5":"2020-11-19T18:21:17.482Z","0.0.6":"2020-11-20T21:10:09.074Z","0.0.7":"2020-12-02T14:21:21.977Z","2.0.0":"2026-07-17T06:22:34.367Z"},"bugs":{"url":"https://github.com/19h47/19h47-combobox/issues"},"author":{"name":"Jérémy Levron","email":"jeremylevron@19h47.fr","url":"https://19h47.fr"},"license":"ISC","homepage":"https://github.com/19h47/19h47-combobox#readme","keywords":["combobox","listbox","autocomplete","accessibility","a11y","ARIA","APG"],"repository":{"type":"git","url":"git://github.com/19h47/19h47-combobox.git"},"description":"Accessible editable combobox with list autocomplete (W3C APG)","maintainers":[{"name":"19h47","email":"jeremylevron@19h47.fr"}],"readme":"[![](https://img.shields.io/npm/v/@19h47/combobox)](https://www.npmjs.com/package/@19h47/combobox)\n[![](https://img.shields.io/npm/dm/@19h47/combobox)](https://www.npmjs.com/package/@19h47/combobox)\n\n# @19h47/combobox\n\nEditable **combobox with list autocomplete** (manual selection), aligned with the [W3C APG pattern](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/).\n\n**HTML is the source of truth** for roles and structure. The library does not invent missing attributes or “fix” incomplete markup — the consumer delivers clean HTML. The library only orchestrates interaction state: keyboard behaviour, popup visibility, `aria-expanded`, `aria-selected`, `aria-activedescendant`, and `aria-busy`.\n\n| Mode | Who owns the listbox DOM | Typical use |\n| --- | --- | --- |\n| `managed` (default) | Library rebuilds options from `string[]` via `render` | Classic autocomplete |\n| `external` | Consumer injects HTML / mutates the listbox | Rich results, grouped options, server-rendered markup |\n\n## Install\n\n```\npnpm add @19h47/combobox\n```\n\n## HTML\n\nThe listbox **must** have a stable `id` (referenced by `aria-controls`). In `managed` mode, option ids are derived from it (`{listboxId}-option-{n}`).\n\n```html\n<label for=\"monster\">Monster</label>\n<div class=\"combobox\">\n\t<input\n\t\tid=\"monster\"\n\t\ttype=\"text\"\n\t\trole=\"combobox\"\n\t\taria-autocomplete=\"list\"\n\t\taria-expanded=\"false\"\n\t\taria-controls=\"monster-listbox\"\n\t\tautocomplete=\"off\"\n\t/>\n\t<button\n\t\ttype=\"button\"\n\t\ttabindex=\"-1\"\n\t\taria-label=\"Monsters\"\n\t\taria-controls=\"monster-listbox\"\n\t\taria-expanded=\"false\"\n\t>\n\t\t▼\n\t</button>\n\t<ul id=\"monster-listbox\" role=\"listbox\" aria-label=\"Monsters\" hidden></ul>\n</div>\n```\n\n### Accessibility checklist\n\n- `role=\"combobox\"` + `aria-autocomplete=\"list\"` on the input\n- `aria-controls` / `aria-expanded` on the input (and optional button)\n- `role=\"listbox\"` with an accessible name (`aria-label` or `aria-labelledby`)\n- Each `[role=\"option\"]` has a **stable, unique `id`** (required in `external` mode; generated in `managed` mode from the listbox `id`)\n- Optional open button: `tabindex=\"-1\"`, same `aria-controls` / `aria-expanded` as the input\n- Announce empty / loading states with a live region wired to `combobox:empty` / `combobox:loading` (the library sets `aria-busy` on the listbox while searching)\n\n## JavaScript\n\n### Managed (default)\n\n```javascript\nimport Combobox, { EVENTS } from '@19h47/combobox';\n\nconst input = document.querySelector('#monster');\nconst listbox = document.querySelector('#monster-listbox');\nconst button = document.querySelector('button[aria-controls=\"monster-listbox\"]');\n\nconst combobox = new Combobox(input, listbox, {\n\tbutton,\n\tsearch: (value, { signal }) => {\n\t\tif (value.length < 1) return monsters;\n\t\treturn monsters.filter(name =>\n\t\t\tname.toLowerCase().startsWith(value.toLowerCase()),\n\t\t);\n\t},\n\t// Optional — e.g. Bootstrap list group\n\trender: (result, props) =>\n\t\t`<li class=\"list-group-item\"${props}>${result}</li>`,\n});\n\ncombobox.init();\n```\n\n`search` may return an array or a `Promise`. Stale responses are ignored; the previous `AbortSignal` is aborted when a newer search starts.\n\n### External (rich / server HTML)\n\nEach `[role=\"option\"]` **must** already have a stable `id`. Group headers must not use `role=\"option\"`.\n\n```javascript\nconst combobox = new Combobox(input, listbox, {\n\tmode: 'external',\n\tselectMode: 'custom',\n\tdebounce: 280,\n\tminLength: 2,\n\topenOnEmpty: true,\n\tsearch: async (query, { signal }) => {\n\t\tconst html = await fetchSection(query, signal);\n\t\treturn { html };\n\t},\n\tonSelect: ({ option }) => {\n\t\toption?.element.querySelector('a')?.click();\n\t},\n});\n\ncombobox.init();\n\ninput.addEventListener(EVENTS.empty, ({ detail }) => {\n\t// detail.value is the current query — pair with a polite live region\n\tshowNoResults(detail.value);\n});\n```\n\nOptional `data-value` on options overrides the string used for `selectMode: 'value'`.\n\n### `search` return shapes\n\n| Return | Mode | Effect |\n| --- | --- | --- |\n| `string[]` | `managed` | Rebuild options via `render` |\n| `HTMLElement[]` | either | Replace listbox children, then sync ARIA |\n| `{ html }` | `external` | Set `listbox.innerHTML`, then sync |\n| `{ options }` | either | Same as `string[]` / `HTMLElement[]` |\n| `[]` / empty | either | Clear options; see `openOnEmpty` |\n\n## Keyboard\n\n| Key | Function |\n| --- | --- |\n| `↓` | Open list and move to first / next option |\n| `Alt` + `↓` | Open list without moving visual focus |\n| `↑` | Open list and move to last / previous option |\n| `Alt` + `↑` | Open list without moving visual focus |\n| `Enter` | Accept focused option; without focus, close and allow form submit |\n| `Escape` | Close list, or clear field if already closed |\n| `Tab` | Accept focused option, otherwise close |\n| `Home` / `End` / `←` / `→` | Return editing to the textbox when an option has visual focus |\n\nDOM focus stays on the textbox; visual focus uses `aria-activedescendant`.\n\n## Options\n\n| Option | Type | Default | Description |\n| --- | --- | --- | --- |\n| `search` | `(value, context) => SearchResult \\| Promise<…>` | — | **Required.** `context.signal` is an `AbortSignal`. |\n| `mode` | `'managed' \\| 'external'` | `'managed'` | Who owns listbox markup |\n| `selectMode` | `'value' \\| 'custom'` | `'value'` | Fill the textbox, or only fire `onSelect` / `combobox:submit` |\n| `onSelect` | `(detail) => void` | — | Called when an option is accepted |\n| `debounce` | `number` | `0` | Debounce (ms) for input-driven searches |\n| `minLength` | `number` | `0` | Minimum trimmed length before searching |\n| `openOnEmpty` | `boolean` | `false` | Keep popup open (`aria-expanded` + visible listbox) on empty results — pair with a live region on `combobox:empty` |\n| `autoselect` | `boolean` | `false` | Highlight the first suggestion |\n| `button` | `HTMLButtonElement \\| null` | `null` | Optional open button (also auto-discovered via `aria-controls`) |\n| `write` | `(input, value) => void` | sets `input.value` | How a chosen option is written (`selectMode: 'value'`) |\n| `render` | `(result, props) => string` | `<li …>…</li>` | HTML for each managed option (`props` serializes ARIA attributes) |\n\n## Methods\n\n| Method | Description |\n| --- | --- |\n| `init()` | Bind events and collapse the listbox |\n| `destroy()` | Remove listeners, clear debounce, abort in-flight searches |\n| `show()` / `hide(options?)` | Open or close the listbox (`hide`: `{ force?, clear? }`) |\n| `select()` | Accept the focused option |\n\nReadable state: `index`, `options`, `value`, `loading`, `expanded`, `focused`.\n\n## Events\n\nDispatched on the **input** (`EVENTS` map exported):\n\n| Event | `detail` | When |\n| --- | --- | --- |\n| `combobox:loading` | — | Before `search` resolves |\n| `combobox:loaded` | — | After a non-stale `search` resolves |\n| `combobox:update` | `{ options, index, value }` | After options / ARIA are synced |\n| `combobox:submit` | `{ option, index, value }` | When an option is chosen |\n| `combobox:empty` | `{ value }` | No options (or below `minLength`); `value` is the current query |\n\n```javascript\nimport { EVENTS } from '@19h47/combobox';\n\ninput.addEventListener(EVENTS.submit, ({ detail }) => {\n\tconsole.log(detail.option, detail.value);\n});\n```\n\n## Styling hooks\n\nPrefer ARIA when possible; classes are optional conveniences.\n\n| Hook | Element | When |\n| --- | --- | --- |\n| `[aria-expanded=\"true\"]` | input / button | Popup is open |\n| `[aria-busy=\"true\"]` | listbox | `search` in flight |\n| `is-active` | listbox | Popup is open (mirrors expanded) |\n| `is-loading` | input + listbox | Same window as `aria-busy` |\n\n```css\nul[role='listbox']:not(.is-active) {\n\tdisplay: none;\n}\n\nul[role='listbox'].is-active {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmax-height: 16rem;\n\toverflow: auto;\n}\n\n[role='option'][aria-selected='true'] {\n\tbackground: #e9ecef;\n}\n```\n\n## Migrating from 1.x\n\nBreaking changes in **2.0**:\n\n- `writeValue` → `write`\n- `renderOption` → `render`\n- Markup is no longer “fixed up”: provide complete ARIA HTML (listbox `id`, option `id`s in `external` mode)\n- `aria-activedescendant` is **removed** when inactive (never set to `\"\"`)\n- Managed option ids are `{listboxId}-option-{n}` (listbox `id` required for uniqueness)\n- New: `mode`, `selectMode`, `debounce`, `minLength`, `openOnEmpty`, `AbortSignal` on `search`, `EVENTS` map\n\n## Example\n\nInteractive demo: [19h47.github.io/19h47-combobox](https://19h47.github.io/19h47-combobox/).\n\n```\npnpm test\npnpm build\n```\n\n## References\n\n- [Editable Combobox With List Autocomplete Example](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/)\n- [Combobox Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/)\n","readmeFilename":"README.md"}