@hashicorp/react-components 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/.circleci/config.yml +8 -0
  2. package/.github/pull_request_template.md +36 -0
  3. package/.github/workflows/publish.yml +181 -0
  4. package/README.md +79 -0
  5. package/__test-helpers/expect-throw.js +6 -0
  6. package/__test-helpers/extend-expect.js +1 -0
  7. package/__test-helpers/mocks/css-module-mock.js +1 -0
  8. package/__test-helpers/mocks/graphql-fragment-mock.js +1 -0
  9. package/__test-helpers/mocks/svg-mock.js +1 -0
  10. package/babel.config.js +5 -0
  11. package/jest.config.js +13 -0
  12. package/lerna.json +16 -0
  13. package/next.config.js +14 -0
  14. package/package.json +31 -0
  15. package/packages/accordion/LICENSE +373 -0
  16. package/packages/accordion/README.md +5 -0
  17. package/packages/accordion/index.js +21 -0
  18. package/packages/accordion/package-lock.json +13 -0
  19. package/packages/accordion/package.json +20 -0
  20. package/packages/accordion/partials/AccordionItems/fixtures/default.json +12 -0
  21. package/packages/accordion/partials/AccordionItems/icons/arrow-down.svg +1 -0
  22. package/packages/accordion/partials/AccordionItems/index.js +64 -0
  23. package/packages/accordion/partials/AccordionItems/style.css +2 -0
  24. package/packages/accordion/partials/AccordionItems/styles/content.css +47 -0
  25. package/packages/accordion/partials/AccordionItems/styles/index.css +72 -0
  26. package/packages/accordion/partials/Collapsible/index.js +87 -0
  27. package/packages/accordion/partials/Collapsible/style.css +10 -0
  28. package/packages/accordion/style.css +3 -0
  29. package/packages/accordion/styles/index.css +14 -0
  30. package/packages/alert/LICENSE +373 -0
  31. package/packages/alert/README.md +9 -0
  32. package/packages/alert/fragment.graphql +8 -0
  33. package/packages/alert/index.js +44 -0
  34. package/packages/alert/package.json +22 -0
  35. package/packages/alert/style.css +138 -0
  36. package/packages/alert-banner/LICENSE +373 -0
  37. package/packages/alert-banner/README.md +3 -0
  38. package/packages/alert-banner/close-icon.js +35 -0
  39. package/packages/alert-banner/fragment.graphql +8 -0
  40. package/packages/alert-banner/index.jsx +97 -0
  41. package/packages/alert-banner/package-lock.json +18 -0
  42. package/packages/alert-banner/package.json +26 -0
  43. package/packages/alert-banner/style.css +151 -0
  44. package/packages/button/LICENSE +373 -0
  45. package/packages/button/README.md +19 -0
  46. package/packages/button/fragment.graphql +6 -0
  47. package/packages/button/helpers/normalizeButtonTheme.js +49 -0
  48. package/packages/button/icons/arrow-right.svg.js +1 -0
  49. package/packages/button/icons/chevron-down.svg.js +1 -0
  50. package/packages/button/icons/download.svg.js +1 -0
  51. package/packages/button/icons/external-link.svg.js +1 -0
  52. package/packages/button/index.js +86 -0
  53. package/packages/button/package-lock.json +18 -0
  54. package/packages/button/package.json +21 -0
  55. package/packages/button/styles/index.css +122 -0
  56. package/packages/button/styles/variant-primary.css +232 -0
  57. package/packages/button/styles/variant-secondary.css +179 -0
  58. package/packages/button/styles/variant-tertiary-neutral.css +65 -0
  59. package/packages/button/styles/variant-tertiary.css +182 -0
  60. package/packages/call-to-action/LICENSE +373 -0
  61. package/packages/call-to-action/README.md +3 -0
  62. package/packages/call-to-action/index.js +67 -0
  63. package/packages/call-to-action/package-lock.json +27 -0
  64. package/packages/call-to-action/package.json +21 -0
  65. package/packages/call-to-action/style.css +1 -0
  66. package/packages/call-to-action/styles/_temp-spacing-tokens.css +33 -0
  67. package/packages/call-to-action/styles/common.css +27 -0
  68. package/packages/call-to-action/styles/index.css +4 -0
  69. package/packages/call-to-action/styles/variant-centered.css +44 -0
  70. package/packages/call-to-action/styles/variant-compact.css +46 -0
  71. package/packages/call-to-action/styles/variant-links.css +32 -0
  72. package/packages/callouts/LICENSE +373 -0
  73. package/packages/callouts/README.md +8 -0
  74. package/packages/callouts/index.js +67 -0
  75. package/packages/callouts/package-lock.json +33 -0
  76. package/packages/callouts/package.json +20 -0
  77. package/packages/callouts/partials/callout-item/fixtures/default.json +9 -0
  78. package/packages/callouts/partials/callout-item/index.js +71 -0
  79. package/packages/callouts/partials/callout-item/style.css +76 -0
  80. package/packages/callouts/style.css +1 -0
  81. package/packages/callouts/styles/_temp-reset.css +11 -0
  82. package/packages/callouts/styles/_temp-spacing-tokens.css +41 -0
  83. package/packages/callouts/styles/index.css +124 -0
  84. package/packages/case-study-slider/LICENSE +373 -0
  85. package/packages/case-study-slider/Logo.js +6 -0
  86. package/packages/case-study-slider/StatusBar.js +14 -0
  87. package/packages/case-study-slider/StatusBar.test.js +32 -0
  88. package/packages/case-study-slider/docs.mdx +144 -0
  89. package/packages/case-study-slider/fragment.graphql +33 -0
  90. package/packages/case-study-slider/index.js +229 -0
  91. package/packages/case-study-slider/index.test.js +279 -0
  92. package/packages/case-study-slider/package-lock.json +72 -0
  93. package/packages/case-study-slider/package.json +20 -0
  94. package/packages/case-study-slider/props.js +182 -0
  95. package/packages/case-study-slider/readme.md +7 -0
  96. package/packages/case-study-slider/style.css +176 -0
  97. package/packages/checkbox-input/LICENSE +373 -0
  98. package/packages/checkbox-input/index.js +55 -0
  99. package/packages/checkbox-input/package-lock.json +13 -0
  100. package/packages/checkbox-input/package.json +20 -0
  101. package/packages/checkbox-input/readme.md +19 -0
  102. package/packages/checkbox-input/style.css +110 -0
  103. package/packages/code-block/LICENSE +373 -0
  104. package/packages/code-block/README.md +9 -0
  105. package/packages/code-block/fragment.graphql +10 -0
  106. package/packages/code-block/img/clipboard.svg +1 -0
  107. package/packages/code-block/index.js +85 -0
  108. package/packages/code-block/languages/sentinel.js +71 -0
  109. package/packages/code-block/package-lock.json +68 -0
  110. package/packages/code-block/package.json +22 -0
  111. package/packages/code-block/style.css +162 -0
  112. package/packages/consent-manager/LICENSE +373 -0
  113. package/packages/consent-manager/README.md +30 -0
  114. package/packages/consent-manager/banner.js +39 -0
  115. package/packages/consent-manager/cookies.js +53 -0
  116. package/packages/consent-manager/dialog.js +286 -0
  117. package/packages/consent-manager/icn_close.js +19 -0
  118. package/packages/consent-manager/index.js +119 -0
  119. package/packages/consent-manager/integrations.js +92 -0
  120. package/packages/consent-manager/load.js +139 -0
  121. package/packages/consent-manager/package-lock.json +45 -0
  122. package/packages/consent-manager/package.json +24 -0
  123. package/packages/consent-manager/style.css +209 -0
  124. package/packages/content/LICENSE +373 -0
  125. package/packages/content/README.md +8 -0
  126. package/packages/content/index.js +9 -0
  127. package/packages/content/package.json +17 -0
  128. package/packages/content/style.css +322 -0
  129. package/packages/content-cta/LICENSE +373 -0
  130. package/packages/content-cta/README.md +3 -0
  131. package/packages/content-cta/docs.mdx +25 -0
  132. package/packages/content-cta/index.js +49 -0
  133. package/packages/content-cta/index.test.js +78 -0
  134. package/packages/content-cta/package-lock.json +27 -0
  135. package/packages/content-cta/package.json +20 -0
  136. package/packages/content-cta/props.js +41 -0
  137. package/packages/content-cta/stories/docs.mdx +0 -0
  138. package/packages/content-cta/stories/examples.stories.js +51 -0
  139. package/packages/content-cta/stories/with-knobs.stories.js +58 -0
  140. package/packages/content-cta/style.css +80 -0
  141. package/packages/docs-page/LICENSE +373 -0
  142. package/packages/docs-page/README.md +51 -0
  143. package/packages/docs-page/components.js +11 -0
  144. package/packages/docs-page/docs.mdx +71 -0
  145. package/packages/docs-page/img/github-logo.svg +1 -0
  146. package/packages/docs-page/index.js +75 -0
  147. package/packages/docs-page/index.test.js +18 -0
  148. package/packages/docs-page/package-lock.json +138 -0
  149. package/packages/docs-page/package.json +28 -0
  150. package/packages/docs-page/props.js +59 -0
  151. package/packages/docs-page/server.js +137 -0
  152. package/packages/docs-page/style.css +120 -0
  153. package/packages/docs-page/temporary_jump-to-section.js +64 -0
  154. package/packages/docs-sidenav/LICENSE +373 -0
  155. package/packages/docs-sidenav/README.md +7 -0
  156. package/packages/docs-sidenav/chevron-icon.js +18 -0
  157. package/packages/docs-sidenav/img/external.svg +7 -0
  158. package/packages/docs-sidenav/index.js +457 -0
  159. package/packages/docs-sidenav/menu-icon.js +14 -0
  160. package/packages/docs-sidenav/package-lock.json +26 -0
  161. package/packages/docs-sidenav/package.json +21 -0
  162. package/packages/docs-sidenav/style.css +302 -0
  163. package/packages/enterprise-alert/LICENSE +373 -0
  164. package/packages/enterprise-alert/README.md +9 -0
  165. package/packages/enterprise-alert/index.js +28 -0
  166. package/packages/enterprise-alert/package-lock.json +13 -0
  167. package/packages/enterprise-alert/package.json +23 -0
  168. package/packages/enterprise-alert/style.css +91 -0
  169. package/packages/featured-slider/LICENSE +373 -0
  170. package/packages/featured-slider/README.md +3 -0
  171. package/packages/featured-slider/StatusBar.js +14 -0
  172. package/packages/featured-slider/docs.mdx +60 -0
  173. package/packages/featured-slider/index.js +231 -0
  174. package/packages/featured-slider/index.test.js +59 -0
  175. package/packages/featured-slider/package-lock.json +66 -0
  176. package/packages/featured-slider/package.json +22 -0
  177. package/packages/featured-slider/props.js +82 -0
  178. package/packages/featured-slider/style.css +204 -0
  179. package/packages/hashi-stack-menu/LICENSE +373 -0
  180. package/packages/hashi-stack-menu/README.md +3 -0
  181. package/packages/hashi-stack-menu/assets/icon-dropdown.svg +1 -0
  182. package/packages/hashi-stack-menu/assets/logo.svg +1 -0
  183. package/packages/hashi-stack-menu/assets/product-icons/boundary-icon-color.svg +1 -0
  184. package/packages/hashi-stack-menu/assets/product-icons/consul-icon-color.svg +1 -0
  185. package/packages/hashi-stack-menu/assets/product-icons/nomad-icon-color.svg +1 -0
  186. package/packages/hashi-stack-menu/assets/product-icons/packer-icon-color.svg +1 -0
  187. package/packages/hashi-stack-menu/assets/product-icons/terraform-icon-color.svg +1 -0
  188. package/packages/hashi-stack-menu/assets/product-icons/vagrant-icon-color.svg +1 -0
  189. package/packages/hashi-stack-menu/assets/product-icons/vault-icon-color.svg +1 -0
  190. package/packages/hashi-stack-menu/assets/product-icons/waypoint-icon-color.svg +1 -0
  191. package/packages/hashi-stack-menu/browse-panel/browse-panel.module.css +33 -0
  192. package/packages/hashi-stack-menu/browse-panel/index.jsx +9 -0
  193. package/packages/hashi-stack-menu/data/index.js +125 -0
  194. package/packages/hashi-stack-menu/hashi-stack-menu.module.css +41 -0
  195. package/packages/hashi-stack-menu/index.jsx +51 -0
  196. package/packages/hashi-stack-menu/nav-item/index.jsx +100 -0
  197. package/packages/hashi-stack-menu/nav-item/nav-item.module.css +64 -0
  198. package/packages/hashi-stack-menu/package-lock.json +18 -0
  199. package/packages/hashi-stack-menu/package.json +17 -0
  200. package/packages/hashi-stack-menu/stack-group/index.jsx +16 -0
  201. package/packages/hashi-stack-menu/stack-group/stack-group.module.css +29 -0
  202. package/packages/hashi-stack-menu/stack-item/index.jsx +35 -0
  203. package/packages/hashi-stack-menu/stack-item/stack-item.module.css +58 -0
  204. package/packages/hashi-stack-menu/stack-menu-section/index.jsx +18 -0
  205. package/packages/hashi-stack-menu/stack-menu-section/stack-menu-section.module.css +26 -0
  206. package/packages/hashi-stack-menu/use-on-click-outside-dropdown.js +22 -0
  207. package/packages/head/LICENSE +373 -0
  208. package/packages/head/README.md +236 -0
  209. package/packages/head/index.d.ts +107 -0
  210. package/packages/head/index.js +66 -0
  211. package/packages/head/package.json +17 -0
  212. package/packages/hero/LICENSE +373 -0
  213. package/packages/hero/README.md +31 -0
  214. package/packages/hero/arrow-icon.js +24 -0
  215. package/packages/hero/carousel.js +153 -0
  216. package/packages/hero/fragment.graphql +55 -0
  217. package/packages/hero/heroLeadForm.js +107 -0
  218. package/packages/hero/index.js +129 -0
  219. package/packages/hero/package-lock.json +273 -0
  220. package/packages/hero/package.json +28 -0
  221. package/packages/hero/style.css +501 -0
  222. package/packages/image/LICENSE +373 -0
  223. package/packages/image/fragment.graphql +5 -0
  224. package/packages/image/index.js +81 -0
  225. package/packages/image/package-lock.json +33 -0
  226. package/packages/image/package.json +21 -0
  227. package/packages/image/readme.md +27 -0
  228. package/packages/inline-svg/LICENSE +373 -0
  229. package/packages/inline-svg/README.md +9 -0
  230. package/packages/inline-svg/docs.mdx +15 -0
  231. package/packages/inline-svg/index.js +23 -0
  232. package/packages/inline-svg/index.test.js +50 -0
  233. package/packages/inline-svg/package.json +30 -0
  234. package/packages/inline-svg/props.js +10 -0
  235. package/packages/learn-callout/LICENSE +373 -0
  236. package/packages/learn-callout/README.md +9 -0
  237. package/packages/learn-callout/docs.mdx +31 -0
  238. package/packages/learn-callout/index.js +57 -0
  239. package/packages/learn-callout/index.test.js +49 -0
  240. package/packages/learn-callout/props.js +47 -0
  241. package/packages/learn-callout/style.css +207 -0
  242. package/packages/link-wrap/LICENSE +373 -0
  243. package/packages/link-wrap/README.md +44 -0
  244. package/packages/link-wrap/index.js +40 -0
  245. package/packages/link-wrap/package-lock.json +5 -0
  246. package/packages/link-wrap/package.json +17 -0
  247. package/packages/logo-grid/LICENSE +373 -0
  248. package/packages/logo-grid/README.md +26 -0
  249. package/packages/logo-grid/fragment.graphql +17 -0
  250. package/packages/logo-grid/index.js +157 -0
  251. package/packages/logo-grid/package-lock.json +111 -0
  252. package/packages/logo-grid/package.json +21 -0
  253. package/packages/logo-grid/style.css +148 -0
  254. package/packages/product-downloader/LICENSE +373 -0
  255. package/packages/product-downloader/README.md +9 -0
  256. package/packages/product-downloader/index.js +102 -0
  257. package/packages/product-downloader/package-lock.json +103 -0
  258. package/packages/product-downloader/package.json +18 -0
  259. package/packages/product-downloader/partials/download-cards/index.jsx +125 -0
  260. package/packages/product-downloader/partials/download-cards/style.module.css +152 -0
  261. package/packages/product-downloader/partials/dropdown/index.jsx +58 -0
  262. package/packages/product-downloader/partials/dropdown/style.module.css +28 -0
  263. package/packages/product-downloader/partials/logos/fastly.svg +7 -0
  264. package/packages/product-downloader/partials/release-information/index.jsx +148 -0
  265. package/packages/product-downloader/partials/release-information/style.module.css +101 -0
  266. package/packages/product-downloader/style.module.css +100 -0
  267. package/packages/product-downloader/utils/downloader.js +136 -0
  268. package/packages/product-features-list/LICENSE +373 -0
  269. package/packages/product-features-list/README.md +3 -0
  270. package/packages/product-features-list/index.js +30 -0
  271. package/packages/product-features-list/package-lock.json +42 -0
  272. package/packages/product-features-list/package.json +20 -0
  273. package/packages/product-features-list/style.css +90 -0
  274. package/packages/search/LICENSE +373 -0
  275. package/packages/search/README.md +188 -0
  276. package/packages/search/hits.js +196 -0
  277. package/packages/search/img/return.svg.js +1 -0
  278. package/packages/search/img/search-legend-enter.svg.js +1 -0
  279. package/packages/search/img/search-legend-escape.svg.js +1 -0
  280. package/packages/search/img/search-legend-page.svg.js +1 -0
  281. package/packages/search/img/search-x.svg.js +1 -0
  282. package/packages/search/img/search.svg.js +1 -0
  283. package/packages/search/img/slash-search-toggle.js +17 -0
  284. package/packages/search/index.js +60 -0
  285. package/packages/search/legend.js +32 -0
  286. package/packages/search/package-lock.json +931 -0
  287. package/packages/search/package.json +29 -0
  288. package/packages/search/provider.js +81 -0
  289. package/packages/search/search-box.js +139 -0
  290. package/packages/search/style.css +366 -0
  291. package/packages/search/tools.js +166 -0
  292. package/packages/section-header/LICENSE +373 -0
  293. package/packages/section-header/README.md +13 -0
  294. package/packages/section-header/fragment.graphql +5 -0
  295. package/packages/section-header/index.js +42 -0
  296. package/packages/section-header/package-lock.json +18 -0
  297. package/packages/section-header/package.json +20 -0
  298. package/packages/section-header/style.css +18 -0
  299. package/packages/select-input/LICENSE +373 -0
  300. package/packages/select-input/README.md +1 -0
  301. package/packages/select-input/img/dropdown-arrow.svg +1 -0
  302. package/packages/select-input/index.js +80 -0
  303. package/packages/select-input/package-lock.json +70 -0
  304. package/packages/select-input/package.json +19 -0
  305. package/packages/select-input/style.css +88 -0
  306. package/packages/subnav/LICENSE +373 -0
  307. package/packages/subnav/README.md +85 -0
  308. package/packages/subnav/helpers/globalThis.js +9 -0
  309. package/packages/subnav/helpers/traverse/index.js +34 -0
  310. package/packages/subnav/helpers/useNavRef.js +16 -0
  311. package/packages/subnav/helpers/useOverflowRef.js +76 -0
  312. package/packages/subnav/helpers/useStuckRef.js +43 -0
  313. package/packages/subnav/icons/boundary-logo-color.svgr.js +32 -0
  314. package/packages/subnav/icons/chevron-down.svg.js +3 -0
  315. package/packages/subnav/icons/consul-logo-color.svgr.js +44 -0
  316. package/packages/subnav/icons/hcp-logo-black-white.svgr.js +29 -0
  317. package/packages/subnav/icons/nomad-logo-color.svgr.js +50 -0
  318. package/packages/subnav/icons/packer-logo-color.svgr.js +40 -0
  319. package/packages/subnav/icons/terraform-logo-color.svgr.js +44 -0
  320. package/packages/subnav/icons/vagrant-logo-color.svgr.js +38 -0
  321. package/packages/subnav/icons/vault-logo-color.svgr.js +32 -0
  322. package/packages/subnav/icons/waypoint-logo-color.svgr.js +28 -0
  323. package/packages/subnav/index.js +107 -0
  324. package/packages/subnav/package-lock.json +56 -0
  325. package/packages/subnav/package.json +25 -0
  326. package/packages/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.js +17 -0
  327. package/packages/subnav/partials/CtaLinks/github-stars-link/index.js +71 -0
  328. package/packages/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.js +25 -0
  329. package/packages/subnav/partials/CtaLinks/github-stars-link/style.css +78 -0
  330. package/packages/subnav/partials/CtaLinks/icons/github-logo.js +14 -0
  331. package/packages/subnav/partials/CtaLinks/icons/github.svg.js +2 -0
  332. package/packages/subnav/partials/CtaLinks/icons/star.js +14 -0
  333. package/packages/subnav/partials/CtaLinks/index.js +48 -0
  334. package/packages/subnav/partials/CtaLinks/style.css +32 -0
  335. package/packages/subnav/partials/DropdownTrigger/index.js +20 -0
  336. package/packages/subnav/partials/DropdownTrigger/style.css +27 -0
  337. package/packages/subnav/partials/MenuItemsDefault/index.js +131 -0
  338. package/packages/subnav/partials/MenuItemsDefault/style.css +63 -0
  339. package/packages/subnav/partials/MenuItemsOverflow/index.js +117 -0
  340. package/packages/subnav/partials/MenuItemsOverflow/style.css +38 -0
  341. package/packages/subnav/partials/TitleLink/index.js +40 -0
  342. package/packages/subnav/partials/TitleLink/style.css +21 -0
  343. package/packages/subnav/style.css +6 -0
  344. package/packages/subnav/styles/_temp-g-svg.css +22 -0
  345. package/packages/subnav/styles/_temp-resets.css +15 -0
  346. package/packages/subnav/styles/index.css +103 -0
  347. package/packages/tabbed-accordion/LICENSE +373 -0
  348. package/packages/tabbed-accordion/README.md +3 -0
  349. package/packages/tabbed-accordion/fixtures/base.json +44 -0
  350. package/packages/tabbed-accordion/index.js +27 -0
  351. package/packages/tabbed-accordion/package-lock.json +27 -0
  352. package/packages/tabbed-accordion/package.json +19 -0
  353. package/packages/tabbed-accordion/style/_temp-spacing-tokens.css +36 -0
  354. package/packages/tabbed-accordion/style/index.css +22 -0
  355. package/packages/tabbed-accordion/style.css +1 -0
  356. package/packages/tabs/LICENSE +373 -0
  357. package/packages/tabs/README.md +31 -0
  358. package/packages/tabs/index.js +41 -0
  359. package/packages/tabs/package-lock.json +73 -0
  360. package/packages/tabs/package.json +18 -0
  361. package/packages/tabs/partials/TabTriggers/helpers/smoothScroll.js +77 -0
  362. package/packages/tabs/partials/TabTriggers/icons/chevron-right_black.svg.js +1 -0
  363. package/packages/tabs/partials/TabTriggers/index.js +143 -0
  364. package/packages/tabs/partials/TabTriggers/partials/TabTrigger/icons/tooltip.svg.js +1 -0
  365. package/packages/tabs/partials/TabTriggers/partials/TabTrigger/index.js +37 -0
  366. package/packages/tabs/partials/TabTriggers/partials/TabTrigger/style.css +75 -0
  367. package/packages/tabs/partials/TabTriggers/style.css +152 -0
  368. package/packages/tabs/style.css +67 -0
  369. package/packages/terminal/LICENSE +373 -0
  370. package/packages/terminal/README.md +9 -0
  371. package/packages/terminal/Terminal.module.css +146 -0
  372. package/packages/terminal/index.jsx +46 -0
  373. package/packages/terminal/package.json +17 -0
  374. package/packages/text-input/LICENSE +373 -0
  375. package/packages/text-input/README.md +24 -0
  376. package/packages/text-input/index.js +42 -0
  377. package/packages/text-input/package-lock.json +13 -0
  378. package/packages/text-input/package.json +19 -0
  379. package/packages/text-input/style.css +68 -0
  380. package/packages/text-split/LICENSE +373 -0
  381. package/packages/text-split/README.md +3 -0
  382. package/packages/text-split/index.js +66 -0
  383. package/packages/text-split/package-lock.json +35 -0
  384. package/packages/text-split/package.json +20 -0
  385. package/packages/text-split/partials/button-group/index.js +40 -0
  386. package/packages/text-split/partials/button-group/style.css +28 -0
  387. package/packages/text-split/partials/checkbox-list/icons/check-circle.svg.jsx +39 -0
  388. package/packages/text-split/partials/checkbox-list/index.js +28 -0
  389. package/packages/text-split/partials/checkbox-list/style.css +59 -0
  390. package/packages/text-split/style.css +1 -0
  391. package/packages/text-split/styles/_temp-spacing-tokens.css +37 -0
  392. package/packages/text-split/styles/index.css +86 -0
  393. package/packages/text-split-with-code/LICENSE +373 -0
  394. package/packages/text-split-with-code/README.md +13 -0
  395. package/packages/text-split-with-code/index.js +29 -0
  396. package/packages/text-split-with-code/package-lock.json +117 -0
  397. package/packages/text-split-with-code/package.json +21 -0
  398. package/packages/text-split-with-code/style.css +42 -0
  399. package/packages/text-split-with-image/LICENSE +373 -0
  400. package/packages/text-split-with-image/README.md +12 -0
  401. package/packages/text-split-with-image/index.js +11 -0
  402. package/packages/text-split-with-image/package-lock.json +75 -0
  403. package/packages/text-split-with-image/package.json +17 -0
  404. package/packages/text-split-with-logo-grid/LICENSE +373 -0
  405. package/packages/text-split-with-logo-grid/README.md +8 -0
  406. package/packages/text-split-with-logo-grid/index.js +63 -0
  407. package/packages/text-split-with-logo-grid/package-lock.json +90 -0
  408. package/packages/text-split-with-logo-grid/package.json +18 -0
  409. package/packages/text-split-with-logo-grid/style.css +88 -0
  410. package/packages/toggle/LICENSE +373 -0
  411. package/packages/toggle/index.js +22 -0
  412. package/packages/toggle/package-lock.json +5 -0
  413. package/packages/toggle/package.json +17 -0
  414. package/packages/toggle/readme.md +7 -0
  415. package/packages/toggle/style.css +35 -0
  416. package/packages/vertical-text-block-list/LICENSE +373 -0
  417. package/packages/vertical-text-block-list/README.md +15 -0
  418. package/packages/vertical-text-block-list/index.js +54 -0
  419. package/packages/vertical-text-block-list/package-lock.json +60 -0
  420. package/packages/vertical-text-block-list/package.json +22 -0
  421. package/packages/vertical-text-block-list/style.css +104 -0
  422. package/pages/_app.jsx +5 -0
  423. package/pages/global.css +43 -0
  424. package/pages/index.jsx +16 -0
  425. package/prettier.config.js +4 -0
  426. package/scripts/release-check-branch.sh +15 -0
  427. package/scripts/release-check-npm-auth.sh +39 -0
@@ -0,0 +1,188 @@
1
+ # @hashicorp/react-search
2
+
3
+ ## Props
4
+
5
+ ### renderHitContent
6
+
7
+ > `function` | `({ hit: object, Highlight: React.Node }) => React.Component` | _Required_
8
+
9
+ A render function whose result is used to display each query "hit"
10
+
11
+ **Params**
12
+
13
+ | Property | Type | Description |
14
+ |-----------|--------------|-------------------------------------------------------------------------------------|
15
+ | hit | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |
16
+ | Highlight | `React.Node` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/ |
17
+
18
+ ### resolveHitLink
19
+
20
+ > `function` | | `( hit: object ) => NextLinkProps` | _Optional_ | **Default:** (hit) => ({ href:`/${hit.objectID}` })
21
+
22
+ A function whose return value is spread as props to `next/link`.
23
+ For more information about the available props, reference the next/link documentation: https://nextjs.org/docs/api-reference/next/link
24
+
25
+ **Params**
26
+
27
+ | Property | Type | Description |
28
+ |----------|----------|-------------------------------------------------------------------------------------|
29
+ | hit | `object` | https://www.algolia.com/doc/api-reference/widgets/highlight/react/#widget-param-hit |
30
+
31
+ ### placeholder
32
+
33
+ > `string` | _Optional_ | **Default:** `Search`
34
+
35
+ ## Usage
36
+
37
+ ```jsx
38
+ import Search from '@hashicorp/react-search'
39
+
40
+ function SearchBar() {
41
+ return (
42
+ <Search
43
+ renderHitContent={({ hit, Highlight }) => <div>...</div>}
44
+ resolveHitLink={(hit) => ({ href: { pathname: `/${hit.objectID}`, query: { id: hit.__queryID} } })}
45
+ placeholder="Search documentation"
46
+ />
47
+ }
48
+ ```
49
+
50
+ ### Environment Variables
51
+
52
+ This component relies on the presence of the following environment variables to be available client side:
53
+
54
+ ```text
55
+ NEXT_PUBLIC_ALGOLIA_APP_ID
56
+ NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_API_KEY
57
+ NEXT_PUBLIC_ALGOLIA_INDEX
58
+ ```
59
+
60
+ ### React
61
+
62
+ To use the primary `<Search />` component, ensure it exists as a child of the `<SearchProvider />` component. For example:
63
+
64
+ **App.jsx**
65
+
66
+ ```jsx
67
+ import Search, { SearchProvider } from '@hashicorp/react-search'
68
+
69
+ function App() {
70
+ return (
71
+ <>
72
+ <SearchProvider>
73
+ <Search
74
+ renderHitContent={({hit, Highlight}) => (
75
+ <span className="name">
76
+ <Highlight attribute="name" hit={hit} tagName="span" />
77
+ </span>
78
+ )}
79
+ resolveHitLink={(hit) => ({ href: `/${hit.objectID}` })}
80
+ />
81
+ <ComponentA>
82
+ <ComponentB>
83
+ </SearchProvider>
84
+ <ComponentC__WithoutSearchContext>
85
+ </>
86
+ )
87
+ }
88
+ ```
89
+
90
+ Any child component of `<SearchProvider />` can utilize the provided `useSearch()` hook and access search-specific information. For example:
91
+
92
+ ```jsx
93
+ import { useSearch } from '@hashicorp/react-search'
94
+
95
+ function ComponentA() {
96
+ const { query } = useSearch()
97
+
98
+ return <code>Search query: {query}</code>
99
+ }
100
+ ```
101
+
102
+ ## useSearch()
103
+
104
+ `useSearch()` exposes the following values:
105
+
106
+ - `client` (`object`) - Initialized Algolia client
107
+ - `indexName` (`string`) - The name of the Algolia index that search is performed upon
108
+ - `initAlgoliaInsights` (`function`) - Required to initialize Algolia
109
+ - `isCancelled` (`boolean`) - Indicates if search is currently cancelled or not
110
+ - `logClick` (`function`) - Fires an analytics event via the `search-insights` package
111
+ - `query` (`string`) - Current search query
112
+ - `setIsCancelled` (`function`) - Setter function that updates the search cancel state
113
+ - `setQuery` (`function`) - Setter function that updates the search query
114
+
115
+
116
+ ## Tools
117
+
118
+ This package includes a `tools.js` file that includes Algolia-related Node.js scripts
119
+
120
+ ### Usage
121
+
122
+ ```js
123
+ const { indexDocsContent, indexContent } = require('@hashicorp/react-search/tools')
124
+ /* It's worth noting that you'd only want to use *one* of the two exported functions */
125
+ ```
126
+
127
+ #### indexDocsContent
128
+ > `function` | `(config: object)`
129
+ This specific helper function is designed specifically for perfoming search indexing on our various product sites' documentation pages.
130
+
131
+ ##### config.algoliaConfig: { appId: string, apiKey: string, index: string }
132
+
133
+ Algolia-related configuration
134
+
135
+ _Default_:
136
+ ```js
137
+ {
138
+ apiKey: process.env.ALGOLIA_API_KEY,
139
+ appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,
140
+ index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,
141
+ }
142
+ ```
143
+
144
+ ##### config.contentDir: string
145
+
146
+ Path to directory that contains the content to be indexed by Algolia
147
+
148
+ _Default_: `path.join(__dirname, 'pages')`
149
+
150
+ ##### config.filesPattern: string
151
+
152
+ [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.
153
+
154
+ _Default_: `'**/*.mdx'`
155
+
156
+ ##### config.globOptions: { [k:string]: any }
157
+
158
+ Additional options to include to the glob match. Available options [here](https://github.com/isaacs/node-glob#options)
159
+
160
+ _Default_: `{ ignore: path.join(config.contentDir, 'partials/**/*') }`
161
+
162
+ ##### config.frontmatterKeys: string[]
163
+
164
+ Assuming your search-indexed content includes [frontmatter](https://jekyllrb.com/docs/front-matter/), the keys included in this `array` will be included as search criteria.
165
+
166
+ _Default_: `['page_title', 'description']`
167
+
168
+
169
+ #### indexContent
170
+ > `function` | `(config: object)`
171
+ This generic helper function allows for custom Algolia indexing
172
+
173
+ ##### config.algoliaConfig: { appId: string, apiKey: string, index: string }
174
+
175
+ Algolia-related configuration
176
+
177
+ _Default_:
178
+ ```js
179
+ {
180
+ apiKey: process.env.ALGOLIA_API_KEY,
181
+ appId: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID,
182
+ index: process.env.NEXT_PUBLIC_ALGOLIA_INDEX,
183
+ }
184
+ ```
185
+
186
+ ##### config.getSearchObjects: () => any
187
+
188
+ This 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
@@ -0,0 +1,196 @@
1
+ import { forwardRef, useEffect, useRef, useState } from 'react'
2
+ import Link from 'next/link'
3
+ import { Highlight, connectHits } from 'react-instantsearch-dom'
4
+ import generateSlug from '@hashicorp/remark-plugins/generate_slug'
5
+ import InlineSvg from '@hashicorp/react-inline-svg'
6
+ import SearchLegend from './legend'
7
+ import { useSearch } from './provider'
8
+ import IconReturn from './img/return.svg.js'
9
+
10
+ function Hits({
11
+ /* Props provided from connector */
12
+ hits,
13
+ /* Props passed explicity */
14
+ handleEscape,
15
+ renderHitContent,
16
+ resolveHitLink,
17
+ query,
18
+ setCancelled,
19
+ }) {
20
+ const selectedHit = useRef(null)
21
+ const [hitsTabIndex, setHitsTabIndex] = useState(null)
22
+
23
+ useEffect(() => {
24
+ window.addEventListener('keydown', onKeyDown)
25
+ return () => window.removeEventListener('keydown', onKeyDown)
26
+ }, [hitsTabIndex])
27
+
28
+ useEffect(() => {
29
+ if (selectedHit?.current) scrollToActive(selectedHit.current)
30
+ }, [hitsTabIndex])
31
+
32
+ function onKeyDown(e) {
33
+ switch ([e.ctrlKey, e.keyCode].join(',')) {
34
+ // [Enter]
35
+ case 'false,13':
36
+ return handleEnter(e)
37
+ // [Escape]
38
+ case 'false,27':
39
+ setHitsTabIndex(null)
40
+ return handleEscape()
41
+ // [ArrowDown]
42
+ // [Ctrl-n]
43
+ case 'false,40':
44
+ case 'true,78':
45
+ if (!hitsTabIndex) {
46
+ setHitsTabIndex(0)
47
+ scrollToActive()
48
+ }
49
+ return incrementTabIndex()
50
+ // [ArrowUp]
51
+ // [Ctrl-p]
52
+ case 'false,38':
53
+ case 'true,80':
54
+ e.preventDefault()
55
+ return decrementTabIndex()
56
+ }
57
+ }
58
+
59
+ function handleEnter(e) {
60
+ e.preventDefault()
61
+ selectedHit.current?.click()
62
+ }
63
+
64
+ function incrementTabIndex() {
65
+ let startIndex = hitsTabIndex || 0
66
+ const nextIndex = startIndex + 1
67
+ if (nextIndex > hits.length) return setHitsTabIndex(1)
68
+ setHitsTabIndex(nextIndex)
69
+ }
70
+
71
+ function decrementTabIndex() {
72
+ let startIndex = hitsTabIndex || 0
73
+ const nextIndex = startIndex - 1
74
+ if (nextIndex < 1) return setHitsTabIndex(hits.length)
75
+ setHitsTabIndex(nextIndex)
76
+ }
77
+
78
+ function scrollToActive(el) {
79
+ if (!el) return
80
+ el.scrollIntoView({
81
+ behavior: 'smooth',
82
+ block: 'nearest',
83
+ inline: 'nearest',
84
+ })
85
+ }
86
+
87
+ return (
88
+ <div className="c-hits">
89
+ {hits.length === 0 ? (
90
+ <div className="no-hits">
91
+ <span className="title">{`No results for ${query}...`}</span>
92
+ <span className="message">
93
+ Search tips: some terms require an exact match. Try typing the
94
+ entire term, or use a different word or phrase.
95
+ </span>
96
+ </div>
97
+ ) : (
98
+ <div className="hits">
99
+ <SearchLegend />
100
+ <ul className="hits-list">
101
+ {hits.map((hit) => (
102
+ <Hit
103
+ key={hit.objectID}
104
+ closeSearchResults={() => setCancelled(true)}
105
+ hit={hit}
106
+ renderHitContent={renderHitContent}
107
+ resolveHitLink={resolveHitLink}
108
+ {...(hitsTabIndex === hit.__position && {
109
+ className: 'active',
110
+ ref: selectedHit,
111
+ })}
112
+ />
113
+ ))}
114
+ </ul>
115
+ </div>
116
+ )}
117
+ </div>
118
+ )
119
+ }
120
+
121
+ export default connectHits(Hits)
122
+
123
+ /* eslint-disable react/display-name */
124
+
125
+ // we need an `a` tag that also has a click handler
126
+ // next/link passes a click handler to its child; so in order to merge ours in, we need this syntax
127
+ // ref: https://github.com/zeit/next.js/#with-link
128
+
129
+ const LinkWithClick = forwardRef(({ children, ...props }, ref) => (
130
+ <a {...props} ref={ref}>
131
+ {children}
132
+ </a>
133
+ ))
134
+
135
+ const Hit = forwardRef(
136
+ (
137
+ {
138
+ className = '',
139
+ closeSearchResults,
140
+ hit,
141
+ renderHitContent,
142
+ resolveHitLink,
143
+ },
144
+ ref
145
+ ) => {
146
+ const { logClick, setQuery } = useSearch()
147
+ let hitLink = resolveHitLink
148
+ ? resolveHitLink(hit)
149
+ : { href: `/${hit.objectID}` }
150
+
151
+ // We append an associated heading slug to hitLink.href if and only if the search result matches one heading
152
+ // and does not match either description or page title criteria
153
+ if (
154
+ hit?._highlightResult?.description?.matchLevel === 'none' &&
155
+ hit?._highlightResult?.page_title?.matchLevel === 'none'
156
+ ) {
157
+ const matchedHeading = hit.headings.filter((heading, idx) => {
158
+ return hit?._highlightResult?.headings[idx]?.matchLevel !== 'none'
159
+ })
160
+
161
+ if (matchedHeading.length === 1) {
162
+ hitLink.href =
163
+ typeof hitLink.href === 'object'
164
+ ? { ...hitLink.href, hash: generateSlug(matchedHeading[0]) }
165
+ : { pathname: hitLink.href, hash: generateSlug(matchedHeading[0]) }
166
+ }
167
+ }
168
+
169
+ const handleClick = () => {
170
+ logClick(hit)
171
+ closeSearchResults()
172
+ setQuery('')
173
+ }
174
+
175
+ return (
176
+ <li className="hit-item">
177
+ <Link {...hitLink} passHref>
178
+ <LinkWithClick
179
+ ref={ref}
180
+ className={`hit-link-wrapper ${className}`}
181
+ onClick={handleClick}
182
+ >
183
+ <div className="hit">
184
+ <div className="hit-content">
185
+ {renderHitContent({ hit, Highlight })}
186
+ </div>
187
+ <InlineSvg className={`icon-return`} src={IconReturn} />
188
+ </div>
189
+ </LinkWithClick>
190
+ </Link>
191
+ </li>
192
+ )
193
+ }
194
+ )
195
+
196
+ /* eslint-enable */
@@ -0,0 +1 @@
1
+ export default `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 7v5a1 1 0 01-1 1H7.5" stroke="#76767D" stroke-linecap="round"/><path d="M10 10l-3 3 3 3" stroke="#76767D" stroke-linecap="round" stroke-linejoin="round"/></svg>`
@@ -0,0 +1 @@
1
+ export default `<svg width="61" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><g opacity=".75"><rect x=".5" y=".5" width="60" height="23" rx=".5" stroke="#DCDDE0"/><path d="M11.252 16.132c1.44 0 2.4-.852 2.58-2.028h-1.2c-.276.792-.996.924-1.38.924-.948 0-1.572-.6-1.572-1.584v-.012h4.248c.144-1.98-.864-3.504-2.712-3.504-1.704 0-2.856 1.26-2.856 3.12 0 1.932 1.14 3.084 2.892 3.084zm-1.536-3.816c.048-.756.66-1.284 1.464-1.284.804 0 1.368.528 1.404 1.284H9.716zM15.085 16h1.272v-3.024c0-1.236.708-1.992 1.5-1.992.672 0 1.188.42 1.188 1.476V16h1.38v-3.684c0-2.028-1.44-2.472-2.268-2.472-.972 0-1.572.588-1.8.912V10h-1.272v6zm8.523 0h1.14l.012-1.128h-.816c-.576 0-.732-.192-.732-.792v-3h1.536V10h-1.536V8.08h-1.248V10h-.936v1.08h.936v3.324c0 .936.684 1.596 1.644 1.596zm4.402.132c1.44 0 2.4-.852 2.58-2.028h-1.2c-.276.792-.996.924-1.38.924-.948 0-1.572-.6-1.572-1.584v-.012h4.248c.144-1.98-.864-3.504-2.712-3.504-1.704 0-2.856 1.26-2.856 3.12 0 1.932 1.14 3.084 2.892 3.084zm-1.536-3.816c.048-.756.66-1.284 1.464-1.284.804 0 1.368.528 1.404 1.284h-2.868zM31.843 16h1.236v-3.036c0-1.476.935-1.74 1.751-1.728h.205V9.904h-.276c-1.14 0-1.56.6-1.68.828V10h-1.237v6z" fill="#76767D"/><path d="M54 7v5a1 1 0 01-1 1h-8.5" stroke="#76767D" stroke-linecap="round"/><path d="M47 10l-3 3 3 3" stroke="#76767D" stroke-linecap="round" stroke-linejoin="round"/></g></svg>`
@@ -0,0 +1 @@
1
+ export default `<svg width="36" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path opacity=".75" d="M11.703 16.143c1.56 0 2.6-.923 2.795-2.197h-1.3c-.299.858-1.079 1.001-1.495 1.001-1.027 0-1.703-.65-1.703-1.716v-.013h4.602c.156-2.145-.936-3.796-2.938-3.796-1.846 0-3.094 1.365-3.094 3.38 0 2.093 1.235 3.341 3.133 3.341zm-1.664-4.134c.052-.819.715-1.391 1.586-1.391.871 0 1.482.572 1.521 1.391H10.04zm8.091 4.134c1.21 0 2.535-.754 2.535-2.106 0-1.001-.598-1.729-2.626-1.976-.806-.104-1.105-.429-1.105-.78 0-.481.546-.689 1.053-.689.364 0 1.105.117 1.248 1.001h1.287c-.13-1.612-1.378-2.21-2.56-2.21-1.496 0-2.432.897-2.432 1.885 0 .65.234 1.612 2.496 1.937.988.143 1.196.481 1.196.832 0 .533-.455.936-1.144.936-.689 0-1.274-.377-1.417-1.053h-1.326c.078 1.482 1.326 2.223 2.795 2.223zm6.37-.052c1.52 0 2.73-.975 2.912-2.366h-1.456c-.117.585-.598 1.144-1.43 1.144-.936 0-1.677-.819-1.677-2.21 0-1.326.74-2.106 1.65-2.106.82 0 1.314.559 1.457 1.144h1.456c-.17-1.365-1.352-2.327-2.86-2.327-1.86 0-3.172 1.404-3.172 3.38 0 1.963 1.287 3.341 3.12 3.341z" fill="#76767D"/><rect opacity=".5" x=".5" y=".5" width="35" height="23" rx=".5" stroke="#BDBEC2"/></svg>`
@@ -0,0 +1 @@
1
+ export default `<svg width="20" height="12" fill="none" xmlns="http://www.w3.org/2000/svg"><path stroke="#76767D" stroke-linecap="round" d="M4.5.5v11"/><path d="M1 4L4.5.5 8 4" stroke="#76767D" stroke-linecap="round" stroke-linejoin="round"/><path stroke="#76767D" stroke-linecap="round" d="M15.5.5v11"/><path d="M12 7.5l3.5 4 3.5-4" stroke="#76767D" stroke-linecap="round" stroke-linejoin="round"/></svg>`
@@ -0,0 +1 @@
1
+ export default `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.915 1.077h13.684v13.684H1.915z"/><path d="M1.915 1.077l13.683 13.684M1.915 14.76L15.598 1.078" stroke="#76767D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`
@@ -0,0 +1 @@
1
+ export default `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M8.75 15a6.25 6.25 0 100-12.5 6.25 6.25 0 000 12.5z" stroke="#76767d" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M17.5 17.5l-4.333-4.333" stroke="#76767d" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`
@@ -0,0 +1,17 @@
1
+ export default function IconSlash() {
2
+ return (
3
+ <svg
4
+ className="icon-slash"
5
+ width="24"
6
+ height="24"
7
+ fill="none"
8
+ viewBox="0 0 24 24"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ role="img"
11
+ >
12
+ <title>{"Type '/' to Search"}</title>
13
+ <rect x=".5" y=".5" width="23" height="23" rx=".5" stroke="#76767D" />
14
+ <path d="M9 18l6-12" stroke="#76767D" strokeWidth="1.5" />
15
+ </svg>
16
+ )
17
+ }
@@ -0,0 +1,60 @@
1
+ import { useEffect } from 'react'
2
+ import { Configure, InstantSearch } from 'react-instantsearch-dom'
3
+ import Hits from './hits'
4
+ import SearchBox from './search-box'
5
+ import SearchProvider, { useSearch } from './provider'
6
+
7
+ function Search({ placeholder = 'Search', renderHitContent, resolveHitLink }) {
8
+ if (!renderHitContent) {
9
+ throw new Error(
10
+ 'Please provide a `renderHitContent` prop to the Search component'
11
+ )
12
+ }
13
+
14
+ const {
15
+ client,
16
+ indexName,
17
+ initAlgoliaInsights,
18
+ isCancelled,
19
+ query,
20
+ setCancelled,
21
+ setQuery,
22
+ } = useSearch()
23
+
24
+ useEffect(initAlgoliaInsights, [])
25
+
26
+ function handleEscape() {
27
+ setCancelled(true)
28
+ }
29
+
30
+ return (
31
+ <div className="g-search">
32
+ <InstantSearch indexName={indexName} searchClient={client} refresh>
33
+ <Configure distinct={1} hitsPerPage={25} clickAnalytics />
34
+ <SearchBox
35
+ {...{
36
+ handleEscape,
37
+ placeholder,
38
+ query,
39
+ setCancelled,
40
+ setQuery,
41
+ }}
42
+ />
43
+ {query && !isCancelled && (
44
+ <Hits
45
+ {...{
46
+ handleEscape,
47
+ query,
48
+ renderHitContent,
49
+ resolveHitLink,
50
+ setCancelled,
51
+ }}
52
+ />
53
+ )}
54
+ </InstantSearch>
55
+ </div>
56
+ )
57
+ }
58
+
59
+ export default Search
60
+ export { SearchProvider, useSearch }
@@ -0,0 +1,32 @@
1
+ import InlineSvg from '@hashicorp/react-inline-svg'
2
+ import IconEnter from './img/search-legend-enter.svg.js'
3
+ import IconPage from './img/search-legend-page.svg.js'
4
+ import IconEscape from './img/search-legend-escape.svg.js'
5
+
6
+ export default function SearchLegend() {
7
+ return (
8
+ <div className="c-search-legend">
9
+ <figure className="legend-item">
10
+ <InlineSvg src={IconEnter} aria-hidden={true} />
11
+ <p className="g-type-tag-label">
12
+ <span className="visually-hidden">Enter</span>
13
+ to select
14
+ </p>
15
+ </figure>
16
+ <figure className="legend-item">
17
+ <InlineSvg src={IconPage} aria-hidden={true} />
18
+ <p className="g-type-tag-label">
19
+ <span className="visually-hidden">Tab</span>
20
+ to navigate
21
+ </p>
22
+ </figure>
23
+ <figure className="legend-item">
24
+ <InlineSvg src={IconEscape} aria-hidden={true} />
25
+ <p className="g-type-tag-label">
26
+ <span className="visually-hidden">Escape</span>
27
+ to dismiss
28
+ </p>
29
+ </figure>
30
+ </div>
31
+ )
32
+ }