{"_id":"@hashicorp/react-search","_rev":"135-08d8a90e5d639f73543e442a9fe4b3c7","name":"@hashicorp/react-search","dist-tags":{"next":"5.1.2-alpha.28","canary":"6.6.0-canary-20240624195037","latest":"6.6.0"},"versions":{"0.0.2":{"name":"@hashicorp/react-search","version":"0.0.2","license":"MPL-2.0","_id":"@hashicorp/react-search@0.0.2","maintainers":[{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"npm.je@mailhero.io"}],"dist":{"shasum":"95aad18681de1ab8e6f1beae25a7ba00ab758c4b","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.0.2.tgz","fileCount":5,"integrity":"sha512-YwfjvWHNSGEti7+OBL6kT9SddQm3na4xorMpjxGrNRxQ49B8PpKXXdxeeMWmvwuGi/Ny3tWNSfKbqHuMq16Hvg==","signatures":[{"sig":"MEYCIQD80o46Iq6qqjixX6wyOSF2FywRTzZCvWD4mnxKVfh4MQIhANH4MqYKMd2MIBpaaTHG7hm4jOa5BeohBe0FdpfapFNx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRuHWCRA9TVsSAnZWagAAx0kP/2kJCWUj1oUnjEhRShZo\nGvW1VjLzzj7OJUTvB2hrtHaEcGmUIfBanosHolTsb25TsXFiOpIsaTGDbg1e\nnZEiKKJtHZtpUHbKe7hRwSyzJPJk691DEYR/Qi/rIDqu7IWYjg1VcMwluodB\nOQn7+22zkgNPQjbgZCWz7/NMdTHv3TP8xCLvAZjcw3LJyCWx19jxvCGXxJZP\ntYqOkd/zf66BrevWEZBYYdr6Rk5TlXxgqppfD4cGEYaoUaJqvGVEGCvOoy8+\nhjoIhg5zbX2RmVFyihYETKdbh88NrjJtcOhaYcvqmHtzktAcsjB6lrjl/qaf\n2bzWu/H3pntr/9LEAtSm6WVXxGj4ApvWG0qtg3nv/oTyNdMJHzQl/fZ6pqqL\n+CzIM7urbJH04xyD1VeFxXMGOsF9a+8et5S0dOkgNi/aSbmHwh7iw1OIDb7X\nqdJ5gc0PHdpqHyYAPHZwc+x/pcnLmvnkIFqZF+C363zR7zMKAi45PwqfyPXm\nlULGVEzC1LMHHBEOs+WkKao4rPlYnvFkdwPpPfzWnfQCiY5XTTzeM2ErGuqn\nSM4EzDLlYMBd/OzsS+/anOXhiKBFwtCDhqvs+GWQSXhXuTt3/3kVEeuwVAIh\n5+9bRUkGcTraYbumzfC9jATmjfT1afGERaxT6TEtMdds1EN65E9VNhEAavxW\nF758\r\n=Go9B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"fe3ee38bd56f9227d8d5db3cadc94e7396ba8fee","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"glob":"^7.1.6","react":"^16.9.0","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","unist-util-visit":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.0.2_1598480854217_0.8893035696783937","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@hashicorp/react-search","version":"0.0.3","license":"MPL-2.0","_id":"@hashicorp/react-search@0.0.3","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"fecde3157c3ee7f90777c21ce0ea83107b829f22","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.0.3.tgz","fileCount":5,"integrity":"sha512-YvtQuaBLCqvlpEd5HZfuqH0AU25E1bRGnfQLj+l76w+TN5p+HEgrOMm/PGR5EEG25BVr387ZGnVXTV2MPoXMvA==","signatures":[{"sig":"MEYCIQC/4MPP3xrEpr7gmZ8FgXIrMiNWQXaQrIo27xzDyOozggIhAK1uO0L/qiRLeGd5E2TBbXKiYkDwMSvYzTTa2T5S2Ehh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRuhtCRA9TVsSAnZWagAATTIP/jWNw1V6M3hsj4uSEwcj\ncUrWt22mZ+MQkYUi5g+a4/AdfdK21kJ5+Vrldxt1Rc1jFshbYivgLktTIKfL\nu5dgRvF5EdIbhFDozKC+KAva0oXBwssWzUG6qP8BQnavHzUxotSn6Ob0Vexr\nNt0P8nf9ATqLh/RdZ6LO7dEyZ3b0OF6rIqUm1sLuk9UqFgvyapQX/o9WVPCr\nrk66ydMQSFIjKWl5mqj1EUh5SDSS/Al+ylWpxZ8b6TVpsjfJTvjomMhBFL/F\nl3m2qhlBDRuV8UO9f3iSqIBhkGLM2X44uWkwwWhAvvd0jijDHjHJk5AyHJpH\njJqsrH2RuWXYJtsgteXr7YwkWo5XeVGB9VFWehLGwyBFklEkc/OsPEL3vaZ9\nSjWESQ3kRnmItf+9G4CpfXSEy3+pGr39sC7B7wnHT0rJWxissePk7ptVHG2c\nAhBOzO43LCCKQuYjCb/vl59k9VdbqWFpC8YAM1Uf5wWmkEHyKq9oZxOM6KmK\nh8WUh9mUeT3NwA7T4Z7pqVcJVtyY3zw1tkX/Lpiah8ZiabaNNkcT7O5UD8xr\nCgjChI6cZeP6EgTs2DKtsn1xgsIpRaRr72Cn9tJbsYRmwsMa/3hfsyEiPvch\n3vZwzsYZckJ3RNJJYFjQUZVQJAUBSQM0wpdUAO3R/TRaKdHSuTW+sg7yi3Py\n9/yi\r\n=aSZR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"02dd9d9a8e91e84aece50793d6eb3e8542456dad","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"glob":"^7.1.6","react":"^16.9.0","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","unist-util-visit":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.0.3_1598482541387_0.8465618010313083","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@hashicorp/react-search","version":"0.0.4","license":"MPL-2.0","_id":"@hashicorp/react-search@0.0.4","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"bbe6b452896922a99ef31dbb1ececab6fe22ad01","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.0.4.tgz","fileCount":5,"integrity":"sha512-9c17YMl/2ne2tiufgHaULPh7cYeo7kh4V4/KN1cgxFURLaoM7zGtqkrvx1/7TyjRmjgSdVkFSzMaxeZgoXGrcA==","signatures":[{"sig":"MEYCIQDh6gSYf73Yk7HTtYemjhmmNeU58gDY6X5X0Rg4CWxBpAIhAJm6rGsqrVn98Uhr9G2LCE22jiE6pmECDB1mSuw+pT5d","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRvFzCRA9TVsSAnZWagAAuusQAIFWWtzpXZ+WSv71GsOb\nOmArfFLnPD28fkx219adLAbyApD2FUiHViRoTv+sBLIsIpHNcLxu8ULC+dz1\nBe0A+pAYBaxR6F7IozNJAWq/wL1f1aZylvCnJsiAFgxPRBbPBCQU2eAhZgBl\nEN/04CIdg0y7DWHSAqyM26vrOFn3pDROVDeFcQ6FNwx68AroIGRxHbKlvrBU\nrDgS9wjJB7jRrUpUDE+rPf0DYsVjW2ub2G3Z8zLVS/JiahHimcEONz353nKH\nVvvKnOmELLargwPi+aCpC5y2sZSj7ue8RZp3R54/K374HKZVXJ6d8KP4FPWK\nhfN7xVrQU8W0UoYfzUt49HTt7r3DmaUBUlsLZiJ7fCQ70QmNB5ZJFXphzrrd\nyFzHj3juHbP2MZgyvdINhnGXl3ed1nHRCu9A4nxpIPUZSsAcsufO3JqOG+ht\nUPmQkd1xyhvfTg6Iw3SzDz0Gd2ijJhcYAafruH1RSp7ZOmrHDqrfaX7RYTC4\n8/u5qqsc9hPgB1cLOsF9PJEVbLsjShedJ4KWT/fnXIL7Y3NnVGDWP+DHZfi8\nW9RaA05v8H7vU+ijcESuTVkM2nO7TWBfejB5+Mj79IfGbPwtHyUODjoVtvgw\nzmSiphbtXnmhHFqd1tsxkS9zClsGJoZscRnmejpg3HRBw8kxIhtr277pxwCB\nbsig\r\n=5FMt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"34b6d50678183511c5b250b5e65b03f2e43b1b8d","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.0.4_1598484850788_0.387062078993303","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@hashicorp/react-search","version":"0.0.5","license":"MPL-2.0","_id":"@hashicorp/react-search@0.0.5","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"1b2528455643767b2e752adb9708c81364de9cd8","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.0.5.tgz","fileCount":5,"integrity":"sha512-+dmUOHArwYZv/saSXjAhyqNAMS6D7V+Fltp8xQpmDjeZTw8cKajz/6LQRhkkjhHDY7yRgWErrvg4I9xU1+Z6mg==","signatures":[{"sig":"MEQCIC4fj38YUV6xClFGTGQKML17URl0/D1N3/aiMM+E+OiqAiAGFSb0Rb9yiQtsQIwlIEXS6Iz9I9f1X5yaBVQKhktxOg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRvjcCRA9TVsSAnZWagAAyPAP/0VdTnzhpNqlzcHtumNg\nbJfysWv1v8QGBdNkYy0zKgYjQhTCRVpNZ9Ee9/STDT6iFefWTwX7sTrCrWG9\n6ZGi0MCVdqyYRA9Is1+f8KOZLZsQaqy7ItJENTT9l8gl8/gC2hiRg+uHIk5B\n4UXAVn8Pb9+/ls4GdYZ9FXlQpKZVeXtGYGSzsRq24EtTrKyBzP1XzVe75wpt\nGQdM0fFakxhebHiQyA3Yc4JdUdIqAwlCnGl41Ojj6E4wrsIpri3KtM0Ss4bR\nMBZm7LmeNrfZvU39jyNmrfq8GXvB4eNJuKHzpKXBAUMLYPjsMEVXoyzpWayr\nibjBVtSELyV+VKLVbqF1jEXouvQ3E5zYTPprYYHCvt9rSIXCoTp3J6rrd/oM\npMp67jo4qyTXEqYuLyV7Ftx0DhoFW8TIb9eCHaNevyfm7EJeLWdWsMyxt9+P\naDX49hJe1n1S3tkEP8HZ6ZDK+sgmewSpCK5rOmWYYd5BQIplhuZ2xuXx8VxX\nmCHrbB47jG/j4gTI6GOcdyvbdNhgs7sX6uMX/xv47OZF2G08VR0yxTZTHEKe\nVGvIRRp/bFBAJyj5EhG15BqtIyZuRyJ7qDZBuM+wXjV7SDfIbpcairRG+QvI\nuGzrnru7S85Gnd5TJTTMMNJntWapxWp1HkMqtgMYJB78d6EFJSTaNgLY9tE5\n5wQJ\r\n=o/Qb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"6642c6cc8020bd76ae3e2db3a3ecbf9d5877ce63","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.0.5_1598486747986_0.8968837682938509","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@hashicorp/react-search","version":"0.0.6","license":"MPL-2.0","_id":"@hashicorp/react-search@0.0.6","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"1d5e8dafb6f1ce0639ea797a3104f6b81f4bc261","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.0.6.tgz","fileCount":5,"integrity":"sha512-qH5K8xed4/gPQ5ytor8wgsrx+J72JY/79Zg4FsocUs827SO9/WVYAbXjMS2wXFLXDFokB9mQnlbPNt/UpHz+GA==","signatures":[{"sig":"MEUCIQDQTK2K8daLQZUPmqB0+kY/mTUAd/ig9FXZhy44MwjVUgIgcUYNWJ+S2eUJIKdi+8PoGDitu0GrrTtWOZnZ01s9590=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSHDyCRA9TVsSAnZWagAA4h0QAISVz1A0/h88CeKwfxxW\n0kJPI4/4sbgBfprnAmBxrRNBBGKZxnnv6PvTqnBiGOXswQySmCGgokogxD+5\nFTlsVvsHTe8Jvpzlyt7M01u79Bb1hzPE5LHZ2INQdZjQuTsIef2XeEADDh5j\nI9ITCNYimlPofrKilXqS1dk42F9f3EXSmkrqyJRt0LGkV/j3sm1i/hQLswua\naWiFGty3w0ym9z66wDyo8glrTAKe/GP+PKTWfT6sQ9kxu3zTIVGTECkebFLT\nD0MZhVsAZSP41YatL+EMG421JlXtmCMP7VNBylr+gE5Sl8PQ/Tpb3A8XdaRJ\nWdo1R+2Tz3jtBt03CrR25JJoIOaySxMLJrtt6DCUNqg5pXqcLgOnP4/yh331\ntUNLRqsSNP2B4IZ7xMtYmkaxTr74X5vv8CNDDEKNg+N/WGk2dO2mRKwdv8ru\nrlSxvCZHFBZ86tvxX13hj/arke8w8wm+9X2vnNPSv16CMxrBxS1ht/Urtrus\nAXCz8UDxUv9IlkJXo3rIrSRRIPyF7WRDqHlW/dy7XaOmcCWUpNBtji7giC5z\n4detUiYpXRQV9B6wtKWBWydKTKkTYcNKhpWY5Pl7Kd8hHTUM8leEOEF32Pdx\ns31DxL2I01ExCOPghj27CmJsQHcxRMfX/vacf07HlNviNEkvzVxgsYONHe1I\n9riR\r\n=6fvN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"f0b24cd7447946407692abf918e766d99b80b18c","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.0.6_1598583025586_0.10623160620452965","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@hashicorp/react-search","version":"0.0.7","license":"MPL-2.0","_id":"@hashicorp/react-search@0.0.7","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"5f3d0d9503e8ce1a013241c58275a6dda5c269a7","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.0.7.tgz","fileCount":5,"integrity":"sha512-RtcEYPlw1xREWNNEyrR034ZFEK8/UCL2sVTW+Ae20V/J7RIqj81taP+eimm5AdK7UkkHc3TRbjOld+gSc3/z5A==","signatures":[{"sig":"MEYCIQDl2fLoDVpfgibzOjhuda3l1ns0UlVgnF2Zn47FKyi/zgIhAKvUU/xGuPsIsRJlKO1VjFrNSapFM5HKN6oUnoJmXbyP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53025,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSQ8hCRA9TVsSAnZWagAAQQIQAIx69204ztDl0FCq3W88\nCpQlv/GlpZ7WfhCcVh1uOnmbA8eqGPUYzE7ifK5p49f2HZzLsGN3W6b8ocEg\nXQ4rIpoiYO2ppW5zvf2hAC20Rz2sHiWgmFlsiJtU1E11ZCGAKcRhSHYWRZOe\nTHVLoDU1BE08ZWgTPCZUbvJ9Id/TR2vdgfIbVnl4YoZhIr/DlvylsJwxtVuI\nhwni5oPnuvQU//HV9rwPObjr+TxJyoRPxEYFiobCDqqXXou0W62nUEtNSyUn\nFmoXxqRhlp1O0rSG0WlnISUZ9OQeVQf9yfwPhcSODLUMZpkPlUtMDCiWuA9W\nUEkue9oosXpcRi9B8ieHDrFdf8t1H20p04ok8rlqMWCwtOAjGZim63dCZrI/\netANCrcZEa4IWBZ8EuGXKC+aUogsjS3Sw3ZNAow0clcP5InZgM6Scz/oEWgV\n392pTVB/2iCZpZ56OawYxTQcLmTrCfGdG3dESbiLH/8DnvR+dA5yUtmdR1Sa\nCniiPnAXUAcz2cXRq7SD0tOAU79GEBkg+Kk1gD0V9wOn0CAdGuGW36+Zonxi\nqBr+N94i6RRgNvaEF/0Tq9HxFoTuiRSd2x0mWizKxkeJE/1gjWQytsHbkxH1\nbfV2zsJIQ3LxEWg7AnkLH3xsrkuadVX+gBjGD+v82ug//lhGBVephz0vTAc2\n+Bp+\r\n=8All\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"953f09dc8488a91e0af2fe52b8b83562e8ad1dad","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.0.7_1598623519273_0.07757815255640543","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@hashicorp/react-search","version":"0.1.0","license":"MPL-2.0","_id":"@hashicorp/react-search@0.1.0","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"98a2407c430016efbd903dc9852a3058a9269c90","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.1.0.tgz","fileCount":5,"integrity":"sha512-E8n8nmrSXbKEnQT+9PnfMLB7i4Tn20ug8iYpGEX0ivbbEldK55vhGPQokK5LKEx256BARmqt2Djt7tmqzq3/HQ==","signatures":[{"sig":"MEQCIFLjGiTKPqGaeH4CrJSiVwr/653iy6Kn9wY/Qw20QzbMAiB6L0NSCjBfOhmHvcfznsKthDGIfKtHD/fLS8IVqvJS8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSRk0CRA9TVsSAnZWagAAZaAP/10g1bdTUFM5iUf/ivdW\npZTZvQ77oYk1cBzA/vejkUm++IXdiGtMlRTCBl714zBdSxRjEPVmPTCBlp/Y\nlbXNqI4vyL7aiu6sZesyS3GMYGtW2bgjPw3BH8dNAcOl/uKP1DOIyaQPgf3w\nlvghpmJo2MCiwwn3MjK5HK+SuZVBuVxf1KBJB4ze/jEarrcHMmzNqvNMyYDm\nuygod+T9ia+SX34pshcVr+JJlR1LOHUOZBI2DY6sfBvBKww8CgMA0qiAKSc+\n/o139BAicX0N9OMPmcD0LEr6Vj2xN4TQKSepXWMKWwjUyUyGq/o5NyncyLhQ\nQ1CHTrTrNmI2gk1gY7trHXeg6T7znkty/q+SdC/EwRegFF31pwslFDSury6c\nL3Rc/Q1LLeHaW29SQZmzLIBVGrGCRuNNaeKNJBAxJU39VN5AklffwDToiRd+\nwY9lYdnKpZ91VUbHfWRVQ3/0N+ayGaOfWYIXG9oXoLXGZqlEsr+TpUfwaW9q\nRL3kqcjua/PjAknNV83SGYLAzOTt5sJDwEenhckJzHfi/8qeVfpmyEs0/2OB\nfwBNTkdiMFVEUj3y2QKX89wbmxKdBhlWOXaDaOMd3xTWyizOTctiG31NnvUU\nIOtLiRbB7YS5UxMq0c5kJ1Q0DEVmlk0HobaSfwkqCZahVV0sj5seE8jhRVgS\n2IfB\r\n=6Gau\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"a5b3acbe26acdb5ebfeb011fcdcccf7f2c4f0e88","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.1.0_1598626099750_0.9737267267660161","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"@hashicorp/react-search","version":"0.1.1","license":"MPL-2.0","_id":"@hashicorp/react-search@0.1.1","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"c0b2053f83c244b9a374e0e835d752fe453091ea","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-0.1.1.tgz","fileCount":5,"integrity":"sha512-mV/v2QLP2UL6Tm5iBkbLclR7Vhc5shx1TP8Nu9QCTWtaWAG4d3RVmXTeACA2vntaAA3qloWasXcy67l2Cds9cw==","signatures":[{"sig":"MEUCIQCHKAFTibW3tTibaRq5ego77FTJD4ptoUjxjDWcjIH0ewIgLUpYv25H17u/vtH4Md/9ynmPPJ6YdTBuSdguw6LIm8M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53625,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSTEwCRA9TVsSAnZWagAA1REP/3dPHRy7qjrtN8FgBq9/\nO+19CE87a0EfhClnbnM/dSvMbad/L986TWqrqQyzqskRF+eA82buCy3vS7yl\nolb4EQp9YskbIXf8PWy6dFBs0ZYn2FALJCqfvzOZTImhlMrIwtLs9XAgJ178\ngd4qtqiz7WMFWuPzRsh8O8J1MMyIMf6qe0LVQ1Sq9Nh65ZLlsPOhPUUawvPw\nI/hyr+3tKWhMCor+f1Mqf6bAfCYzsPIDJD7cgm1FpW+e4x7e9t8BmK2PMfnF\nGoyhaGREFDR/PbtHFRAQRrd+uT9ZoDQw3Bx1ZARnED79Rt+ZdbWtn0RFIGt2\nv/ihpOSy9q3/0oTCBGbL1WSAirVBEp53hZW4UigUTHUakg1JhWvYC2AqHgwL\nVbykplhPPuFUrWcWCrbLhvX80fT4O1UJNKu684MnM4QhO2+LAQ7Q0dIp0IaO\nKeL4EeeqLaEvMB36P+KPV+/TJkWwSzxGU0UufhunB6ge+Po/GA1dRQKg9HT+\nFQuI5bv17tBfhIJrA7kiBhjrv+m7PuUPHyMf7zZTSa6jx2WiZ3vODUIWrigX\nvog8p7RNefIpV25u4/gGcHvfB9BclRHAZp2iFJZTnsVe+pZKvWSZuZxn4Tbu\nG3M1jokDJDMwq20OPi6Xt+NxfVth6Ty6woVuav/v5e6UMIUX8NfQHIr49MVt\nroFx\r\n=fuTi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"e7e54ecc5b8c4c08c229569e6cac219be7cc7e59","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"algoliasearch":"^4.4.0","search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_0.1.1_1598632239728_0.9015564789756805","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@hashicorp/react-search","version":"1.0.0","license":"MPL-2.0","_id":"@hashicorp/react-search@1.0.0","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"0cf9d4a29f97f5105bbbc45928f6bfde09bd75cb","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-1.0.0.tgz","fileCount":5,"integrity":"sha512-qkeQJPVskifQuVk1Dw4Jf6VQGBV7tYqL92CdEh46CP2rsxe0yxEr5tx9pk48UytMRIr6DmdX7l0d7kfPgpACkA==","signatures":[{"sig":"MEYCIQCrtENSgZFy+M6YACtqfph7rQSlhhWzHjTub4tAc0Lx1wIhAJ5C7ie0RoUtAD+eV0LqjcFLSxGWSYMHXO7MwDtlZhJo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSU4HCRA9TVsSAnZWagAAWR0QAJexqvJWyLtd/SY+uB0x\nki9B+nUaA3Jj/n5salfiUBbxnQxwi+qjx2Qw4ouvokluMDzz8JjQi+B698Nc\nDPQmqhbgboP1ih5hW5F2tCeiHBxrhdl8m1xNr/Jtd0pS5C21Y1mUdT+Fisih\n/umIagOk1z2KzlN4DEZCS30IssiufKqs4G9cUa5e/zXssYOWwvL1VH0hQTlj\nBsAlht/Xzc2emcY35j2G3xgopB3NO2wCCAmAXKMv9zaCSGETYJ7Fzp2AUu9g\nTS0fau4PfcsK1l//ot2Q43WqIZ9PSMJrNw4m0yt9f+Y5Mb4AjVZKuyayUmSf\neCKirljijwp4gZcXRvac/bL8sKOWCrcM4S6Mq1gLe8T0hb3j4iJHKKehFVm2\nuC15RmGRq/6tkY/zHcZ0Wt3Pj95NTeCcFy1EwlCSEVRgMjovN86qO6Ce80lq\nfsm7AwSEmVDFGJQfAk7LkD7FD/sPiH7jDjbjBtjdEoA2RQ9iePl0X3nuUn0t\nWweVWikXL9Nk16huKogJOVciXeE4tmTfs2wLMqfYDHui49oxTNou1KpDxd/J\nNDDY7SK77VLrIJEF/fsITyLlpRu/1e1VhVGSz0b+ETf9glBprv5ysP59MJCD\ngg3fs3izhIXigzuN11yZcu5qWh1O6n9B/8x24GNaASh1KuH9e5ISD+Z35mj9\nyTyg\r\n=gGbf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"c502c54f7e9291195070288dc914cd297dffe53e","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0","algoliasearch":"^4.4.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_1.0.0_1598639622908_0.1616151877301626","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@hashicorp/react-search","version":"1.0.1","license":"MPL-2.0","_id":"@hashicorp/react-search@1.0.1","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"cdf0a7ca038aeb72c844bb2aab6cb724664be6bb","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-1.0.1.tgz","fileCount":5,"integrity":"sha512-VpZ69UvC0Q9HSqDdPV8DS6Yw+Ugw/ihuUTbxyhv0DOyMyB0GnVhuBZnRcT54SAGbdJ6M3Z6evxe7MeMu3wNJig==","signatures":[{"sig":"MEQCIGrISmtWAM2K9mh0UXnsUkVU6i6mqZ1j8p4jxr1deBXuAiARJzrhao8GpziK+/GlLbMA+yR6t0HzBZpSn/E/zv9SzQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfSXgjCRA9TVsSAnZWagAANF8P/0tO7+mOLoL7JZbHvtHe\nrmiLMp75skUBCYSHnPfolrqVdO5Ix/U7cAB/QWC4EoqS+ZJ4nER4Vgvhpj6u\nv32CgFWG2epdv0yxMDwTVSDysDv2SsEV/6KPqW8MqrBaChIc0vX4KcOVSRda\n0JH0mzJkPWdxQyQ6PLMm94DhYkcM2XXdWuhNIgnQ0QGj8objx6QdL0QnR2ji\nClEpMdNDQtTAxPWtkGeq6JPqIYHNndrFjdYe2v5wVNSkHItNbtyc8xxPCuJi\ndrfhngAoMi7dxpAQ99ahgb8Gvw+L4UfTHZ+iv/vjXms1C4OumOMrSPFjAyni\n6Ve1e0fIjnxePzsaZjXx7GCe/7K6f0P5grbIJ3e3kID3XKzcGE60i+cK78OY\ne0jfSOmrwGyIxecWet5UAC+KWb8HasHyTm+wbFnN9WwVT6u5ZsyssIdSPamS\nYI/OGRV/ThhqdR3RASBeHb7ez1IHiH+K/lkpVFHhadoTcbYGgfHMkpWW2fZm\n04RX3FIspSFuckQtdUtBjBbPtVN4vQqivqwV3QOVx3eBcOy6tHR93PNUSlsU\n7YW7poRPJjfh7RezMGcZEsa7Uh/VpxXGzVBLbFEra0Y/pedQlb7f61etemdT\nUQcJREmKw24yybPzDGicorvfyKyZYQDW1j8mDUMjgaP/fO5o1V9pc5Qs0NDx\nkKpE\r\n=HMJT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"189994d24816c96f3051de5b6024ddbfc6bb1b64","_npmUser":{"name":"pruett","email":"pruett.kevin@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.16.2+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.16.2","dependencies":{"search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0","algoliasearch":"^4.4.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_1.0.1_1598650403326_0.6494461414703523","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@hashicorp/react-search","version":"2.0.0","license":"MPL-2.0","_id":"@hashicorp/react-search@2.0.0","maintainers":[{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"jescalan","email":"npm.je@mailhero.io"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"zchsh","email":"zach.shilton@gmail.com"}],"dist":{"shasum":"2ec16505cd44be4d2312c4f4226c3028e27aece6","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.0.0.tgz","fileCount":5,"integrity":"sha512-nMH0pUPNEOEcuIcQ/NRiqlZOXJkK7XnIs+KcwFoRxX6UyWSUUkhHPUU+TGy4Wgs8T65tFl5y4Ksnv+za+3CdPQ==","signatures":[{"sig":"MEUCIQCq4wW5ZKmJ86NINtqtpT0VyT0poBInjKjiECoiewqalwIgIgarhIoX+7Hz/KHNyZTbOjCKNxpTPRfJ+VH6Q7y73pQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfT9KaCRA9TVsSAnZWagAAW6UP/2Pm8H8BpRO9AuOmFADR\n8t5IGMh7MojKoQwhjAj68rwFXYvL7jPGIYLUo2O96vga0cKXTLRKBVmTTjXo\neVvUk/KaN/kXTvCH+YE8PKZTLWYrVQopwOiW6klqThk/GX5eR2DA0Ki10zqs\nFSYh9vZJt/nNre/vpWrILzTzUskGCmv5OIi22BqiUzf7NyEXzGq/CMPti110\n81/NTqOklNTJCay7LFh0o0BMJhRCsaD9MGwE5QOHUXcwf2pmNdg3TB7X1v+I\nUs/DRU/ygtKMPNqf6BF9c59G63Q1CVb9WRDLEZiYZ8gon7RIiKLjenYBsnme\nydP5lkG/cJabQYweikzOETLIWwnzN9biNC9uJLdve7WyDFmtQu14kwUvyTbG\n25blTMS8yfp6RRx7NHKkbfEGfXrHIwhkoxfv43IjeCctqB8cxggz25IP1C0b\n2ddiBlo/mppWP2WYFM0kwQ/2oX71LFY39eiE86BywbCtA4CRncpE+R5co+hV\ntrmShAZKNIYkwVj8BOzKLh5VTFHUwgM4rQXjzvbEqc/4iPpIDNhBySyP5+PG\nENh1V8y/wI2d5kLB2NsRiN2oycIRmscofzq5NbWxHfjthDcdZlz4vzPsLckd\nxjVScS4qNot9SDbIxgljtBimJgOEDSukA14+OnlQsCRt6YuCaBpxwS27TWwm\nQf9q\r\n=ch+I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"d4424a8c980465f4bf411707efa4e8a733a9a124","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"search-insights":"^1.6.0","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0","algoliasearch":"^4.4.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_2.0.0_1599066778061_0.8571457240136255","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@hashicorp/react-search","version":"2.1.0","license":"MPL-2.0","_id":"@hashicorp/react-search@2.1.0","maintainers":[{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"}],"dist":{"shasum":"5b878d4d5a2032e898837be4ca5fd6307b2ded4e","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.1.0.tgz","fileCount":6,"integrity":"sha512-vaTht+2G9ipsVyusK3b3TtUpuy9ccsxj3NMSWXJyGsoT39K1Oovb8aLiIlbUU5Ll72KEi5yq5OS3WAJDdSqW+g==","signatures":[{"sig":"MEQCIFvg7VrBwtVrUNnGpS5bYp1qmX/QW8prbmecIFGBBO4dAiAS+ckmLxACq5b316sZHEd8NakljzTuE02pYl//Z267ww==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV5PSCRA9TVsSAnZWagAAWloP/0lPO2cIsmiObY4ZAUEr\nCNSdjAJEU4PUl9M5yI+BmTGLh+6w25v/zQPKwMqCbww/jG8ZtXKThAMOa95d\nywBLp0P+UbkwGUfDUaGiVxopQndmJLJxRu43odRYeJ/OiDRMRs7zbgoeDcS3\np6LTXKkgQSFcVjSR4IE/Z2TvWX4a0QLffO394+X36tKOcbs9+/qNDve2uGR4\ntsEFDTEpUBV9kICIXV4T/WtrPkqQuAV4s2jOcwN+cfSUJcqMsp2d4+Z85D/Q\n5hntXMJoGk38BXk9y8sCrcjq+9ilcjPKd6YUREwk+hH7zWUv/G5CDEN9sTxt\nzlgWAzg/jG/r+9WZsMMK+TVQ4fXZCLrbnxt2nrCYgDFQAGMR+4fb7SIO6I0a\n605haDuo8CAlFMnx6ZXZ1VGLQbIYNZ7eHcekt9O7BM6MscreFr/Z0RHnSL2J\nSWh9Il6koTeNmKjTQ+Jv8XYIy/wM49L52eqXRzbKoU3IwNZlphZISjzGmAd4\nNECox+hjFrd4EsZT/1VwFFYSyF8muzy44IpaxqSsB3H76LZuYCh0rNg+fl0i\n0HzpA9gTzhvHVbKsA7HLz7+jmQbZojuKCl+AaefrpPw2ew2kc5aESnqvXTBI\nggv3j5IRJoMObB2dQeybUFveYMeuo68Q5lACZIQUNn5NtFLM8mFwh+rbUGmP\niUj2\r\n=ikJK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist","gitHead":"d9a4fbaf917d1a5aeda04a4d93062390fe24bfdf","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.0/node@v12.18.3+x64 (linux)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_2.1.0_1599574993883_0.44477239184671125","host":"s3://npm-registry-packages"}},"2.1.1-alpha.0":{"name":"@hashicorp/react-search","version":"2.1.1-alpha.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@2.1.1-alpha.0","maintainers":[{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"515a489b5c56091b9c161b71067656a0bb53f665","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.1.1-alpha.0.tgz","fileCount":19,"integrity":"sha512-x9t62T0bnkaLq7SF4giepEHnpXN8VfoxJ5938yIBNV5JXJ3ICj+RzDtKpTWvLltrJW8Rrn/syjvdYgQYLAePzQ==","signatures":[{"sig":"MEQCIAzrIw76c6FqxhNwG8uxkgNvBAkIZilyIr/hH7VKJpNIAiBHDKmK/PTD6lDkJrjfAfSUqzQlVbqkTqqlCxgp/bmIMg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgUSTCRA9TVsSAnZWagAAQSEP/ic1LCeNGZ8lnVvdKThS\no0Uqj0yH37sUXYoR8xYJihnLYTdWnUDusw8mpBP/PNsx8THM0KrAsLcPtxjr\nPUuxznRMW+IsaUv+z5UHkAuc9m2kshJ3dYgRflmmET/mgnUzs1oZmVeow1xI\nY0+i9oaIGzv/VwtjBCFpxLJFe9CFZWIuCyTknAJ3ZyWOqfuqB6Ffui6LD6XF\nabuLjdpVjNTEGgxN4n0XcOIMalE2Q5mj0qLyXzZHA2A8JrwnCkoX8zag8jd4\nDBrnHJv8YtUljFotUO1LkJypqkW9G+DSeFvCEwwgV1H2WnSjoMPORFAqQ1W/\ncy4P/6Y1rtfXwAzNlgz5teAaw6D21UTAHcphPEj6msHRQzeU61Xn5dl2tbZr\nLbvoC9GQU6Tt6z9FCIcQN0adUVXuY4a7qdcghokZKchzyQBfDaJRj+badzi2\nbYLaEL9mdMwigNSeDxNKtYjjH3zn3zfZMvAUMmZGKAQu1Iw09/qNdUbzF06H\nWF8vlvGQ2OcPX1ds9zhlqFnRtIHBj1KdpbH4QtYR2uijA1pNAzVzOs3z/Itw\nYa7BnURU4x3nyYXqz1X15ybGKSzeOGRJGGE+iIUCZItrKbwNaESd5WVLms45\nvLfwz76NJAscGNmRIf1tCapBlbpR8RVI2gBhBy2lYEIrx2bq3LthDpe7y5s3\nFebh\r\n=WMVi\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"2fe45d1808bdf2203cabb5aacf25982e9cc9a83c","_npmUser":{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v12.18.4+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.4","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_2.1.1-alpha.0_1602307218686_0.33130431299621876","host":"s3://npm-registry-packages"}},"2.1.2-alpha.0":{"name":"@hashicorp/react-search","version":"2.1.2-alpha.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@2.1.2-alpha.0","maintainers":[{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"9e9cf9952d313268612ebb591aa2b20b79a06a67","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.1.2-alpha.0.tgz","fileCount":17,"integrity":"sha512-0r9bl3+iXv2ys4KPoMLpSbKYp+7jDr3aZ9HqCasKudOxhi6N7tJwP1cnFEES3MaBearu4MIXXRhsSTWvFbO2/Q==","signatures":[{"sig":"MEUCIGdVF4e9F6RvKEAWBHPu25vDGvJJBNGB8ghGDXdZ9UziAiEAuBOLsK7PJMf4G/htpA9cHK6ed1MgZeCpxI+tl9N9H3s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52645,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhv7QCRA9TVsSAnZWagAAGn8QAIaVzkkk2yMwA7eR/4pG\nOpoSfBTGN/K8tyA/TeRyw3yesaX6R1gLPHDpAHF6h7rAWZausISGWS/g2lsn\nXftIzS3Bb4vvpRBH1HEYMvZw7RqDBKjj3ZA/dVKVUBPK8OY1B8dxNiGZiHkS\nn1jM3G7kr2jZMFf1/zALBuvLmPHZVs0UrnEQyGYrmViMvO5924lHu3yY9Opu\n4vZybrJhzVYXJ0/yJtTNfmsT1eCdi2ykME48oLMQF13gdmLygkaF+/j72Ht6\nGPVRuVm2qiQXxT0EBorYwlmkJ6/VKhZxEyZFB96hmaoAOXv8CA4h5xLlhj5S\nfw2DT5ZPWT9vHRumQ/19S1irRMML+0Hbi67MDhqo/6q+/qHbVcfhd8kPEAHM\nzHAz+bwIp+eoYumLiXFqg4Wl0dGA8PXOGu3SXkv6YzSz9dHH7q5wbRYaAZDL\ny25tvMu2S7LFQCZlShAxu5w2y32O4tRBpvsvIOtY+yKKGjJVP6XlcynsJ/UP\n5yAmD43wXDgQrgRLbVY1/klKwPS7m/M2MXR2umOyMN8hL8kS2jN0qwbzrdnu\n8wyIODAh5HRfRl4UtM/L6+rl1E+CN1at97iRX68S4gZZnwzIakuJDAfEv/M/\njUgZHfOjvF/Z9qxG7+fFvrHifh4Oz8pv8CuEvKcqbQBNlLnD+zmYOKLXemIV\nzJcz\r\n=u84Y\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"afc64f08df7e3f0850ab560aa702ef8fbf36f56d","_npmUser":{"name":"jimmymerritello","email":"jimmy@furymethod.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.7.0+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.7.0","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_2.1.2-alpha.0_1602682575587_0.6380996985868024","host":"s3://npm-registry-packages"}},"2.1.2":{"name":"@hashicorp/react-search","version":"2.1.2","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@2.1.2","maintainers":[{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"8bf826be4e6244263687b87341d6f3555d7e8cc2","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.1.2.tgz","fileCount":17,"integrity":"sha512-4PKvAokoKP8boJokCEOKeFlLkwvJerIwPED0Nx3MFqQu2Ui3qTyYj9Pslp43VHBkyRU3Wj8SxJ9ox2PK9ui4ug==","signatures":[{"sig":"MEUCIQD+lHSdkyzgwenoOECMpv2gIbNlat2a0L3unf7Wx5sDLQIgI+N+HRQmtBbuMu79GUVa8rMCWHb8GcDrrYsDpVrLJcs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfk5JLCRA9TVsSAnZWagAAaRAQAJbkPRHvSCQovgUOvtRa\nTbfSmdt1z0zn/HR9Hk78Dsjv1UHXfZIcwbjjrYJQdvXLsyJho0yb+Erbi4fG\n8L4TSGeAOrdlvLI4o0jt8P1F0XF/N52J6nCBLrzz5M91ZsUDsy0wRRnr9iCH\niE+0dduhM3ouedHEUU3hR/VOJt5wQGAmGtckz5orUy018ZfLWk9LDAXdZ1sz\nYPF7UP9HrVc9tY0/onnsw3wYAUWpkdosRzeEU9p15yQ3HEUCsGxi0g8vmWxS\nSxrMqKdniHJr8lDW7SSdvGdqZSNWmoyJskoAooACcYkULsiSSPhEYMNXi9+y\n0YtKdaP6CKSe5J5viDU3sRJeKp3/7IyAYTrh7eA4N07huSGf5W8vnn56TOiL\nMZVLrozSkDK2TXY0thx5LyfJu6jU0Atazhhb0b8bbUfJ4RjDOy82/afLgf3n\nJw/mwudXlpoqPSMPdPlZCw1mvbGXcqEa0xHDI8qrHAorFnbCoKyXNgzUhGqz\nQRQsZdWJcECMu+p8a8HV1cEbtvke4CQW1nJCyHhsIYAfL09IcYwThVXclW/9\naPhH7FP3whOrxx6FgpRnwaiEABKbLGkYfnkKWNiSCVh7+XrGACpy/r2IFEor\n1QJ3kkGTiOA1lPNk+nIhGNGnJd+ud+J26La+FdSzBaS7yzpdGVLWNf4F4Ksl\nZ9Ex\r\n=ug5T\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"9e0361916dd54504b27720931c4b53ed706f56a6","_npmUser":{"name":"pruett","email":"pruett.kevin@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v12.16.2+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.16.2","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_2.1.2_1603506762579_0.9207519902661065","host":"s3://npm-registry-packages"}},"2.1.3":{"name":"@hashicorp/react-search","version":"2.1.3","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@2.1.3","maintainers":[{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"jonathantneal","email":"jonathantneal@hotmail.com"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"pruett","email":"pruett.kevin@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"ce5a57a3881c6403d4b9975dca91d15d46cafb76","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-2.1.3.tgz","fileCount":17,"integrity":"sha512-FVNroEmFM8BMOUtrAxykg9sHb5zi/AmX81n/vEADXu2NvZrE+sWDDsGDuhrs+NWHoN3ETbNc5mGW5+FvriGcpQ==","signatures":[{"sig":"MEUCIQCUiAFmUPOdYZFBXqjQWiKkwRO0KAuPEjl9TTsIxW7fZQIgai0SMJklft8iwcRzPOvDJHVk2tvnKHjltgxnlyiVlzM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsv0GCRA9TVsSAnZWagAADJMP/Rx2iMp0f2x1ILJ5SSQ4\nWfcfPVKUETTNI+rMh+hy417ndKmWAc8cYWZyZdGmsY+SAJxH9A6GQv9BYyzg\numZvbc8751S49SOXtxNcCU18Hzelz1AH3WNZdXlOrpiGYywjiESnS0InA9HR\nv/4pxQVBUdO6ubOjJZ/TT9Gwo1s4VPYEakqTHQkbgYp0bi4kDdI8l6XSWPJe\nlU0v/htIL60NGAXR49g16POMx4y7BSl7d5ZNxgAv1Xrp5O7XfIDGChvLMSCG\naL4pTCWez1jgDunlmZHGoseArxRuUbUweLAkdrChkH16lskfSJPviRJwwsnu\nQAEUkBTJtKqP1umKbrhQmFS0pHLFhEzxyuxqgmE95WSudxguJA++R5O10L1n\nWa/yAcHDhoh9tW2BgSqh+Vc4He47QiSGCxg3N6pbg50tsFwXG8+6WcgTotqd\nM8ItMW6Gv+3zpyGZATy+m1/ND9nzCzm0qEKQzZ0nSFCphCunOWS+TDYbxGL1\nFuFfQWWDvv670b5kw7SELtPv+MoWt2h1hLy6nkX16e+h41rYTi4eSKcRI4TU\n+TM8CfbRG4IAtWXhtHeTgkRzA6kXVC485aLR1ri2AEaCXwtfhR7kMX0EQkkI\n18n2Y8xgr9pBoiszFl4BbDJ7iY0l24xxyWdpPula9z5vuHldydtVFxNJXnbn\nSbc1\r\n=QIUk\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"8e8391f60ce07e10b88ef26691c6d13317b2b087","_npmUser":{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v12.18.4+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.18.4","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_2.1.3_1605565702540_0.6386544467545907","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@hashicorp/react-search","version":"3.0.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@3.0.0","maintainers":[{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"forrestry","email":"nicolelynforrester@gmail.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"e3ab4e318b15df96de4edc22ce64908c986718f3","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-3.0.0.tgz","fileCount":17,"integrity":"sha512-62ttyCxjVFSHz1aNbdjeOcqCezpk3dLhMWTXeQb9Zsi0JYaJdBzK1M9khW1bfozTzjTXXGd/B79orlHMj/Zo9A==","signatures":[{"sig":"MEUCIFYtUio/bmuCUtaqwVXw4CAr3w3zFi0Yb8iUaUT8qDkmAiEA+NgcuWiNInrofpe36enyNnUIuWHf6pUR8opAk2rm9TM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54752,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0sC7CRA9TVsSAnZWagAA6hwP/jUEq+qEcSBIosFNr1bp\nOqcLnRlZB5cSm/5eQpOK+ILK2AFUtMfzZ2/iCFNAQL/t7uFYRX5r1JSwf2Lx\nMjMG27GejGP/DZZ/CV+E13f06D6y4gSD/z/QwyrV4F1t4eewSDIM5hWPR6MH\ny9jqTych8ebYEPbKfZs5WzS6P9gfCUG+aQY8krTnjWuvrxsmDNVEarmDQlV2\nuIsYToG3Kj48jSPQzVb6xwK0CjB8xZOEVkHvug39Myiy5HVEPCGig8EA9IvO\nve2Udsyl+L3MkZlRZuRs+3VWTwd8ehpr0a1vmCO2NOLRdWyqX7mftMFHxo2s\nS2blksW6/kwLiAQCHr8P9e/ObdSrLpPX83bfOGB7OLEYb8UGzYHBykGqavj6\nLIcYzg2/v+zRL/bUe08ZZ7wlPoQ9uR4otEpjv4eLy4NJUh+BMVcYJX3gGotY\nEvsdHaQ2bnzPP7LxshPyfheinuOnVquC2m0pkP4X5qFfAkWtIcskcHoNflcm\nHnN4q9gHnSP+/R7brbc22olNK3mXaaynjFqgZDvsPuSt4oxpjwZOabx/xa2R\nux0tRRvxfBQ9lyOLOcD6YLkSMibA8lxofidkMg97YEZSjQLoqC8d78UjCqHf\n+5P2zMbSsuUxLDJB81bP1BedUx25qQe3JBx2fxcqoGRUrYEqKaGglb6Hmr54\n9lFU\r\n=ly7+\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"487d23113d7cdc795bfb80be6b2323240097301f","_npmUser":{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v12.13.0+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.13.0","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_3.0.0_1607647418888_0.09843040941704295","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"@hashicorp/react-search","version":"3.0.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@3.0.1","maintainers":[{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"9edb414d849cf16da781f006e8d87dc78406586f","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-3.0.1.tgz","fileCount":17,"integrity":"sha512-tGxj3k3Q2W1BCvTbpiYejEof7+YBV+xBc4uRIFHV2p+HPsPi0hbnELjpECr/v+UPBQR4ICVG56DIOiG7GKvh1w==","signatures":[{"sig":"MEYCIQC2mIfWSMFXSvV+zBrC2Mx4dRxoh6QXg4d1F16m8BSDmQIhAIzw1k+4AIB923M/BuaJO4QrNSBWmKzGblsvbzdhLu45","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":54753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDwIQCRA9TVsSAnZWagAAoowP/R2YjnfAhw3BCBHsUj7A\nfD7GjOWHxmuvg7iCDjhj00a+69coyvbypaKXzI7xp/hf8jCpZbI7Cc1x4TqS\n8ON8eQgeeEULn3Tma3U3QTpz1Nf0dZfMalcwIFSkjohASr+ypjAtVKoBbEX/\ndqAm7a0544/q4q8FR6J2wozGWrtPi70ofaZBhzs8BCDH+FW+cPb8uvDRYlhs\nXAAipk3MiEkTr0jTKUeSbhj3XRr3z6T0z/dVB7Vukh4qujEk+u8211xsDPOu\nrJQcxejlV9sHjgK/AJuYk+fHJM470MjpmPdCuWP0ER2t2HQ8t/jYT7vYvG2F\ndztPHBESNeQ9eMsqkuzZwc86tqrNWE22wMfWzBY4NuMIhakli/p3MgFlhNZ0\nFMW6sHCzDKDHthBkkecQw/ZhXe2xykpmkxr4Z/vXxxFeKWgYniB18kyvEi6D\nGVecVnDQPyn7QE+Gbk8QJ2cAwGafmDx5MeH1az+TeaUOAiMoCETA2relxTxl\nF9wKKfGd4q1TlphS7F+0JiNmQxWhqFcHHKCp2mHpxEfk5PDI3vyjzW07FmDh\n/l4dfJVfMfLGCrKEj6eKORf9B3QvKLnlHPNX1p+dyPbTM43AHjFiO28OXPPh\nixCPzWsjhJN19G5F/aCRP1ySLa3ThJMB3hv+i12eF+PznoMg7yiLcmVC0NN4\nDDR6\r\n=507+\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"f19bf4cf6c99791d2a064bfb53a6297013248a8c","_npmUser":{"name":"bkalow","email":"bkalow@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.4.0","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.7.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_3.0.1_1611596297383_0.7007501704355248","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"@hashicorp/react-search","version":"4.0.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@4.0.0","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"128b35605ed29ec92f18cc22a52ed03c228d2ffc","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.0.0.tgz","fileCount":17,"integrity":"sha512-lGmyim+ksPnDZXs5CFYZQKDTU78UYeIxovCCLoGkKTO/C/KzT/Fk9PT2ZM84Z0FX+X1ea0xYp6eMPqpDnvsnZQ==","signatures":[{"sig":"MEYCIQCU8B8/ZKGBWGw0DsSa0IIz5Tj+V8L+gP6sxn1O+TQ+ewIhAOWipjXzEtmwGEDSi/XNkKS34CgCeWNJtPmqnE0qUcll","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLuU+CRA9TVsSAnZWagAAa0AP/iedCxMDGXHfVWCnyqtX\nrY0C4By7O6nfLCXqfdfDJ2Hzq6+eeniY26LTBaQMiLFDPiTPwoAvBWPSHfxu\n7vDgO+HetZAdOV25v1ixn+yNRgywM+9Zpf+2NjU2+hRf7y2ZJl0otONo1Voj\neMYsnwd9avIinQUj9fJ+5Pr4z33fgrNurY9zh7tnjDtuzsKcPXu5+UK4wiKa\nd22JWWUSqPNeGK0Ba38i4oD1Zrh6fFkZrmBlv26FaYJt/vFyGD8/dhf8gYZb\nO4OcF3U+jg2xPBYOZOWFLy8L6nmvDf4QYRXeedN4IoFh3puUODIdSCmyQj29\nytIHmlxbS2ohySMtqL2uu7myPK0amQrqwvBxROv9UCVZNMilKh3yRiRg8Rw6\n7+/1V60yiOlvbFyborzBn5rSJzhxy0VCGKoIthX8TMI3Fbq1+5/JcV2bVVCz\npvr5f/h/rGo2QwSxNrF6p6LxPLQYZWmsnu4Qy106GtYy0t2as8onoM29otF5\njCl9SIVVXJXuxvTw8hF8o/sU/TUR6lompTOViaVzhXbB/DF8ahVGDMtdMb7Y\neo68HfKjbKy5XXXs87ezFL0+GJphziXuk8T3WYc3fq82c5K3vyECTYbiqWIY\n8rbY1ubVBtxv0V2RxwYBqZ+M3cm+AVWPOL6+7q3LViCtOGe13xkc6Mwox5ft\nPc3V\r\n=CorH\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"b77f9785c89f073adcd34521c41a550f0f1d6a7f","_npmUser":{"name":"wkentdag","email":"hi@wtkd.info"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v12.16.3+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.16.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_4.0.0_1613686078121_0.5184604734306482","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"@hashicorp/react-search","version":"4.1.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@4.1.0","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"005253967742460268c5de7ef63adc2973bf6606","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.1.0.tgz","fileCount":17,"integrity":"sha512-TZChez9q/4bn/flQXRo0h/9B0kDMvin759hd8+vRrt1M3Qhz2C1TKpfZRKrX6dFZI8w4obGm1EzUzR130gdFfQ==","signatures":[{"sig":"MEQCID1qR3l3F/nbzhRxBZf302nenlMBX6zKI9Wpftrxjc+rAiAS5vn3WcVDjeeM9h1K7cmy6Mw16oy/zcrXC4hEDV1tLg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNwqoCRA9TVsSAnZWagAAwe0P/Rdi6OOnTMYm+Oj3960d\nKrddzeFnaFS8RXFQ7o0GEHOKruc2WNoaoAsiSJJn8Tf/QTa7GD+6QehhCYnx\n922lPrWNN7O38mrlvZoEOGbVXr4cAa6IRFGh0XYP3PAm5YNasf+SMuVlj1pr\neWxisZ0X004zgRjOr/EvS7TTgAAv2coPCgmkJbNIdCqCorFjI4jtytnbwHR8\ntocNqWz0sU1NlL3i4B1xWUGPV4N5v9LKisNz5chyjRfkbc8AarybOUienqak\nBEN4OqE0h8g1uT42guL+9RGSBmIs97QKQqXY20Fs1m9M8zdlYTCu4/Uoyb1w\nwt8bVKXZvRd4lruK0VuATS8DB0q0DByAYxuv2JXlZnamtzyN/VweW6MWpnd/\njsdEcql6dz+LSHuJHPij0IHueWZY5GpxxhBDwH95WChhZ1N9z44bNENSjnu4\nQMPN4ViB93PsuqYoqe4tEmP0H2N792EJb+oCqTqhN6ttwV8rhdoElSDsKEJx\nI5mnqe/JAPWLK26Sf/HCw8XoEUIacZer/CwaY4Y4rp6CkIq2jFLfozZYZ15P\nttmJjomqchbGKXy8lksswNemM+WkwlpVcLylm1aLXuz2GDv75ye9znuEI9zV\nh+MUPKvhRtDzRxHw35q2PBHxIaU7zMo9+ITZDw+HQ4rba8kEHBgx6EYnHo0s\nV/LA\r\n=ehYF\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"6405e843c61011d028b4cb69e656f4a5dc0c6fbb","_npmUser":{"name":"wkentdag","email":"hi@wtkd.info"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v12.16.3+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"12.16.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_4.1.0_1614219944275_0.8049217722682813","host":"s3://npm-registry-packages"}},"4.1.1-alpha.2":{"name":"@hashicorp/react-search","version":"4.1.1-alpha.2","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@4.1.1-alpha.2","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"86eed9c8a5d4fc928a69ceb8b5ab9856f144f2b5","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.1.1-alpha.2.tgz","fileCount":17,"integrity":"sha512-DZOTNQyuE0yLXnJ12s8DFGVrd5eotEI/7A5s9EVdyv7fL92tgyigWtg0uOGBmQIOP2F0N2BZMeli38XB0LjCFg==","signatures":[{"sig":"MEQCID1fJLI/oPc9wPt4guhwmZ76zF512e6rbRmMod8K14yDAiBkX5AfaJQISiHpwZSgHUzDNU/Hstt+RAzu3W1l91ld2A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRnqNCRA9TVsSAnZWagAAkVkP/3tbf9HxTDSAG9j9gqRA\n0i8sV+pLQ1eRytQO4rEH0/m5PHwY47we+00baDbIl5GnbhjFNTxy9LN63FSr\n4JxNlq1GgrxDtHX5EGBTHc4VEtYmwoOJBS9qwqUVyeG9qyTzGpRpNgVLgApM\nw8G25YgCf2JTAN0/U8NBvyxVhGZJ8bg2OFAqSrxNNIsXDNa80eu+Dkf/XOzj\nMbIEV+TRPS5YCskORXFV0ATNMm1U1hMTXc2gbSSF2boQLOnQAX11iphpiOdd\nlQ49o+z9Si0tjvRhYHeOy8iBpHF8NzcGdDHcy8/8CPO8yonxr1bBlovjluFk\n4j4fIMPjkWD1xFucEbOZ+egDgFEe1DfF33QLwoR854S1t3qu4CvmnbUC0vze\nFafNYOLAVw5HWCtrd+SnBhu42f5X7OuDzxNnRR1MncU06pGcQkvCkKnrqiZm\nbpP4JdE/DYS5os3tYie68DkhQsrI/CrlC0AgZ7P3mxhaIn/wppF0xbuWqwY1\nSatmyqiaKvWf6qMG0dV5HhVWTih3mZMpxy1B3+PJbbLQssoRzNYuzhEhVi0m\nwYP/pbG8V2K5VT6Fa6JP1mwYO/hAueXe10ppmw0Zqlhox9+iRp90vEhEMItv\n3EvJuRZd1YWFn8EdNboXhsloBaPrOKgkoXKmg84mp1F/k9M21eFhOVsunhjx\nb5uT\r\n=t6Wj\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Also make sure to grab the Algolia API key, which is sensitive and should not be public, and add it to the environment variables in circleci.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"d19636c1529382ea2931195d8763cdc8e42365a0","_npmUser":{"name":"zchsh","email":"zach.shilton@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.5","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_4.1.1-alpha.2_1615231629294_0.2909190783987581","host":"s3://npm-registry-packages"}},"4.2.0":{"name":"@hashicorp/react-search","version":"4.2.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@4.2.0","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"7af878b1b3ff1b42c6eb75db93942e208a6c2298","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.2.0.tgz","fileCount":17,"integrity":"sha512-ITj3UC06w+bZKrHv77kYdtWlEH9gbtk+pAzZ5ZRxt2GMnw8qMzWnXZKVf1yHvyKAKkHkGXA5s+uFElxRJj3AVQ==","signatures":[{"sig":"MEQCICx5N1HNNpfFuYADvYcr3LpHpOQYyTyxXi5QOtZBnVLXAiBXh+FYeWdFs+rO5isnSaUjqNG28jMD+y+eh8KG8rwZAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSSeHCRA9TVsSAnZWagAAvewP/34yCi8kMNBaL2rBdyUV\njee+7EfzkPwthSujT6IAEfLz77LWixur//GzUeXo/72Yzq5Fz2De7msTqpH+\na2WRBsENgJL5OuKP5rSngu+EYhehwAozn2FJtIkCdMWOUbd08kwNPQtxycSK\nAx+IwwA4C366HWpklbOlRlpwY1lF8da4N3adXUKgrT87rabJTO6ydfHh4Eac\n6+TC/KaC9CHF1XVmjZI2MRN8muJk0hgYaVhNKAEMWVc/9tByH9ewS+gdLbEV\nGCiD355E7Iar0I+H92uVhQJKyAVv8SJ1l/N/LV1KuenCZy2LCdFB8pB274QK\njk6aCuyEfnSi32F0xPXHgMsXsoHA4LlRwpuHg9mO66Gy8pLho1V0Tc9viINU\nAXs3AE3PT3CAwPAsS5KqcQNonw4axVwyAiHgMh0Sv8oru30OaQZ8R4mABkE8\nzYj7FwjFN8yPniSJFVx9K649WZwzfuRmHOSVK4pOVRGSak6ec3jbR263UJN/\n8cAzh8E0IoMn/sB563Y3PJrt8PmvN1M0b/HGYghJzOrcVSSdoIep0ej2zkqa\nlziGgApCJRCXJ9AZy54H9W/uvyOZQ0Xdpunns84x8RhMKe9psN6K0FuwmCVy\nZwv8fif7Hrd+hDFTi3tCed3gaK9VxuBRLyISOhmKlJY1p3tU8M0Q1VuhBFk8\nox3e\r\n=nu9e\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"a0313e81479250f822236de80f5a6d5fef2d0412","_npmUser":{"name":"zchsh","email":"zach.shilton@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.5","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_4.2.0_1615406982140_0.41953171889253316","host":"s3://npm-registry-packages"}},"4.0.1-pr170.32":{"name":"@hashicorp/react-search","version":"4.0.1-pr170.32","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@4.0.1-pr170.32","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"3fa835d0752d95af80d796ec840629f6557a8694","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.0.1-pr170.32.tgz","fileCount":17,"integrity":"sha512-xjbtEeP0lIDUd1nsOG04pvy4r2kpN0xFEUo3R74PmzcE/jQdJ76eG8aHgtJs5Wv042F3UDIvA/My+gSorvyG2w==","signatures":[{"sig":"MEQCIBvVT9VJySa3ZgL4s9HZEBAhCz3G735OFG2Or86GdgkCAiBIajD4g2eT2QF+RJznIn23aYwW/iMGgK3fvuQL2hzIBA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU5p3CRA9TVsSAnZWagAAuzEP/2emjCbLdeSe5+y2UxzC\nByJENmp7BofCL9aMsqKs3LFgNPhqQwWRMpxjMcQHhdeq2KJGX9z07UWD4IoB\nQqzuR/ODKWOtEka1pB8Zf8dLQ9eofmUXdIZztRbTsrqxIxyKuBhs+mgyBzGO\nrhljdOI2xX+YDCnPCT9iypiPAmO/ERhOqRO7iFYmWW4KQ9+sgGUSQ2Za1zem\nd5IJSKVaiBs3Ee6ZyLO6zrYo9jmQkYDg8TZlUTsoJCCwguNeWaJeyF12bz53\nV4SiaNuNC64RpUMr+TEJn225EDzI4FL8YWD0lbaDH9Gl5qrWwAEvGWfZOSDc\nuBbYlrfCUTRaC/1h6/LS/nnBy1CYANUYd2sqaw0EoFb/WAVq22UpQpuJObdk\nlm76Yf8ZBftp5ENGURB+dmxFpIjJIjf2w8WWfAqsQcNJPLR+Bfr/dcm3Akjc\nzjq6wheXQBfxNdv/iq7R11GauaDjvyp4LZJIIBReyFfV0oHSCp8xVJN3C9ht\nZrIMaJWQkiu+AepjcacF/8V9l6uCzGL+7QgG/kxQ3G0nA4P08+NNy6nuov+n\nEYa274puKallZvMfCJKIl1uaX83E6P0624FL2knMT/is2loUCrL5sDbM8Cix\n6A5pFW0RE1nXs4PxyLaHBfvV33oMgFDRV6ezfK1iUPb7SCv+q76XO4Zn5lwa\nPATd\r\n=bs/+\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Also make sure to grab the Algolia API key, which is sensitive and should not be public, and add it to the environment variables in circleci.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"405b6b75df4927c619242a93d3f4dac563ca71c2","_npmUser":{"name":"kstraut","email":"kendall@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.4","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0"},"_npmOperationalInternal":{"tmp":"tmp/react-search_4.0.1-pr170.32_1616091767047_0.8262857829769394","host":"s3://npm-registry-packages"}},"4.0.1-next.38":{"name":"@hashicorp/react-search","version":"4.0.1-next.38","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@4.0.1-next.38","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"1108bf1d1afd56d9845221e8fc22fd753b93cc2f","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.0.1-next.38.tgz","fileCount":17,"integrity":"sha512-cvJju9jDSdYcXAUyIr3pjz3GN3N5H2mQi2FNHQaqwIv5UcOlUufuIOztkwZNze8X6rcEew2/K7N0y4ra1r2aqw==","signatures":[{"sig":"MEUCIQCpr08X5UXYqvF7kf1hpeD9iRBQpMsm+ZHRb3fFiFKInAIgZE+1Aq7wpGfRhl0Ajn6sWYLTsVIseHOQ9qkhwVMoXjk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYhNPCRA9TVsSAnZWagAA6qwP/2YwPp1SvQVUjjkNtpWL\nUpM622PoyDn6D39yDrpyLTHnDn5pemSpbrqXMBtu/ecpuuuLRog+idWlFPiz\nr+Rnq5CX+Hv9GFsTu53m/KAuzI+dWdMuCFhwJz3eFB8v9BsNXoSb4pT+wouF\nciBfbdSJ+ZjTwuSZbSwNtPGiH7ntKnGuRTliE4tSASW53mbRrVKmrvN5R3rs\nZOj0OIfPYywK0T/gXMdypCcv72s+h7btse1SZ6P5BPAPDuSRWV/5CzCqzAmy\nB2YLfGe8nV7ov0RQEHtdxGrP9QWZR689IFzrDov0p4Wd2wLZ7+itfNJsZiRB\npWivh5XkVZBdnSq2y8Wm3uy5l7g93S6R165j+pBa6+p+EXHpGhl8AUaRy7fQ\nZkysTRRyU0++toTzKD6blDhtuAJrqmSVia6EkLJ+GXCcJZ2Kcv7sQKxRN3cn\nb+7A49G9BY2prLs3C27ZbHDU5dlCb5F3POhRxA3QYADsJPIm2R7dKTdM+9/x\nEmsGBow6gEBmPjxtaj6dGCaG7L1ddqgOgS2/Y0Dce+RpD/xFXHkDSYRA/m6l\ncTOrayIWhtmiNPjXw4H5VJvYjUExADTWWCsrqQNpVzlZ28Y+Oo4rXqQLqw5i\n46OPkoOmrIYB3F3Z+VKTyLSFJmseg8Ri8at7AFW0lUZSOyKtbws+b2DOrAtT\nv3bN\r\n=tjqM\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Also make sure to grab the Algolia API key, which is sensitive and should not be public, and add it to the environment variables in circleci.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"83dfc764643020aabb17443b8d62af943b9c1b88","_npmUser":{"name":"kstraut","email":"kendall@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.4","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0","@hashicorp/nextjs-scripts":">=17.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_4.0.1-next.38_1617040207486_0.21955581626458254","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"@hashicorp/react-search","version":"5.0.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.0.0","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"88bffdc6ad94a61892f11ef1d41c67d5d3b1de56","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.0.0.tgz","fileCount":17,"integrity":"sha512-KBVt25g+Qo+Ns9gd5lHhDXn3VBphRXK3av4e5+hCTZPx+KF0fmdfECF2ZGyF53Loe7dClOcICDaFImKhMXrvWQ==","signatures":[{"sig":"MEQCIFAMiyZVFBgBJM09spoQMMPUOcHxmczht11RorraNYvOAiBq550yejNCK37awedAnwcJVw5eWHby/x78RZxPRNyxAA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58779,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY42nCRA9TVsSAnZWagAAQ6IP/RvHSnBXeLDMr5G3R1jb\n65zYdbPs81EzaIajOENqJd12LtEkptz8wVnhpm/SPDt6wUCu6lgSilg5N7qr\nr9PzLLBYrqKuREkmoIxqdW0xpP7jLgXmjZlcGrr+7GGY8eGwZjl0sEAdIuQN\nSO/by+J0ODojk1ticiFs0zdU9CEqAFniuWctSjNdr0f8RsFlv1/dZU9ZaWol\nhrKRQPtbWQzKM+D1dy1xT2ZBbJyyjXX0zmJdK3iB6ZDb1YKdJkozZNCzSvxR\n/1ukOR1TUN5BT0eUVFTFztBaZZSvlc55J0UjAwWXDNx1FhyD6n5ppu3FltAP\nDz/WCGDTFR3zD3LpHpAFRQTjjtBr+yLqXG9Vxlznexbzz1orPsbHI/dl4qmT\nkEAS8OPf9gg31NJbcVTtGMyZMyNT9SnNRsJ1adoPKEMQRIsaqKd5p66q2m7R\nkLRxTRm95yYvqnam/x3I8CG7S0bu16Pr0pjCdJNBvdXTNqGMGrOusvW7vjVP\njlVFkUK+iZYm7vLFTWK7c/HeTA5zkIb7Z+GN3PmrZWtlq0rAcgsXhG1QoWAH\nXNwL/zzmrRr0BIEmS3cXAr221XtN35Fw7wsWFi0JCaE6JE4XH6W1h3kT7lam\nYTMMC9ccZE5SKLVoHLB3zMPEIwz4ykgIwE533UK8RJ7F5lE9WR80HWC+Exwy\nKQnh\r\n=WewE\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"7c8682475ca9c35392f973332e20dc4b89ef05bf","_npmUser":{"name":"kstraut","email":"kendall@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.4","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0","@hashicorp/nextjs-scripts":">=17.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.0.0_1617137062978_0.40305823711792077","host":"s3://npm-registry-packages"}},"5.0.1":{"name":"@hashicorp/react-search","version":"5.0.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.0.1","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"citguy","email":"rhino.citguy@gmail.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"8407bd545acbef13fe862f66b682784c487ebac1","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.0.1.tgz","fileCount":17,"integrity":"sha512-KIW9Izu1onM72XoKHm6ycv/7o5uf+OXZoCcGrftEtcvcI3IQuWhv+E5J4iwzDG00OusnBvL/x0sjhMwsgnLNYQ==","signatures":[{"sig":"MEYCIQCB+DtAhI6RpCtLRgIgr+/Mo4UngpxlKoiaSN1KIUZg/AIhAKHHD+2UTVeTPBUyYtBSeLkKAVLC4Gth9lFE8MZIshJh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58865,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga1LxCRA9TVsSAnZWagAASXIP/2Q5ceZ3Sd5GL/FQQbow\nPlxfJldbFgl0WuF8cqkoTqSt+Zo0zAcNN2txuitgQomYwwodR+u9UkVBiWuk\nN4qSll5oZmURQZ8QYZgtCGiMXHLqEX+ivV83KDEGoCOffsVL6+h+/keN88Kl\n60WlRphxDEo0TVwv9xyldQ9prjymBa2KuMs+VQF9CSAhXKFH2a06rWkUB0yN\nU1G0y5iBtDLzqUnlN5R1UgjqjBAFHSp4znja0rgeHGuOp2NJNpHGg+Kp4yR+\nRuL4xpOH1qOGZm6U7YLhIHu3141mjxXBvRPmWve9QfsIlJ6/bED0KxjdI2bp\nQKYqmJZxJW2ZcdP2lLczCTXEWFJhMdGH7Gy+iPPsI828d15rv/YKTbMRPeJt\nn8wzWjCH7AJ/pi6Uc3KUJ3Ovx21SEdJ1ZEpKQoWquojgNxT8ULp79VSopQ74\nUGio5Bt5wNgibRhD6oX0i/sRmvw3KQf3Xu9k1cOJc+U0xwbEnAhDP1npR1Fz\nmC/GKV5ZA/9OIpTgS4FoO7oGJerfViLtTOZyuYbYyYqcE7ax0jVm3nW44rqg\nfhHxu29HJmtfdkjFlfHzGAggnpYhadZKFwrmux2XI8eLWEqiM/wMSKUPikO7\ni1WoO1eVwgjeDFhuA2JldnZ3YPgnNlSygCPB3dApSpAOd2nDojDVWPrzMG1N\nVbi4\r\n=pYwX\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"69b72e6d0100174ee8b88077c34ff6f1c34ca32c","_npmUser":{"name":"bkalow","email":"bkalow@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":"^16.9.0","@hashicorp/nextjs-scripts":">=17.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.0.1_1617646321123_0.38559790368347757","host":"s3://npm-registry-packages"}},"5.0.2":{"name":"@hashicorp/react-search","version":"5.0.2","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.0.2","maintainers":[{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"c1235ca12d724d56078fb410b403e04d70493e0f","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.0.2.tgz","fileCount":17,"integrity":"sha512-YcvzgkWOnF5vXFaA86OVKDptP0s0UflRJl18rYcyAhkCzMO8bp2Gt5bvLq7LNq4NGRi+3G0dIv+X04UdQVXxaQ==","signatures":[{"sig":"MEYCIQDYGck6Q3LZtozogxidqaAyL9u6iwyB9jtaTrCQM00W5QIhAOPPB9NKcAT54hJiBVb9Ws4zMo2ZMwgJHDiNtxUaHu1A","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdwsvCRA9TVsSAnZWagAAGBwP/3VhS835gVBSXsNqo9tW\nZQoA+ePvavRNGimCWYpUvM3F6k/WzjElKyShr6HF3tIKquPhQaqwpK+VL3dj\nW5nHLQyts7AmUTHyWVmvPXVEQVjJuQugO3cA8XiWvs9BQuDtANWljqtLiK+q\nuAhIDyrD+wKufaft1G10r9FZFiLJQT5GGi6BzawkRBsIfaCpabdfr72uiA3R\nJphqUnadmGJqTBB+3CBMLE3ERTrpuF1XMC5gmaqON8tVNs5aeruX/i+7Z6hr\nPZz+W6IpXq5lilf/voz/4lfpLZxCPdbqriAnEp5j7VaoFKDU39bkTHn0B3yf\nSvAh/8nd4z66Hd4jN8Z/iBcTSTrYI8cbdvlNEEJwMSjPu8MIWlJGqf5NEZaj\nwsYjstCSsEgqGQWjescFkVdb0BAWfahTDX66bbtlfjfyU00/714gAMEIf5kE\n5tuicLKu3htd30sck+FQKrpYzUqMeqW2pvODzuBXZd0SkqqA1dOd4kKOqfXM\n0Ucp0wtOeTGNUQkWOxZVj5J4HXQx7Tecy0NfwLQOb2Ah4mz6+Aig/PV8tbkZ\nHS1NIxxh96hVUIiUkM2eTK4isVPVHPUe6r5EP1sVgu7mq7jLz/WUAy6SoR1f\nUSxmaJ5ONWq/wnruok1c75wOMKmYjyrLa0gzgR+CcYKxTz7Y/sSE4Wii4Ef/\nBlQD\r\n=fb4t\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"160624badad4c32fa5800c194b73394c465d6853","_npmUser":{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.4","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/nextjs-scripts":">=17.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.0.2_1618414383118_0.8106864376377714","host":"s3://npm-registry-packages"}},"5.1.0":{"name":"@hashicorp/react-search","version":"5.1.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.1.0","maintainers":[{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"zach.shilton@gmail.com"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"aheaden","email":"aja@hashicorp.com"},{"name":"audrey.e","email":"audrey@lifeofaudrey.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"703ef8b51a28ef7b879ce20fdbf74c88139cc3c7","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.1.0.tgz","fileCount":17,"integrity":"sha512-Lrs3eDTwro8r+Yp4ow2orWaHKy00Z0THWg9As3KpDtijJzEAPRgWEP9nDxUr+bcOE4InfrJnC3GQ1BeZKIeU+A==","signatures":[{"sig":"MEUCIQCBMe9gU838LTj1NVqVPdJNmSdotqb38Y1arTOkIlNBCgIgUUBMdD35ObWTQ5LA6e6OUyS9oaoma9tsA84v+VXolBc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgptD3CRA9TVsSAnZWagAA0FQQAJXd69ZmrGtlojvHwgGh\nozwm10ax6HMxpWimT/sWKqLr2kYkp7fg1MkgtHxcdOSCiET+9t54L3M56GTh\nRPKc2vkljjmlShcZilrcllOIxvKlbXD7wAzXIAkFxRMJPzXGJ7NjykNOuVmE\nfY3IbUvG9y4r9oRQkZ8ZC8u+hcaMCGljtSn+BQ9ZjmlW9xMOW9UAbbL68HmN\nnbqPDcoAtfY1xlw6asJ7WPMjI8v9ErX3zkzaMtnauyNRo3ylzjefCAfSgrB6\nNnfd1P40BZAEMvcg03PCo2uHFy1wCC0GCliXWiFwvfSFeSKRONIS4OXU8+WI\nF1R7KSltzhqEpO6IWIK0m8YVFyHVsMfMb/kP3NiXvVdgOaoZY0wtqo0dQL+C\nJXv2ul85w/yGLEgEf/pDl/Xmi6dFT7hCX/TG4FwxL8jfBm1dJW/tvC81DgcD\nSnZ5HNW6w0bNwI7lMSKikFgLEXzF7X9WzqhMIojW5cHK7QDLjDuZddsl4raL\nYx6InXBhlamBDgdzvXx9kyXaplR6ZVvYyC68FSv3NRbYLJwqYt9EyNMaUoDY\n3MqEyq5kGLdmN8RkvIeJN9ynhMnn9QA7CTcjGiZLaEnwWcjCnoVBV0hRSqAa\nLbtRorbI/0oP0QU+wq/1oupRlHXV/+7ScK3b3BDaZl8wOZt2WhQunWwpjN03\nCEFW\r\n=9Md3\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"c44294b7b0b3c2312d79809b515b10985f5dad29","_npmUser":{"name":"wkentdag","email":"hi@wtkd.info"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.16.0","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/nextjs-scripts":">=17.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.1.0_1621545204542_0.7922497564261606","host":"s3://npm-registry-packages"}},"5.1.1":{"name":"@hashicorp/react-search","version":"5.1.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.1.1","maintainers":[{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"a28551b5aad7102d585e9c1e9341826566338678","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.1.1.tgz","fileCount":17,"integrity":"sha512-IBDn+IfRKz/dD5RNnHmuTzVeqYC3cRyhO0k7G9ddHq/wFakxppkMNFZnDnwcx5KOkRTr5iMEsNebzN6lZbTFsQ==","signatures":[{"sig":"MEYCIQDeSJ7OHLVJMUeSeax93ghi6yk/j/xkA4+61ZxJL2hb0wIhAOpphWQ8QXUDRHSXSHMjbREDDGWrWCJYLIVJs5U72fz0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8FD+CRA9TVsSAnZWagAAtV8P/iNQjbyk2NsKVznNR7kl\nsjGn4b61x7ss0OsmlrnRtBm+LyWvcGaRYP5Yya0E3sUlVqrxnZHkGkUUMT0D\nGHB/dRDfWvXiFjnX6h1L/XHUM7iYWBoQI0vUFWE/N+jPgrXsYOrqMjWlR4WV\nxeZQ77TiaDC/rkQ77LRnnenI1oDYAKiB+F6uR73HMCIFQ5Y2EdYBXNCAK1OU\nBisX2ABFLYDuy0Ur+gKeQZgbRGayMzXtzrI1C7gpIw/N5L8KKX1enqdE/6oU\nRwm3/SV18NykfJMq04VJ3uzeoNeWVI2lXipcqOuhg2KwISGp/j9piSfUkoKj\nL4/GzG3nuUsTmuQ4XAs3GQojl/r2BIzfaNx9EsZaP7h0BU3tfPR4yJikLsBl\njz4eoflNlgMTTsiQYfcVeBE+u60qF8BmtrTgCR5Evbu7dhXZyeqMgeAKbSK6\nrUgkHhfWasEhy49s1NzpawYh39htxOfWvqlRuWOIDHYFbI0PNO96io7C54qv\nTy1dXfoHf3tuqRqPopfm3zdbE5zo90atK2OszPEbwNhpbTmPeq0skWCjMfZg\ng8+yoD8c6ZGhlmPNsJ8usJnY5fDRMzAlbH4xvk9YY6J9piprbsmOuKbK9CzA\nzq2TDH/bGLO76FgJ6ltGbU1pWl45H8YN6ixmyMAHLi6LuEGQhMJ61cNYAxUa\nToZ5\r\n=BqI5\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"d9a13b4a29611d325d1789bbc4ee4dd0307e233e","_npmUser":{"name":"bkalow","email":"bkalow@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.1.1_1626362110607_0.6751557379987385","host":"s3://npm-registry-packages"}},"5.1.1-alpha.51":{"name":"@hashicorp/react-search","version":"5.1.1-alpha.51","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.1.1-alpha.51","maintainers":[{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"5250e5bdb438dcfc75f7b922b8a025ba8a793490","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.1.1-alpha.51.tgz","fileCount":17,"integrity":"sha512-22gxBMBbtAJkFLdvyJRBFQnY+L7bE/H0yqrV5qOErk2FBc2rdWCIrYTdHvhZLZ3pEB61e3RnV1HyKTTyhUBgEQ==","signatures":[{"sig":"MEUCIHQO9bGNPE5aXSdWAQBtm6YKDR8kQgtOI5xJ2igV0uDYAiEA31GGbYWy7DKGQEBkgBnZLiNbbSNZ6v58Z8Qc7iUviqg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58888,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8MglCRA9TVsSAnZWagAANqAP/1CXoFei/qEkfdlDtzh3\nPzjxCM2egrU7Vg0rE49/94Ot5vgKrNWWyb/4FBTl3i0OOrCg67y2M0dg6gb3\n9IQ6VizN3IAQYSXmwSMBGeCAAI0BzaU2hj1iamEbylnfOoEeJt0TMeQUjjBH\nUKLkClbfPHiCcvwD1MwRpah3cSy4WnArFTTcUJrXbJwI31WJTC5Xq9gWBKrB\nJHok3EKwPXJ9mBUKNcdmjQ+hOrGCTPgUYnmpqN7QMeSLRBeEn+a+Cd1+vmjH\nm70lVOLfZTGpcAsPrPzaanfJVQuPOY9YrtxkMs4wRjCArhLl/QEe+jAixts3\nSyyeSRWgSd/yaHzyaFr2iAEU8Eo0pkutBEVzFaGnRAb879tgsc3cFbtrL/DG\nJgGZ9AlGfjAoCecs8Ay5FTXhi3y6LrI0Qy+d0PaAkPptTXGNsSIRwckJ0dFW\ne72ctB4eLdSIKywv68Ua8bKjRxRdXjxNpqTE1v1k5ao9L84zUbw2JtEaVn1x\nnxsOS0ttEwzT6WDdeDHFzK0og+TKYsOhN7XB1XPU1ya9HjdH2bdCbU9LICau\nF1r5MMuIRd9ibmdNY9HwoD7yhgM10yC4dApPRTTN23ays86/tGfH9epfzdw1\nyj7mnkIH53ZQXuCTE9HBCssbQHm5AMMy0Wr88tj1wHJ95fZFGY1rs48dOPwO\n4rP5\r\n=cI9b\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Also make sure to grab the Algolia API key, which is sensitive and should not be public, and add it to the environment variables in circleci.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"5adc33d32bd179cace9428058a41330a05fce058","_npmUser":{"name":"zchsh","email":"hi@zch.sh"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.17.0","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/nextjs-scripts":">=17.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.1.1-alpha.51_1626392612872_0.6772387506207707","host":"s3://npm-registry-packages"}},"5.1.2-alpha.28":{"name":"@hashicorp/react-search","version":"5.1.2-alpha.28","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.1.2-alpha.28","maintainers":[{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"f3b4eea7bf1aaf5a857c894612f5c1535aa3b4ca","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.1.2-alpha.28.tgz","fileCount":17,"integrity":"sha512-pKRRT4BpgNA2JDaurIi4Ou60dtaXItoJlxy8IeeL9M54vhCcJJpCRrmmsaiBcckpBXh8KD+GqARfm6A3sLaMLw==","signatures":[{"sig":"MEYCIQDPGgt5LiJbZqyIMGkiIRvBrkgoVGTX0gbG4XTQ+OrDJgIhAIR+cqKCT/ugxh1pFdQKbEbttn0PRXaqUpBYoXZb8qPt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+InxCRA9TVsSAnZWagAATWgQAIZkCGK3WLy7bHlkZQfx\n9gHbs1ClHf6AUZYXH1i0ay3Vj0HzIZjdlDqfjt8CGIaSDm01TTvlfFMpomcj\nkxOcdg77gYS7ObkOIUTzD4aGOeOD06FAUhWWXKkm76q8ZY8cr+fliCQl/7RF\nVD6rkW/8Kmc4lpcO0tYINKZ1lpTGm5H5CdQJnAUGkXusLEkbWyXSzQa4irR3\nJQZB8T52YbhNIKKj1WaEHAsgGfDiVnHhKBG9uZJMyBdYV8tCfZVlE1iNd2dr\nYCGi477zm7WntUTWviFRQOOEPKnHepB10cFn+m6hKNNj0CdJDadF2M/VvJQC\nXugKedE/LlOT3IukJWQ6jIXtR1kJpUxVwvcLuPpz+HSQgu0ArXK3/+YUmJZD\nX7YehymsdRWBl4XOd6B+Al+NjFgZeeP2rShLiK5oUt01FFCrPDIsZlElX4G8\nY9jDU0gF9pBBFRjFsIk43gjxs0K8vVxfArjU8eZS1i0Lj85nPeQe8iYlmxjk\najz/TX48VwY9YfN6cINvN3z74at3B4CyrXruQU9WmYCFm0RmVufeE5vlTg/i\naNU84s0nZURGXbvMlDvlknWZUFYMf6tlp9LaX0UYrNDjQagMeOHxb6qFAVz3\nqOqHdtbcpAYgw4kUT+/N9qfHi7/xTN5m9aTlHaDMcrRzD/DDn4dYPGC3K8FG\nHlB0\r\n=XqfQ\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Also make sure to grab the Algolia API key, which is sensitive and should not be public, and add it to the environment variables in circleci.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"81eb4ce31e3511433097058b0fac21398248a3df","_npmUser":{"name":"zchsh","email":"hi@zch.sh"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.17.0","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.1.2-alpha.28_1626900977401_0.15854071647121648","host":"s3://npm-registry-packages"}},"5.1.2":{"name":"@hashicorp/react-search","version":"5.1.2","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.1.2","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"7e6edbc5aa365bcb715f591398f4a32874838561","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.1.2.tgz","fileCount":17,"integrity":"sha512-nSAjXE1rHaIo6h6qda/ON6hrMyNXYAgdKsHV6BIdHGnV6/QebebUE3rNlJy0S6wIDccbSQyJvgujwkxRXr9wpw==","signatures":[{"sig":"MEQCIEIjSJKwQBlZAOPD2Ot2EFcqI6JdQ34ub9x8/M4W9+CyAiAyHqjZOQWRskrPDFbJ6YY5Rk6+VY7HTneExv6rXI76yg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAHDmCRA9TVsSAnZWagAA2LEQAJg0DPBytn1PCOXp8xM9\nQfWqLfq8m/DpHYy9QkY8Udbte2AeFPkkitGPBCs21iAm9QvhrgjqiOPbAohv\ngonJablCpPgXA2zcpZjWbeiV1Gsr5ZtsYihXfqsw/hNUKpuBfz2AUVjcJ+A7\nDj3KFeY7GZV9/uGy+65PaBwvDL0imyYBQyhorHzprieg+yGO/TOHGdJQ4YgA\nBNYVnyVmkzJJiQUiKKkYrWupfBAmmRjCWItlCNsBkYOxUhnEt4hcSQFjeLlq\nemo9sjljVWG/ITnpxBUrhAC82nr3Gl9FmuQtnX0edNkH3UxDxk5Ktzdy3XpJ\n8iYkMhxgZOqrcKgXaQojXIm3GgEr2QD05bepWkGXLBrMv/RVCZ/p7gQFIb0/\ntYLBKj9/wewT92QYwiXdWKneCg7WFB8wfGc52T5Vfx+HkECbyKZbTM4ZmGOX\nK6M8FalkXAWL+ztDP3t2EPoXqs7RRo+NAzEkPpiHjgKla31omY0KPyawETJ6\ngfjmBFtvJmeChSC4qaf+LNpbmW6MWweNpbdbMwRomgz82/h6AcqAk5D4qPU+\nhLCcRTgh4o3T71IzJNbZFeEmjhut8Idr2NcNwF6fVXj08YAJeXjS5hOIxstp\n+cvCwJ+MksF48vw58jxV7mQE+tAlCOdcHoj1FPU46XuMBGEhS2RsmTdgJdlU\n29gZ\r\n=W/UC\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"8dfad01e23f24496f73952d3b7fc6b7c5f3c725c","_npmUser":{"name":"zchsh","email":"hi@zch.sh"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.17.0+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.17.0","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.1.2_1627418853997_0.7685197368847623","host":"s3://npm-registry-packages"}},"5.1.3":{"name":"@hashicorp/react-search","version":"5.1.3","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@5.1.3","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"a58f7cde155fd3f41ee46bfa719cf8d6e61f08e2","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-5.1.3.tgz","fileCount":17,"integrity":"sha512-ZFhDyhjRLHl90Nx2K5yYwe5R2R40XDamKSIrSR+A2g3uhb1hdPrc72K4i1qPgbcV8RQ8sZSJxQFovzZUHLqmYQ==","signatures":[{"sig":"MEUCIQDH6yrUMIZavarwz0KQh1mClkgsB+Ixx2OUtUBm+Dqq7wIgKEf2hW7BOE4EdZwyeXujjqW/+XPgv/8juK7V9aAOvsQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGt3oCRA9TVsSAnZWagAA1TMQAIS2imQEeJYDTzAIMEFF\nUg6Qnaf+gN7EpLFbVqY1ty4ZAspu94ngBhxZ4ovj3sRDv6o9MeRamem/xKG5\nGx1gAo8Cb1Z1Ba/oYubOUh+pfxZx9e53XkWkSCkq94hNKx182DHQl1023hYw\na/m1zkhdAKkfcbcq+884PKoCLTIDBe+IZVgxj/XbIDUTuHKmwOmF5LUsE24/\nabM1O0F02TuoEnca8N8zvnAdtbvvdFKuczi7BHEzO6HRk5yQ9jOzMsWd/6oR\nw8zZnSnMeyeEcyEh+SgS4jOJyDH9U4LSblzZ8b0L/mkCopdbSWud1jFtakmS\n+RAR+Y433CQq4tG4X2ApUF/hMq9xzI1DxIIlTipw+qsaaLkdfXOB61nSSBUE\n4O77bPEm5bWPVpcRcxQy2dlYf+ri6WXSc9BhziAbmxSeR4KktSr399Ij/epR\nM/abz+JumaG3UkNjPqBDIle/UyMBDwIe1rTUz7bO0Wbssv2OehSndivzZ8/j\nx8J9AqSEDpkUvSFCmF5fl8Fo++kDNHqp32OQdR03I2VySDtqsCndrhMV57o7\nmYMwpbr+xoVSrP4kMWHJzkStCwZ8tQWtcc/ks34TxYeE/OXVrGFS2ItzvUoV\nNU+QxOMIASN/2B0XGQjBVgtnDJxPkZhsqQuR09NGxTC+D/eEGBappfC9nC1X\n/XAX\r\n=InPP\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"0b085b7b2f0e49bac3578aa41836b68d5d8509a9","_npmUser":{"name":"bkalow","email":"bkalow@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"lerna/3.22.1/node@v14.15.3+x64 (darwin)","description":"Algolia-powered search component","directories":{},"_nodeVersion":"14.15.3","dependencies":{"glob":"^7.1.6","dotenv":"^8.2.0","remark":"^12.0.1","gray-matter":"^4.0.2","algoliasearch":"^4.8.4","search-insights":"^1.6.0","unist-util-visit":"^2.0.3","react-instantsearch-dom":"^6.9.0","@hashicorp/remark-plugins":"^3.0.0","@hashicorp/react-inline-svg":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_5.1.3_1629150696418_0.2698497558843831","host":"s3://npm-registry-packages"}},"6.0.0-canary-202181142614":{"name":"@hashicorp/react-search","version":"6.0.0-canary-202181142614","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.0-canary-202181142614","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"e460f0dbdb2be32fca0f19c5b8e29479b54db098","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.0-canary-202181142614.tgz","fileCount":21,"integrity":"sha512-imeEuG5XJojzjqZfFsoxAH5bSYUtivQLESgt2WBezvzSjEyO3A91J+cu8r71YdLy7H/k1QQz89PSd85EDO00Xw==","signatures":[{"sig":"MEQCIBSfaEDTRHCnTuhC5OGVS0w89V8kWPz9CkHgioJEe7HmAiB53oTK4n0Cs1SHarlVOqUbRjl+DgJn3Hn3xHAbw4Wtfw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL42cCRA9TVsSAnZWagAAtk4P/3UFV9X+DIzN8CFVcoyf\nempGdzd0qipHGTOPCE2tSCyx4X/gl7knDY4Sv+Wov23Jd23etPYY7moSxaNk\nYDWJSUFpi5fAJ/MYuMXMbZMlU97PiPAxJ4xdEO7F6NOuSiyzqEKR+zc0G8Zz\nFxBWsi4bljVIQ3cVN9Myc5AfXuBmxNnM1/OguEaY/pGD+28HGOBHJ0c/SYKd\nls0Dwvy/uusaEvzMkwoyW6s7WB3Tlg5FnDCbmTNIbtMY3y35lSHOmyYiZy9B\nq7MMkCfExKVeFfCEwDuf4JTBlmvbDkYti7koJ0vgZ9T5ipBt/DanuZoA/V3j\nSqLZjn3M+CbtE8lstEFnBlAiBBw1iRr+oW6EkypdkV4bqAxWvNsBKkb27pME\nUXYDwZ0O4beDNhY55GEVDwG/scuBRi/ueTAZpmFZ3UzCSRIsmFLzjNauFizX\nL95jbhD/+cCeQfRKsb85hhNW1L0c5TeX2YxXFq05JO1I1cAhR3oNw77ltrm/\n3Kr4FvSh7nfbSwZvifkHDWGjFw0OnI3IKTi7ianLp3HsWiFhmYtDdm6cyxHu\nArg+O+F7aGpN0OFuepuFrGLYLG3rWmbSuTAzIJ/FxSx7g9NeGzf7jrtkZNFO\nkI0ksuy/I8TaNaDv4nghHVJgFuZzrf9UmBpuf+z12b+T7XR9xKyfNYXeldV4\n4+Do\r\n=eAdg\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.0-canary-202181142614_1630506396750_0.964210969238821","host":"s3://npm-registry-packages"}},"6.0.0-canary-202181151955":{"name":"@hashicorp/react-search","version":"6.0.0-canary-202181151955","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.0-canary-202181151955","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"85597e6a324e2d74dc1d3ea939575443cb04c4e3","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.0-canary-202181151955.tgz","fileCount":21,"integrity":"sha512-nBirJhPeT2YGWfQDs6D2UTFhkTp3TM4YT4zDOcSkSGfHAt9u3m7ZaG06RhNoOLV0Sx8UNDZoNYolohP0o5Gc9w==","signatures":[{"sig":"MEYCIQDBAtSQGvVT/Ctc3wLUDVYffklv7IrD0g59IVIseQ+DKQIhAIT4RZ9D83yk8UyOilglb6vONvogs/afFfjkeS8/sf9b","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL5oyCRA9TVsSAnZWagAApjoQAKQWRFxy/OnvDPNIrHl5\nKbgiz9PHNaoqkiP9nXmT2pz+GCDDDwH8IB7B4sG4E1k99VHvaCGBJoHtYMsN\nMITl2yarudJU4WPLtyhGwHSMIsGxVxJvrYJ206/I03sR8O7mnepogjKDalY+\nDz/WJx54pHDfgsRqtOuA4PDOD1PnIEL+fIPPQG1qcB8I1nUiXPbNh/kUDGKi\n0/TlXvr7oenNkRgfa1+F60xtpLcQ+J0B4HBkW3h6QqAR3AnRGe0YIXAf+F2S\nDm2jwe52g90kGf61LdVMqt1t8HVuAGKAsF6EU8Em9MW5r+MZhgyVKaFmvfz9\noxb6PD6+SUsVJYR4M+/uo78V10Ihy8wyKEzV4R7K0qViByOvhR/oDiPPbRQM\nOghanKAX1BNgMOyC0Eo7dGrxWVEdSlMHfiXT35tEoqluRKrRDx4oNpqKl3V+\ndjYDle75ivU+ZbV8FxxjbumNLuiojntZCZoidczYDb58SoBFdh8l/1rUkMMG\nwKpbsdAL6JHxZp2AJrW7c+eOemZtA1fJohC5p6p4kgV33ITh6zlYOOugKr1C\nRCW1f/+JzRWilYJiJg32A8QuVb8o+fORROBZTXj1EWIb4NxMVKfG0OkX1cX5\nBKsO5EtgyJ+HJyADSGfD02Lvv8uWaYUbG9aX3rgQ9UczHllD5hwJgEFfM7h4\nhLMR\r\n=ekaU\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.0-canary-202181151955_1630509618474_0.807510293491341","host":"s3://npm-registry-packages"}},"6.0.0-canary-202181152919":{"name":"@hashicorp/react-search","version":"6.0.0-canary-202181152919","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.0-canary-202181152919","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"e823af542c0b0b9cda9b6feed30459f483d43155","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.0-canary-202181152919.tgz","fileCount":21,"integrity":"sha512-6SpF3hXY8WJezwcKAp5jwVENRIiZVP2+znv9XTItZSFR1/lsdMiLMPFuXCxhZSjmKWcimjh27kLlUOUuV17cuw==","signatures":[{"sig":"MEYCIQCpXi/JPtzFTwvkLjIzaSJHdk7KBWpVWqY5vsOqWBTFZQIhAMBwHvNiPuu6Wucrq10FUwOzpiGbR4F0K/Z52MSlMA0D","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL5xrCRA9TVsSAnZWagAAbskP/R41RV1z4pFcJ0HdzI+2\ntY3cOSSysH8+ceCmSJYSkRPoVfTFKuc0fRPqxRVcQjBXExO8ljTvKhX8k5Ve\ntqGnsY5EJ3MQz+cKlMlrhKh0pUYa7im+DJ0GifELr4XxVfNDdL7t4TAS+XOk\nNpA6w7cZq7mb4CD2OcghXUisfPFjaHuVidKfYPJnPvlWRY8qPjNyWW1nyJWV\n1UscTAQtKCbj0rU+JDyFI3j3gLCuDqgeQOteHSc2VQyWAt1D9wfBUncR34BU\nQcNangkdoHx8ODIMttLHHvCjV8VvqSI0pt4zK9cHXMTB5M9F/he3Ekpcvn4H\n2ifD+bnffGMvqFrvDsDUBboWuvU1pbNwmh4bDjUVjDmv14DyzmMuQG67KBjE\n2KqM1IPQGrp0lEz8Ms40fXTjN20CFxH0QH4h15hifTkZDOq4/Jfld3ocA8+g\nne7mzgjdoXfgMA5msWf7skXQRcSGDeHAqnguF3h936n6UVozE3MXcebDFpOe\nMHh8ItqOatJbSfOXnDEI5iiBVphKwChL+eWMKVpaT/1vOSySrW0CcW4/ynrK\nTJFk5Ut551uOSbemvlcB+QWkR/PnmDh3pxhpGwqxb8nz06TZKxzCYI3wNpZe\nPXE9SZ+v6TIdzRsmLaYhmH2VEbLQ5Xo2mAymqraa+BN3DwE0P44ZaWQill/3\nIN2i\r\n=nvl7\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.0-canary-202181152919_1630510187306_0.7695818606172498","host":"s3://npm-registry-packages"}},"6.0.0-canary-202181155237":{"name":"@hashicorp/react-search","version":"6.0.0-canary-202181155237","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.0-canary-202181155237","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"04956bf6388fbeeda568f0be773d81cd1c32c057","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.0-canary-202181155237.tgz","fileCount":21,"integrity":"sha512-pPp4AfDjHT2XZgg6tfPL6Oi01tYVtMY+HaBDOa/I03rNbxtJ7LmZ2PyBVP7F6+9e4y4FIuAG0YhnWXJ5FZgoiQ==","signatures":[{"sig":"MEYCIQDdTxvTuBMo/X6ApusnUBc8yu3sUP1lbTc9ANY/YS/wcQIhAKnLX/IV7PZplG8WnkEf7XRRovVPMMycC7sFB8y+7ZP+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL6HgCRA9TVsSAnZWagAAql0P/j3ClmGolZ+slJfRfXk6\nCrlcXt5skzfP3+XnHvHjOSpb+tdPNyYkCSsARPUX7rSSXwHGsPShwYr0w0M9\noWINIUXrOLohxXvJZEXZSYv5c5Lj8vEL/RIHc712mI0zTf37ByZ6U4rucvzR\nrsB9Dkb+9COCbM9SKpMlvCsM+aJc9kW+HXH/vIJQqWeARqLiOyyiGniYqIhs\n0VYtiMyJpJk+BYNwf+t+l3oQQ7x6dNohaKst1wHBDwFybx8smALMIJnEG3Tz\nuVLhU1q36HgjMDo//ptn3qJb33gAmkFo6u/hePwWKj30nSin20qSAm/ETuhT\nKs6fdMX+6lUPq8Jl49UANeAV/y2wPtGvc3v6Jd+vF64gPSx2RnatDjHRyLfX\nnvEAKudkECN7cG6lrpDvICVJdXokXqTLgbc5h9TsrlSGjgh5pZOr+KcIaPIn\n4AcTE9Ir/qS7mUB1qyMfmf3k0I5PYZ37zySximNaC4Z/uy9onDTkWfqnPRvq\nDupicdjbzlMZyaTJhzadiR/+1U7qSh/vZziJmICovnXKXm2M4ynx7XmumDmK\nxaQhEarBC5pYT7+pdZN1COrYlEAjvVrShY8lqjY7URrKVqYCWau9+6nlm7JJ\nPqwVbcU1zfmNHMXzEOFm6JzIUesO0FKBI0geAhKChyi+xrpOrw6idb1YyiDl\ngQOJ\r\n=qPcf\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.0-canary-202181155237_1630511584721_0.0025722604748774636","host":"s3://npm-registry-packages"}},"6.0.0-canary-20218116219":{"name":"@hashicorp/react-search","version":"6.0.0-canary-20218116219","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.0-canary-20218116219","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"afc4cb219af73f998625bc3824b2739ffaab978f","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.0-canary-20218116219.tgz","fileCount":21,"integrity":"sha512-OjUpJLpI7pPOc5moGcNkK1aN2NbC3MGoH/9YgemNpR7igf686s9cJp9a8qIYfqg13yVwQu0s4b1RO2IW+30u5w==","signatures":[{"sig":"MEQCIFTUkQuRVU4femXX20DwmF4LfQss1xlEYHAcrHfBDZZbAiAr/wP83gPPPlShb+IFPx/XdWPXnHfI3Riqfksq2I/EtA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL6QmCRA9TVsSAnZWagAAHRMQAKOzp5pFq5801Z3DvCEw\nM/PFIiV5f/v8TxLvH0A7BoGgbsvwUC09+B/z41gRoRfs1vfPymxuxpI83Akw\n/wCsin4oXfhKGexoLTTzaX6VTtMLSHoMPzkk3XwMeihVXIawdWevA0QPp7AT\nr74m1n/6YHtWPXLOVmYp6v2jigS9/W1xoyHzQ9ugRIlD+PRHZsTjjhOCtjB4\nKq1W209eLwwC5H5xuHpJeAepRS+Ov9pAp4/v+8mIYu6uPpDbcLbv8UuOdUwa\n1iJI+gXbx222KSKQuziS6TUrCg1WCi+D3QHtujDdNxSLZhmVmIiEIiEU2HwJ\nAecmbtqv+/Dxd0VCvswXivq6RFTUXHwgUNNIWgWxdAcf7U4gEsrCJyFU3Sq1\nnN5pxFtpDdQccIKwkaYRuBkq0Dfey4Iv4sFvNuhJp7X+Fg4q6aoZgKT5Aj4J\nVwra8uMY0H0d2/tBewnl4dFTM7TlW4r63mjViRP/G0EC6pLvbo4xBlOiDBxb\n3mYrjySn4Jb3Ij9PVEOlB0dH4SVg1IW3RTfTWshWr8vYaSdXDwO3H0hhbhj5\nVuGMaZCiUKBD0aAbXSM5TFVgirYC2WLvjp01tmJtBvlHDCXGZJriqNbLfv2o\n3e0voCZfULA+47rzyae8HiPAnWtKavHUZqAUm3U667HwGelchZegHJOrgQK2\n3yHM\r\n=dAYu\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.0-canary-20218116219_1630512166035_0.19758246466253215","host":"s3://npm-registry-packages"}},"6.0.0":{"name":"@hashicorp/react-search","version":"6.0.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.0","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"d69270947ee8dc2a330d3ea425ded769e7bfb5f1","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.0.tgz","fileCount":21,"integrity":"sha512-1yWrY1sIHNma9oP9k0LUFw2bDQ9o94Q7Gs2qUlCJ/qqTS+ctDUdtc1PPcBWGcnkBw0J3jT5II0vT9iNbJ2tYbw==","signatures":[{"sig":"MEQCIDTi5mxYp013ers0W3VDpWY+EXNuD52kXV8QGSDvnL3tAiAlAsUYprOboEGHqr2Xi4e9Rmfwm8TSeLPHuzzpEkl7Xw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMP2oCRA9TVsSAnZWagAAK/EP/1yvIz4smT3o1K16UlYy\nREmk2T7A0HOjZ4QO0ROiC6O+/Z/7KdOcfGY/UrE6sHwEUSKZDzkljPf9nE36\nCtxSCp+tkhrnOIANejG5FpxwaOE5s8hsHt/1IedFqkHga+0t5pPrShx1jyri\nNj4NFF7/gjn4rOd4IpfiTP5pvZZQZiTtf2QlLjDlhdKnjGAJiApXEpMkE5YN\nuKO2A4q6FLz2231yqg7jthYAGLq/VdRF5lIEK8uPQ2z7HAfb50nBpiw+iJCF\n2xuj9JWeBRFYE6u6eTUsJBvVoO1iTbLUaFXygL2jcFLGDtsHEXn4KETN5uZg\nLzeyynqUx4/PxgYtSTYEAoYjEoYlhHwrmUn/LX26lWNFtKvcmICMMJQTYZRz\nR12XAOi/ascZb44kaDAv+QV1j4tC44MOikr5hdvxlN39GKLToMDy0nfwNJLu\nyorR/uUzjH+nxEO+kjDcREs9z2YCtQa3bY5/46o0vSPOeMgk6utp2bgUI9ZK\nAOYwc5EJ6RmYdOnjAI2MR7kIEC0YNmLIhFJs0E4j7Tk3xETidtCq6ReyXVY+\nX4Np5PR60cU62aXL3DTS9aATfgnsyDhNWbphBDzFXC5MOZpLxfG0yjmoOuTF\nemtJNNUN7GEau1YOpCDEJtfGXX90K9fXsBSR5sYMRevZ2tcKJ8gbVNFRFKNg\nXOrM\r\n=Gl7z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.0_1630600616137_0.6832358525876032","host":"s3://npm-registry-packages"}},"6.0.1":{"name":"@hashicorp/react-search","version":"6.0.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.1","maintainers":[{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"9c7d93bac7f86e656390328eec749b62422b54c4","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.1.tgz","fileCount":21,"integrity":"sha512-HH3KUsnzDTIh7RG4poNA1MxpCmWY+vztkpvNIoA/QxWXnMGA/pX4Xv2eYsu7lKrFwe27oy0Qjbb78OZPsjHYAQ==","signatures":[{"sig":"MEUCIQC7FOBYD4PLkZK/7Z65U3wF3uzopp/qN0tHOTXdCSU8egIgReGTYQj+70IXULwz23wVKkPNwHEAoOHg57WkiRXcYlY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhP600CRA9TVsSAnZWagAASGUP/RpE9uIECY31qtFy3ZDV\nE20ThQ8HxZhUyMqTxez2hsna+wG0e8BaZWObiorpJurFwfWwGsVk3OLfTpLG\nrqYIi8cbA6mrSc6mIs1R+4ZYqsgjSNvbfEBTPjw37Em2mh8WzXa/e1dbXiYe\nqvVJ4l04zu9rY14YFax46X8uk9gkYtMZAhQim84DOxtzxAozqbNNuacd4TLd\nwYmPlpAIfBdL/kxkMwNNAPF/wNlLIJymdfqeH3yEY4A2KSZ9II14OBX2ekKh\nkbcSxyEl6AqjepqZZW4hqgofRUeRZ3b4XZgeEGPj037odeggxEU25s3fsWwf\n5U4KfKsFLmuQFtSv5aWv3ijg1J10dDs9MywzMmXgLsRH3MuSsIguR1SOoanc\nSxDjt/MawLNkiq9DLrYBLkt9ocCoKza0iX7JX+GD2tlD8kxGC0+AGI5jYBfK\nTyvW7inECQsqiucMllKFOzgf5vhgg3tGSpJtp2YiDFVHAMRWMfUDnloozv4E\nLkZ0dK0JnPq/KkxPy+PRpQkiaQcpWCEjJFElsDwtyOfqLWybAQwpKmF0PVEt\nA3oUP2nU9hel+idPI/lOrkDSksh7UimnI/pN7LWR+QQf83qMyCeIKSrecrHH\nKHLfAkX7YRuQFyF8CxKO//1wqdWXbzk9vbPUQwmXAhLL56fYzCJmJWPDefzn\nwK2h\r\n=B/3s\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^3.0.0","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.1_1631563060648_0.03047471797238943","host":"s3://npm-registry-packages"}},"6.0.2":{"name":"@hashicorp/react-search","version":"6.0.2","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.0.2","maintainers":[{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"35d7a4bc915fb161216a563093147c1538262841","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.0.2.tgz","fileCount":21,"integrity":"sha512-ydFYtrzMPO/T3sxSZKwG+pmoeLPwRDy7ei7EhEEVuTQcJadOxZ1pUK9I2gT7Iwip6pYQ1mv192ZvFxkAWu7q0A==","signatures":[{"sig":"MEUCIQDFp7Pu83RqHx4LazvJJJWoBrHl00U81ErsKearnc7XJgIgDx775/0MDl8RGzUxNQebI1YzCV3NBA7jp1jFArKuC60=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61145},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.0.2_1633383755672_0.6811662760551325","host":"s3://npm-registry-packages"}},"6.1.0":{"name":"@hashicorp/react-search","version":"6.1.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.1.0","maintainers":[{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"032e8a38bbd1025f9f1fe89ab92da6ad8039e9ec","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.1.0.tgz","fileCount":21,"integrity":"sha512-ex7IXjJJpW6zTT6Z4cALaJpBRCZ6n+u0E3AvWf33/8iZE03qQJJTx+HU+zBjeLaF4/cKnTHtrrBXb3hsXjGXdA==","signatures":[{"sig":"MEUCIQCqOpb2lvYIFTw0epuwmDkcyzmJ37ZXMSWRNDrBYgajwAIgeG3KE2eeEPmIZO4GGVNPFuAVvcI8Hql1kEH/HONJZn8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61594},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.1.0_1633724703794_0.9056560827292854","host":"s3://npm-registry-packages"}},"6.1.1":{"name":"@hashicorp/react-search","version":"6.1.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.1.1","maintainers":[{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"2f01837a127b77a45c32f37299bca33ed8d579a2","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.1.1.tgz","fileCount":21,"integrity":"sha512-azaXjFP/om+DN6InI/WD+qH9jmLE3/9pqIc2Dp4rYY/tn1KuWyJ5MefvcsbYxIFUVX/wiT2n+8HZFwRfxhdA+w==","signatures":[{"sig":"MEYCIQDDT4LmZTsqpMbsl7rfABRj5BNz88cxBnON8Awm5UzpJQIhAL9M5oq0BzN+W67hQGfyCIZlyLsYqjpD78GtF/OaGM3D","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61931},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.1.1_1633841704769_0.3038171542512307","host":"s3://npm-registry-packages"}},"6.2.0-canary-20211015214421":{"name":"@hashicorp/react-search","version":"6.2.0-canary-20211015214421","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-20211015214421","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"1a10946cf465b9cd67d7f2f4e0943071063a465f","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-20211015214421.tgz","fileCount":21,"integrity":"sha512-f48Y7k72pvrapps0StlxM2B+mXbJF4FTIVjeCiYUAbvbd3Nr/13Lrq6q0hhJ+6Gdp3lpn28Nny77C+9CtFPa/A==","signatures":[{"sig":"MEQCIGkqp55YXdwx+CA9bwQMHMemJvUENeUkSb7UJE6d/afhAiASPI/ezIawSMGSwAF9KiQRBEkQYKgJGAXmHTuIgZTOrA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhktTKCRA9TVsSAnZWagAAPyQP/0n7aTkeO44PA+U0YokQ\nK2IrukqVQblRIuz1X3L8gqegqjI2qgfDr5OKb1MANsszQDIpLLEHE0haaJ31\nE8lw8C+NDWONVlx7Z/Pl0/hMrC0r/HvxiheVHRTsR9XPonHbE6ucqAioKxhw\n/DSVAGbV3xbFoGrlQlJN3NbPKSqr8zsgGLL59vmGZJRwBMdeTxq/poRirfK9\nt4c6z0K8z7rF3c9LZ9oMNNIrIJ6WBqrv7BSqmBx5hi4xX6aBbUSl7M1IDQDZ\n9XPdapr8pjVe+G4tUGPiqfJAvzvzuOTtXzioFCo/UBL68FSilaHb4u/lqLh3\nU04JsFFDfC2vCzxhRvmuZNDfh7+p4s6sG+eR5RFYT1EY5NJK/E72kSuJVwMU\nPR+S9SFnHaEC6po5hj4ymms1PPA3G+GTsRfc7wwLOpWFAVyTnM9LqnjWHoQO\niobQBXOiS0MWfmNJVX1bQSiMzaz9V8xCeXM2FyOs3+jaqaZXJgZ6k4bsBQAK\nC5+OHH6SdVuNoUt0X9w/pl+VVqIJLKA8U7l0wMulJz8kuJphSLJOR6zYHLfM\n8a+p4Xxinl1q38RBCwTT1P3k2k38iZECIsLoTikGulc/QyyJXSkHfkSRcBc/\nyZLvad70x4G7zr8pTmamOBHWghn5okNjjWQIZcIrgKBqr+EP60mCMIL5VDqI\nPCFW\r\n=eTus\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-20211015214421_1637012681898_0.6142984957741131","host":"s3://npm-registry-packages"}},"6.2.0-canary-20211015214424":{"name":"@hashicorp/react-search","version":"6.2.0-canary-20211015214424","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-20211015214424","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"8da964cc168a39a22b60c7213a85172986d37c3c","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-20211015214424.tgz","fileCount":21,"integrity":"sha512-pyANE9FK44JlQgIAX7/Cktr6f7e+llhczXjI+h5U7joeoKiRNuEhSZV6PgMb48KgukoAaXii+bKfg3UwkCa93A==","signatures":[{"sig":"MEUCIQDMBNnZEEuFwfOAOQ7KJJox7LLPSQhdr4HjmIk21vqkZAIgdsm5S2nD98PgWEr0e8IkN0CV8dK3pb//3yJLeec8PpQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhktTNCRA9TVsSAnZWagAAYSkQAJYxzKlQAwpjmTNKRA+X\npvfQv/12hhhtDx5uQNkQqjHp8nR7AYNzD7DRbLxBZ2QMyMV2zYCgpDZ+oL5+\n4CfRNL3hsPzWflzThv7DHJCh5JR7WbH4Wo2LeTShy7LTv2hPxjYWerwOEhoL\nXl1WKIRZV61on12mDeufKRCfWDw1zlZMubWQNCUFUGAbhwz+buGmCo+ymLpn\nQTlQULtIHK6acUV1c2Ss5MW1DE7BepPEekPdM7yRueo57vP+4GYn91QlXLsU\nsrS022yl9ikXCtd80CbmU2vG3/JGtKPcGo9SXjiEZ9xkXT1N9xb7yqDNA0kM\noYzqRdaPYjGHiVnbA7On8S8BaOAhOhZ4PYkjYJ33w+AvP7pVOSTcRZyRj/gP\nuFkapjoBXxYChnyHGdW0vAcBNG5Z5kylCBsM59zBb7cNxhxRR0xmgLefH254\nVpj32GAOWgBPaMNggXhDTiHwMbTIM/4DS4v+DNeIFhRkfuIpIDmaAj6mJJve\nEYNDdwAQHUA8y/hPZK1Jf52Rj4D1nXLtb1B/VPDk9VsCX1g1hP5CN/hoyvhg\nfRKXRjqj1I0LaNlaNIY9CaRigNe4pjMgFPp9zPY+5cU6KMDzmlkLuSjlrj6Q\nh2aLPXBGaAkHp34HBxeHBXC9XlCr3FrVbB/m8pFHq7N6Cz+iw9bTuAeUzDPM\ni1VL\r\n=i/Ip\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-20211015214424_1637012684918_0.5295074838007048","host":"s3://npm-registry-packages"}},"6.2.0-canary-2021101521599":{"name":"@hashicorp/react-search","version":"6.2.0-canary-2021101521599","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-2021101521599","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"3a24166c9081cb1dbfa834399986c8a6e2fd1706","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-2021101521599.tgz","fileCount":21,"integrity":"sha512-gT7sI/iTfRWUBGvhJMZy3aytwxW670cSF8yUZxBu04E23T+P0kvXqyNmV7+IPQKNdaVq51ZQhdRFQLI47Oab1A==","signatures":[{"sig":"MEYCIQCLaC5dVGyv6hTFiwc4E5Ik5vSBwYa7ugWRaDNHZXRT2gIhANHurHA/hLfOQB/gE2HOL9UcjLErd7DFPIQ4Bh8q+M+a","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkthCCRA9TVsSAnZWagAAcSYP/3GHwvhwzafhJzQYe0Fj\ngW6czzWnUMLINYZcTyuUlZCnATMCy1ogVqFOrLjyf3S9VR0DIjArXbQyQTcV\n+JND1Aqla4+HBxHd8+a5ZwSNBpbpsLR7VP62t1ryiEa5lBFxcYmgUjbFUeTv\ne88RYtjIojsrR9nAb6lcZMavUnYNI3hl1TgJuHNqw0UX4LD3ovyXV+soxrKt\nNJaXRuE2D9N5//35N8GVhoaMLHKopxcHtaKYAGXDyAgRsGBvRu3cc8+TvN15\nGhtddkJgB4gEMdZUVCOHCzJxSi99Kh6voiq53CKMSiXB+isIHDYHOJUYoQX4\nvBzixUWaXW3PUYSrhm0+69CjkROqgOs6RqRdYpe3gHjKJlC1KJMA22xhgX3m\nG4PljFYS3DeqpuF2S2snl70ODTlsUIr/h0djpWNymh4lk/QEPtTMAT/FZLkc\n9HpBUpUHgRjpX5VgbkT+acwgjQ4ieE5m+erbxoHD5s4lfAvjVI/j49f1XJ8j\n8D8aRnlSC17oJeeqpTZzOgcBUZ8n1cEcOKbOKILAtjdHAIXusfrdSi9gTkXA\n+SzODcd0aAaR613sCIWuy6ng0FPSZ1PCxsRk6Sf22snQUin6rw8JVVEbQxE7\nSNuEE4d4Tlcfvkkv1NTlN/aXwtccmEmd0uI4hliF6xe4iS2owE3pIwUzowZg\n0xfL\r\n=MH/a\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-2021101521599_1637013570695_0.9036696889741533","host":"s3://npm-registry-packages"}},"6.2.0-canary-20211016151826":{"name":"@hashicorp/react-search","version":"6.2.0-canary-20211016151826","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-20211016151826","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"cc37ee21fe8e3febba8c88fea1df87955beb8fb5","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-20211016151826.tgz","fileCount":21,"integrity":"sha512-FkSyKZH2WXPpzO9pzJlw8Gup9xWk1HVMUSDYoBnuG6AwTyY2SIbZ9/mWJ+7fZ58LqVptvfe/01LEQhEifcQdrQ==","signatures":[{"sig":"MEYCIQCfGiPhCHa58NoEtmCamlE/9qPKMBOxunxb9oOjj/mHPgIhAJsQuKK69QFdk4AjHTLEDy+2Qdz6AeTNVy9LJEavTwpM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk8vUCRA9TVsSAnZWagAAYFAP/0dCPcETw8Rno3uAMTh7\nsULXe0bAOXDMdVEXHcZQSZMqsAy0HjeIcXzYpfLwrE4z5SsOn+PBGueoFd82\nsZreWvq7C3M67QxbPJIOBCIz9vWQdtCBPiuOL7xCuSueUaYakFpCTvpOsofM\nIQVcHP4r3palW/YFiGZ1FObm/rJosFMnsTozT5YSZ9X4Q0qh7P/62qxMvR0f\nfprGXVHJxXJjIKODkHsVzHH+A3OX0v0sg8c7szjJrSruPWFh1DVBufSIEOaF\n08LSpCmR+tX3Wb48Br/HsXFxdcGffLbkWOF3uc0KbIxj1yrChQJ3H3lcpyWO\nMn0mEACZwdDWW5z/X9Jom7E254DjSXjmpgQsYrdh1Gap452b1YcqTb6iGCj0\nAZUBbagwEVWXWdHXi1XdN7amB3IG9xEK8Rf3HuoykJIxG+Ib0JirthikbYgF\nlEfBPQpzAR4hbF2245oDGnjTzaxuZnFDywKOlyE3/RDGsdG72gMBk84qHwlZ\n1/ddBdvAnwMR/kjn0NUZlIGx5z8bIAZcvfMBrYC0npQjexwk9Ulf9rRVzfQb\nq8wq0gewArCNrLydgyDkls358Eu+hdj5FrWP2yRUqwzSO9l0jR8/v28Gurpj\nNDNqyivdVthCd95RwQ7I5zDfWnYiaSbFMPQ3gEBc5mEENko6lBmh8ToBg/MM\nMYch\r\n=gLxi\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-20211016151826_1637075924156_0.4377072647058602","host":"s3://npm-registry-packages"}},"6.2.0-canary-2021101618722":{"name":"@hashicorp/react-search","version":"6.2.0-canary-2021101618722","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-2021101618722","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"6cccae4923c3d72fa57c73edee17e75e34c61193","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-2021101618722.tgz","fileCount":21,"integrity":"sha512-ChBKG3bJlTw4/w+xRI2Ud/3SPozyVIZFPfpKQc1QW8UWItRnyr2IHQCalZnfod63/afUjHjUjIa/3sMY/BgaOA==","signatures":[{"sig":"MEUCIQDhGqfhhlsHVIakDeo1njlyLW8t4AR3pNeo67hR5N2pOQIgCHZhcrXYcMtyXQMvkUXMwoLkpN9fVxcGJPvGtfiVCPI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk/NsCRA9TVsSAnZWagAABlQP/RUhUr4KlkT396gJ63Je\nTFx1ycYthJ5STxjO+xTfvHv2bgnbJ2Mo8AzmpuHclFb9lWLSyN8pGITOcSFn\n5HtGjzAgFE+aP+9qGCBQ2LPaVCZuXS2QHCCDGfICuAxPmJSnaCWatbPB/fvz\nPeNR/XaBSYkZbf23Vp/qgpYxfNkp5ze9PIxt33tKXTjg5aGs3X3gjpBNZiSX\n9YcVZJMYRCpnZmt1rnC8+kE34BqovjFzCe8g4qvH3RrzX0oR/ijekFtBrY7G\nASk9foALLl4ScXYmljvexOpXZtyvubW6YhmASCb/cjuf5DT45vX9aJEF1O0Z\n2C1/B8eZSjuekH4+VKFiAkf7Kj4olgS0YgpMQ9Xo+s43hCXfI8mIiuPsbE5R\njFK0wKGlcM0rSdNZYRrsVZgBBd1dY+fXbplSG9gHZgzXWib8yOUTP1vYEX0e\npKmK125wSKpJSmuqaUdkZkQCU0z4WBM5RDx7fyXIZWOPyY1L/0sDOWJDAYO2\nSq/ilPVkgNvOR41ASAUWAvo0CKsC6E2g+rPwg4yoRuULYawmNmggrz4ULcjw\nd/ZYltaNyFvI7+aR99BGu8/7PkUy36PkX3sOaGGSJMqnxfXbedRXpROTFSXh\ny52W7p3rRT7MFcsK+JNrzrCXJxNj856DfUxWcj7XK4ZenbQhx1eWknXX8772\n5/Zd\r\n=MXpe\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-2021101618722_1637086060007_0.39231788573691206","host":"s3://npm-registry-packages"}},"6.2.0-canary-2021101618251":{"name":"@hashicorp/react-search","version":"6.2.0-canary-2021101618251","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-2021101618251","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"7207652f3d2e3b9d8b3e3e0f5d819dd89b0f2546","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-2021101618251.tgz","fileCount":21,"integrity":"sha512-WENmcSJUr23NOrv83L+ILIzQDr8HnhHyledJcsQu7bIcEcXXEYHePnjp/VyXW+iok50XNO3HKeIq9uJE/JwsMg==","signatures":[{"sig":"MEUCIQCyQV1T7JUqGlV3tSowkTFq21CQbgiEItLsR2O3KILJtAIgTNWUSTwTfNdVFs+qEExeHiUOQ4A1L74TUDmMU7cq48A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhk/eSCRA9TVsSAnZWagAArc4P/isBdCa9XRxx47/fdNPP\n2brEt4wxtmO6baAz4215ZZGs1jnhaSllLeQTnIZpHoylZt4+ZQghAn4T3Adb\nWa9ifjwc95AYtTiwZjhmpUW78tG7E137Ka2CfLNQXyrxYifiV98gDzvOCixx\nE6sS3F2ZtE7d4Ca47yk+WGKfnNpn0J/mxIPL+BZNUSmaCiA+6iOT9Nc5MCAX\nDLfWOwwp69wg0wkoFWUUn6vZ8aRJz/TrAM51WclZyeM+glTiFIKQAhHnL16x\nLVBE1PCWMgFEGMuljLMrYpPGLjDZbvRoy01aAvpZn6KLmhrcdwmmaMrY+YbW\nmaiqu1zX/LuRpG8UGB6dxSJpjh8d0u+mQtlrevZvsLzyNMFm4cg0YZBUjIZH\n0tPjj26gbzrlgn7rk2BgHCXsOSkggbxMz6VroyUxQI+/WE5nVbKSw/GH4pBQ\nb4FeAjgKyD5jQwkTMLDFvfA+zSle3nIQ8vVoB+ohsztIxFuJDQC/zL1lHERC\n9V1bgtDunBDLhb26D3j9DTH1AwUpe7doyglvAIH8StCbZsOySibOVLoUkqHy\n2nEoXoXF5rAzJWul1ndyxOy2/ebF1H0Ptgaw8voWC+U0DE/pbLJr/rEO34Lw\nYVgQE1zc2XOq14ke+syNyIu1Fp7OFF8xuH1dZYzdPFoYsA9K6AYaI3YtRJfQ\noFr/\r\n=2MgC\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-2021101618251_1637087122807_0.7659720130513064","host":"s3://npm-registry-packages"}},"6.2.0-canary-2021101621136":{"name":"@hashicorp/react-search","version":"6.2.0-canary-2021101621136","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-2021101621136","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"56cef5bde08a817d4fcefd6081ba93c8070caab3","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-2021101621136.tgz","fileCount":22,"integrity":"sha512-HAgUM8scZwYVE2kn97siZXyBkavMcFCVzcaGCkWsJitexgA/fLIWSlrj1hkm1oUaGU7SQoIymB8ObP12eHvkOA==","signatures":[{"sig":"MEUCIGJvX2kvMDmgkWM9wojrkoQuYP69gzDRO24ND7kCChZnAiEAsFKxe3GOWPewrbJkFcmWAySMVyWbDTx5dCAeHkH2LPw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlBxDCRA9TVsSAnZWagAAm2oQAJISjsVggza4q35FXeDY\nfmdfnkt/F0nFB1hpwjRDQQ+y0rwDmDNcU7rOt1yoUvqMWlL3lbZKVbhHDxoG\neTUFCWur9oYaDsGdEOCusdaIdLAZtk1ISJRxjOTc2jkQ2uye92+gV7sktfLq\nk3lOyZkZTosF68EhcUPd65AEYBbL6cWPG88XVH2pY6uX+rWretR+UbB36X3u\nvKX+r4UhtqJxBW+97jWLkP79sVuD9MGKYzbnsLAAaqYgrPNzbIzEUifCH1GS\ncl7ormvB2DoFsUeZMQW5LK28KnuVp72IKCatNP0CUorajfNe0qBcUrAK3Ahk\nyy80A5xDu6Y5O9iOmzmyc8uKKRm5fujetOqOmxJXq6tTpEkMMy7Zmf56ufGh\nqa9r/GkNio40P0dQ+nAinYtF66kJYRtBrvAMEiuEMhoAuvC6dSL4tUUV2w6s\nc5MqV79Nlsy5Y8MD8M7B/EfwN9Vu/fl18a/HZIQUV641tRgOlIWZuWrAeRpA\nX/cQIHbMbX715bw6T+oQFT05DmfZMmK6LXdbeocjkCVUaUVRxFCSGA4H9rOF\nAyw0ivIhlIUup+Ut33B6DZqk1Pr8apz6gqkL726rITrGgiITsPQRSbDpeezV\ntkSfOmcc+KcYxRemOYRXlrmhfi4bJmCSKCQaZe7y9vUSgSrrK3G0p4erguAc\nvVyh\r\n=M0ck\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-2021101621136_1637096515040_0.139903373529767","host":"s3://npm-registry-packages"}},"6.2.0-canary-202110162148":{"name":"@hashicorp/react-search","version":"6.2.0-canary-202110162148","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-202110162148","maintainers":[{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"45be43264897cd1939b5a879a40a52da09a5a4b0","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-202110162148.tgz","fileCount":22,"integrity":"sha512-SVU4P3z95Bm5AjwdhFjHVHbNPxXzytcPxFgvhJHMchuMaVnvJN9kDbikITRR7GFpekVuLYrEt/51AL2vcBABMQ==","signatures":[{"sig":"MEQCIDH5l9FMgAZ4PeUBzFuaa9kOLlsAvyTm6X2ihyn26DvAAiAPFz70cbrmsZRqFt9/aswcu7WEFmuyeN99FQUJWe0YyA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlBzcCRA9TVsSAnZWagAAppEQAKSxNPoxMb1L0Ucrfv9x\nWimIca1L6TFmTOnRvsI2aBdrnAfIxpROruybZR6+pPVfa0XBrCUIh37DUaG3\niTMAi6rAiWe+ZzGRUk01V7WK4KLsrM4NC9OsGlbhePCiJIuKKdnyHdydh4Go\nbjWVGczGY/1iDGmwrTGoMfxME7iLaTXjwpWDkkELDGOJJUsV3BAW4JFvPPUr\ne+KqBFDC5Ar8X72+r+uSZCsmKa2s9mjEbWNVzgBAGi2tv+eJD/ywFNNEFHPG\nrEBvSUjZrs3eOJ5EKKYBdLY0CxbaEDxlWprzANuiTypnT8N1MnU3tdhlj/YT\nxqLRGCMzdg1GARINts1p2K/HA8IRhmp2m5Yq+ovhbOPdb9n/Yxiaa5cz1mfG\nUhKaUStYQBi1+uvQ2waN5yVeRHtxLPK3pQaVmtTj506DD7cUWYDPB02Hc1V5\nmN/KsEyn1av6fGDQ/YJrhML9/B/KJL0lmpvAZM0IsJn9kHGMoH+02x47FzFn\nH5ZW93HvSsWkPIkWYg7uSZB3hqMi9iTQKRi71ziCSmCNOn2CEV+a7GQ18CmF\nrCjiBC8y8wJZZ8Y12mLfrqBmSxInhMPkc1LomfxzHCBW7hTAF5bd+fPAzj4S\nkTaC/KjI2xifgSJF2o88XBD/UCFeMNbMzQEOF8txHK3e45PTEF7lwecqiSkO\nm9nw\r\n=iauB\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-202110162148_1637096668195_0.8788011170967176","host":"s3://npm-registry-packages"}},"6.2.0-canary-2021101815538":{"name":"@hashicorp/react-search","version":"6.2.0-canary-2021101815538","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0-canary-2021101815538","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"158ff0dc012765ea1a5a03989c9f0bb0af544a23","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0-canary-2021101815538.tgz","fileCount":22,"integrity":"sha512-mAdY5KfBJMGoZlI9gn4x53NfHlOiBmtlHOT7U69S56pnG4ji9x2uazlGS/zZFqCLRL8h7Dx8h2fZtqfPn0Rpzw==","signatures":[{"sig":"MEUCIHyyBGaupbMr7GRCP7Tc/Xe3v5sgUXVEdH6LaShCpcGnAiEAq+zeZ96tkCvVc8bCEC5ymiht7tYbbFi7xpAyyYmIXkw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlnb5CRA9TVsSAnZWagAAgTAP/iiMYDobKG3XmcO4B0Qy\nU0gyN8bDCIq72FhxmpDMOVZPKyZvn5U64ftjaPvJBG7qDVg74/SMq5J7MRms\nVGQWt2RVgsVAsACAsFs0cT6sL/w4K3UXgdHUCV7xuVpRnH6073Vq9uf5BeUF\nMFP0IzuwX37niabplve2NNpdUV4+vzqV/HBXTrmjW0SPOiMKwmhE11TLlgYz\nF6+hEmksLIK1DLiJWOLhP180HOZzvs/J7s7jzNzz/ehknqaqmt6lK+FV73nq\nij5o0pSWMZOWMyP6lIk+HF1Vf24m13XyzVqvvxLKgupgqW0QeNfaSVw/Y+mD\nF04nfo1kFiaOfKvZOsQodqvbVq3Nnp7/AQ7RDxh503YL/77SSJ5o4aJQWV9w\ne2lm4lj0G8BGgNO62M3u/wRrHe2ppZ6a1LrUyROvjUCPFgbhHp/yWJUxVcOY\nx2dF6T2btJPVsf7elUOXq2gflGOp0GR4RJytDyGoHSwYt5X4E6cHtgvL33f3\nnz584DXigywyCMkVpzwfwIBVo9oPCLVLH466oZF7XkbhSRNYKEZmk1zBNXnp\nmC+PjTWyI+rzFi484p9APGwZMNbbezJw5V7fKb+Mi5tD2sSXJg7pHhlw6vH9\nY8r956jKC9X+UzxxxZAE4ef02x4xIzDA0DSXRzNwOj2n5nzAxfXCy1d2TXpS\nMZjN\r\n=/ia0\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0-canary-2021101815538_1637250808951_0.15326415549876082","host":"s3://npm-registry-packages"}},"6.2.0":{"name":"@hashicorp/react-search","version":"6.2.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.2.0","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"973055ee688be64f17850ef6b700b4e5a098acfa","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.2.0.tgz","fileCount":22,"integrity":"sha512-ogmhIHt4CVcBemcVVWgG7iECXwFUoSTPBT+4QEH0gboLfYckXGGsYvMdg5ujf/7NOCQ3NgQd/G4q3VpQts9UgQ==","signatures":[{"sig":"MEYCIQDQqgPSqIfNk/kPme4zv54BiBMmUNxMwo1hSpZrmWLuxQIhALLE7REjVe8JNjXjJ7/OHonARy30yBwXsGePnANLsscC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlo+pCRA9TVsSAnZWagAADkQQAJlJUvEbyP4mu70wNQpK\nFTerKsI8BJTDqHIaUc16Oajmnj0/PHWtGuFf12RRBV2J+vHEprVnWUtiOVVZ\ncToauTTWyv+MBDiZPiV5kzj+q5IJKOk3rrIL3s45KH+bQLdUwsCwTBdo5BA0\ne3g9n34FBfl6FoKSTp1FpHxSy9bXfaF39apS6MPfnL5z384Wu7xo9qP9ccs2\nqnIpEpMpFwZ4aPWSMfQpyEWCm0q3yftLeb/oHXcymI/F3vCGebrzNJXTzQyM\nSh/500xMqMW1uctjUlyC+EHfasHAd1IwUBaR6DVs561o8gTxCG2f2G1eBAQP\nWTOkbteI10wuq2khzvX01DlfEDr56Liuok/vkQpqz72tU+Uqf4/wuAK+qfid\nEybb5fwhzpUVf+V0nhX0FPOBWZX+st5xNi3KQeiRa0290XpIsYuQadHidrhW\nab6+WnhvGuGREirbeOlX+nVODlzsxiVkYAD7pp/Vz6qKmyvnwDmbvLI5QZ3x\nxD5ff9M85xFlhLstCb+sY6fhVgcngJmGfxkt2HO4a9fyOqXfB+WOan7vfw1d\nrNYERIiZRE4A9OfflausxizXVrDGBKMPqt8NeGCdyj2Ov9IYHZTQEEB8M6wP\n2eGAKty8PgnYjzkvma/BybipBKaBVqBeUFsNym2reD4aqsv8LYj8pFj/3+Se\nRdYr\r\n=XSzX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.2.0_1637257128914_0.2790514028451361","host":"s3://npm-registry-packages"}},"6.3.0-canary-2021113164434":{"name":"@hashicorp/react-search","version":"6.3.0-canary-2021113164434","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.3.0-canary-2021113164434","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"57dadf073061ac0e4142c0231f19fd7d9d6fbc3b","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.3.0-canary-2021113164434.tgz","fileCount":22,"integrity":"sha512-vnGNssX3sFQh5jbUaBAOF1qWwWD4u5F+VXxuFs9vUFi0sgspJtgzcPUyNWZHzOeC0ozXKy1AQ30o92jtYweyUQ==","signatures":[{"sig":"MEUCIDap8CU4NnYODv+8U7pyWeVYKFVzP00ppLb8N9KIkJ+jAiEAhn8pVEmXeRQ5uR3HUR/4NaTZBiF+wFFeQi2/ajEzTjU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqkmECRA9TVsSAnZWagAAvAcQAJM05cwwCw5Qjq1zyg9s\n/IRATcmrAevkIGKX4ag/aK+cdYSPEv62sK73RaTg/eeKbf2rPBs6rti2l1cP\nOGX2cOSmRf3+ucCT+RxnVU6Wa/svipef3zuof/4OeN5D+uSFcQtvGsWA2Sjw\n50+S8Hxdeo5AGvjeWGl8Y878hUAAnFlfLlu56OiCBlwh8YRNu/fUzttyFEyz\n7/NKIPWpDtYA8nLm8rpQXOnOwXUSKtrZS/hNpDjJoP3zToc7e2hhB1KEJgPn\nARQTpRAi4B0XnGYuuJnOftHr+v+zGhc6rticcm8xhUt19Bf2vAfZeU/bq5aR\nN0xGaZ4sz7311mRX6/1P+sLLdxw6vwPEkZoVC/0eR1MF1R0G6wDJLKcLDz3y\n3YkOskX9MO4R3P6q9sCds8TS46zDlbRiYFTvy5DuURb0j7N7TZwmiYgpd5Er\nO9pM5aEYhdO6diMOimW988L4MGcVAGSrx/SUebMfTxPfNms9hhleggjKFkvS\nxWFjhRr0T6E8IS4XqY+HsD8+EQ09+Rz6pOjp3MHCmmR2FWxKhWAkwiJoZGFO\nI0g9qcX3necgIhBZ1A5Sg9HYoY6xkCFYG+0aa5oF4TxBjGKwVWii6N2bHmS7\nYi7Ioz1FW+YWVf/tYKty7cxmqvNM/jUvaivUPruJUJ70qUI3HFkLNm4dXrkc\nD82e\r\n=XUNJ\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.3.0-canary-2021113164434_1638549892457_0.8159804744064036","host":"s3://npm-registry-packages"}},"6.3.0-canary-202111318446":{"name":"@hashicorp/react-search","version":"6.3.0-canary-202111318446","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.3.0-canary-202111318446","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"8365b65ec68cab81a4f221b35234532010c85516","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.3.0-canary-202111318446.tgz","fileCount":22,"integrity":"sha512-HE6JzkxqBrgC9tH9ZWfmn2pfNna8Lovn1oxoaI44U/aGAUw989HpdmJgzFHGxRP09nwiNng8JBnDrqq9DhLqZw==","signatures":[{"sig":"MEYCIQDvoC9ROc8c3M0BPxHjcwOutcm2uSXBNUawzaK8Gku7tgIhAOR48OvvdQcvGfKNDgAvMyhqD/WR9JXOtl9XEvqUmQwS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65209,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqlxRCRA9TVsSAnZWagAAehIP/2dK9cLozzfc3RBltlBD\naPIee0KxQOQ3J6u87Db7XV/i3nv4Ca434CQPesjqOOF5lLOHZRpSHvJvGUvc\nNrBc1iP2KixnO6nbJlu7eTQmIyIeEeUglPseoZBMDSQYpaoUcIMtzl3zKtHF\nB7no+H8ocQnCqOZuusGl0mK9xJPOlODQ0w5lELg3r+nGPPuF/1EOUOSVmemE\npYv8h1nVEQExYxWbxHHU2XIZ42zJ3iiZ+3zVWEchb9GTGfmSc+mrtSO17ULK\nbxmW8qlNlzIOLAiZ4DBiTn2w8ZKuSsEt6yuzZSxEKJdqCWmipt81Bt3m2Fqz\nyG/M1r+bmGnYYuQI5hMjTXp4BiMHzEtqL38aHMXKalV4juE/a2a1YlMdv5AO\n7LHWG+/1xWJFgolR6dEjm6Lb+91TADaA+O/1TwKQYrOKJcbPhLTmc40X7ozQ\n/RAthQOFdF+4S+y3MjMU6PY0gHB24ekGtAhcx3fXDELv27BqPXstYmtKYDPw\nZbAiGPRv6DWNMeVS3tSUtkyeTH7xFJgFewrpcgh2ZYNlweYT5oH+ukkLrjL8\nN4nGsCtR3TrioantJNd9ThUUrX1TSf2JGLXlNBGZTidxOgVgVHG+sYvHexc2\ntAK1e9inU9DmVPlCFGJBTwzL8KSm29RmRRZp+4zusKN+IvONPwzBR+1FUD85\nXwbJ\r\n=QvUQ\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.3.0-canary-202111318446_1638554705047_0.3084733883333657","host":"s3://npm-registry-packages"}},"6.3.0":{"name":"@hashicorp/react-search","version":"6.3.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.3.0","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"b9e60636c38fe48b020a08c8f0eb689d5496b7f5","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.3.0.tgz","fileCount":22,"integrity":"sha512-OOc5c/8pAQ9VL0pMgVFknp04hD8FdDl9kMms25XZKG4nUitxE/9BeW02hUdTgNryqqq1dBaz9gU6rTczlePAmQ==","signatures":[{"sig":"MEUCIGMfYdbfjahrdQPawYdqEc3afY1yq3w9cpzrbONCB5v5AiEAsoSsEy7Er8n7u3rbt8qps7W60O9ljXjj86Ut8MO+emo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqm0ICRA9TVsSAnZWagAA06YQAIzbyDXSTj+u+H2t69vI\nAam5x6H1SYKrWeTfPTGQClytBDb/EgleksPl+ZPDwrwztlzzLVyN2AW6BFQ/\nCwIcExVMw1/Iqn0IGVj49iPudw1mrXE4o4d1xCz4BgGLHwMAW6bKscMwrDId\nzWsZ1ptr7A/bzSUXUo9ApWoiXf760Y7rJ/PYFwF5tDuJXunylI8sk13sY5AT\noj/F+xpNsasPcXKtzBvn0wmS6FPJGwoSpQkCJoUQA4eVFQlcL5mG76HJ03El\n9oqI99KKSqA0TgfffLNSs1v9mPRx3lL1vt34bQheBVV1kGRmMEhyygcdi6t6\nhS+xV9c9e5JhdKRPcRu2p0yNBKgRTOYb5W9DtDQGg9Y9l03ny8M+04oPkWjq\nqhcHjU3lfJFonRR57U086CaJWVl6Z6efqxZSAk1RoHwTQYJGk1ne6WHVZVkf\nAkQlGK/xck1/QbZupAPLWGuFCJNOO072QZ87Fv4hMsCJT5S+Z7q5n3/zbgXl\nwgkTJN2osPN+2/gtm81EOKi+eZGWnDRnmWG0laiTvr4KJsCv7dfKz1Py6wtX\nDebe2nGDjvax5OIByZ6VR73cxFypsadJKPCd+EjUUl5QzL8CSrCF+Ih1jy/V\nrjmwzznWLWpnh3O1JjTOIXi4+jaWHmR22ne/97xERBwy2EYGSFm5Aj/GFioR\nbk0C\r\n=OdN4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.3.0_1638558984544_0.5775798614479015","host":"s3://npm-registry-packages"}},"6.3.1":{"name":"@hashicorp/react-search","version":"6.3.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.3.1","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"1a7e6923e17c106e05cb76a358497df50531f7dc","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.3.1.tgz","fileCount":22,"integrity":"sha512-gU8J4D9SfaRmtn8tsjvRVq1J57Uq8KuYmok+RZzgaHpiPFLyGoIHy1MyAfxOgFptFtsJaNbMBhulEC0DjQ6pRQ==","signatures":[{"sig":"MEUCICZo636imHEof+aOkPAmplC97QG8n6Jz7S3G9nl66NsTAiEAxHPdpsKNY/C9F0IMtZqySvwWmytaA+DliAzq8zMhTh4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsmIACRA9TVsSAnZWagAAwUEP/2q+i8EhrQ27uDfXhVZh\n40f4MtWSBBkuSHzk1vJ4lKN1+mAsaMRJEpMXLS33Q6d/5T+FqpJtB78/Ov6G\n2TxRR+HcPop4vXd9CFRUguAtKf2hHU2I0k3lim7MWz6hJAK8hrmop+4STdFL\ncW7GfTWJ6m4kkTfE+U8qb0Y6eg9TwRb0W4lJi0c6D/5r4PuWBwpsNHy45hQ8\ndY0IkjIi67K/hlofY8l1svQ9G1HUops26shVirog7/umzaFUaVJtRGsdo6uY\nKSq3qlh1InWIkjl5lmd+DWy+6cuLJkD5sJnYLCpEYS6t/AhqDZrJZ3AwvyfT\ngcSoZPlo/d03bVRKsAzO8n5MTNJSVwQNzG2P1019qpQ1F4LJI+HvsbMp5XuG\n8/Znu6Lzh/HSbhWbYZ7po+84jtqGqv6w9GPxMO384pGi5+ZxKwbF/S4y0J/g\n2SuTgl8c4j/k8dQudiUEokLoRkw8I0l2yaXq5TFwSgEiUNDyS41AiS4jEta7\np120WtY+tnUPH1A9zka14lyB42ZMBjXjb8AGQ0LSb+ekhjKUHF4VR92eh169\nhuZRgkX3EWtSijkRNeXBMgkwprO1e+LxEcY2178wDKfR3yXG0qF1TzZy7BsG\nq+Ku6BQ5GCPYKmxN6489zzZVY0UeIKyzokG7y3EBRq4MvhvSeCRD8IkAKp+6\nAZvq\r\n=BFOI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.3.1_1639080447900_0.23003287673280814","host":"s3://npm-registry-packages"}},"6.4.0":{"name":"@hashicorp/react-search","version":"6.4.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.0","maintainers":[{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"jescalan","email":"bel37glbc@relay.firefox.com"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"f60205e997fd55a9de44801bf92d5c0b41b04f1b","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.0.tgz","fileCount":22,"integrity":"sha512-ITAvD5QEc+B79VTYC27kdx0P1ynGFPUwed1ttUxlAIhvzasWjKeM6sS1rT8oFF+QcUZqoE7rKq7Y8k53sAB2Lw==","signatures":[{"sig":"MEUCIQD4dUHIiOvpg8m78tiEVO0lCOw0Hgm7Pp07AWZnUtryjgIgfORnmOZtApE6E8X68NbgbbWN8lSJI0ifd397jI7NUUI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhukASCRA9TVsSAnZWagAACQUP/1XS22xGgw6On1YNGn9+\n7JJHYUvJFoIa1SeBq3OlvT8PZHcJN4Gd49KiN8aFswIApntQ6yOCQ9zmwaT/\nxuaakgDKjFdeF9hV4+m1go0fMfyzwHoJIGruBgde8pbtHNYaUXpaD6wreJWW\nI0JeGrDk8sUlkuxdj42zhxQZdCsQ46viggMXE2fMJSBibknbwq8/bRQWbGz/\noNDd3OW7mltQy8boIKRCxi2MN5+dx44LGO+RcFvGhE3xdHHizhFVACBxxoji\nFu6HlCpNISGyq2614w2nwXu9if0XHyN6RGaHxzv1H7SX9//UxA75gTq4j01U\nPcxCIlbA2quUCSEBntsCBMiVgAcLkYIurCZRQERU4+zREsXlKroqq6lHlZTf\noW/pHYxiyATV5VVJE1syqVLI4M73E61z1BYp2k2/rYcWy7iiWsBDLgEwObRa\nvM6qCQoOyrNrF4Vct9N0oOfBPW/Kht2DndZDJDVi6fpKiQ/yueADPxym04bb\nVJKSXVEMS4M5AFSxchDslJJnx/7JQyNhgrfdkDE5gep7ddd+JmzLYqoCaYNn\n39bIjdco8Uj9/Hc3DEtrU/ZJUOKn/vL9VpwDlDSJnZtIkSghxDDjleCix11a\n3lOkYqpNvWnJooYZzfTt9/wo7mllyebt/d1a3BrtUnQRJrXkmwN5UfP2kVTN\nmHYB\r\n=Xtre\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.1.7","dotenv":"^10.0.0","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.10.3","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.12.1","@hashicorp/remark-plugins":"^3.1.1","@hashicorp/react-inline-svg":"^6.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.1"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.0_1639596049998_0.21854719416205914","host":"s3://npm-registry-packages"}},"6.4.1-canary-20220128203034":{"name":"@hashicorp/react-search","version":"6.4.1-canary-20220128203034","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1-canary-20220128203034","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"692d1cc7eb155f84fb91e1770a7962d70c9c7c3c","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1-canary-20220128203034.tgz","fileCount":22,"integrity":"sha512-V+7bKSVFDARXmYnPa4XXAN+3OVnu+I+AYkBSVy/16zPPSj1JTZU08TwIFRolanKIE7L8aV0jlvLFUTG1xKeXRg==","signatures":[{"sig":"MEQCIBxBXNEeKY08f/+ojUFUQb6zMqzireT+LMWo4aSdBM0sAiAGSWmuUiYY1a/U6yF4tC64+riXjbXfFgx1onMZCtX/xQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9FKHCRA9TVsSAnZWagAA8AoP/3rpWt9clZJslCnYMkJa\nTBeAFej62R64FYhA1qf3hA/GsyR+RzNjk4tzpdxksjf7sXZ2IB8YdGgbNVyi\nXZNoEIf2HeJ1GbsIqe4xAePfSXcdsa4DcS4hypNvBgNv4/KpMDy9KDAZCiFM\ndUkLn0Zfm9eJ4/tQk2EpQK1rpHn4m5KrPu4iM943wrzzkMYi3rII3Mswk76f\ntIGXNd/dMv3+av7LxYcijVrKfSV0Q0dh4fmJLs+m9X9Mpffxglw09RBa1dm6\nQhjkUjyQyWpA4SgU7f33E9Tub8gde5s7s2d6dqU5rwNuZUFPmXpDPaHp1S6/\n84l+ZY5FGtY7UczSjqSYIIBYoB3YWTlvAX2HQ07aokpRTWhyqYzBij7CivpD\ngqs/4/0cCkHw+YhlEaoi071ls7z3FqoTTtZ+Q5mXuEnWQCh2Ak0tf2rqvapc\nQpg3ZfGF+ehLXOJrNrT/F3Eoot7ef+M1KNOapPXM/q8gkp2ucG8uyBSVJh7I\nC5dwdIFKOWsxwC1H3DojpZ//uTISYh5OCZNlKH0DvM733t1pPUuVbh6MNxR2\nse903vVE6z7s4WaOq98/zgKWzFv2EBEBYTx2BG+GYc5Un9dbEZhybcCukBdS\nbFHNPS2JyP7K44l4xmhMfcpNH8euiIhUSwzjegK6+nu0HG5L29qzClF/t/zo\nBZ/6\r\n=QdO8\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1-canary-20220128203034_1643401863762_0.9557623893273508","host":"s3://npm-registry-packages"}},"6.4.1-canary-20220128211110":{"name":"@hashicorp/react-search","version":"6.4.1-canary-20220128211110","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1-canary-20220128211110","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"96077bbe150c8c7948c87eccfde7b8fa4afcdb1b","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1-canary-20220128211110.tgz","fileCount":22,"integrity":"sha512-NGIvapvgbjndZVWHEmqQpf14WtCvT5fz++tuAYAUm+sKxOTcsnqdldtKGrpjuKlqEr7itOZSOf/Y+axahSry1Q==","signatures":[{"sig":"MEUCIBZF27X5Ec9FokhmqNvXD9+ziuqqdqud06JwWeah5QNoAiEAz19Q40dYZBS1oXdBbxmBBaYjkMKeZvhhoPk+oDg0Cw8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9FwJCRA9TVsSAnZWagAA2skP/2oe4KCDERoO24otxkxU\n4NTZlguQTDmBz8HjMDm1tWXSqYwwVW3nRfPk0Pn6F2uq6i22VbxRZqZxEftW\nw9TJ4t+fVoeP1sz2fCeKqFcsJpKBX+EUYYmAuSYE76gsNUsj+en8BxJYmiyC\n15B+RaOYPivAL3YZZu3zblDPMLM8UyqpQFC0PwAT9h5x+Nv+asp+r7qCg5PD\nRxPvBFRNFeEvcEbFVfX29NWcAq1qOjl7y2RI7/Yq1xTwX8P5M4gB693bzP6o\n2O8Yeb1kPkLTnYAfTtXvs8mA+wGOk6RBA3vsaCJusFFbWrX0vbU57xg3xSiW\nDTwnUkxe0gwhwVe8DE2TPH0nLDs/umbWnvHHnxByDOGnGTkDf/MeCZrSrH1L\nblds4aY1Gn/HfEVsED8HusGbYyH0bppiS7YkzGiwl7oNOR6NLkANes6VXtk3\n3ZUSmKu4L7PK/EBFNMI525lvFbfD14tgpdAXwvmoXY8MjNoWjEH7TEStgDhs\nvhMC6F6/TPxGwNwBW0czxc6Ydn1SnWIqlbpmx8RTfEixbR6wvJWn0NWkcXHy\nMUxG/pYQFlX0R63/mWPYiGnYtywcocrH2PLMrnh3vFVx8l0O5/XIdZoKm2iG\nGNgvXrc07pG+Vx8GlsaCResNey2HorMn+SV1E6wYSg5yRi8sHpEhM4VarMxM\nLqSN\r\n=oXiC\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1-canary-20220128211110_1643404297718_0.15376015364960582","host":"s3://npm-registry-packages"}},"6.4.1-canary-20220128211122":{"name":"@hashicorp/react-search","version":"6.4.1-canary-20220128211122","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1-canary-20220128211122","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"c585427d36fe6fa739b7a007e427aa4bff4930f8","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1-canary-20220128211122.tgz","fileCount":22,"integrity":"sha512-LU05EZzYu3KJUVo1C9b+ar7v+dgCFe5R82oDIhg+1DV4VJQ1NiX0WmVowwwLgbPTpFNqDrv0M9oU6ogY69XHdA==","signatures":[{"sig":"MEUCIFw8Tg7K5RJmFzrfPmxDRo9ngtxgZ8hDxk/oLpe3Q4IQAiEA0v+it8kOi7w3fF0itBYjZgOXbv8rDFzYkJCwsxIJlAc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9FwbCRA9TVsSAnZWagAAeMsP/RRz/9zpDh8+ZN636NIC\nxDhhF2LXtbr+LH+Tbw0jdm3A01AuFvrcz6obTOxZxhCFiFEzqqKEWLyn2GkL\n+yIOUAqvdXMwJoTyE8a1dlPAeXAfvtsxSorjBX+cMgDnSQpMlseZ3ubPpQAe\nmQoLLeWIkwYAAYNPtdf+VzkgmKllQ3b+2afzFg5ZqvDUx2FM+KCmKEK1uzbr\nXi1/DH0bIDmwKQsb/Arfao+HxV5PHdq4ZohD6RFHun3RjdBc8DryrEbCeQvQ\nYWlunGqpOJ+g7GWlpG/SbVF8IOwZXdetCpfrcpk5k9g55MtTzA5eHajoD+QB\nfiDjynyv35fGd9BaBaI5SopvI6MCFeofdesrSmniETSeOjD5hCtEPA0iwRff\nuAsRbpcgw43+7tfl+SgKa8Q1hAxWzvXD16IgZ2H8s4ZFFtDmcN8eK6/VwAUb\n7caNEPncFpNvAqTq72RIIy2zLg/NGXwEiJbuYwMyq2UZGyw6u2BaAVGcdyEV\nJCyaoZQZ5FBi24MQHdLGjdgFNg2/w4XeF1iPBCwP3x6dPqj+iqRHZCK4ZkKm\nx4agY9ppZC5rDXrjOitwi2OlG/aKQl87bddPgmo77Iok2a2MpwjDrc/W5oEe\nEzEf+EGWx3Z3FUOp97bS9oM02UMv8Ourg9p67l6p5VwzLwdWub24QofEr+D0\nFVNs\r\n=E/yp\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1-canary-20220128211122_1643404314705_0.8177354241509918","host":"s3://npm-registry-packages"}},"6.4.1-canary-20220128215319":{"name":"@hashicorp/react-search","version":"6.4.1-canary-20220128215319","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1-canary-20220128215319","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"220048b5561cd0dee169c15812fe0188191ebdb2","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1-canary-20220128215319.tgz","fileCount":22,"integrity":"sha512-GZiDQ74ztI7YPAOcplROP6FTvQ626zzSFM4icM4mxFW34MhoufLRXq7lzdPE8Zz+W/rDPz1qtghFVxQwhbBYcw==","signatures":[{"sig":"MEUCIQCTOFE/1gXgFYjDHUiA3WDymcJ0iJxpBgXNj+Oiqt1eowIgXJJJLZOOxtpPK/uSiUYoEoX5OxafWesc9r0gE4wCD7A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9GXqCRA9TVsSAnZWagAAMDsQAJcZxwc76LhqiUuEI2At\n95xkkBTgrt09n6sj327UzJwadNOQ5/aYUfLA5gh3EGFvtt+w6gWF72Id1Kvh\nG7er0x/fN7iLGOKrgmbpOlfye9qAhCJuUp2oG3tfJ11Adoj88D0easX1dUqy\n1zoO/R/PDUHYvzmaE+iLq2peNKLgrdPOg6UvY8sVP2A3cKp5TqoMiyMUo0ls\nmeg2g0k4SjsHE1ZeMvg+Bxy2w696vTnv+HBUvvK2CCeh0GpvazhBbasOFL3l\n7FgKdNFPyYeyzCGoNp4nhg18+lfEDZslfChMSZTJVWU4oGj0cLjVhzPUt+41\nE4I7VDleIeuseq9mwLyCGVxENCaPbXrv6DZuF003hLlW4d5Qxvy9rUcAw++u\neohoy6yl2wjjhfUCsemMvRDFHHz1kgMIeMO2BL+zfVaxV4vAa1d6mOU0LWT9\nGAMhkp8/MYXCBJ6dVPeJjlCyIoq5OG6pnD/dFO+4l68mj1vvptVslC3nYyeH\ncAeq44sCUmSsXoJ0SQrtiBGK27iWtmnFIhj/riOVoXEGANzKSHdWiDqR1sTg\ndvLhkIh2lcC178PPibDobxBlCy9jEaJI42LbVGUwoNV5Eew+zIppZwLRDb8D\ndrU3NPsnzq75ZbMbaK0D1dIyDsCXMiqtvKjDoxtVaOl99nAf/c3aTknsVB2o\nyzf7\r\n=o3qQ\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1-canary-20220128215319_1643406825970_0.8431038780398872","host":"s3://npm-registry-packages"}},"6.4.1-canary-20220131194346":{"name":"@hashicorp/react-search","version":"6.4.1-canary-20220131194346","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1-canary-20220131194346","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"4350b4b190f44cecdcda17c8edf6f7eb3a5bb705","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1-canary-20220131194346.tgz","fileCount":22,"integrity":"sha512-ODqyz+RBCNPJFOBwcMZll14vKn44+x2VN/8gcSa/8bSGsfIdQEHRf6FOIL9oiN/bAsfsPzIGIlLceStmJt9Eeg==","signatures":[{"sig":"MEYCIQDawSXa07+q4xHdMcHvbhd4Fw8pAAg+ixHgfCBDugg2bwIhAM01Ax5j8cl07TWbSGB/FmAa9Awg6bhdCfrjqdZAqMRN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+DwVCRA9TVsSAnZWagAA6GAP/ipRqfC5PTpWlNFaqTM2\ncehQqeXCoi6c0txbOobbC+5bY50aGiSJlWWSRZhSMXvHW440dCTdBRo6DSJC\nbHwdCEHB8sXg8J6pVDEuYw0cfo/ngtt63ECLiMKbetQV/aKMfHUH/T0U1ky3\nwW1YGs+3zCf0FJn8j8Jp57PSNym05OTXG/UF0iX9wUFW5CnYjAB+W5TASga6\nyMUAQqO/ARRPhCbTOxFBI16pZxL186ILPlrRy4GPoaLmtO0rVYZz7yGMyEPb\nUNbotD6hS/C3TImtGlvwqKiqftkBb+H9+ZUlAr4EI7bkWZxxvUQaJfzApsUr\nOTshuupnFctH5MCittp6ZTM47JOphLjeZuSOmPQnFuLsM+lnRcNh9SUDP0Y0\nCn/zE2hyJNgRv1dG9og6vgF4LJqo/cNbSDlI9fSMkRqFwh2DHDQBwdROq0PY\nKNvdDvB+82Qaru7IPUCEtXnune3iZivz8FbpbpZenm/ybpjOGGvhSdPc2O1i\nl3OTOlBHIeA2gagXk26IDm2Ef4ZU9F3zmbIjI2A4jHgMdYV2IEVkLeysHkmZ\nTu5B8QNy6NxfUsdG42n/3Ax1+Y3muF3FvLwzfZJ0g439d4cYKGbOQcju0usm\ngc22q5oN5XyC7O21pNOFV+VuelYOfzeEA81JGFjL7W6hs561c0EvX9sUN0qd\nQ/H8\r\n=Rxcl\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1-canary-20220131194346_1643658261251_0.3052142390542001","host":"s3://npm-registry-packages"}},"6.4.1-canary-20220131233103":{"name":"@hashicorp/react-search","version":"6.4.1-canary-20220131233103","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1-canary-20220131233103","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"249785a0507328988587ef6d63950d75acb9dba6","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1-canary-20220131233103.tgz","fileCount":22,"integrity":"sha512-sTedHQ9pL2KoDOgXNejs3Q5BJNKBKYXYVBFrY4PKntia9xLx4t1+igxvuCe79qa3qhTF8MIwMUwqntY1Uw2TTw==","signatures":[{"sig":"MEQCIAK4IpnmqrQN7SV262o3vi75aHusmzb/u4G+y155JsWVAiBDhLgTR11BB4kNkHc3RLE1ngJt612ula4ZhqLTE+cK1w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+HFWCRA9TVsSAnZWagAAK08P/11DgNvmaeI18EdIlgZP\n4Dv7MzV7ET0jO5yONebmYwyJ10wM7Ra+wESGoOpZsKdDbgA9rmvw9GXopfpX\ncttbhX9b5G3Qb62YhJzZoIRNLAN63RunOhH4G+bYNq9WDgMcWym5R0wcAZy6\naMo+uhIM/+JJ7vIOPlSXgiVjqum0/7rpxIjZQh3v+XPhBzwxxJQ45p0XP8le\nwwkhkw9lQly2uoURuuhNAPMVIStrOyjSJ2Yp2TDgs4cVfbzonZJm558OlpmC\n9BZuOzQicJJH2kQF71JQATbuh/6soG93jb/uKIquTacVWkmpdMRXecpEsZ4q\n9P9pqoiFqZCKhZztFw0W0gMUpmBokaksNNkTu7WNVlsrsIhl2uiwyYQhNO0q\ntPTvsYtbvhxsxzjyUapVmOEWe6dKqHIzSJ7h6BBljQSqzBuszgX0dK0zyxZl\ntcv5zQhJlBPsETi1WxRJWkEXUloqjwgKS0TwDKDsY14nFt7Ul93SjXYlyVkS\nxEItxNIPAZ/Zb3gXU/rzwq5boyz/d7eOKUe/s6Q3Ex+CSXiWuhGBx+YApmm3\ngIDZMQknW5yfDR0kByaqRIVWE/b7ENEN83nFrOXu1qdNwJqjPaVmqfXxiUpS\nix7UyDH4dakCXSPlvQGacjX5d0NMrAIHcXZmbS01PuE/zXy/tA1lcGMFbyzU\ndGX0\r\n=FIzL\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1-canary-20220131233103_1643671894484_0.6239475640003771","host":"s3://npm-registry-packages"}},"6.4.1":{"name":"@hashicorp/react-search","version":"6.4.1","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.4.1","maintainers":[{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"roaks3","email":"roaks3@gmail.com"},{"name":"jimmymerritello","email":"jimmy@furymethod.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"npm.km@mailhero.io"},{"name":"wkentdag","email":"hi@wtkd.info"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"dist":{"shasum":"4697de492a8bb2d994bf0681f969f224093c8a7b","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1.tgz","fileCount":22,"integrity":"sha512-VoFdfjSCyhmbwNT2nB5+midHjZBy+mO5jXAWAzXbQjTvlBA6NEEgPNXnCLCniOKFouiEVSsn9TnqsWfJt41SqQ==","signatures":[{"sig":"MEUCIQDmxDBJ278jdMmIXe9oKLt1qgngxNgcViw0HxW7VhvffwIgdEXFDUTuLCvseLzgQxMvZk1qNgI6p8j6lAy7EazcfVE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/D4vCRA9TVsSAnZWagAAgtwP/1Jnr8OtydmDLFyJz87c\nFJl7BLhpEpk4TEMQFRaZggSn/Fdpe68KS0iX71iwgRQ0DNB5ckTKruQKom/a\nmwli1D6jNcPHYKT962uavYNadKxYqJQmmoGRHBfTyE/eCjwZSjm2s/t+e3wn\n/NIk4zW4aA2RQqkyvSGVhEAYv+UNj63vhQjC+IO2TesktubLqcMCyEJmprQy\nyHeCpJvfz5MF3psTS5CrvTuwtSTHoBPMyOzwLuygg6eBr9+WHpCmafE2u6qT\nUwJfRywydh+nt40OZjcoEWa+l1b4QPAOrq1pIViRYk78N2GumDWiukyKvHyL\nX0Zp3x1DZOSiUw/VBwE2Z7TAhratAy9IKXN4mkv17caPltLBV+kEj45sHVfN\n130uMGCUX+IDu5dJ3A0XFhaIwHiETT8t6BX8Hsc2p+1IxiWy+1QzUNaAf9xs\neE1rRFH9m4iYcqd+7s7Wt3pWPghVREm3GiE3esAV4Z++7JnpNzjVJTmNGJGk\nQG+sYz4Wm5JXc/K4aE39o4yhtDmoABXVaudyd4RQ3pr6poAUvzVS3VrfAqfI\n3SLQ68ZKt2ljlhmiUgaui8AjIDtzJDprigWRiqWx2qQZG3UAWRtZKrdtyPEh\ngOahMV3/7sUQbEOvy0LgThzDoNcUVd1PN6IyN5fd+vle++g3oxyjg/fpYd+k\nHccj\r\n=k6ev\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"7.7.6","description":"Algolia-powered search component","directories":{},"_nodeVersion":"15.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.4.1_1643920943075_0.9487918400809492","host":"s3://npm-registry-packages"}},"6.5.0-canary-20221108212446":{"name":"@hashicorp/react-search","version":"6.5.0-canary-20221108212446","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.5.0-canary-20221108212446","maintainers":[{"name":"nandereck","email":"nels.andereck@hashicorp.com"},{"name":"tstormk","email":"tstormk@gmail.com"},{"name":"hashibot-hds","email":"github-team-design-systems@hashicorp.com"},{"name":"lackeyjb1","email":"bryan.lackey@hashicorp.com"},{"name":"alexcarpenter","email":"im.alexcarpenter@gmail.com"},{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"macdonaldky@gmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"e62d659a1b68fc59cb9809d30a124380a30cf0bc","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.5.0-canary-20221108212446.tgz","fileCount":22,"integrity":"sha512-IKfDqiUNK1hbOfOL5fFiAZ367JE+wAVZEy2KFt0oIe8DG/IW5n7LurHhInglO6pII2t0eq6m1neqSEdX5FktVQ==","signatures":[{"sig":"MEYCIQDGCf0G0TX0EPxPsnjbsRwTlTOQsf+i2XOBKszsk8Xd5QIhAJmu9a3BxOgyUnCDypJbDjvjfgqn7ur+LnAk+Y5ZKLYF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjask7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqj1A/9ESHGyH32upj7Zpp3jawp39I+6Nl6cWzJW4pslt35OFN5iQim\r\nC6GQ2n0/dyK5iBSNCBFaXeme7OPPj96Xl6Dlxdg7Hv3n53H+XxtuOfeyiquN\r\nGEM8E4MM92E/RpPTMpLWWz44ljcIeWbnY6rrXAey48vn9vwQcFR1nfgLCq2Y\r\nlpYsV5Yu3/EJd18mNfsH1BVWOYNLGStBcGVV4XEAYXRnXj3RB4J8rnz3SrKU\r\nE7emfo0OzmULyGN7YlKxsRy9R9QDwMbibXbWI6uuxsLIvUP8csDHH+1msXFS\r\nvJj6IF994RvTFys9VtYE8SB96DZruG2Vh/xvfCc2iBOrW9vARHfKCA4HKKkt\r\nqDPMGoeiwGTPP1GdIlS4ahKzNQ1spGXHL3FdZ3ITtegq6lx2vi6QZcXArU/f\r\nHl2qd+iLwdOPp4lP4KFBt207MvQrDHFnOtfjbjMOxJU/6JQHjwo6Lsl9j0+9\r\nyF7KwpHucBBwd5xI5nPd4YcQ3sIxg1c5eUfu8EmkiVtJV3MYmDPjAcEXQHNo\r\nWMKoF67ll+OYSLkNKjlmsuH3McrcfuMBwQWRmwUIvxSNvx1SjSqyDIJcGCDV\r\nvZYkGFiM+CK24RBFWgbs4sxROhzkm/S4TglCvNt82DRTUyKygQKeXkUNFo5m\r\nSKpKBql7bzwzIBZ1H4bX8egsMQzkumzifAc=\r\n=K5Pf\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"7e59514bb1af774275480fd34408a627fbfe7052","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"8.19.2","description":"Algolia-powered search component","directories":{},"_nodeVersion":"16.18.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.5.0-canary-20221108212446_1667942715062_0.29542432769770466","host":"s3://npm-registry-packages"}},"6.5.0-canary-20221109000658":{"name":"@hashicorp/react-search","version":"6.5.0-canary-20221109000658","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.5.0-canary-20221109000658","maintainers":[{"name":"nandereck","email":"nels.andereck@hashicorp.com"},{"name":"tstormk","email":"tstormk@gmail.com"},{"name":"hashibot-hds","email":"github-team-design-systems@hashicorp.com"},{"name":"lackeyjb1","email":"bryan.lackey@hashicorp.com"},{"name":"alexcarpenter","email":"im.alexcarpenter@gmail.com"},{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"macdonaldky@gmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"bf198eb090d528d9f2b80b26fbc3d98e95b35573","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.5.0-canary-20221109000658.tgz","fileCount":22,"integrity":"sha512-jbNykGucCahnlbxx50eOk1NnvJpQChxGQ0yS+7IWTNE/DNm3lOv8NOUh4TEALGDKEqof8E9iCTd91+YRDYrGKA==","signatures":[{"sig":"MEQCIGXjY9m06K/zxcy51y0nTa2piwxdoevgTZthaNZcZYP8AiAjqJYjiBErmvzE86P3paZEab4YDrmRRrQ7Pvb8WzvvTw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjau9BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsPg/6Aou54Q4sm93R3U7MuwWRJDiDOmbU9uzNx+JVnF2OHrkkqRRQ\r\ndSINsy8HPyx46a1Gj3++rG9i8pgZ3dBmHqTts0/xTaVxZB2LSGC2JGfF43zp\r\n6FEpCjg1yr3lBgm/rtvyEO9Q3FoX1qBTQ7bPCnzp7Zwg+SwYz4H0e9SSqbkS\r\nI+fdJu/nmYwE/Cn8OcRzw+o5o+yJ+zmYHKn2B0peQSIYwOIvc0YjwKMZAxkF\r\nVjDSDSbkygJaUF5s9YQ6pRBj8+pMLx2hbbtxZNOqTRDuzeFZo3jmx8xi4dLF\r\nMhavtMK+fwF6M2u+eJbw892yqrEFct6mEwkw34JgLkIMmHf3Jawn0bAMQCd8\r\n4O8qnZYbezrdplkb5jVpVwhg4rn5/1JjOsQtEwrH4VOmIIRapCiLnBIUD+OR\r\nvBz9L3DNluuAhJi/qwKJEVy5T6/XIHK/861kNrq5y0ClGtKeHUTL9+fX5qCV\r\n8d1DwMyFiqmQ489PXzntE4ijoxkulKGEb+MchJOzorxrYMgkafMo737kMaW2\r\ngU0aC2Wt/fbgTn6EKhn0OGyWDo2fBuvCUfp8kmnokUsV+l7ojvoT6eHRJMNu\r\nBNAfdJZwsXin9m6Pbdb+9rYeYqXRPWIhB/z+qsLfVuUZTc7cTwj7aauSAWzB\r\nINt5AC5ncgzMY1L0hlnmgvAlsLgpeHeHBHE=\r\n=yN/r\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"9dd2f1e4eb13f38c9ea3d80e9f4a0800a48629dd","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"8.19.2","description":"Algolia-powered search component","directories":{},"_nodeVersion":"16.18.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.5.0-canary-20221109000658_1667952449239_0.6402164341701322","host":"s3://npm-registry-packages"}},"6.5.0-canary-20221109001134":{"name":"@hashicorp/react-search","version":"6.5.0-canary-20221109001134","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.5.0-canary-20221109001134","maintainers":[{"name":"nandereck","email":"nels.andereck@hashicorp.com"},{"name":"tstormk","email":"tstormk@gmail.com"},{"name":"hashibot-hds","email":"github-team-design-systems@hashicorp.com"},{"name":"lackeyjb1","email":"bryan.lackey@hashicorp.com"},{"name":"alexcarpenter","email":"im.alexcarpenter@gmail.com"},{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"macdonaldky@gmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"11823d1d25e2382f530f9fd03024fb251c0ca251","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.5.0-canary-20221109001134.tgz","fileCount":22,"integrity":"sha512-xMHj9MXU9bFFGHVwiJw5c31qimaoUXhmuL7vXsB8yMdi6pb980Lq9+v8L5LotjjfFdQTT5MQx62E4fAsd+2iGQ==","signatures":[{"sig":"MEYCIQDvVollD30Z2J8pmp5Jax49zFc5zdQ39HmCoDVU9G2N/QIhAOzPYlaCzoLk0sEbA8DXGSBwAJ9kIH2C8XanMFTc11L/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjavBUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0aw//dHxfrpJhHIyOpsVncuFAvuRN4kue0rrJqao7jbftKLVYwXpK\r\nS72zROARx/mEH+sJHzyVMvk3KoHucwVhrTTVljjGduMJMYaxov1WSbVpSOrJ\r\nf2TMJvC69WYrR2y9DFAzOuHmRmO6SMotKHog4dGBaW/RKgBJN3+RDrWHiQSj\r\nFoweq5WboJIFi97KZzUXF5wtSNvr/1f++C1+wWqZOnz3GY7i6wVb+M56L3U/\r\nwc3nj+otaKs3jOdmhaItpC2sIKjp1FRgIFlGl3c3pnVt1x46A9nGIQ3MPrx1\r\n9gEx6O6nBXzg/B3CbMGP7Y3xK+db66AdcQN716D23zQmAlR8pfw+ifRVrriW\r\ncbUp0DWPvUHGaNa8voSbGkksgYhxZq68/5n+Fsf8Cz/0Nr48LBQMr43MtV2Z\r\n8aM9tSUHSXKriMgUMeyewdEmBO9QVSIF4F68+ZIWjFnm0EEcplSETXRFne+d\r\nv82prloo7VLYcyJ+m7WraDq4YClFRtTJNEJUOlsOlbEXJIGKZo6zyB0LbISd\r\nIQljIvG1JeZ/706tKRXbkAzZNgKO/TN5NQWj9X2x09cPpCjo8MTskhWq9Vwx\r\nAaANBnv/in1IEcaU3FHBeb2X9pEgxMMpghYvjR4D83b6MCglbJAteph9mYBc\r\nU+FMN3GZJ3BHgRnIEzdzKT+je3H8uxuNoi8=\r\n=kmAY\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"6959c6c2233abb306e0989c4f88632df87798c7d","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"8.19.2","description":"Algolia-powered search component","directories":{},"_nodeVersion":"16.18.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.5.0-canary-20221109001134_1667952724670_0.31428918500548675","host":"s3://npm-registry-packages"}},"6.5.0-canary-20221114184229":{"name":"@hashicorp/react-search","version":"6.5.0-canary-20221114184229","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.5.0-canary-20221114184229","maintainers":[{"name":"nandereck","email":"nels.andereck@hashicorp.com"},{"name":"tstormk","email":"tstormk@gmail.com"},{"name":"hashibot-hds","email":"github-team-design-systems@hashicorp.com"},{"name":"lackeyjb1","email":"bryan.lackey@hashicorp.com"},{"name":"alexcarpenter","email":"im.alexcarpenter@gmail.com"},{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"macdonaldky@gmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"ede1f3a8332e4d4c046021f0811d16f47190a38f","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.5.0-canary-20221114184229.tgz","fileCount":22,"integrity":"sha512-N90fVQjnUEY+DODL+NJPaOWjmXEioGcT/989FR83Jp+YUQGj9nPkRSMrDBcCPQqO3a6dzC1KuY55dJGba1I50Q==","signatures":[{"sig":"MEYCIQChQi8yAnaRtdXgK4uHOZX//uJL83R7tByx4aqiyW/SMAIhALbO2q+keo+wc8OR1MnHlJtFyp2kKcvs7mi3Ync5Ve59","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67066,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcow3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqS4w//TLaWiHBC+zeQTyNkRB6DX3MPsdQHpCWO/QZ29p/ucHAgpiYV\r\nsKoZcklkJCO0lne2i9bBdD/JEbNEKTxBL+IwRlFwlfPK8tEXPTpKpiWBnwJ2\r\nvbb9bnIN5+gf9BEoSRBRR55SzIHqvPIWm7c7NF3S8lo4fMBF+1icxV6GA8c9\r\nzYyTiBZPiuSDie0hHx0WEzlF9u7pvRMcgKm0iCkOWsIevpDDFbxHBAgvUpus\r\nyWx/xpCKketRrssxpaCRuyJrQQT7mNnByU46G3us7KOyPjY6sWGceEw7rPWi\r\nL1oE24y34C8d6+JtPD3F07vBob9D0USNS69eaDuaFSPPvbXUPDAzfquEpwI6\r\nzWvqpzh3iEQd/64pMIV9Z8IcC/+zBxw1a7exhzaTpYBqXLVw6OiHQILXdKYH\r\nnHNWXDUfeBqfVPMOJyWUQTWGP1jrBYJ9LiQ7ClbrT3D7hgfmBfhxCqr3aN0r\r\nBEXlDNN7QbMoC6+AR+apWIq17RooNBhPAOBdp2GIzvtfSDpL0xXA1ultOl1l\r\n73EYzO9vVnzlbIaFpFHOWQEN0vnGfgjiDU4xW2CAJjz3ulI+YD+gkv6KJMju\r\ngwuanLCqm93ZaA5Akcokbh6Kph+o5Zf9teld3GwJz3JIk4RuFqn+NrNxmXcL\r\n+t6sbtCL3pskup2tqviN4+YzB8hE7FC16cE=\r\n=fL4n\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"94adbd87b470ec916402e02f226cbde75c5ba9b0","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"8.19.2","description":"Algolia-powered search component","directories":{},"_nodeVersion":"16.18.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.5.0-canary-20221114184229_1668451383303_0.11131359794011408","host":"s3://npm-registry-packages"}},"6.5.0":{"name":"@hashicorp/react-search","version":"6.5.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.5.0","maintainers":[{"name":"nandereck","email":"nels.andereck@hashicorp.com"},{"name":"tstormk","email":"tstormk@gmail.com"},{"name":"hashibot-hds","email":"github-team-design-systems@hashicorp.com"},{"name":"lackeyjb1","email":"bryan.lackey@hashicorp.com"},{"name":"alexcarpenter","email":"im.alexcarpenter@gmail.com"},{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"ashleemboyer","email":"ashleemboyer.dev@gmail.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"amyrlam","email":"alam@hashicorp.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"johncowen","email":"johncowen@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"brandonromano","email":"BrandonRRomano@gmail.com"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kylemac","email":"macdonaldky@gmail.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"bkalow","email":"bkalow@hashicorp.com"},{"name":"kstraut","email":"kendall@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"a568b56a3affb1a3a4870b636d73f989b2d58d31","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.5.0.tgz","fileCount":22,"integrity":"sha512-mZoSLaETDWNFM9BNaf2+o2YFLgQkJHC7l1UCi4hWJcDLWHbmW5h3jY3AdkY+X6kBDIiJZUzvZpEE71QK+mSo/w==","signatures":[{"sig":"MEQCIHFiRH98wQx05e+WbzahhWgs5o3XONFJY9Zzat+f0LTFAiAvWdTG1OtJTMI2yDDYDSvyFN1T6zi8m3AOmrhL73RT+A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67022,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcqNIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrA7w/9EPcOxtxFpdqqs7YhVKC89/U7J/53RdbQuxkqTdYZTYE8fNsp\r\n24cXaEYhQEyC63Um3+ILOPIQ5nlnboQMm+YDJxo5NX9ExrieYzMYCPieB8jl\r\nOP+Tilg2cjEocF29JsKVFhNVFRLlessGc3CUG5XxTesQd1kR+lGnOL/Pq9rJ\r\nEnwmrypXP/JddJujFJVTuYktvTK46uUN+hgnKspumTBK4UtcZt0DooqzrM90\r\nqLfoSgRwRRqWfJjE9A4peTk10Gx0ItziPbTlBLrQ3bFbWxjNr4puVApiveTN\r\n37IlaxaVlaE0lkGQirATMTB7Tzejvu1SlTBSwr5y8YB5H7eUw+KqhFwVEW/q\r\nAUGXnwteWEfVw8sbndmJqVyWGx+Rm/v40O/xKIbyCqjh//B9p51NLJ/rX+1K\r\n4lPpjqtdfIFbj+L5frFiRBc4Psoco1JJXfy+eiQl0d4BbVs8NKAsmW1U0Yp5\r\nJ6PDQnU6HZwoTKtwYBWjwsOZo8LiwvPLRuJZW3QAftinP6b8RPcsWr7R+hp2\r\nYbqK6tEBdBWA0Tfrx7/iCuN+uE8r2HuOWjN8L7I0kVpHlPgu+3DKUmLuQyPB\r\n8QXAWunu/77QMkfTu4dYkU1Slg0j+RWSrhxWDH2EyDcJsS8+kp0CsaxRcsyr\r\nH6EivouISqfmGcQDQiDn5qZzt5mYfOBE9H8=\r\n=kxGo\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"10cfad0f23fbd9602e40e9633c7c7ed7c4181285","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"8.19.2","description":"Algolia-powered search component","directories":{},"_nodeVersion":"16.18.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.5.0_1668457288517_0.26846166327086807","host":"s3://npm-registry-packages"}},"6.6.0-canary-20240624195037":{"name":"@hashicorp/react-search","version":"6.6.0-canary-20240624195037","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.6.0-canary-20240624195037","contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"793048b93b31240ecf71405c6812dacb3785903e","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.6.0-canary-20240624195037.tgz","fileCount":22,"integrity":"sha512-ffzPdXr14FoIaL49kW5ZaZT2i/kRE92R12quFvN3Vu2DHC11oTecGieHvTjKraDXCbGl7n1zOi03NGuvwT3u+g==","signatures":[{"sig":"MEUCIQDNO1ZI2YrvATTm8SUvlp8SbXBLxcrUgAwK5xvq6mFA1gIgFy2KyajeBJAy4PFFExyA8jJryq/FJeMZUlDXUZj1zjk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68677},"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","gitHead":"455617904da186258563a6617c0860c9483ed70b","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"10.7.0","description":"Algolia-powered search component","directories":{},"_nodeVersion":"20.14.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.6.0-canary-20240624195037_1719258652152_0.6557550773174823","host":"s3://npm-registry-packages"}},"6.6.0":{"name":"@hashicorp/react-search","version":"6.6.0","author":{"name":"HashiCorp"},"license":"MPL-2.0","_id":"@hashicorp/react-search@6.6.0","maintainers":[{"name":"kaitlynnefuery","email":"kaitlynnefuery@gmail.com"},{"name":"abhishek-hashicorp","email":"abhishek.sahu@hashicorp.com"},{"name":"dstaley","email":"staley.dylan@gmail.com"},{"name":"cameronperera","email":"cameron.perera@hashicorp.com"},{"name":"alexju","email":"alexandru.jurubita@gmail.com"},{"name":"consul-ui-services","email":"svc-consul-ui-services@hashicorp.com"},{"name":"wenincode-hashicorp","email":"tyler.wendlandt@hashicorp.com"},{"name":"hashicb","email":"cburrell@hashicorp.com"},{"name":"britt.lindgren","email":"britt.lindgren@hashicorp.com"},{"name":"paulhcp","email":"paul.anunda@hashicorp.com"},{"name":"nandereck","email":"nels.andereck@hashicorp.com"},{"name":"tstormk","email":"tstormk@gmail.com"},{"name":"hashibot-hds","email":"github-team-design-systems@hashicorp.com"},{"name":"lackeyjb1","email":"bryan.lackey@hashicorp.com"},{"name":"youriwims","email":"youri@hashicorp.com"},{"name":"jpogran","email":"jpogran@outlook.com"},{"name":"_natmegs","email":"nsmith@hashicorp.com"},{"name":"thrashr888","email":"thrashr888@gmail.com"},{"name":"melsumner","email":"melaniersumner@gmail.com"},{"name":"mwickett","email":"mike@wickett.ca"},{"name":"didoo","email":"public@didoo.net"},{"name":"zchsh","email":"hi@zch.sh"},{"name":"hcitsec","email":"itsec@hashicorp.com"},{"name":"gregone","email":"gregwhat@gmail.com"},{"name":"meirish","email":"matthew.irish@gmail.com"},{"name":"enmod","email":"contact@noelquiles.com"},{"name":"kaxcode","email":"keniavalladarez@gmail.com"},{"name":"anubhavmishra-hashicorp","email":"mishra@hashicorp.com"},{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},{"name":"cstitt-hashi","email":"cstitt@hashicorp.com"},{"name":"mocohen","email":"mo.cohen@hashicorp.com"},{"name":"dhaulagiri","email":"brian.runnells+github@gmail.com"}],"contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"homepage":"https://github.com/hashicorp/react-components#readme","bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"dist":{"shasum":"e4007c7b381568a3bcd97679040285028e98c3bb","tarball":"https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.6.0.tgz","fileCount":22,"integrity":"sha512-SnL/ZjWwpEm1J8XgH4ekiwhD2vKtAXKmKsuB2UjEm9p9dw22OGbiRvZu6Ifg7qC+WFzx2dUN/IyrckoGWT8A9g==","signatures":[{"sig":"MEYCIQCG/jQrkAO0QwpBsZhpYd0brJ1qVBqc/jIxl6h6OgmUDwIhALarn5JQSOIBqOzT7+OQZ6nCjwsCo4bWCNJr61DOpkV3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68633},"gitHead":"25483893b68430c59fe9e0e42311679d6b17a41e","_npmUser":{"name":"hashibot-web","email":"mktg-dev-github-bot@hashicorp.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"_npmVersion":"10.7.0","description":"Algolia-powered search component","directories":{},"_nodeVersion":"20.15.0","dependencies":{"glob":"^7.2.0","dotenv":"^14.3.1","remark":"^13.0.0","classnames":"^2.3.1","gray-matter":"^4.0.3","algoliasearch":"^4.12.0","search-insights":"^1.7.1","unist-util-visit":"^2.0.3","@reach/visually-hidden":"^0.16.0","react-instantsearch-dom":"^6.21.1","@hashicorp/remark-plugins":"^3.3.1","@hashicorp/react-inline-svg":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"random-words":"^1.1.2"},"peerDependencies":{"react":">=16.x","@hashicorp/mktg-global-styles":">=3.x"},"_npmOperationalInternal":{"tmp":"tmp/react-search_6.6.0_1720210612513_0.9752533721880203","host":"s3://npm-registry-packages"}}},"time":{"created":"2020-08-26T22:27:33.977Z","modified":"2026-05-06T18:35:28.503Z","0.0.2":"2020-08-26T22:27:34.432Z","0.0.3":"2020-08-26T22:55:41.540Z","0.0.4":"2020-08-26T23:34:10.949Z","0.0.5":"2020-08-27T00:05:48.186Z","0.0.6":"2020-08-28T02:50:25.698Z","0.0.7":"2020-08-28T14:05:19.392Z","0.1.0":"2020-08-28T14:48:19.860Z","0.1.1":"2020-08-28T16:30:39.851Z","1.0.0":"2020-08-28T18:33:43.048Z","1.0.1":"2020-08-28T21:33:23.439Z","2.0.0":"2020-09-02T17:12:58.163Z","2.1.0":"2020-09-08T14:23:14.029Z","2.1.1-alpha.0":"2020-10-10T05:20:18.843Z","2.1.2-alpha.0":"2020-10-14T13:36:15.730Z","2.1.2":"2020-10-24T02:32:42.734Z","2.1.3":"2020-11-16T22:28:22.744Z","3.0.0":"2020-12-11T00:43:39.094Z","3.0.1":"2021-01-25T17:38:17.629Z","4.0.0":"2021-02-18T22:07:58.251Z","4.1.0":"2021-02-25T02:25:44.459Z","4.1.1-alpha.2":"2021-03-08T19:27:09.454Z","4.2.0":"2021-03-10T20:09:42.306Z","4.0.1-pr170.32":"2021-03-18T18:22:47.200Z","4.0.1-next.38":"2021-03-29T17:50:07.622Z","5.0.0":"2021-03-30T20:44:23.258Z","5.0.1":"2021-04-05T18:12:01.316Z","5.0.2":"2021-04-14T15:33:03.277Z","5.1.0":"2021-05-20T21:13:24.678Z","5.1.1":"2021-07-15T15:15:10.736Z","5.1.1-alpha.51":"2021-07-15T23:43:33.029Z","5.1.2-alpha.28":"2021-07-21T20:56:17.618Z","5.1.2":"2021-07-27T20:47:34.411Z","5.1.3":"2021-08-16T21:51:36.612Z","6.0.0-canary-202181142614":"2021-09-01T14:26:36.894Z","6.0.0-canary-202181151955":"2021-09-01T15:20:18.621Z","6.0.0-canary-202181152919":"2021-09-01T15:29:47.427Z","6.0.0-canary-202181155237":"2021-09-01T15:53:04.869Z","6.0.0-canary-20218116219":"2021-09-01T16:02:46.214Z","6.0.0":"2021-09-02T16:36:56.278Z","6.0.1":"2021-09-13T19:57:40.810Z","6.0.2":"2021-10-04T21:42:35.844Z","6.1.0":"2021-10-08T20:25:04.004Z","6.1.1":"2021-10-10T04:55:04.944Z","6.2.0-canary-20211015214421":"2021-11-15T21:44:42.055Z","6.2.0-canary-20211015214424":"2021-11-15T21:44:45.062Z","6.2.0-canary-2021101521599":"2021-11-15T21:59:30.901Z","6.2.0-canary-20211016151826":"2021-11-16T15:18:44.295Z","6.2.0-canary-2021101618722":"2021-11-16T18:07:40.146Z","6.2.0-canary-2021101618251":"2021-11-16T18:25:22.992Z","6.2.0-canary-2021101621136":"2021-11-16T21:01:55.234Z","6.2.0-canary-202110162148":"2021-11-16T21:04:28.410Z","6.2.0-canary-2021101815538":"2021-11-18T15:53:29.180Z","6.2.0":"2021-11-18T17:38:49.168Z","6.3.0-canary-2021113164434":"2021-12-03T16:44:52.637Z","6.3.0-canary-202111318446":"2021-12-03T18:05:05.225Z","6.3.0":"2021-12-03T19:16:24.705Z","6.3.1":"2021-12-09T20:07:28.045Z","6.4.0":"2021-12-15T19:20:50.192Z","6.4.1-canary-20220128203034":"2022-01-28T20:31:03.886Z","6.4.1-canary-20220128211110":"2022-01-28T21:11:37.858Z","6.4.1-canary-20220128211122":"2022-01-28T21:11:55.053Z","6.4.1-canary-20220128215319":"2022-01-28T21:53:46.097Z","6.4.1-canary-20220131194346":"2022-01-31T19:44:21.409Z","6.4.1-canary-20220131233103":"2022-01-31T23:31:34.618Z","6.4.1":"2022-02-03T20:42:23.227Z","6.5.0-canary-20221108212446":"2022-11-08T21:25:15.225Z","6.5.0-canary-20221109000658":"2022-11-09T00:07:29.471Z","6.5.0-canary-20221109001134":"2022-11-09T00:12:04.908Z","6.5.0-canary-20221114184229":"2022-11-14T18:43:03.460Z","6.5.0":"2022-11-14T20:21:28.732Z","6.6.0-canary-20240624195037":"2024-06-24T19:50:52.299Z","6.6.0":"2024-07-05T20:16:52.688Z"},"bugs":{"url":"https://github.com/hashicorp/react-components/issues"},"author":{"name":"HashiCorp"},"license":"MPL-2.0","homepage":"https://github.com/hashicorp/react-components#readme","repository":{"url":"git+https://github.com/hashicorp/react-components.git","type":"git","directory":"packages/search"},"description":"Algolia-powered search component","contributors":[{"name":"Kevin Pruett"},{"name":"Jimmy Merritello"}],"maintainers":[{"email":"michaelgolus@gmail.com","name":"mikegolus"},{"email":"thrashr888@gmail.com","name":"thrashr888"},{"email":"melaniersumner@gmail.com","name":"melsumner"},{"email":"public@didoo.net","name":"didoo"},{"email":"gregwhat@gmail.com","name":"gregone"},{"email":"matthew.irish@gmail.com","name":"meirish"},{"email":"contact@noelquiles.com","name":"enmod"},{"email":"keniavalladarez@gmail.com","name":"kaxcode"},{"email":"mishra@hashicorp.com","name":"anubhavmishra-hashicorp"},{"email":"bryan.lackey@hashicorp.com","name":"lackeyjb1"},{"email":"mktg-dev-github-bot@hashicorp.com","name":"hashibot-web"},{"email":"lee.fowler@voxmachina.io","name":"voxmachina"},{"email":"cstitt@hashicorp.com","name":"cstitt-hashi"},{"email":"mo.cohen@hashicorp.com","name":"mocohen"},{"email":"brian.runnells+github@gmail.com","name":"dhaulagiri"},{"email":"cameron.perera@hashicorp.com","name":"cameronperera"},{"email":"nels.andereck@hashicorp.com","name":"nandereck"},{"email":"tstormk@gmail.com","name":"tstormk"},{"email":"britt.lindgren@hashicorp.com","name":"britt.lindgren"},{"email":"jpogran@outlook.com","name":"jpogran"},{"email":"github-team-design-systems@hashicorp.com","name":"hashibot-hds"},{"email":"rwwagner90@gmail.com","name":"rwwagner90"},{"email":"svc-consul-ui-services@hashicorp.com","name":"consul-ui-services"},{"email":"alexandru.jurubita@gmail.com","name":"alexju"},{"email":"kaitlynnefuery@gmail.com","name":"kaitlynnefuery"},{"email":"leah.bush@hashicorp.com","name":"leahmariebush"},{"email":"stanley.stuart@ibm.com","name":"fivetanley-ibm"},{"email":"anubhav.goel@hashicorp.com","name":"anubhav-goel-hc"},{"email":"ruben.niculcea@gmail.com","name":"rubennic"},{"email":"doug.desilva@hashicorp.com","name":"dougdesilva"}],"readme":"# @hashicorp/react-search\n\n## Props\n\n### renderHitContent\n\n> `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_\n\nA render function whose result is used to display each query \"hit\"\n\n**Params**\n\n| Property  | Type         | Description                                                                         |\n| --------- | ------------ | ----------------------------------------------------------------------------------- |\n| hit       | `object`     | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n| Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/                  |\n\n### resolveHitLink\n\n> `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })\n\nA function whose return value is spread as props to `next/link`.\nFor more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link\n\n**Params**\n\n| Property | Type     | Description                                                                         |\n| -------- | -------- | ----------------------------------------------------------------------------------- |\n| hit      | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |\n\n### placeholder\n\n> `string` | _Optional_ | **Default:** `Search`\n\n## Usage\n\n```jsx\nimport Search from '@hashicorp/react-search'\n\nfunction SearchBar() {\n  return (\n    <Search\n      renderHitContent={({ hit, Highlight }) => <div>...</div>}\n      resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}\n      placeholder=\"Search documentation\"\n    />\n}\n```\n\n### Environment Variables\n\nThis component relies on the presence of the following environment variables to be available client side:\n\n```text\nNEXT_PUBLIC_ALGOLIA_APP_ID\nNEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY\nNEXT_PUBLIC_ALGOLIA_INDEX\n```\n\n### React\n\nTo use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:\n\n**App.jsx**\n\n```jsx\nimport Search, { SearchProvider } from '@hashicorp/react-search'\n\nfunction App() {\n  return (\n    <>\n      <SearchProvider>\n        <Search\n          renderHitContent={({hit, Highlight}) => (\n            <span className=\"name\">\n              <Highlight attribute=\"name\" hit={hit} tagName=\"span\" />\n            </span>\n          )}\n          resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}\n        />\n        <ComponentA>\n        <ComponentB>\n      </SearchProvider>\n      <ComponentC__WithoutSearchContext>\n    </>\n  )\n}\n```\n\nAny child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:\n\n```jsx\nimport { useSearch } from '@hashicorp/react-search'\n\nfunction ComponentA() {\n  const { query } = useSearch()\n\n  return <code>Search query: {query}</code>\n}\n```\n\n## useSearch()\n\n`useSearch()` exposes the following values:\n\n- `client` (`object`) - Initialized Algolia client\n- `indexName` (`string`) - The name of the Algolia index that search is performed upon\n- `initAlgoliaInsights` (`function`) - Required to initialize Algolia\n- `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not\n- `logClick` (`function`) - Fires an analytics event via the `search-insights` package\n- `query` (`string`) - Current search query\n- `setIsCancelled` (`function`) - Setter function that updates the search cancel state\n- `setQuery` (`function`) - Setter function that updates the search query\n\n## Tools\n\nThis package includes a `tools.js` file that includes Algolia-related Node.js scripts\n\n### Usage\n\n```js\nconst {\n  indexDocsContent,\n  indexContent,\n} = require('@hashicorp/react-search/tools')\n/* It's worth noting that you'd only want to use *one* of the two exported functions */\n```\n\n#### indexDocsContent\n\n> `function` | `(config: object)`\n> This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.contentDir: string\n\nPath to directory that contains the content to be indexed by Algolia\n\n_Default_: `path.join(__dirname, 'pages')`\n\n##### config.filesPattern: string\n\n[minimatch](https://github.com/isaacs/minimatch)-style string to be performed within `config.contentDir`. The results of this pattern match will determine which files to index.\n\n_Default_: `'**/*.mdx'`\n\n##### config.globOptions: { [k:string]: any }\n\nAdditional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)\n\n_Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`\n\n##### config.frontmatterKeys: string[]\n\nAssuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.\n\n_Default_: `['page_title', 'description']`\n\n#### indexContent\n\n> `function` | `(config: object)`\n> This generic helper function allows for custom Algolia indexing\n\n##### config.algoliaConfig: { appId: string, apiKey: string, index: string }\n\nAlgolia-related configuration\n\n_Default_:\n\n```js\n{\n  apiKey: process.env.ALGOLIA_API_KEY,\n  appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,\n  index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,\n}\n```\n\n##### config.getSearchObjects: () => any\n\nThis function should return an array of objects that will get passed to Algolias [`partialUpdateObjects`](https://www.algolia.com/doc/api-reference/api-methods/partial-update-objects/) function\n\n## Setting Up Algolia\n\nIn order for this component to work at all, you will need to configure an algolia index. Steps to manage this are below:\n\n- Log in to algolia.com using HashiCorp SSO. If you do not have access to algolia, reach out to IT and request access.\n- Within algolia, select \"incices\", then \"create new index\". See existing indices for naming patterns when choosing your index name. For docs sites, it is usually `product_NAME`.\n- In your local `.env` file, use the index name as your `NEXT_PUBLIC_ALGOLIA_INDEX` value\n- Make sure that you have created a file in your project that runs the `indexDocsContent` script out of `tools. The file should be quite simple, and look like this:\n\n  ```js\n  const { indexDocsContent } = require('@hashicorp/react-search/tools')\n  indexDocsContent()\n  ```\n\n- Typically we run this script via circleci. Head over to your project's circle configuration and add a block along these lines to jobs:\n\n  ```yaml\n  jobs:\n    algolia-index:\n      docker:\n        - image: docker.mirror.hashicorp.services/node:12\n      steps:\n        - checkout\n        - run:\n            name: Push content to Algolia Index\n            command: |\n              cd website/\n              npm install\n              node scripts/index_search_content.js\n  ```\n\n- Then make sure to run the job in the workflows section as well, only when the website is deployed. For docs sites this is on merge to the `stable-website` branch. For most other HashiCorp websites, this is on merge to `main` or `master`.\n\n  ```yaml\n  workflows:\n    - algolia-index:\n        filters:\n          branches:\n            only:\n              - stable-website\n  ```\n\n- Next, you'll want to setup two API keys for (1) searching and (2) indexing. Our Algolia keys are currently managed via a [Terraform configuration](https://github.com/hashicorp/mktg-terraform/blob/main/algolia.tf). The ACL for the keys should be configured as follows:\n\n  | **Index** | **ACL**                                                                                    | **Example Descrption**              |\n  |-----------|--------------------------------------------------------------------------------------------|-------------------------------------|\n  | search    | `search`, `browse`, `listIndexes`                                                          | `{product/project name}: search UI` |\n  | index     | `addObject`, `deleteObject`, `search`, `browse`, `listIndexes`, `settings`, `editSettings` | `{product/project name}: write key` |\n\n- Open a PR to update the Terraform Configuration with the new pair of keys.\n- Grab the `index` API key, which is sensitive and should not be public, and add it to the environment variables in circleci as `ALGOLIA_API_KEY`.\n- Grab the `search` API key, which is public, and add it to the `.env` file in the project: `NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY=xxxx`.\n- With this in place, you should be all set! Run the index script once locally, manually setting the algolia API key (like `ALGOLIA_API_KEY=xxxx node scripts/index_search_content.js`) to seed the index and make sure that the component is fully functional locally, then everything should be set!\n","readmeFilename":"README.md"}