{"_id":"rn-selector","_rev":"41-e40622011a23d55f2e183b5259c3ec26","name":"rn-selector","dist-tags":{"latest":"2.0.3"},"versions":{"0.1.0":{"name":"rn-selector","version":"0.1.0","keywords":["react-native","ios","android"],"author":{"url":"https://github.com/itsandrehere","name":"itsandrehere","email":"andregueva18@gmail.com"},"license":"MIT","_id":"rn-selector@0.1.0","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"homepage":"https://github.com/itsandrehere/rn-selector#readme","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"dist":{"shasum":"fb733e6ee7054fe2810beea42b3fd9610c3e4309","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-0.1.0.tgz","fileCount":10,"integrity":"sha512-nylnS45rHIbUA/bhvMjZ3pse0g0VsJc6KsJ0+ZGOcY7gB56egysH7FcUqSuWpMz0xs8qJVZYRCr1sPFjKaQshQ==","signatures":[{"sig":"MEUCIHs1/AArVMA/eCkaMejgsvqnl4AnX1fDll7k5ja1jJ2nAiEA4VFcAZc3V/n97CLxVuMMG9H3ibfnH9B8QE3eIGgkXCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41488},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"main":"./lib/module/index.js","source":"./src/index.tsx","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"gitHead":"1769a68f8eef7c0707042ed08239ba0d7e1066c8","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","clean":"del-cli lib","example":"yarn workspace rn-selector-example","prepare":"bob build","release":"release-it","typecheck":"tsc"},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"tagName":"v${version}","commitMessage":"chore: release ${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"repository":{"url":"git+https://github.com/itsandrehere/rn-selector.git","type":"git"},"workspaces":["example"],"_npmVersion":"10.8.2","description":"selector from expo and react native","directories":{},"_nodeVersion":"20.11.0","dependencies":{"@testing-library/react-native":"^13.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@3.6.1","devDependencies":{"jest":"^29.7.0","react":"19.0.0","eslint":"^9.22.0","del-cli":"^5.1.0","prettier":"^3.0.3","@eslint/js":"^9.22.0","commitlint":"^19.6.1","release-it":"^17.10.0","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","react-native":"0.79.5","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","eslint-plugin-jest":"^29.0.1","react-test-renderer":"^19.0.0","eslint-plugin-ft-flow":"^3.0.11","@evilmartians/lefthook":"^1.5.0","eslint-config-prettier":"^10.1.1","eslint-plugin-prettier":"^5.2.3","react-native-builder-bob":"^0.38.3","eslint-plugin-react-hooks":"^5.2.0","@react-native/babel-preset":"^0.80.1","eslint-plugin-react-native":"^5.0.0","@react-native/eslint-config":"^0.78.0","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@typescript-eslint/eslint-plugin":"^8.36.0","@release-it/conventional-changelog":"^9.0.2","@babel/plugin-transform-class-properties":"^7.27.1"},"peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/rn-selector_0.1.0_1752372777493_0.013189860339056336","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"type":"library","version":"0.49.2","languages":"js"}},"0.1.1":{"name":"rn-selector","version":"0.1.1","keywords":["react-native","ios","android"],"author":{"url":"https://github.com/itsandrehere","name":"itsandrehere","email":"andregueva18@gmail.com"},"license":"MIT","_id":"rn-selector@0.1.1","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"homepage":"https://github.com/itsandrehere/rn-selector#readme","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"dist":{"shasum":"62e28cb37de1c5605bffc8a3ee8550566e0eb1c3","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-0.1.1.tgz","fileCount":10,"integrity":"sha512-GYUjulnnLCnnemTeuq+VnxMYhWMtWHiaZRCU1utr21xH/AGE3LTKY26EKtzkiiNSONZz2YAkCgzOP4YJpZa8vA==","signatures":[{"sig":"MEUCIQCkxGIwZR2c9r07sOyJnmsfskUTN5AmMKy6z1L5nVoaEgIgHoFlW1hVbcSkG9nnmUHeD9BwzEthQ0X4JBO440+RzGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41860},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"main":"./lib/module/index.js","source":"./src/index.tsx","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"gitHead":"0e54cbcb057fd69a2ac0e0780217ad671998657d","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","clean":"del-cli lib","example":"yarn workspace rn-selector-example","prepare":"bob build","release":"release-it","typecheck":"tsc"},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"tagName":"v${version}","commitMessage":"chore: release ${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"repository":{"url":"git+https://github.com/itsandrehere/rn-selector.git","type":"git"},"workspaces":["example"],"_npmVersion":"10.8.2","description":"selector from expo and react native","directories":{},"_nodeVersion":"20.11.0","dependencies":{"@testing-library/react-native":"^13.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@3.6.1","devDependencies":{"jest":"^29.7.0","react":"19.0.0","eslint":"^9.22.0","del-cli":"^5.1.0","prettier":"^3.0.3","@eslint/js":"^9.22.0","commitlint":"^19.6.1","release-it":"^17.10.0","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","react-native":"0.79.5","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","eslint-plugin-jest":"^29.0.1","react-test-renderer":"^19.0.0","eslint-plugin-ft-flow":"^3.0.11","@evilmartians/lefthook":"^1.5.0","eslint-config-prettier":"^10.1.1","eslint-plugin-prettier":"^5.2.3","react-native-builder-bob":"^0.38.3","eslint-plugin-react-hooks":"^5.2.0","@react-native/babel-preset":"^0.80.1","eslint-plugin-react-native":"^5.0.0","@react-native/eslint-config":"^0.78.0","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@typescript-eslint/eslint-plugin":"^8.36.0","@release-it/conventional-changelog":"^9.0.2","@babel/plugin-transform-class-properties":"^7.27.1"},"peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/rn-selector_0.1.1_1752375596855_0.8756863564313315","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"type":"library","version":"0.49.2","languages":"js"}},"0.1.2":{"name":"rn-selector","version":"0.1.2","keywords":["react-native","ios","android"],"author":{"url":"https://github.com/itsandrehere","name":"itsandrehere","email":"andregueva18@gmail.com"},"license":"MIT","_id":"rn-selector@0.1.2","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"homepage":"https://github.com/itsandrehere/rn-selector#readme","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"dist":{"shasum":"88f47f519b5cbce84dbd54b7b3d1c73415f1cbef","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-0.1.2.tgz","fileCount":10,"integrity":"sha512-UB3RHZ5bDTtxtmvWgyBHvvzFWa/WridWsM7L72PiQZzcrlC04tGXm0wCwLAnKRaIxd8lvs5LjVpi2K9wVUhLxw==","signatures":[{"sig":"MEUCIBFl7TN8Kt8KuPcqjHzP1nQgncuWPYW9gWHiT+i8ZT+5AiEAr4W6CJT2LtgQElfqvgRMsXuXpvqvnDbBUGHDksG6n44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41872},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"main":"./lib/module/index.js","source":"./src/index.tsx","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"gitHead":"2d0281d1e57719a809ac2e4856ed6cc4dae6aad9","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","clean":"del-cli lib","example":"yarn workspace rn-selector-example","prepare":"bob build","release":"release-it","typecheck":"tsc"},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"tagName":"v${version}","commitMessage":"chore: release ${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"repository":{"url":"git+https://github.com/itsandrehere/rn-selector.git","type":"git"},"workspaces":["example"],"_npmVersion":"10.8.2","description":"selector from expo and react native","directories":{},"_nodeVersion":"20.11.0","dependencies":{"@testing-library/react-native":"^13.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@3.6.1","devDependencies":{"jest":"^29.7.0","react":"19.0.0","eslint":"^9.22.0","del-cli":"^5.1.0","prettier":"^3.0.3","@eslint/js":"^9.22.0","commitlint":"^19.6.1","release-it":"^17.10.0","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","react-native":"0.79.5","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","eslint-plugin-jest":"^29.0.1","react-test-renderer":"^19.0.0","eslint-plugin-ft-flow":"^3.0.11","@evilmartians/lefthook":"^1.5.0","eslint-config-prettier":"^10.1.1","eslint-plugin-prettier":"^5.2.3","react-native-builder-bob":"^0.38.3","eslint-plugin-react-hooks":"^5.2.0","@react-native/babel-preset":"^0.80.1","eslint-plugin-react-native":"^5.0.0","@react-native/eslint-config":"^0.78.0","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@typescript-eslint/eslint-plugin":"^8.36.0","@release-it/conventional-changelog":"^9.0.2","@babel/plugin-transform-class-properties":"^7.27.1"},"peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/rn-selector_0.1.2_1752459766990_0.6866186816474917","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"type":"library","version":"0.49.2","languages":"js"}},"0.1.3":{"name":"rn-selector","version":"0.1.3","keywords":["react-native","ios","android"],"author":{"url":"https://github.com/itsandrehere","name":"itsandrehere","email":"andregueva18@gmail.com"},"license":"MIT","_id":"rn-selector@0.1.3","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"homepage":"https://github.com/itsandrehere/rn-selector#readme","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"dist":{"shasum":"dc498441836b38d35612e078cc85073acdea1ecc","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-0.1.3.tgz","fileCount":10,"integrity":"sha512-R1eHJQN9Q7kCJr5OloLSFTCMIzlqhCnVT83sVcD37YV0n5a42lsvRWe/wQeQP0P5hnbrtXT5Y2CGeYMoBqqxow==","signatures":[{"sig":"MEUCIE/2Wtazxxgj5gp1dD/pt9OcsfE67E0p2f9hBZUfLKTEAiEA+oJj9kwyUoUJQo810PSolUGwnml9aSJmNxrmQlMh1tg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52487},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"main":"./lib/module/index.js","source":"./src/index.tsx","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"gitHead":"bc58a6c0c9c8caef9f1fa1c60f7b9802aa4d848f","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","clean":"del-cli lib","example":"yarn workspace rn-selector-example","prepare":"bob build","release":"release-it","typecheck":"tsc"},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"tagName":"v${version}","commitMessage":"chore: release ${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"repository":{"url":"git+https://github.com/itsandrehere/rn-selector.git","type":"git"},"workspaces":["example"],"_npmVersion":"10.8.2","description":"selector from expo and react native","directories":{},"_nodeVersion":"20.11.0","dependencies":{"@testing-library/react-native":"^13.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@3.6.1","devDependencies":{"jest":"^29.7.0","react":"19.0.0","eslint":"^9.22.0","del-cli":"^5.1.0","prettier":"^3.0.3","@eslint/js":"^9.22.0","commitlint":"^19.6.1","release-it":"^17.10.0","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","react-native":"0.79.5","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","eslint-plugin-jest":"^29.0.1","react-test-renderer":"^19.0.0","eslint-plugin-ft-flow":"^3.0.11","@evilmartians/lefthook":"^1.5.0","eslint-config-prettier":"^10.1.1","eslint-plugin-prettier":"^5.2.3","react-native-builder-bob":"^0.38.3","eslint-plugin-react-hooks":"^5.2.0","@react-native/babel-preset":"^0.80.1","eslint-plugin-react-native":"^5.0.0","@react-native/eslint-config":"^0.78.0","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@typescript-eslint/eslint-plugin":"^8.36.0","@release-it/conventional-changelog":"^9.0.2","@babel/plugin-transform-class-properties":"^7.27.1"},"peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/rn-selector_0.1.3_1755647029521_0.9740142678828898","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"type":"library","version":"0.49.2","languages":"js"}},"2.0.1":{"name":"rn-selector","version":"2.0.1","keywords":["react-native","react native","expo","selector","dropdown","select","picker","multiple select","searchable"],"author":{"url":"https://github.com/itsandrehere","name":"itsandrehere","email":"andregueva18@gmail.com"},"license":"MIT","_id":"rn-selector@2.0.1","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"homepage":"https://github.com/itsandrehere/rn-selector#readme","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"dist":{"shasum":"72242210e22b9794469bb772f30d5e90d735abd5","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-2.0.1.tgz","fileCount":10,"integrity":"sha512-HkpVM9ZbgGsC1uGUtjBQibnydPxJEU/RoLtcZGu3c19b1kFkIsGC2LYfio68XQGWERU/XMW5hwqSUdg68jx36Q==","signatures":[{"sig":"MEUCIAONAfuz4R5J2NlBNrPseS1bJgbLSuJ77ltVRlwoRGXJAiEA8UGymRyyITARtOAe6g+GQ1wE74nxcx8dU/j8KuouGog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80877},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"main":"./lib/module/index.js","source":"./src/index.tsx","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"gitHead":"9d58250913467eef0b94778113f43a8f0f6141dc","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","clean":"del-cli lib","example":"yarn workspace rn-selector-example","prepare":"bob build","release":"release-it","typecheck":"tsc"},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"tagName":"v${version}","commitMessage":"chore: release ${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"repository":{"url":"git+https://github.com/itsandrehere/rn-selector.git","type":"git"},"workspaces":["example"],"_npmVersion":"10.9.3","description":"A customizable, searchable selector component for React Native and Expo with grouped configuration and TypeScript support.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"@testing-library/react-native":"^13.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@3.6.1","devDependencies":{"jest":"^29.7.0","react":"19.0.0","eslint":"^9.22.0","del-cli":"^5.1.0","prettier":"^3.0.3","@eslint/js":"^9.22.0","commitlint":"^19.6.1","release-it":"^17.10.0","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","react-native":"0.79.5","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","eslint-plugin-jest":"^29.0.1","react-test-renderer":"^19.0.0","eslint-plugin-ft-flow":"^3.0.11","@evilmartians/lefthook":"^1.5.0","eslint-config-prettier":"^10.1.1","eslint-plugin-prettier":"^5.2.3","react-native-builder-bob":"^0.38.3","@typescript-eslint/parser":"^8.53.0","eslint-plugin-react-hooks":"^5.2.0","@react-native/babel-preset":"^0.80.1","eslint-plugin-react-native":"^5.0.0","@react-native/eslint-config":"^0.78.0","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@typescript-eslint/eslint-plugin":"^8.53.0","@release-it/conventional-changelog":"^9.0.2","@babel/plugin-transform-class-properties":"^7.27.1"},"peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/rn-selector_2.0.1_1768345263018_0.040419068872528996","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"type":"library","version":"0.49.2","languages":"js"}},"2.0.2":{"name":"rn-selector","version":"2.0.2","keywords":["react-native","react native","expo","selector","dropdown","select","picker","multiple select","searchable"],"author":{"url":"https://github.com/itsandrehere","name":"itsandrehere","email":"andregueva18@gmail.com"},"license":"MIT","_id":"rn-selector@2.0.2","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"homepage":"https://github.com/itsandrehere/rn-selector#readme","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"dist":{"shasum":"44557102f29136fae33c38aa2fbcb1a6ee88ae66","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-2.0.2.tgz","fileCount":10,"integrity":"sha512-+RlHfiP5SxwaB0H4wJo+C1SPOuIiJqjVTxHkZ1OinpVTv5EyTI1FvkxFUBJTdHmVOU50tvXbxgFJwAzxGbal/A==","signatures":[{"sig":"MEQCIChCKSukwHNP8BFEBfVwUzmO2Us6kO4yC0pFvy9iAM3jAiApm6EVWdkDJjnuEEI/dSlpcjmexTrCpONYbTxDuzKH/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81020},"jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"main":"./lib/module/index.js","source":"./src/index.tsx","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"gitHead":"7736dad398b30b20d44c01f6cc715772da037959","scripts":{"lint":"eslint \"**/*.{js,ts,tsx}\"","test":"jest","clean":"del-cli lib","example":"yarn workspace rn-selector-example","prepare":"bob build","release":"release-it","typecheck":"tsc","release:patch":"release-it patch --ci"},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"prettier":{"useTabs":false,"tabWidth":2,"quoteProps":"consistent","singleQuote":true,"trailingComma":"es5"},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"tagName":"v${version}","commitMessage":"chore: release ${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"repository":{"url":"git+https://github.com/itsandrehere/rn-selector.git","type":"git"},"workspaces":["example"],"_npmVersion":"10.9.3","description":"A customizable, searchable selector component for React Native and Expo with grouped configuration and TypeScript support.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"@testing-library/react-native":"^13.2.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"yarn@3.6.1","devDependencies":{"jest":"^29.7.0","react":"19.0.0","eslint":"^9.22.0","del-cli":"^5.1.0","prettier":"^3.0.3","@eslint/js":"^9.22.0","commitlint":"^19.6.1","release-it":"^17.10.0","typescript":"^5.2.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","react-native":"0.79.5","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","eslint-plugin-jest":"^29.0.1","react-test-renderer":"^19.0.0","eslint-plugin-ft-flow":"^3.0.11","@evilmartians/lefthook":"^1.5.0","eslint-config-prettier":"^10.1.1","eslint-plugin-prettier":"^5.2.3","react-native-builder-bob":"^0.38.3","@typescript-eslint/parser":"^8.53.0","eslint-plugin-react-hooks":"^5.2.0","@react-native/babel-preset":"^0.80.1","eslint-plugin-react-native":"^5.0.0","@react-native/eslint-config":"^0.78.0","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@typescript-eslint/eslint-plugin":"^8.53.0","@release-it/conventional-changelog":"^9.0.2","@babel/plugin-transform-class-properties":"^7.27.1"},"peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/rn-selector_2.0.2_1768347782195_0.0340734295448506","host":"s3://npm-registry-packages-npm-production"},"react-native-builder-bob":{"output":"lib","source":"src","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"type":"library","version":"0.49.2","languages":"js"}},"2.0.3":{"name":"rn-selector","version":"2.0.3","description":"A customizable, searchable selector component for React Native and Expo with grouped configuration and TypeScript support.","source":"./src/index.tsx","main":"./lib/module/index.js","exports":{".":{"types":"./lib/typescript/src/index.d.ts","default":"./lib/module/index.js"},"./package.json":"./package.json"},"scripts":{"example":"yarn workspace rn-selector-example","test":"jest","typecheck":"tsc","lint":"eslint \"**/*.{js,ts,tsx}\"","clean":"del-cli lib","prepare":"bob build","release":"release-it","release:patch":"release-it patch --ci"},"keywords":["react-native","react native","expo","selector","dropdown","select","picker","multiple select","searchable"],"repository":{"type":"git","url":"git+https://github.com/itsandrehere/rn-selector.git"},"author":{"name":"itsandrehere","email":"andregueva18@gmail.com","url":"https://github.com/itsandrehere"},"license":"MIT","bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"homepage":"https://github.com/itsandrehere/rn-selector#readme","publishConfig":{"registry":"https://registry.npmjs.org/"},"devDependencies":{"@babel/plugin-transform-class-properties":"^7.27.1","@babel/plugin-transform-runtime":"^7.28.0","@commitlint/config-conventional":"^19.6.0","@eslint/compat":"^1.2.7","@eslint/eslintrc":"^3.3.0","@eslint/js":"^9.22.0","@evilmartians/lefthook":"^1.5.0","@react-native/babel-preset":"^0.80.1","@react-native/eslint-config":"^0.78.0","@release-it/conventional-changelog":"^9.0.2","@types/jest":"^29.5.5","@types/react":"^19.0.12","@typescript-eslint/eslint-plugin":"^8.53.0","@typescript-eslint/parser":"^8.53.0","commitlint":"^19.6.1","del-cli":"^5.1.0","eslint":"^9.22.0","eslint-config-prettier":"^10.1.1","eslint-plugin-ft-flow":"^3.0.11","eslint-plugin-jest":"^29.0.1","eslint-plugin-prettier":"^5.2.3","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-native":"^5.0.0","jest":"^29.7.0","prettier":"^3.0.3","react":"19.0.0","react-native":"0.79.5","react-native-builder-bob":"^0.38.3","react-test-renderer":"^19.0.0","release-it":"^17.10.0","typescript":"^5.2.2"},"peerDependencies":{"react":"*","react-native":"*"},"workspaces":["example"],"packageManager":"yarn@3.6.1","jest":{"preset":"react-native","modulePathIgnorePatterns":["<rootDir>/example/node_modules","<rootDir>/lib/"]},"commitlint":{"extends":["@commitlint/config-conventional"]},"release-it":{"git":{"commitMessage":"chore: release ${version}","tagName":"v${version}"},"npm":{"publish":true},"github":{"release":true},"plugins":{"@release-it/conventional-changelog":{"preset":{"name":"angular"}}}},"prettier":{"quoteProps":"consistent","singleQuote":true,"tabWidth":2,"trailingComma":"es5","useTabs":false},"react-native-builder-bob":{"source":"src","output":"lib","targets":[["module",{"esm":true}],["typescript",{"project":"tsconfig.build.json"}]]},"create-react-native-library":{"languages":"js","type":"library","version":"0.49.2"},"dependencies":{"@testing-library/react-native":"^13.2.0"},"_id":"rn-selector@2.0.3","gitHead":"ba63a66293eaaa85570740b600dd50113073e412","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-ExdKTc9ZLBagirJKwj8zFeuCsr15J20VhF3SmZ8i0svAGyII0/MMbgRqyHgA9K0q4Q1LlYyPn48BP0xakiRSiA==","shasum":"aee5d964582ff9e4ce25b7e1d4ab18ba57d0217c","tarball":"https://registry.npmjs.org/rn-selector/-/rn-selector-2.0.3.tgz","fileCount":10,"unpackedSize":81019,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDdoMdUT8dZSVMD7lvjRxL4HJzlN6CmeYXH4PlYh+880AIhAO9C+/5MIq81OU8hz/Ek19/hq52ILww1IzKKJlf836Cy"}]},"_npmUser":{"name":"itsandrehere","email":"andregueva18@gmail.com"},"directories":{},"maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rn-selector_2.0.3_1768347982446_0.5059382667372956"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-13T02:12:57.387Z","modified":"2026-01-13T23:46:23.291Z","1.0.0":"2019-03-05T07:21:17.186Z","1.0.1":"2019-03-05T07:21:59.851Z","1.0.2":"2019-03-05T07:26:43.810Z","1.0.3":"2019-03-05T07:32:45.028Z","1.0.4":"2019-03-05T08:04:36.803Z","1.0.5":"2019-03-05T08:43:19.679Z","1.0.6":"2019-03-06T04:55:04.637Z","1.0.7":"2019-05-10T04:00:50.917Z","1.0.8":"2019-05-10T04:49:15.285Z","1.0.9":"2019-05-10T05:13:01.910Z","1.0.10":"2019-05-10T05:17:02.293Z","1.1.0":"2019-06-19T08:35:44.215Z","1.1.1":"2019-06-19T08:44:10.890Z","1.1.2":"2019-06-19T09:03:25.104Z","1.1.3":"2019-06-19T09:05:10.153Z","1.1.4":"2019-06-20T09:42:57.538Z","1.1.5":"2019-06-20T09:51:27.266Z","1.1.6":"2019-06-20T09:58:01.352Z","0.1.0":"2025-07-13T02:12:57.671Z","0.1.1":"2025-07-13T02:59:57.096Z","0.1.2":"2025-07-14T02:22:47.189Z","0.1.3":"2025-08-19T23:43:49.739Z","2.0.1":"2026-01-13T23:01:03.185Z","2.0.2":"2026-01-13T23:43:02.335Z","2.0.3":"2026-01-13T23:46:22.605Z"},"bugs":{"url":"https://github.com/itsandrehere/rn-selector/issues"},"author":{"name":"itsandrehere","email":"andregueva18@gmail.com","url":"https://github.com/itsandrehere"},"license":"MIT","homepage":"https://github.com/itsandrehere/rn-selector#readme","keywords":["react-native","react native","expo","selector","dropdown","select","picker","multiple select","searchable"],"repository":{"type":"git","url":"git+https://github.com/itsandrehere/rn-selector.git"},"description":"A customizable, searchable selector component for React Native and Expo with grouped configuration and TypeScript support.","maintainers":[{"name":"itsandrehere","email":"andregueva18@gmail.com"}],"readme":"# React Native Selector\r\n\r\nA customizable and feature-rich selector component for React Native with Expo support.\r\n\r\n[![npm version](https://img.shields.io/npm/v/rn-selector)](https://www.npmjs.com/package/rn-selector)\r\n\r\n---\r\n\r\n## 📖 Documentation\r\n| **V2.0 Docs** | [Old V1 Docs](README_v1.md) |\r\n\r\n---\r\n\r\n## 📚 Table of Contents\r\n\r\n- [🚨 Version 2.0 - Breaking Changes](#-version-20---breaking-changes)\r\n- [📦 Installation](#-installation)\r\n- [⚡ Quick Start](#-quick-start)\r\n- [📲 Examples](#-examples)\r\n- [✨ Features](#-features)\r\n- [🧩 API Reference](#-api-reference)\r\n  - [Core Props](#core-props)\r\n  - [`styles` configuration](#styles-deeppartialstylesconfig)\r\n  - [`searchConfig`](#searchconfig-partialsearchconfig)\r\n  - [`modalConfig`](#modalconfig-partialmodalconfig)\r\n  - [`theme`](#theme-partialthemeconfig)\r\n  - [`createConfig` (new)](#createconfig-createconfig-)\r\n  - [Custom render props](#custom-render-props)\r\n- [📦 Usage Examples](#-usage-examples)\r\n- [📋 Migration from v1.x to v2.0](#-migration-from-v1x-to-v20)\r\n- [🤝 Contributing](#-contributing)\r\n- [📄 License](#-license)\r\n\r\n---\r\n\r\n## 🚨 Version 2.0 - Breaking Changes\r\n\r\n**If you're upgrading from v1.x, please read the [Migration Guide](#-migration-from-v1x-to-v20) below.**\r\n\r\nVersion 2.0 introduces a cleaner, more organized API with grouped configuration objects. See [CHANGELOG.md](CHANGELOG.md) for complete details.\r\n\r\n> **📚 Looking for v1 docs?** If you're still using v1.x and need the old documentation, check out [README_v1.md](README_v1.md)\r\n\r\n---\r\n\r\n> ⚠️ **Version 2.0 is a breaking release.**  \r\n> This README documents **v2.x**. If you're still using **v1.x**, see the legacy docs:\r\n>\r\n> - **v2.x (current)** – You are here  \r\n> - **[v1.x Documentation](README_v1.md)** – For users still on version 1.x\r\n\r\n---\r\n\r\n## Installation\r\n\r\n```sh\r\nnpm install rn-selector@2.0.0\r\n# or\r\nyarn add rn-selector@2.0.0\r\n```\r\n\r\n## Quick Start\r\n\r\n```tsx\r\nimport React, { useState } from 'react';\r\nimport { Selector } from 'rn-selector';\r\n\r\nconst options = [\r\n  { label: 'Apple', value: 'apple' },\r\n  { label: 'Banana', value: 'banana' },\r\n  { label: 'Orange', value: 'orange', disabled: true },\r\n];\r\n\r\nexport default function App() {\r\n  const [selectedValue, setSelectedValue] = useState('');\r\n\r\n  return (\r\n    <Selector\r\n      options={options}\r\n      selectedValue={selectedValue}\r\n      onValueChange={(value) => setSelectedValue(value)}\r\n      placeholder=\"Select a fruit\"\r\n      searchConfig={{ searchable: true }}\r\n      theme={{ primaryColor: '#1976d2' }}\r\n    />\r\n  );\r\n}\r\n```\r\n\r\n## Demo\r\n\r\n\r\n[LINK DEMO](https://snack.expo.dev/@itsandrehere/react-native-selector-demo)\r\n\r\n\r\n## 📲 Examples\r\n\r\n\r\n![demo-ios](https://github.com/user-attachments/assets/74e520a8-1a26-4d6b-a971-682b6be54a29)\r\n\r\n![demo-android](https://github.com/user-attachments/assets/05d5527f-4767-46fa-b870-111418d8026d)\r\n\r\n## Features\r\n\r\n- 🔍 **Searchable**: Optional search functionality to filter options\r\n- ➕ **Create Elements**: **(v2.0)** - Create new options when search returns no results\r\n- 🎨 **Highly Customizable**: Grouped configuration objects for cleaner code\r\n- 📱 **Cross-platform**: Works on iOS, Android, and Web\r\n- ♿ **Accessible**: Built with accessibility in mind\r\n- 🚀 **TypeScript Support**: Full TypeScript support with enhanced IntelliSense\r\n- 🎯 **Expo Compatible**: Works seamlessly with Expo SDK 54+\r\n- 🔧 **Flexible**: Custom render functions for options and selected values\r\n- 🎯 **Multiple Selection**: Support for single and multiple selection modes\r\n- 📍 **Modal Positioning**: Choose between center or bottom modal positioning\r\n\r\n\r\n## API Reference\r\n\r\n### Core Props\r\n\r\n| Prop | Type | Required | Default | Description |\r\n|------|------|----------|---------|-------------|\r\n| `options` | `SelectorOption[]` | ✅ | - | Array of options. Each: `{label: string, value: any, disabled?: boolean}` |\r\n| `selectedValue` | `any` | ❌ | - | Selected value(s). For multiple selection, pass an array |\r\n| `onValueChange` | `(value: any, option: SelectorOption \\| SelectorOption[]) => void` | ✅ | - | Callback when selection changes |\r\n| `placeholder` | `string` | ❌ | `\"Select an option\"` | Placeholder text when nothing is selected |\r\n| `disabled` | `boolean` | ❌ | `false` | Disable the entire selector |\r\n| `multiple` | `boolean` | ❌ | `false` | Enable multiple selection mode |\r\n\r\n### Configuration Objects\r\n\r\n#### `styles?: DeepPartial<StylesConfig>`\r\n\r\nGroup all styling customizations in one object.\r\n\r\n| Property | Type | Description |\r\n|----------|------|-------------|\r\n| `container` | `ViewStyle` | Main wrapper container style |\r\n| `button` | `ViewStyle` | Selector button style (replaces v1 `style`) |\r\n| `dropdown` | `ViewStyle` | Dropdown modal container style |\r\n| `optionItem` | `ViewStyle` | Individual option item style |\r\n| `selectedOptionItem` | `ViewStyle` | Selected option item style |\r\n| `text` | `TextStyle` | Option and selected text style |\r\n| `placeholderText` | `TextStyle` | Placeholder text style |\r\n| `searchInput` | `TextStyle` | Search input field style |\r\n\r\n**Example:**\r\n```tsx\r\n<Selector\r\n  styles={{\r\n    container: { marginVertical: 10 },\r\n    button: { borderRadius: 12, borderColor: '#1976d2' },\r\n    dropdown: { maxHeight: 400 },\r\n    text: { fontSize: 16, fontWeight: '500' }\r\n  }}\r\n/>\r\n```\r\n\r\n#### `searchConfig?: Partial<SearchConfig>`\r\n\r\nConfigure search functionality.\r\n\r\n| Property | Type | Default | Description |\r\n|----------|------|---------|-------------|\r\n| `searchable` | `boolean` | `false` | Enable search functionality |\r\n| `placeholder` | `string` | `\"Search...\"` | Search input placeholder |\r\n| `placeholderTextColor` | `string` | `\"#a2a2a2\"` | Search placeholder color |\r\n| `noResultsText` | `string` | `\"No matches found\"` | Text when no results |\r\n\r\n**Example:**\r\n```tsx\r\n<Selector\r\n  searchConfig={{\r\n    searchable: true,\r\n    placeholder: \"Type to filter...\",\r\n    noResultsText: \"No items found\"\r\n  }}\r\n/>\r\n```\r\n\r\n#### `modalConfig?: Partial<ModalConfig>`\r\n\r\nConfigure modal behavior and appearance.\r\n\r\n| Property | Type | Default | Description |\r\n|----------|------|---------|-------------|\r\n| `position` | `'center' \\| 'bottom'` | `'center'` | Modal position |\r\n| `overlayColor` | `string` | `'rgba(0,0,0,0.5)'` | Overlay background |\r\n| `maxDropdownHeight` | `number` | `screenHeight * 0.5` | Max dropdown height |\r\n| `confirmText` | `string` | `'Done'` | Done button text (multiple mode) |\r\n\r\n**Example:**\r\n```tsx\r\n<Selector\r\n  modalConfig={{\r\n    position: \"bottom\",\r\n    overlayColor: \"rgba(0, 0, 0, 0.7)\",\r\n    maxDropdownHeight: 500,\r\n    confirmText: \"Apply Selection\"\r\n  }}\r\n/>\r\n```\r\n\r\n#### `theme?: Partial<ThemeConfig>`\r\n\r\nVisual theme customization.\r\n\r\n| Property | Type | Default | Description |\r\n|----------|------|---------|-------------|\r\n| `primaryColor` | `string` | `'#1976d2'` | Primary color for selections |\r\n| `checkIcon` | `ReactNode` | `✓` | Custom checkmark icon |\r\n| `arrowIcon` | `ReactNode` | `▼` | Custom dropdown arrow |\r\n\r\n**Example:**\r\n```tsx\r\n<Selector\r\n  theme={{\r\n    primaryColor: \"#FF5722\",\r\n    checkIcon: <Icon name=\"check\" size={16} />,\r\n    arrowIcon: <Icon name=\"chevron-down\" size={12} />\r\n  }}\r\n/>\r\n```\r\n\r\n#### `createConfig?: CreateConfig` 🆕\r\n\r\nEnable creating new options when search returns no results.\r\n\r\n| Property | Type | Required | Description |\r\n|----------|------|----------|-------------|\r\n| `enabled` | `boolean` | ✅ | Enable the feature |\r\n| `text` | `string` | ✅ | Button text |\r\n| `onPress` | `(searchTerm: string) => void` | ✅ | Callback with search term |\r\n| `style` | `ViewStyle` | ❌ | Custom button style |\r\n| `textStyle` | `TextStyle` | ❌ | Custom button text style |\r\n\r\n**Example:**\r\n```tsx\r\nconst [fruits, setFruits] = useState([\r\n  { label: 'Apple', value: 'apple' },\r\n  { label: 'Banana', value: 'banana' }\r\n]);\r\n\r\n<Selector\r\n  options={fruits}\r\n  selectedValue={selected}\r\n  onValueChange={setSelected}\r\n  searchConfig={{ searchable: true }}\r\n  createConfig={{\r\n    enabled: true,\r\n    text: \"➕ Add new fruit\",\r\n    onPress: (searchTerm) => {\r\n      const newFruit = {\r\n        label: searchTerm,\r\n        value: searchTerm.toLowerCase().replace(/\\s+/g, '-')\r\n      };\r\n      setFruits([...fruits, newFruit]);\r\n      setSelected(newFruit.value);\r\n    }\r\n  }}\r\n/>\r\n```\r\n\r\n**Behavior:**\r\n- Only appears when `searchConfig.searchable` is `true`\r\n- Only shows when there's a search term and no matching results\r\n- Modal closes automatically after `onPress` is called\r\n\r\n### Custom Render Props\r\n\r\n| Prop | Type | Description |\r\n|------|------|-------------|\r\n| `renderOption` | `(option, isSelected, onClose?) => ReactNode` | Custom option renderer |\r\n| `renderSelectedOption` | `(option, selectedOptions?) => ReactNode` | Custom selected value display |\r\n\r\n## Usage Examples\r\n\r\n### Basic Usage\r\n```tsx\r\n<Selector\r\n  options={[\r\n    { label: 'Option 1', value: '1' },\r\n    { label: 'Option 2', value: '2' },\r\n  ]}\r\n  selectedValue={selectedValue}\r\n  onValueChange={setSelectedValue}\r\n  placeholder=\"Choose an option\"\r\n/>\r\n```\r\n\r\n### With Search\r\n```tsx\r\n<Selector\r\n  options={countries}\r\n  selectedValue={selectedCountry}\r\n  onValueChange={setSelectedCountry}\r\n  searchConfig={{\r\n    searchable: true,\r\n    placeholder: \"Search countries...\",\r\n    noResultsText: \"No countries found\"\r\n  }}\r\n/>\r\n```\r\n\r\n### Multiple Selection with Bottom Modal\r\n```tsx\r\n<Selector\r\n  options={options}\r\n  selectedValue={selectedValues} // Array\r\n  onValueChange={setSelectedValues}\r\n  multiple={true}\r\n  modalConfig={{\r\n    position: \"bottom\",\r\n    confirmText: \"Apply\"\r\n  }}\r\n  theme={{\r\n    primaryColor: \"#FF5722\"\r\n  }}\r\n/>\r\n```\r\n\r\n### Custom Styling\r\n```tsx\r\n<Selector\r\n  options={options}\r\n  selectedValue={selectedValue}\r\n  onValueChange={setSelectedValue}\r\n  styles={{\r\n    container: { marginBottom: 20 },\r\n    button: {\r\n      borderRadius: 12,\r\n      borderColor: '#1976d2',\r\n      borderWidth: 2,\r\n      paddingVertical: 16\r\n    },\r\n    dropdown: {\r\n      borderRadius: 12,\r\n      maxHeight: 400\r\n    },\r\n    text: {\r\n      fontSize: 16,\r\n      fontWeight: '500'\r\n    },\r\n    placeholderText: {\r\n      color: '#aaa',\r\n      fontStyle: 'italic'\r\n    }\r\n  }}\r\n  theme={{\r\n    primaryColor: '#1976d2'\r\n  }}\r\n/>\r\n```\r\n\r\n### Create New Elements 🆕\r\n```tsx\r\nconst [fruits, setFruits] = useState([\r\n  { label: 'Apple', value: 'apple' },\r\n  { label: 'Banana', value: 'banana' }\r\n]);\r\nconst [selected, setSelected] = useState('');\r\n\r\n<Selector\r\n  options={fruits}\r\n  selectedValue={selected}\r\n  onValueChange={setSelected}\r\n  placeholder=\"Select or create a fruit\"\r\n  searchConfig={{\r\n    searchable: true,\r\n    placeholder: \"Search or type new fruit...\"\r\n  }}\r\n  createConfig={{\r\n    enabled: true,\r\n    text: \"➕ Add new fruit\",\r\n    onPress: (searchTerm) => {\r\n      const newFruit = {\r\n        label: searchTerm,\r\n        value: searchTerm.toLowerCase().replace(/\\s+/g, '-')\r\n      };\r\n      setFruits([...fruits, newFruit]);\r\n      setSelected(newFruit.value);\r\n      console.log('Created:', newFruit);\r\n    },\r\n    style: { backgroundColor: '#4CAF50' }\r\n  }}\r\n/>\r\n```\r\n\r\n### Custom Option Rendering\r\n```tsx\r\n<Selector\r\n  options={users}\r\n  selectedValue={selectedUser}\r\n  onValueChange={setSelectedUser}\r\n  renderOption={(option, isSelected, onClose) => (\r\n    <TouchableOpacity\r\n      style={{\r\n        padding: 15,\r\n        backgroundColor: isSelected ? '#e3f2fd' : 'white',\r\n        flexDirection: 'row',\r\n        alignItems: 'center',\r\n      }}\r\n      onPress={() => {\r\n        setSelectedUser(option.value);\r\n        onClose?.();\r\n      }}\r\n    >\r\n      <Image \r\n        source={{ uri: option.avatar }} \r\n        style={{ width: 32, height: 32, borderRadius: 16, marginRight: 12 }} \r\n      />\r\n      <View>\r\n        <Text style={{ fontWeight: '600' }}>{option.label}</Text>\r\n        <Text style={{ fontSize: 12, color: '#666' }}>{option.email}</Text>\r\n      </View>\r\n      {isSelected && <Icon name=\"check\" size={20} color=\"#1976d2\" />}\r\n    </TouchableOpacity>\r\n  )}\r\n/>\r\n```\r\n\r\n### Custom Selected Value Display\r\n```tsx\r\n<Selector\r\n  options={options}\r\n  selectedValue={selectedValue}\r\n  onValueChange={setSelectedValue}\r\n  multiple={true}\r\n  renderSelectedOption={(option, selectedOptions) => (\r\n    <View style={{ flexDirection: 'row', alignItems: 'center' }}>\r\n      {selectedOptions?.length > 0 ? (\r\n        <>\r\n          <Text style={{ flex: 1 }}>\r\n            {selectedOptions.map(opt => opt.label).join(', ')}\r\n          </Text>\r\n          <Badge count={selectedOptions.length} />\r\n        </>\r\n      ) : (\r\n        <Text style={{ color: '#999' }}>Select items</Text>\r\n      )}\r\n    </View>\r\n  )}\r\n/>\r\n```\r\n\r\n## 📋 Migration from v1.x to v2.0\r\n\r\n### Step-by-Step Guide\r\n\r\n**1. Update the package:**\r\n```bash\r\nnpm install rn-selector@2.0.0\r\n# or\r\nyarn add rn-selector@2.0.0\r\n```\r\n\r\n**2. Refactor style props into `styles` object:**\r\n\r\n```tsx\r\n// ❌ Before (v1.x)\r\n<Selector\r\n  style={{ borderRadius: 12 }}\r\n  containerStyle={{ margin: 10 }}\r\n  dropdownStyle={{ maxHeight: 400 }}\r\n  optionStyle={{ padding: 20 }}\r\n  selectedOptionStyle={{ backgroundColor: '#f0f0f0' }}\r\n  textStyle={{ fontSize: 16 }}\r\n  placeholderTextStyle={{ color: '#aaa' }}\r\n  searchInputStyle={{ borderRadius: 8 }}\r\n/>\r\n\r\n// ✅ After (v2.0)\r\n<Selector\r\n  styles={{\r\n    button: { borderRadius: 12 },\r\n    container: { margin: 10 },\r\n    dropdown: { maxHeight: 400 },\r\n    optionItem: { padding: 20 },\r\n    selectedOptionItem: { backgroundColor: '#f0f0f0' },\r\n    text: { fontSize: 16 },\r\n    placeholderText: { color: '#aaa' },\r\n    searchInput: { borderRadius: 8 }\r\n  }}\r\n/>\r\n```\r\n\r\n**3. Group search props into `searchConfig`:**\r\n\r\n```tsx\r\n// ❌ Before (v1.x)\r\n<Selector\r\n  searchable={true}\r\n  searchPlaceholder=\"Search...\"\r\n  placeholderSearchTextColor=\"#a2a2a2\"\r\n  noResultsText=\"Nothing found\"\r\n/>\r\n\r\n// ✅ After (v2.0)\r\n<Selector\r\n  searchConfig={{\r\n    searchable: true,\r\n    placeholder: \"Search...\",\r\n    placeholderTextColor: \"#a2a2a2\",\r\n    noResultsText: \"Nothing found\"\r\n  }}\r\n/>\r\n```\r\n\r\n**4. Group modal props into `modalConfig`:**\r\n\r\n```tsx\r\n// ❌ Before (v1.x)\r\n<Selector\r\n  modalPosition=\"bottom\"\r\n  modalBackgroundColor=\"rgba(0, 0, 0, 0.7)\"\r\n  maxHeight={500}\r\n  doneButtonText=\"Apply\"\r\n/>\r\n\r\n// ✅ After (v2.0)\r\n<Selector\r\n  modalConfig={{\r\n    position: \"bottom\",\r\n    overlayColor: \"rgba(0, 0, 0, 0.7)\",\r\n    maxDropdownHeight: 500,\r\n    confirmText: \"Apply\"\r\n  }}\r\n/>\r\n```\r\n\r\n**5. Group theme props into `theme`:**\r\n\r\n```tsx\r\n// ❌ Before (v1.x)\r\n<Selector\r\n  primaryColor=\"#FF5722\"\r\n  iconCheck={<CheckIcon />}\r\n  customArrow={<ArrowIcon />}\r\n/>\r\n\r\n// ✅ After (v2.0)\r\n<Selector\r\n  theme={{\r\n    primaryColor: \"#FF5722\",\r\n    checkIcon: <CheckIcon />,\r\n    arrowIcon: <ArrowIcon />\r\n  }}\r\n/>\r\n```\r\n\r\n**6. Complete migration example:**\r\n\r\n```tsx\r\n// ❌ Before (v1.x)\r\n<Selector\r\n  options={options}\r\n  selectedValue={selected}\r\n  onValueChange={setSelected}\r\n  placeholder=\"Choose\"\r\n  searchable={true}\r\n  searchPlaceholder=\"Filter...\"\r\n  modalPosition=\"bottom\"\r\n  primaryColor=\"#1976d2\"\r\n  style={{ borderRadius: 8 }}\r\n  containerStyle={{ marginBottom: 20 }}\r\n  textStyle={{ fontSize: 16 }}\r\n  doneButtonText=\"Done\"\r\n/>\r\n\r\n// ✅ After (v2.0)\r\n<Selector\r\n  options={options}\r\n  selectedValue={selected}\r\n  onValueChange={setSelected}\r\n  placeholder=\"Choose\"\r\n  searchConfig={{\r\n    searchable: true,\r\n    placeholder: \"Filter...\"\r\n  }}\r\n  modalConfig={{\r\n    position: \"bottom\",\r\n    confirmText: \"Done\"\r\n  }}\r\n  theme={{\r\n    primaryColor: \"#1976d2\"\r\n  }}\r\n  styles={{\r\n    button: { borderRadius: 8 },\r\n    container: { marginBottom: 20 },\r\n    text: { fontSize: 16 }\r\n  }}\r\n/>\r\n```\r\n\r\n### Quick Reference: v1 → v2 Prop Mapping\r\n\r\n| v1 Prop | v2 Equivalent |\r\n|---------|---------------|\r\n| `searchable` | `searchConfig.searchable` |\r\n| `searchPlaceholder` | `searchConfig.placeholder` |\r\n| `placeholderSearchTextColor` | `searchConfig.placeholderTextColor` |\r\n| `noResultsText` | `searchConfig.noResultsText` |\r\n| `modalPosition` | `modalConfig.position` |\r\n| `modalBackgroundColor` | `modalConfig.overlayColor` |\r\n| `maxHeight` | `modalConfig.maxDropdownHeight` |\r\n| `doneButtonText` | `modalConfig.confirmText` |\r\n| `primaryColor` | `theme.primaryColor` |\r\n| `iconCheck` | `theme.checkIcon` |\r\n| `customArrow` | `theme.arrowIcon` |\r\n| `style` | `styles.button` |\r\n| `containerStyle` | `styles.container` |\r\n| `dropdownStyle` | `styles.dropdown` |\r\n| `optionStyle` | `styles.optionItem` |\r\n| `selectedOptionStyle` | `styles.selectedOptionItem` |\r\n| `textStyle` | `styles.text` |\r\n| `placeholderTextStyle` | `styles.placeholderText` |\r\n| `searchInputStyle` | `styles.searchInput` |\r\n\r\n\r\n## Contributing\r\n\r\nSee the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.\r\n\r\n## License\r\n\r\nMIT\r\n\r\n---\r\n\r\nMade with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)\r\n\r\n## 💡 Why `rn-selector`?\r\n\r\n- **Built for real apps** – Handles single and multiple selection, search, custom rendering and theming without getting in your way.\r\n- **Clean, grouped API** – Configuration lives in `styles`, `theme`, `modalConfig`, `searchConfig`, and `createConfig`, not in a long list of flat props.\r\n- **Expo & RN friendly** – Works out of the box with React Native CLI and Expo projects (including SDK 54+).\r\n- **TypeScript-first** – Strong types and IntelliSense make it obvious what each prop does.\r\n- **Highly customizable** – Override layout, colors, icons, and option rendering to match any design system.\r\n- **Create-as-you-type** – Let users add new options when search returns no results, with full control over the creation logic.\r\n- **Small but powerful** – Focused on one job (selection) and does it well, without pulling in heavy native dependencies.\r\n","readmeFilename":"README.md"}