@hashicorp/react-components 0.0.0 → 1.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 (572) hide show
  1. package/.eslintrc.js +4 -0
  2. package/.stylelintrc.js +3 -0
  3. package/.test/setup-vitest.js +1 -0
  4. package/README.md +2 -78
  5. package/global.d.ts +6 -0
  6. package/package.json +29 -29
  7. package/postcss.config.js +21 -0
  8. package/src/components/actions/index.tsx +107 -0
  9. package/src/components/actions/style.module.css +28 -0
  10. package/src/components/actions/types.ts +73 -0
  11. package/src/components/call-to-action/index.tsx +205 -0
  12. package/src/components/call-to-action/styles/variant-centered.module.css +93 -0
  13. package/src/components/call-to-action/styles/variant-compact-grid.module.css +88 -0
  14. package/src/components/call-to-action/styles/variant-compact.module.css +91 -0
  15. package/src/components/call-to-action/styles/variant-links.module.css +85 -0
  16. package/src/components/card/README.md +11 -0
  17. package/src/components/card/card.tsx +45 -0
  18. package/src/components/card/index.test.tsx +69 -0
  19. package/src/components/card/index.tsx +14 -0
  20. package/src/components/card/newsroom-card/index.test.tsx +39 -0
  21. package/src/components/card/newsroom-card/index.tsx +37 -0
  22. package/src/components/card/newsroom-card/style.module.css +12 -0
  23. package/src/components/card/partner-card/index.test.tsx +57 -0
  24. package/src/components/card/partner-card/index.tsx +69 -0
  25. package/src/components/card/partner-card/style.module.css +24 -0
  26. package/src/components/card/person-card/index.test.tsx +71 -0
  27. package/src/components/card/person-card/index.tsx +93 -0
  28. package/src/components/card/person-card/style.module.css +33 -0
  29. package/src/components/card/primitives.tsx +176 -0
  30. package/src/components/card/promo-card/index.tsx +51 -0
  31. package/src/components/card/resource-card/index.test.tsx +48 -0
  32. package/src/components/card/resource-card/index.tsx +37 -0
  33. package/src/components/card/style.module.css +145 -0
  34. package/src/components/card/types.ts +66 -0
  35. package/src/components/card/unified-card/index.tsx +64 -0
  36. package/{packages → src/components}/consent-manager/README.md +44 -1
  37. package/src/components/consent-manager/components/banner/banner.module.css +23 -0
  38. package/src/components/consent-manager/components/banner/banner.test.tsx +31 -0
  39. package/src/components/consent-manager/components/banner/banner.tsx +73 -0
  40. package/src/components/consent-manager/components/dialog/dialog.module.css +145 -0
  41. package/src/components/consent-manager/components/dialog/dialog.test.tsx +194 -0
  42. package/src/components/consent-manager/components/dialog/dialog.tsx +339 -0
  43. package/src/components/consent-manager/img/icn_close.tsx +19 -0
  44. package/src/components/consent-manager/index.test.tsx +334 -0
  45. package/src/components/consent-manager/index.tsx +186 -0
  46. package/src/components/consent-manager/loader/README.md +29 -0
  47. package/src/components/consent-manager/loader/categories.ts +22 -0
  48. package/src/components/consent-manager/loader/index.tsx +94 -0
  49. package/src/components/consent-manager/loader/presets/enterprise.ts +12 -0
  50. package/src/components/consent-manager/loader/presets/oss.ts +10 -0
  51. package/src/components/consent-manager/loader/services.ts +45 -0
  52. package/src/components/consent-manager/scripts/custom.tsx +59 -0
  53. package/src/components/consent-manager/scripts/segment.tsx +87 -0
  54. package/src/components/consent-manager/style.module.css +9 -0
  55. package/src/components/consent-manager/types.ts +55 -0
  56. package/src/components/consent-manager/util/cookies.test.ts +75 -0
  57. package/src/components/consent-manager/util/cookies.ts +70 -0
  58. package/src/components/consent-manager/util/integrations.test.ts +115 -0
  59. package/src/components/consent-manager/util/integrations.ts +110 -0
  60. package/src/components/intro/index.tsx +82 -0
  61. package/src/components/intro/style.module.css +67 -0
  62. package/src/components/intro/types.ts +44 -0
  63. package/src/components/marketo-form/CHANGELOG.md +122 -0
  64. package/src/components/marketo-form/README.md +1 -0
  65. package/src/components/marketo-form/contexts/FormMetadata.ts +11 -0
  66. package/src/components/marketo-form/docs.mdx +197 -0
  67. package/src/components/marketo-form/fixtures/index.ts +185 -0
  68. package/src/components/marketo-form/form/index.tsx +369 -0
  69. package/src/components/marketo-form/index.test.tsx +320 -0
  70. package/src/components/marketo-form/index.ts +11 -0
  71. package/src/components/marketo-form/package.original.json +30 -0
  72. package/src/components/marketo-form/partials/error-message/index.tsx +12 -0
  73. package/src/components/marketo-form/partials/error-message/style.module.css +13 -0
  74. package/src/components/marketo-form/partials/field/index.tsx +90 -0
  75. package/src/components/marketo-form/partials/field-wrapper/index.tsx +26 -0
  76. package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +32 -0
  77. package/src/components/marketo-form/partials/fields/email-field/index.tsx +35 -0
  78. package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +21 -0
  79. package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +37 -0
  80. package/src/components/marketo-form/partials/fields/htmltext-field/index.tsx +21 -0
  81. package/src/components/marketo-form/partials/fields/htmltext-field/style.module.css +6 -0
  82. package/src/components/marketo-form/partials/fields/name-field/index.tsx +19 -0
  83. package/src/components/marketo-form/partials/fields/name-field/style.module.css +13 -0
  84. package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +48 -0
  85. package/src/components/marketo-form/partials/fields/select-field/index.tsx +39 -0
  86. package/src/components/marketo-form/partials/fields/select-field/style.module.css +5 -0
  87. package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +30 -0
  88. package/src/components/marketo-form/partials/fields/text-field/index.tsx +30 -0
  89. package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +29 -0
  90. package/src/components/marketo-form/partials/label/index.tsx +24 -0
  91. package/src/components/marketo-form/partials/label/style.module.css +12 -0
  92. package/src/components/marketo-form/partials/visibility-rule/index.tsx +84 -0
  93. package/src/components/marketo-form/props.js +66 -0
  94. package/src/components/marketo-form/server/api-routes.ts +109 -0
  95. package/src/components/marketo-form/server/client.ts +98 -0
  96. package/src/components/marketo-form/server/index.ts +8 -0
  97. package/src/components/marketo-form/types.ts +268 -0
  98. package/src/components/marketo-form/utils.test.tsx +103 -0
  99. package/src/components/marketo-form/utils.ts +445 -0
  100. package/src/components/next-steps/index.tsx +143 -0
  101. package/src/components/next-steps/style.module.css +270 -0
  102. package/src/components/next-steps/types.ts +63 -0
  103. package/src/components/product-badge/index.test.tsx +11 -0
  104. package/src/components/product-badge/index.tsx +42 -0
  105. package/src/components/product-badge/style.module.css +76 -0
  106. package/src/components/products-used/index.tsx +84 -0
  107. package/src/components/products-used/style.module.css +87 -0
  108. package/src/components/products-used/types.ts +31 -0
  109. package/src/components/related-content/index.test.tsx +74 -0
  110. package/src/components/related-content/index.tsx +56 -0
  111. package/src/components/related-content/style.module.css +89 -0
  112. package/src/components/related-content/types.ts +21 -0
  113. package/src/components/subnav/helpers/areBasePathsMatching.ts +13 -0
  114. package/src/components/subnav/helpers/traverse/index.ts +42 -0
  115. package/src/components/subnav/helpers/useHeightRef.ts +42 -0
  116. package/src/components/subnav/helpers/useNavRef.ts +30 -0
  117. package/src/components/subnav/helpers/useOverflowRef.ts +85 -0
  118. package/src/components/subnav/helpers/useStuckRef.ts +51 -0
  119. package/src/components/subnav/index.tsx +199 -0
  120. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.test.ts +26 -0
  121. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.ts +22 -0
  122. package/src/components/subnav/partials/CtaLinks/github-stars-link/index.tsx +87 -0
  123. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.test.ts +29 -0
  124. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.ts +32 -0
  125. package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +85 -0
  126. package/src/components/subnav/partials/CtaLinks/icons/github-logo.js +20 -0
  127. package/{packages → src/components}/subnav/partials/CtaLinks/icons/github.svg.js +5 -0
  128. package/src/components/subnav/partials/CtaLinks/icons/star.js +20 -0
  129. package/src/components/subnav/partials/CtaLinks/index.tsx +131 -0
  130. package/src/components/subnav/partials/CtaLinks/style.module.css +45 -0
  131. package/src/components/subnav/partials/DropdownTrigger/index.tsx +35 -0
  132. package/src/components/subnav/partials/DropdownTrigger/style.module.css +36 -0
  133. package/src/components/subnav/partials/MenuItemsDefault/index.tsx +151 -0
  134. package/src/components/subnav/partials/MenuItemsDefault/style.module.css +91 -0
  135. package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +139 -0
  136. package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +82 -0
  137. package/src/components/subnav/partials/TitleLink/index.tsx +113 -0
  138. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +9 -0
  139. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +9 -0
  140. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-dark.ts +23 -0
  141. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-light.ts +23 -0
  142. package/src/components/subnav/partials/TitleLink/style.module.css +43 -0
  143. package/src/components/subnav/partials/nav-item-text/index.tsx +37 -0
  144. package/src/components/subnav/partials/nav-item-text/style.module.css +15 -0
  145. package/src/components/subnav/style.module.css +68 -0
  146. package/src/components/subnav/subnav-consts.ts +1 -0
  147. package/src/components/subnav/theme.module.css +50 -0
  148. package/tsconfig.json +14 -0
  149. package/vitest.config.mts +12 -0
  150. package/.circleci/config.yml +0 -8
  151. package/.github/pull_request_template.md +0 -36
  152. package/.github/workflows/publish.yml +0 -181
  153. package/__test-helpers/expect-throw.js +0 -6
  154. package/__test-helpers/extend-expect.js +0 -1
  155. package/__test-helpers/mocks/css-module-mock.js +0 -1
  156. package/__test-helpers/mocks/graphql-fragment-mock.js +0 -1
  157. package/__test-helpers/mocks/svg-mock.js +0 -1
  158. package/babel.config.js +0 -5
  159. package/jest.config.js +0 -13
  160. package/lerna.json +0 -16
  161. package/next.config.js +0 -14
  162. package/packages/accordion/LICENSE +0 -373
  163. package/packages/accordion/README.md +0 -5
  164. package/packages/accordion/index.js +0 -21
  165. package/packages/accordion/package-lock.json +0 -13
  166. package/packages/accordion/package.json +0 -20
  167. package/packages/accordion/partials/AccordionItems/fixtures/default.json +0 -12
  168. package/packages/accordion/partials/AccordionItems/icons/arrow-down.svg +0 -1
  169. package/packages/accordion/partials/AccordionItems/index.js +0 -64
  170. package/packages/accordion/partials/AccordionItems/style.css +0 -2
  171. package/packages/accordion/partials/AccordionItems/styles/content.css +0 -47
  172. package/packages/accordion/partials/AccordionItems/styles/index.css +0 -72
  173. package/packages/accordion/partials/Collapsible/index.js +0 -87
  174. package/packages/accordion/partials/Collapsible/style.css +0 -10
  175. package/packages/accordion/style.css +0 -3
  176. package/packages/accordion/styles/index.css +0 -14
  177. package/packages/alert/LICENSE +0 -373
  178. package/packages/alert/README.md +0 -9
  179. package/packages/alert/fragment.graphql +0 -8
  180. package/packages/alert/index.js +0 -44
  181. package/packages/alert/package.json +0 -22
  182. package/packages/alert/style.css +0 -138
  183. package/packages/alert-banner/LICENSE +0 -373
  184. package/packages/alert-banner/README.md +0 -3
  185. package/packages/alert-banner/close-icon.js +0 -35
  186. package/packages/alert-banner/fragment.graphql +0 -8
  187. package/packages/alert-banner/index.jsx +0 -97
  188. package/packages/alert-banner/package-lock.json +0 -18
  189. package/packages/alert-banner/package.json +0 -26
  190. package/packages/alert-banner/style.css +0 -151
  191. package/packages/button/LICENSE +0 -373
  192. package/packages/button/README.md +0 -19
  193. package/packages/button/fragment.graphql +0 -6
  194. package/packages/button/helpers/normalizeButtonTheme.js +0 -49
  195. package/packages/button/icons/arrow-right.svg.js +0 -1
  196. package/packages/button/icons/chevron-down.svg.js +0 -1
  197. package/packages/button/icons/download.svg.js +0 -1
  198. package/packages/button/icons/external-link.svg.js +0 -1
  199. package/packages/button/index.js +0 -86
  200. package/packages/button/package-lock.json +0 -18
  201. package/packages/button/package.json +0 -21
  202. package/packages/button/styles/index.css +0 -122
  203. package/packages/button/styles/variant-primary.css +0 -232
  204. package/packages/button/styles/variant-secondary.css +0 -179
  205. package/packages/button/styles/variant-tertiary-neutral.css +0 -65
  206. package/packages/button/styles/variant-tertiary.css +0 -182
  207. package/packages/call-to-action/LICENSE +0 -373
  208. package/packages/call-to-action/README.md +0 -3
  209. package/packages/call-to-action/index.js +0 -67
  210. package/packages/call-to-action/package-lock.json +0 -27
  211. package/packages/call-to-action/package.json +0 -21
  212. package/packages/call-to-action/style.css +0 -1
  213. package/packages/call-to-action/styles/_temp-spacing-tokens.css +0 -33
  214. package/packages/call-to-action/styles/common.css +0 -27
  215. package/packages/call-to-action/styles/index.css +0 -4
  216. package/packages/call-to-action/styles/variant-centered.css +0 -44
  217. package/packages/call-to-action/styles/variant-compact.css +0 -46
  218. package/packages/call-to-action/styles/variant-links.css +0 -32
  219. package/packages/callouts/LICENSE +0 -373
  220. package/packages/callouts/README.md +0 -8
  221. package/packages/callouts/index.js +0 -67
  222. package/packages/callouts/package-lock.json +0 -33
  223. package/packages/callouts/package.json +0 -20
  224. package/packages/callouts/partials/callout-item/fixtures/default.json +0 -9
  225. package/packages/callouts/partials/callout-item/index.js +0 -71
  226. package/packages/callouts/partials/callout-item/style.css +0 -76
  227. package/packages/callouts/style.css +0 -1
  228. package/packages/callouts/styles/_temp-reset.css +0 -11
  229. package/packages/callouts/styles/_temp-spacing-tokens.css +0 -41
  230. package/packages/callouts/styles/index.css +0 -124
  231. package/packages/case-study-slider/LICENSE +0 -373
  232. package/packages/case-study-slider/Logo.js +0 -6
  233. package/packages/case-study-slider/StatusBar.js +0 -14
  234. package/packages/case-study-slider/StatusBar.test.js +0 -32
  235. package/packages/case-study-slider/docs.mdx +0 -144
  236. package/packages/case-study-slider/fragment.graphql +0 -33
  237. package/packages/case-study-slider/index.js +0 -229
  238. package/packages/case-study-slider/index.test.js +0 -279
  239. package/packages/case-study-slider/package-lock.json +0 -72
  240. package/packages/case-study-slider/package.json +0 -20
  241. package/packages/case-study-slider/props.js +0 -182
  242. package/packages/case-study-slider/readme.md +0 -7
  243. package/packages/case-study-slider/style.css +0 -176
  244. package/packages/checkbox-input/LICENSE +0 -373
  245. package/packages/checkbox-input/index.js +0 -55
  246. package/packages/checkbox-input/package-lock.json +0 -13
  247. package/packages/checkbox-input/package.json +0 -20
  248. package/packages/checkbox-input/readme.md +0 -19
  249. package/packages/checkbox-input/style.css +0 -110
  250. package/packages/code-block/LICENSE +0 -373
  251. package/packages/code-block/README.md +0 -9
  252. package/packages/code-block/fragment.graphql +0 -10
  253. package/packages/code-block/img/clipboard.svg +0 -1
  254. package/packages/code-block/index.js +0 -85
  255. package/packages/code-block/languages/sentinel.js +0 -71
  256. package/packages/code-block/package-lock.json +0 -68
  257. package/packages/code-block/package.json +0 -22
  258. package/packages/code-block/style.css +0 -162
  259. package/packages/consent-manager/LICENSE +0 -373
  260. package/packages/consent-manager/banner.js +0 -39
  261. package/packages/consent-manager/cookies.js +0 -53
  262. package/packages/consent-manager/dialog.js +0 -286
  263. package/packages/consent-manager/icn_close.js +0 -19
  264. package/packages/consent-manager/index.js +0 -119
  265. package/packages/consent-manager/integrations.js +0 -92
  266. package/packages/consent-manager/load.js +0 -139
  267. package/packages/consent-manager/package-lock.json +0 -45
  268. package/packages/consent-manager/package.json +0 -24
  269. package/packages/consent-manager/style.css +0 -209
  270. package/packages/content/LICENSE +0 -373
  271. package/packages/content/README.md +0 -8
  272. package/packages/content/index.js +0 -9
  273. package/packages/content/package.json +0 -17
  274. package/packages/content/style.css +0 -322
  275. package/packages/content-cta/LICENSE +0 -373
  276. package/packages/content-cta/README.md +0 -3
  277. package/packages/content-cta/docs.mdx +0 -25
  278. package/packages/content-cta/index.js +0 -49
  279. package/packages/content-cta/index.test.js +0 -78
  280. package/packages/content-cta/package-lock.json +0 -27
  281. package/packages/content-cta/package.json +0 -20
  282. package/packages/content-cta/props.js +0 -41
  283. package/packages/content-cta/stories/docs.mdx +0 -0
  284. package/packages/content-cta/stories/examples.stories.js +0 -51
  285. package/packages/content-cta/stories/with-knobs.stories.js +0 -58
  286. package/packages/content-cta/style.css +0 -80
  287. package/packages/docs-page/LICENSE +0 -373
  288. package/packages/docs-page/README.md +0 -51
  289. package/packages/docs-page/components.js +0 -11
  290. package/packages/docs-page/docs.mdx +0 -71
  291. package/packages/docs-page/img/github-logo.svg +0 -1
  292. package/packages/docs-page/index.js +0 -75
  293. package/packages/docs-page/index.test.js +0 -18
  294. package/packages/docs-page/package-lock.json +0 -138
  295. package/packages/docs-page/package.json +0 -28
  296. package/packages/docs-page/props.js +0 -59
  297. package/packages/docs-page/server.js +0 -137
  298. package/packages/docs-page/style.css +0 -120
  299. package/packages/docs-page/temporary_jump-to-section.js +0 -64
  300. package/packages/docs-sidenav/LICENSE +0 -373
  301. package/packages/docs-sidenav/README.md +0 -7
  302. package/packages/docs-sidenav/chevron-icon.js +0 -18
  303. package/packages/docs-sidenav/img/external.svg +0 -7
  304. package/packages/docs-sidenav/index.js +0 -457
  305. package/packages/docs-sidenav/menu-icon.js +0 -14
  306. package/packages/docs-sidenav/package-lock.json +0 -26
  307. package/packages/docs-sidenav/package.json +0 -21
  308. package/packages/docs-sidenav/style.css +0 -302
  309. package/packages/enterprise-alert/LICENSE +0 -373
  310. package/packages/enterprise-alert/README.md +0 -9
  311. package/packages/enterprise-alert/index.js +0 -28
  312. package/packages/enterprise-alert/package-lock.json +0 -13
  313. package/packages/enterprise-alert/package.json +0 -23
  314. package/packages/enterprise-alert/style.css +0 -91
  315. package/packages/featured-slider/LICENSE +0 -373
  316. package/packages/featured-slider/README.md +0 -3
  317. package/packages/featured-slider/StatusBar.js +0 -14
  318. package/packages/featured-slider/docs.mdx +0 -60
  319. package/packages/featured-slider/index.js +0 -231
  320. package/packages/featured-slider/index.test.js +0 -59
  321. package/packages/featured-slider/package-lock.json +0 -66
  322. package/packages/featured-slider/package.json +0 -22
  323. package/packages/featured-slider/props.js +0 -82
  324. package/packages/featured-slider/style.css +0 -204
  325. package/packages/hashi-stack-menu/LICENSE +0 -373
  326. package/packages/hashi-stack-menu/README.md +0 -3
  327. package/packages/hashi-stack-menu/assets/icon-dropdown.svg +0 -1
  328. package/packages/hashi-stack-menu/assets/logo.svg +0 -1
  329. package/packages/hashi-stack-menu/assets/product-icons/boundary-icon-color.svg +0 -1
  330. package/packages/hashi-stack-menu/assets/product-icons/consul-icon-color.svg +0 -1
  331. package/packages/hashi-stack-menu/assets/product-icons/nomad-icon-color.svg +0 -1
  332. package/packages/hashi-stack-menu/assets/product-icons/packer-icon-color.svg +0 -1
  333. package/packages/hashi-stack-menu/assets/product-icons/terraform-icon-color.svg +0 -1
  334. package/packages/hashi-stack-menu/assets/product-icons/vagrant-icon-color.svg +0 -1
  335. package/packages/hashi-stack-menu/assets/product-icons/vault-icon-color.svg +0 -1
  336. package/packages/hashi-stack-menu/assets/product-icons/waypoint-icon-color.svg +0 -1
  337. package/packages/hashi-stack-menu/browse-panel/browse-panel.module.css +0 -33
  338. package/packages/hashi-stack-menu/browse-panel/index.jsx +0 -9
  339. package/packages/hashi-stack-menu/data/index.js +0 -125
  340. package/packages/hashi-stack-menu/hashi-stack-menu.module.css +0 -41
  341. package/packages/hashi-stack-menu/index.jsx +0 -51
  342. package/packages/hashi-stack-menu/nav-item/index.jsx +0 -100
  343. package/packages/hashi-stack-menu/nav-item/nav-item.module.css +0 -64
  344. package/packages/hashi-stack-menu/package-lock.json +0 -18
  345. package/packages/hashi-stack-menu/package.json +0 -17
  346. package/packages/hashi-stack-menu/stack-group/index.jsx +0 -16
  347. package/packages/hashi-stack-menu/stack-group/stack-group.module.css +0 -29
  348. package/packages/hashi-stack-menu/stack-item/index.jsx +0 -35
  349. package/packages/hashi-stack-menu/stack-item/stack-item.module.css +0 -58
  350. package/packages/hashi-stack-menu/stack-menu-section/index.jsx +0 -18
  351. package/packages/hashi-stack-menu/stack-menu-section/stack-menu-section.module.css +0 -26
  352. package/packages/hashi-stack-menu/use-on-click-outside-dropdown.js +0 -22
  353. package/packages/head/LICENSE +0 -373
  354. package/packages/head/README.md +0 -236
  355. package/packages/head/index.d.ts +0 -107
  356. package/packages/head/index.js +0 -66
  357. package/packages/head/package.json +0 -17
  358. package/packages/hero/LICENSE +0 -373
  359. package/packages/hero/README.md +0 -31
  360. package/packages/hero/arrow-icon.js +0 -24
  361. package/packages/hero/carousel.js +0 -153
  362. package/packages/hero/fragment.graphql +0 -55
  363. package/packages/hero/heroLeadForm.js +0 -107
  364. package/packages/hero/index.js +0 -129
  365. package/packages/hero/package-lock.json +0 -273
  366. package/packages/hero/package.json +0 -28
  367. package/packages/hero/style.css +0 -501
  368. package/packages/image/LICENSE +0 -373
  369. package/packages/image/fragment.graphql +0 -5
  370. package/packages/image/index.js +0 -81
  371. package/packages/image/package-lock.json +0 -33
  372. package/packages/image/package.json +0 -21
  373. package/packages/image/readme.md +0 -27
  374. package/packages/inline-svg/LICENSE +0 -373
  375. package/packages/inline-svg/README.md +0 -9
  376. package/packages/inline-svg/docs.mdx +0 -15
  377. package/packages/inline-svg/index.js +0 -23
  378. package/packages/inline-svg/index.test.js +0 -50
  379. package/packages/inline-svg/package.json +0 -30
  380. package/packages/inline-svg/props.js +0 -10
  381. package/packages/learn-callout/LICENSE +0 -373
  382. package/packages/learn-callout/README.md +0 -9
  383. package/packages/learn-callout/docs.mdx +0 -31
  384. package/packages/learn-callout/index.js +0 -57
  385. package/packages/learn-callout/index.test.js +0 -49
  386. package/packages/learn-callout/props.js +0 -47
  387. package/packages/learn-callout/style.css +0 -207
  388. package/packages/link-wrap/LICENSE +0 -373
  389. package/packages/link-wrap/README.md +0 -44
  390. package/packages/link-wrap/index.js +0 -40
  391. package/packages/link-wrap/package-lock.json +0 -5
  392. package/packages/link-wrap/package.json +0 -17
  393. package/packages/logo-grid/LICENSE +0 -373
  394. package/packages/logo-grid/README.md +0 -26
  395. package/packages/logo-grid/fragment.graphql +0 -17
  396. package/packages/logo-grid/index.js +0 -157
  397. package/packages/logo-grid/package-lock.json +0 -111
  398. package/packages/logo-grid/package.json +0 -21
  399. package/packages/logo-grid/style.css +0 -148
  400. package/packages/product-downloader/LICENSE +0 -373
  401. package/packages/product-downloader/README.md +0 -9
  402. package/packages/product-downloader/index.js +0 -102
  403. package/packages/product-downloader/package-lock.json +0 -103
  404. package/packages/product-downloader/package.json +0 -18
  405. package/packages/product-downloader/partials/download-cards/index.jsx +0 -125
  406. package/packages/product-downloader/partials/download-cards/style.module.css +0 -152
  407. package/packages/product-downloader/partials/dropdown/index.jsx +0 -58
  408. package/packages/product-downloader/partials/dropdown/style.module.css +0 -28
  409. package/packages/product-downloader/partials/logos/fastly.svg +0 -7
  410. package/packages/product-downloader/partials/release-information/index.jsx +0 -148
  411. package/packages/product-downloader/partials/release-information/style.module.css +0 -101
  412. package/packages/product-downloader/style.module.css +0 -100
  413. package/packages/product-downloader/utils/downloader.js +0 -136
  414. package/packages/product-features-list/LICENSE +0 -373
  415. package/packages/product-features-list/README.md +0 -3
  416. package/packages/product-features-list/index.js +0 -30
  417. package/packages/product-features-list/package-lock.json +0 -42
  418. package/packages/product-features-list/package.json +0 -20
  419. package/packages/product-features-list/style.css +0 -90
  420. package/packages/search/LICENSE +0 -373
  421. package/packages/search/README.md +0 -188
  422. package/packages/search/hits.js +0 -196
  423. package/packages/search/img/return.svg.js +0 -1
  424. package/packages/search/img/search-legend-enter.svg.js +0 -1
  425. package/packages/search/img/search-legend-escape.svg.js +0 -1
  426. package/packages/search/img/search-legend-page.svg.js +0 -1
  427. package/packages/search/img/search-x.svg.js +0 -1
  428. package/packages/search/img/search.svg.js +0 -1
  429. package/packages/search/img/slash-search-toggle.js +0 -17
  430. package/packages/search/index.js +0 -60
  431. package/packages/search/legend.js +0 -32
  432. package/packages/search/package-lock.json +0 -931
  433. package/packages/search/package.json +0 -29
  434. package/packages/search/provider.js +0 -81
  435. package/packages/search/search-box.js +0 -139
  436. package/packages/search/style.css +0 -366
  437. package/packages/search/tools.js +0 -166
  438. package/packages/section-header/LICENSE +0 -373
  439. package/packages/section-header/README.md +0 -13
  440. package/packages/section-header/fragment.graphql +0 -5
  441. package/packages/section-header/index.js +0 -42
  442. package/packages/section-header/package-lock.json +0 -18
  443. package/packages/section-header/package.json +0 -20
  444. package/packages/section-header/style.css +0 -18
  445. package/packages/select-input/LICENSE +0 -373
  446. package/packages/select-input/README.md +0 -1
  447. package/packages/select-input/img/dropdown-arrow.svg +0 -1
  448. package/packages/select-input/index.js +0 -80
  449. package/packages/select-input/package-lock.json +0 -70
  450. package/packages/select-input/package.json +0 -19
  451. package/packages/select-input/style.css +0 -88
  452. package/packages/subnav/LICENSE +0 -373
  453. package/packages/subnav/README.md +0 -85
  454. package/packages/subnav/helpers/globalThis.js +0 -9
  455. package/packages/subnav/helpers/traverse/index.js +0 -34
  456. package/packages/subnav/helpers/useNavRef.js +0 -16
  457. package/packages/subnav/helpers/useOverflowRef.js +0 -76
  458. package/packages/subnav/helpers/useStuckRef.js +0 -43
  459. package/packages/subnav/icons/boundary-logo-color.svgr.js +0 -32
  460. package/packages/subnav/icons/chevron-down.svg.js +0 -3
  461. package/packages/subnav/icons/consul-logo-color.svgr.js +0 -44
  462. package/packages/subnav/icons/hcp-logo-black-white.svgr.js +0 -29
  463. package/packages/subnav/icons/nomad-logo-color.svgr.js +0 -50
  464. package/packages/subnav/icons/packer-logo-color.svgr.js +0 -40
  465. package/packages/subnav/icons/terraform-logo-color.svgr.js +0 -44
  466. package/packages/subnav/icons/vagrant-logo-color.svgr.js +0 -38
  467. package/packages/subnav/icons/vault-logo-color.svgr.js +0 -32
  468. package/packages/subnav/icons/waypoint-logo-color.svgr.js +0 -28
  469. package/packages/subnav/index.js +0 -107
  470. package/packages/subnav/package-lock.json +0 -56
  471. package/packages/subnav/package.json +0 -25
  472. package/packages/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.js +0 -17
  473. package/packages/subnav/partials/CtaLinks/github-stars-link/index.js +0 -71
  474. package/packages/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.js +0 -25
  475. package/packages/subnav/partials/CtaLinks/github-stars-link/style.css +0 -78
  476. package/packages/subnav/partials/CtaLinks/icons/github-logo.js +0 -14
  477. package/packages/subnav/partials/CtaLinks/icons/star.js +0 -14
  478. package/packages/subnav/partials/CtaLinks/index.js +0 -48
  479. package/packages/subnav/partials/CtaLinks/style.css +0 -32
  480. package/packages/subnav/partials/DropdownTrigger/index.js +0 -20
  481. package/packages/subnav/partials/DropdownTrigger/style.css +0 -27
  482. package/packages/subnav/partials/MenuItemsDefault/index.js +0 -131
  483. package/packages/subnav/partials/MenuItemsDefault/style.css +0 -63
  484. package/packages/subnav/partials/MenuItemsOverflow/index.js +0 -117
  485. package/packages/subnav/partials/MenuItemsOverflow/style.css +0 -38
  486. package/packages/subnav/partials/TitleLink/index.js +0 -40
  487. package/packages/subnav/partials/TitleLink/style.css +0 -21
  488. package/packages/subnav/style.css +0 -6
  489. package/packages/subnav/styles/_temp-g-svg.css +0 -22
  490. package/packages/subnav/styles/_temp-resets.css +0 -15
  491. package/packages/subnav/styles/index.css +0 -103
  492. package/packages/tabbed-accordion/LICENSE +0 -373
  493. package/packages/tabbed-accordion/README.md +0 -3
  494. package/packages/tabbed-accordion/fixtures/base.json +0 -44
  495. package/packages/tabbed-accordion/index.js +0 -27
  496. package/packages/tabbed-accordion/package-lock.json +0 -27
  497. package/packages/tabbed-accordion/package.json +0 -19
  498. package/packages/tabbed-accordion/style/_temp-spacing-tokens.css +0 -36
  499. package/packages/tabbed-accordion/style/index.css +0 -22
  500. package/packages/tabbed-accordion/style.css +0 -1
  501. package/packages/tabs/LICENSE +0 -373
  502. package/packages/tabs/README.md +0 -31
  503. package/packages/tabs/index.js +0 -41
  504. package/packages/tabs/package-lock.json +0 -73
  505. package/packages/tabs/package.json +0 -18
  506. package/packages/tabs/partials/TabTriggers/helpers/smoothScroll.js +0 -77
  507. package/packages/tabs/partials/TabTriggers/icons/chevron-right_black.svg.js +0 -1
  508. package/packages/tabs/partials/TabTriggers/index.js +0 -143
  509. package/packages/tabs/partials/TabTriggers/partials/TabTrigger/icons/tooltip.svg.js +0 -1
  510. package/packages/tabs/partials/TabTriggers/partials/TabTrigger/index.js +0 -37
  511. package/packages/tabs/partials/TabTriggers/partials/TabTrigger/style.css +0 -75
  512. package/packages/tabs/partials/TabTriggers/style.css +0 -152
  513. package/packages/tabs/style.css +0 -67
  514. package/packages/terminal/LICENSE +0 -373
  515. package/packages/terminal/README.md +0 -9
  516. package/packages/terminal/Terminal.module.css +0 -146
  517. package/packages/terminal/index.jsx +0 -46
  518. package/packages/terminal/package.json +0 -17
  519. package/packages/text-input/LICENSE +0 -373
  520. package/packages/text-input/README.md +0 -24
  521. package/packages/text-input/index.js +0 -42
  522. package/packages/text-input/package-lock.json +0 -13
  523. package/packages/text-input/package.json +0 -19
  524. package/packages/text-input/style.css +0 -68
  525. package/packages/text-split/LICENSE +0 -373
  526. package/packages/text-split/README.md +0 -3
  527. package/packages/text-split/index.js +0 -66
  528. package/packages/text-split/package-lock.json +0 -35
  529. package/packages/text-split/package.json +0 -20
  530. package/packages/text-split/partials/button-group/index.js +0 -40
  531. package/packages/text-split/partials/button-group/style.css +0 -28
  532. package/packages/text-split/partials/checkbox-list/icons/check-circle.svg.jsx +0 -39
  533. package/packages/text-split/partials/checkbox-list/index.js +0 -28
  534. package/packages/text-split/partials/checkbox-list/style.css +0 -59
  535. package/packages/text-split/style.css +0 -1
  536. package/packages/text-split/styles/_temp-spacing-tokens.css +0 -37
  537. package/packages/text-split/styles/index.css +0 -86
  538. package/packages/text-split-with-code/LICENSE +0 -373
  539. package/packages/text-split-with-code/README.md +0 -13
  540. package/packages/text-split-with-code/index.js +0 -29
  541. package/packages/text-split-with-code/package-lock.json +0 -117
  542. package/packages/text-split-with-code/package.json +0 -21
  543. package/packages/text-split-with-code/style.css +0 -42
  544. package/packages/text-split-with-image/LICENSE +0 -373
  545. package/packages/text-split-with-image/README.md +0 -12
  546. package/packages/text-split-with-image/index.js +0 -11
  547. package/packages/text-split-with-image/package-lock.json +0 -75
  548. package/packages/text-split-with-image/package.json +0 -17
  549. package/packages/text-split-with-logo-grid/LICENSE +0 -373
  550. package/packages/text-split-with-logo-grid/README.md +0 -8
  551. package/packages/text-split-with-logo-grid/index.js +0 -63
  552. package/packages/text-split-with-logo-grid/package-lock.json +0 -90
  553. package/packages/text-split-with-logo-grid/package.json +0 -18
  554. package/packages/text-split-with-logo-grid/style.css +0 -88
  555. package/packages/toggle/LICENSE +0 -373
  556. package/packages/toggle/index.js +0 -22
  557. package/packages/toggle/package-lock.json +0 -5
  558. package/packages/toggle/package.json +0 -17
  559. package/packages/toggle/readme.md +0 -7
  560. package/packages/toggle/style.css +0 -35
  561. package/packages/vertical-text-block-list/LICENSE +0 -373
  562. package/packages/vertical-text-block-list/README.md +0 -15
  563. package/packages/vertical-text-block-list/index.js +0 -54
  564. package/packages/vertical-text-block-list/package-lock.json +0 -60
  565. package/packages/vertical-text-block-list/package.json +0 -22
  566. package/packages/vertical-text-block-list/style.css +0 -104
  567. package/pages/_app.jsx +0 -5
  568. package/pages/global.css +0 -43
  569. package/pages/index.jsx +0 -16
  570. package/prettier.config.js +0 -4
  571. package/scripts/release-check-branch.sh +0 -15
  572. package/scripts/release-check-npm-auth.sh +0 -39
@@ -0,0 +1,26 @@
1
+ import formatStarCount from './'
2
+
3
+ describe('<Subnav /> - formatStarCount', () => {
4
+ it('should return zero for an undefined, null, or zero count', () => {
5
+ expect(formatStarCount(undefined)).toBe(false)
6
+ //@ts-expect-error purposefully testing invalid input
7
+ expect(formatStarCount(null)).toBe(false)
8
+ expect(formatStarCount(0)).toBe(false)
9
+ })
10
+
11
+ it('should return numbers 1 to 999 without formatting', () => {
12
+ expect(formatStarCount(1)).toBe('1')
13
+ expect(formatStarCount(999)).toBe('999')
14
+ })
15
+
16
+ it('should abbreviate numbers in the tens of thousands with "k" and a single decimal point', () => {
17
+ expect(formatStarCount(1003)).toBe('1.0k')
18
+ expect(formatStarCount(1280)).toBe('1.2k')
19
+ expect(formatStarCount(15630)).toBe('15.6k')
20
+ })
21
+
22
+ it('should abbreviate numbers in the hundreds of thousands with "k" and no decimal point', () => {
23
+ expect(formatStarCount(100000)).toBe('100k')
24
+ expect(formatStarCount(156783)).toBe('156k')
25
+ })
26
+ })
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ /*
7
+ * Given:
8
+ * starCount (int)
9
+ * Return:
10
+ * Formatted string, to match GitHub's typical display of star counts,
11
+ * that is, expressed as thousands of stars
12
+ * Or returns false for falsy starCount values
13
+ */
14
+ function formatStarCount(starCount?: number) {
15
+ if (!starCount || starCount <= 0) return false
16
+ if (starCount < 1000) return `${starCount}`
17
+ const thousands = Math.floor(starCount / 100.0) / 10.0
18
+ if (starCount < 100000) return `${thousands.toFixed(1)}k`
19
+ return `${Math.floor(thousands)}k`
20
+ }
21
+
22
+ export default formatStarCount
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import React, { useEffect, useState } from 'react'
7
+ import fetch from 'isomorphic-unfetch'
8
+ import formatStarCount from './formatStarCount'
9
+ import parseGithubUrl from './parseGithubUrl'
10
+ import StarIcon from '../icons/star'
11
+ import GithubIcon from '../icons/github-logo'
12
+ import { VisuallyHidden } from '@radix-ui/react-visually-hidden'
13
+ import s from './style.module.css'
14
+
15
+ interface GithubStarsButtonProps {
16
+ url: string
17
+ hideGithubStars?: boolean
18
+ }
19
+
20
+ function GithubStarsButton(props: GithubStarsButtonProps) {
21
+ const { url, hideGithubStars } = props
22
+ const [starCount, setStarCount] = useState(-1)
23
+
24
+ useEffect(() => {
25
+ if (hideGithubStars) return setStarCount(0)
26
+ const parsedGithubUrl = parseGithubUrl(url)
27
+ if (!parsedGithubUrl || !parsedGithubUrl.org || !parsedGithubUrl.repo)
28
+ return setStarCount(0)
29
+ const { org, repo } = parsedGithubUrl
30
+ if (!org || !repo) return setStarCount(0)
31
+ const githubApiUrl = `https://api.github.com/repos/${org}/${repo}`
32
+ fetch(githubApiUrl)
33
+ .then((response) => {
34
+ response.json().then((data) => {
35
+ // Github's rate limit for unauthenticated requests is 60 per hour
36
+ // When the limit is hit, data.stargazers_count is undefined,
37
+ // and setStarCount falls back to not showing the star count
38
+ setStarCount(data.stargazers_count)
39
+ // Warn if this limit is hit, to avoid otherwise confusing behavior
40
+ // We're still using the response to provide a documentation link
41
+ if (!data.stargazers_count) {
42
+ const { headers } = response
43
+ if (headers.get('x-ratelimit-remaining') === '0') {
44
+ const resetAtSeconds = parseInt(headers.get('x-ratelimit-reset')!)
45
+ const resetDate = new Date(resetAtSeconds * 1000)
46
+ const rateLimit = headers.get('x-ratelimit-limit')
47
+ console.warn(
48
+ `⭐ Stargazers count could not be fetched. Rate limit exceeded for unauthenticated GitHub API. Limit will be reset to ${rateLimit} at ${resetDate}. See ${data.documentation_url} for more details.`
49
+ )
50
+ } else {
51
+ console.warn(
52
+ `Request for stargazers was successful, but the returned value was undefined or falsy. This might be because the repo has no stars, or it might be a different issue.`
53
+ )
54
+ }
55
+ }
56
+ })
57
+ })
58
+ .catch((err) => {
59
+ setStarCount(0)
60
+ console.warn(JSON.stringify(err, null, 2))
61
+ })
62
+ }, [hideGithubStars, url])
63
+
64
+ const isLoadingStarCount = starCount === -1
65
+ const isFailedStarCount = formatStarCount(starCount) === false
66
+ const showStarCount =
67
+ !hideGithubStars && (isLoadingStarCount || !isFailedStarCount)
68
+ return (
69
+ <a href={url} className={s.root}>
70
+ <span className={s.github}>
71
+ <GithubIcon />
72
+ <VisuallyHidden>GitHub</VisuallyHidden>
73
+ </span>
74
+ {showStarCount && (
75
+ <span className={s.stars}>
76
+ <StarIcon />
77
+ <span className="g-type-body-small-strong" data-testid="github-stars">
78
+ {formatStarCount(starCount) || <span>&mdash;</span>}
79
+ </span>
80
+ <VisuallyHidden>Stars on GitHub</VisuallyHidden>
81
+ </span>
82
+ )}
83
+ </a>
84
+ )
85
+ }
86
+
87
+ export default GithubStarsButton
@@ -0,0 +1,29 @@
1
+ import parseGithubUrl from './'
2
+
3
+ describe('<Subnav /> - parseGithubUrl', () => {
4
+ it('should gracefully handle an invalid URL', () => {
5
+ // Suppress console.warn for this test, we expect warnings
6
+ vi.stubGlobal('console', {
7
+ warn() {
8
+ return
9
+ },
10
+ })
11
+ //@ts-expect-error purposefully testing invalid input
12
+ expect(parseGithubUrl(undefined)).toBe(false)
13
+ expect(parseGithubUrl('blah-blah')).toBe(false)
14
+ })
15
+
16
+ it('should handle a non-GitHub URL', () => {
17
+ expect(parseGithubUrl('https://www.example.com/hashicorp/terraform')).toBe(
18
+ false
19
+ )
20
+ })
21
+
22
+ it('should parse the org and repo from a GitHub URL', () => {
23
+ const testInput = 'https://www.github.com/hashicorp/terraform'
24
+ //@ts-expect-error purposefully testing invalid input
25
+ const { repo, org } = parseGithubUrl(testInput)
26
+ expect(repo).toBe('terraform')
27
+ expect(org).toBe('hashicorp')
28
+ })
29
+ })
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ /*
7
+ * Given:
8
+ * urlString (string) valid URL string
9
+ * Return:
10
+ * { org, repo }, where the url is ~= www.github.com/{org}/{repo}
11
+ * or false otherwise (eg if not a valid URL, or if not a GitHub url)
12
+ */
13
+ function parseGithubUrl(
14
+ urlString: string
15
+ ): { org: string; repo: string } | false {
16
+ try {
17
+ const urlObj = new URL(urlString)
18
+ if (urlObj.hostname !== 'www.github.com') return false
19
+ const parts = urlObj.pathname.split('/').filter(Boolean)
20
+ const org = parts[0]
21
+ const repo = parts[1]
22
+ return { org, repo }
23
+ } catch (err) {
24
+ console.warn(
25
+ 'Warning! An invalid URL has probably been supplied to the GitHub ctaLink in <Subnav />. The corresponding error:'
26
+ )
27
+ console.warn(err)
28
+ return false
29
+ }
30
+ }
31
+
32
+ export default parseGithubUrl
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ /* Note: consumes from theme.module.css, as marked */
7
+
8
+ .root {
9
+ --local-scrim-color: transparent;
10
+ --local-divider-color: var(--border-color); /* from theme.module.css */
11
+
12
+ position: relative;
13
+ color: var(--gh-stars-icon-color); /* from theme.module.css */
14
+ border: 1px solid var(--local-divider-color); /* from theme.module.css */
15
+ border-radius: 5px;
16
+ background: none;
17
+ transition: background 0.2s, border-color 0.2s;
18
+ display: flex;
19
+ align-items: center;
20
+
21
+ /* Scrim used in most hover effects */
22
+ &::before {
23
+ content: '';
24
+ position: absolute;
25
+ top: -1px;
26
+ left: -1px;
27
+ right: -1px;
28
+ bottom: -1px;
29
+ border-radius: 5px;
30
+ transition: background 0.25s ease;
31
+ z-index: 0;
32
+ background-color: var(--local-scrim-color);
33
+ }
34
+
35
+ &:hover,
36
+ &:active {
37
+ --local-divider-color: transparent;
38
+ --local-scrim-color: var(
39
+ --gh-stars-scrim-color
40
+ ); /* from theme.module.css */
41
+ }
42
+ }
43
+
44
+ .github {
45
+ display: flex;
46
+ align-items: center;
47
+ padding: 8px 10px;
48
+ & > svg {
49
+ width: 20px;
50
+ height: 20px;
51
+
52
+ & [fill] {
53
+ fill: currentColor;
54
+ }
55
+
56
+ & [stroke] {
57
+ stroke: currentColor;
58
+ }
59
+ }
60
+ }
61
+
62
+ .stars {
63
+ display: flex;
64
+ align-items: center;
65
+ height: 100%;
66
+ border-left: 1px solid;
67
+ border-color: var(--local-divider-color);
68
+ padding: 6px 12px 7px 10px;
69
+ transition: border-color 0.2s;
70
+ z-index: 1;
71
+ & > svg {
72
+ width: 16px;
73
+ height: 16px;
74
+ margin-right: 4px;
75
+ margin-top: 1px;
76
+
77
+ & [fill] {
78
+ fill: currentColor;
79
+ }
80
+
81
+ & [stroke] {
82
+ stroke: currentColor;
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import React from 'react'
7
+
8
+ function GithubIcon(props) {
9
+ return (
10
+ <svg width={16} height={16} viewBox="0 0 16 16" {...props}>
11
+ <path
12
+ fillRule="evenodd"
13
+ fill="#000000"
14
+ d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"
15
+ />
16
+ </svg>
17
+ )
18
+ }
19
+
20
+ export default GithubIcon
@@ -1,2 +1,7 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
1
6
  export default `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.9633 0.325439C5.3578 0.325439 0 5.68324 0 12.2887C0 17.5731 3.44954 22.0502 8.14679 23.6649C8.73394 23.7383 8.95413 23.3713 8.95413 23.0777C8.95413 22.7842 8.95413 22.0502 8.95413 21.0227C5.65138 21.7566 4.91743 19.408 4.91743 19.408C4.40367 18.0135 3.59633 17.6465 3.59633 17.6465C2.49541 16.9126 3.66972 16.9126 3.66972 16.9126C4.84404 16.986 5.50459 18.1603 5.50459 18.1603C6.6055 19.9952 8.29358 19.4814 8.95413 19.1878C9.02752 18.3805 9.3945 17.8667 9.68807 17.5731C7.04587 17.2796 4.25688 16.252 4.25688 11.6282C4.25688 10.3071 4.69725 9.27957 5.50459 8.39883C5.43119 8.17865 4.99083 6.93094 5.65138 5.31627C5.65138 5.31627 6.6789 5.02269 8.95413 6.56397C9.90826 6.27039 10.9358 6.197 11.9633 6.197C12.9908 6.197 14.0183 6.34379 14.9725 6.56397C17.2477 5.02269 18.2752 5.31627 18.2752 5.31627C18.9358 6.93094 18.4954 8.17865 18.422 8.47223C19.156 9.27957 19.6697 10.3805 19.6697 11.7016C19.6697 16.3254 16.8807 17.2796 14.2385 17.5731C14.6789 17.9401 15.0459 18.6741 15.0459 19.775C15.0459 21.3897 15.0459 22.6374 15.0459 23.0777C15.0459 23.3713 15.2661 23.7383 15.8532 23.6649C20.6239 22.0502 24 17.5731 24 12.2887C23.9266 5.68324 18.5688 0.325439 11.9633 0.325439Z" fill="#252937"/>
2
7
  </svg>`
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import React from 'react'
7
+
8
+ function StarIcon(props) {
9
+ return (
10
+ <svg width={14} height={16} viewBox="0 0 14 16" {...props}>
11
+ <path
12
+ fillRule="evenodd"
13
+ fill="#000000"
14
+ d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"
15
+ />
16
+ </svg>
17
+ )
18
+ }
19
+
20
+ export default StarIcon
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import Button, {
7
+ type ButtonProps,
8
+ } from '@hashicorp/react-design-system-components/src/components/button'
9
+ import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
10
+ import type { Products } from '@hashicorp/platform-product-meta'
11
+ import type { ToggleButtonProps } from '@hashicorp/react-design-system-components/src/components/dropdown/toggle/button'
12
+ import * as Dropdown from '@hashicorp/react-design-system-components/src/components/dropdown'
13
+ import GithubStarsLink from './github-stars-link'
14
+ import classNames from 'classnames'
15
+ import s from './style.module.css'
16
+ import * as NavigationMenu from '@radix-ui/react-navigation-menu'
17
+
18
+ type CtaLink = ButtonProps & { href: string; __typename?: string }
19
+
20
+ type CtaDropdown = {
21
+ __typename?: string
22
+ text: string
23
+ submenu: { text: string; url: string }[]
24
+ buttonControls: ToggleButtonProps
25
+ }
26
+
27
+ export type CtaLinkProps = Array<CtaLink>
28
+
29
+ interface CtaLinksProps {
30
+ links: Array<CtaLink | CtaDropdown>
31
+ product?: Products
32
+ isInDropdown?: boolean
33
+ hideGithubStars?: boolean
34
+ }
35
+
36
+ function CtaLinks({
37
+ links,
38
+ product = 'hashicorp',
39
+ isInDropdown,
40
+ hideGithubStars,
41
+ }: CtaLinksProps) {
42
+ return (
43
+ <NavigationMenu.List
44
+ className={classNames(s.root, { [s.isInDropdown]: isInDropdown })}
45
+ >
46
+ {links.map((cta, stableIdx) => {
47
+ if (isDropdown(cta)) {
48
+ const { buttonControls, submenu } = cta
49
+
50
+ return (
51
+ // eslint-disable-next-line react/no-array-index-key
52
+ <Dropdown.Root key={`dropdownRoot${stableIdx}`}>
53
+ <Dropdown.Toggle.Button {...buttonControls} />
54
+ <Dropdown.Content width="100%">
55
+ <Dropdown.List>
56
+ {submenu.map((item, index) => (
57
+ <Dropdown.ListItem.Interactive
58
+ text={item.text}
59
+ // eslint-disable-next-line react/no-array-index-key
60
+ key={`dropdownItem${index}`}
61
+ href={item.url}
62
+ />
63
+ ))}
64
+ </Dropdown.List>
65
+ </Dropdown.Content>
66
+ </Dropdown.Root>
67
+ )
68
+ } else {
69
+ {
70
+ const { text, href, icon, color, size, __typename, ...rest } = cta
71
+
72
+ const textKey = text?.toLowerCase()
73
+ const isDownload = textKey === 'download'
74
+ const isGithub = textKey === 'github'
75
+
76
+ if (isGithub && !isInDropdown)
77
+ return (
78
+ <GithubStarsLink
79
+ key={href}
80
+ url={href}
81
+ hideGithubStars={hideGithubStars}
82
+ />
83
+ )
84
+ const isLastButton = stableIdx === links.length - 1
85
+
86
+ return (
87
+ <Button
88
+ key={href}
89
+ text={text}
90
+ href={href}
91
+ size={size}
92
+ isFullWidth={isInDropdown}
93
+ color={color ?? (isLastButton ? product : 'secondary')}
94
+ isIconOnly={!text}
95
+ icon={
96
+ icon ? (
97
+ icon
98
+ ) : isDownload ? (
99
+ <FlightIcon
100
+ name="download"
101
+ size={16}
102
+ style={{ display: 'block' }}
103
+ />
104
+ ) : isGithub ? (
105
+ <FlightIcon
106
+ name="github"
107
+ size={16}
108
+ style={{ display: 'block' }}
109
+ />
110
+ ) : undefined
111
+ }
112
+ {...rest}
113
+ />
114
+ )
115
+ }
116
+ }
117
+ })}
118
+ </NavigationMenu.List>
119
+ )
120
+ }
121
+
122
+ export default CtaLinks
123
+
124
+ /**
125
+ * Type guard to properly type incoming subnav CTAs as Dropdown if needed
126
+ * @param cta CTA to guard
127
+ * @returns CTA re-typed according to whether it has a submenu property
128
+ */
129
+ function isDropdown(cta: CtaDropdown | CtaLink): cta is CtaDropdown {
130
+ return 'submenu' in cta
131
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ .root {
7
+ display: flex;
8
+ justify-content: flex-end;
9
+ white-space: nowrap;
10
+ list-style: none;
11
+ padding: 0 0 0 var(--hdsplus-spacing-05);
12
+ margin: 0;
13
+ gap: 0 12px;
14
+ @media (--medium-up) {
15
+ gap: 0;
16
+ }
17
+
18
+ & > * + * {
19
+ /* Spaces consecutive buttons horizontally on desktop */
20
+ margin-left: 16px;
21
+ }
22
+
23
+ &.isInDropdown {
24
+ /* Allows consecutive buttons to wrap */
25
+ flex-wrap: wrap;
26
+ white-space: wrap;
27
+ padding-left: 0;
28
+
29
+ & > * {
30
+ /* Spaces consecutive buttons vertically */
31
+ margin-left: 0;
32
+ margin-top: 16px;
33
+
34
+ &:last-of-type {
35
+ margin-bottom: var(--hdsplus-spacing-04);
36
+ }
37
+ }
38
+
39
+ @nest :global(.hashidaysConference) & :global(.hds-dropdown) {
40
+ @media (--small) {
41
+ display: none;
42
+ }
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
7
+ import NavItemText from '../nav-item-text'
8
+ import s from './style.module.css'
9
+ import * as NavigationMenu from '@radix-ui/react-navigation-menu'
10
+
11
+ interface DropdownTriggerProps {
12
+ text: string
13
+ isActive?: boolean
14
+ activatePanel: (panel: string) => void
15
+ }
16
+
17
+ function DropdownTrigger(props: DropdownTriggerProps) {
18
+ const { text, isActive, activatePanel } = props
19
+
20
+ const onFocus = () => {
21
+ activatePanel(text)
22
+ }
23
+ return (
24
+ <NavigationMenu.Trigger
25
+ className={s.root}
26
+ onFocus={onFocus}
27
+ onMouseDown={(e) => e.preventDefault()}
28
+ >
29
+ <NavItemText isActive={isActive} text={text} />
30
+ <FlightIcon name="chevron-down" color="var(--menu-item-text-color)" />
31
+ </NavigationMenu.Trigger>
32
+ )
33
+ }
34
+
35
+ export default DropdownTrigger
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ /* Note: consumes from theme.module.css, as marked */
7
+
8
+ .root {
9
+ composes: hds-typography-body-200 from global;
10
+ composes: hds-font-weight-medium from global;
11
+ border: none;
12
+ background: none;
13
+ align-items: center;
14
+ display: flex;
15
+ height: 100%;
16
+ line-height: 2.5rem;
17
+ padding: 0 var(--hdsplus-spacing-05);
18
+ position: relative;
19
+ white-space: nowrap;
20
+ cursor: default;
21
+
22
+ & svg {
23
+ margin-top: 1px;
24
+ margin-bottom: -1px;
25
+ margin-left: 6px;
26
+ width: 12px;
27
+ height: 12px;
28
+ transition: transform 0.3s;
29
+ fill: var(--menu-item-text-color); /* from theme.module.css */
30
+ }
31
+
32
+ &:hover {
33
+ background-color: var(--menu-item-hover-color);
34
+ border-radius: var(--hdsplus-spacing-01);
35
+ }
36
+ }