@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
@@ -1,286 +0,0 @@
1
- /*
2
- dialog.js
3
- Managing preferences dialog
4
- */
5
-
6
- import { Component } from 'react'
7
- import getIntegrations from './integrations'
8
- import Button from '@hashicorp/react-button'
9
- import Toggle from '@hashicorp/react-toggle'
10
- import CloseButton from './icn_close'
11
-
12
- export default class ConsentPreferences extends Component {
13
- constructor(props) {
14
- super(props)
15
-
16
- this.state = {
17
- version: props.version || 0,
18
- showConfirmationDialog: false,
19
- groupedIntegrations: {}, // Integrations object grouped by category
20
- consent: props.preferences, // Consent preferences object
21
- categories: props.categories.reduce((obj, category) => {
22
- obj[category.name] = category.description
23
- return obj
24
- }, {}), // Transform categories description array to object
25
- showCategories: {}, // Category toggle state object
26
- }
27
-
28
- this.handleFold = this.handleFold.bind(this)
29
- this.getCategoryToggle = this.getCategoryToggle.bind(this)
30
- }
31
-
32
- componentDidMount() {
33
- // Set up integrations
34
- getIntegrations(
35
- this.props.segmentServices,
36
- this.props.additionalServices,
37
- this.props.segmentWriteKey,
38
- this.props.utilServerRoot
39
- ).then((groupedIntegrations) => {
40
- this.setState({ groupedIntegrations })
41
- })
42
- }
43
-
44
- // Handler for when user toggles a category or individual integration
45
- handleToggle(integrationName, integrationOrigin, newValue) {
46
- let currentConsent = this.state.consent || {}
47
-
48
- // If user has { loadAll: true } and they toggle, make sure to preserve
49
- // the loadAll settings by setting everything to true first. This setting
50
- // gets reset at the end of the function.
51
- if (currentConsent.loadAll) {
52
- Object.keys(this.state.groupedIntegrations).forEach((category) => {
53
- this.state.groupedIntegrations[category].forEach((tool) => {
54
- currentConsent[tool.origin] = currentConsent[tool.origin] || {}
55
- currentConsent[tool.origin][tool.name] = true
56
- })
57
- })
58
- }
59
-
60
- if (integrationOrigin === 'categories') {
61
- // User toggled a category toggle
62
- // Go through list of groupedIntegrations
63
- this.state.groupedIntegrations[integrationName].forEach((tool) => {
64
- currentConsent[tool.origin] = currentConsent[tool.origin] || {}
65
- currentConsent[tool.origin][tool.name] = newValue
66
- })
67
- } else {
68
- // User toggled an individual tool toggle
69
- currentConsent[integrationOrigin] =
70
- currentConsent[integrationOrigin] || {}
71
- currentConsent[integrationOrigin][integrationName] = newValue
72
- }
73
-
74
- delete currentConsent.loadAll
75
-
76
- this.setState({ consent: currentConsent })
77
- }
78
-
79
- // Handler for folding categories
80
- handleFold(categoryName) {
81
- const categories = this.state.showCategories
82
- categories[categoryName] = !categories[categoryName]
83
- this.setState({ showCategories: categories })
84
- }
85
-
86
- // Calculate value of category toggle
87
- getCategoryToggle(category) {
88
- return this.state.groupedIntegrations[category].some((tool) => {
89
- return (
90
- this.state.consent &&
91
- this.state.consent.hasOwnProperty(tool.origin) &&
92
- this.state.consent[tool.origin].hasOwnProperty(tool.name) &&
93
- this.state.consent[tool.origin][tool.name]
94
- )
95
- })
96
- }
97
-
98
- // Build each individual category and integration row
99
- buildCategory(items, name) {
100
- const categoryItems = items.map((item) => {
101
- return (
102
- <div className="category-item flex-column" key={item.name}>
103
- <div className="item-title">{item.name}</div>
104
- <div className="flex-centered-row">
105
- <div className="item-description">{item.description}</div>
106
- <div className="consent-toggle">
107
- <Toggle
108
- onChange={this.handleToggle.bind(this, item.name, item.origin)}
109
- enabled={Boolean(
110
- this.state.consent.loadAll ||
111
- (this.state.consent &&
112
- this.state.consent[item.origin] &&
113
- this.state.consent[item.origin][item.name])
114
- )}
115
- />
116
- </div>
117
- </div>
118
- </div>
119
- )
120
- })
121
-
122
- return (
123
- <div className="category" key={name}>
124
- <div className="category-title">{name}</div>
125
- <div className="flex-centered-row">
126
- <div className="category-description">
127
- {this.state.categories[name]}
128
- </div>
129
- <div className="consent-toggle">
130
- {!this.state.showCategories[name] && (
131
- <Toggle
132
- onChange={this.handleToggle.bind(this, name, 'categories')}
133
- enabled={
134
- this.state.consent.loadAll || this.getCategoryToggle(name)
135
- }
136
- />
137
- )}
138
- </div>
139
- </div>
140
- <div className="category-fold">
141
- <a
142
- onClick={() => {
143
- this.handleFold(name)
144
- }}
145
- >
146
- {!this.state.showCategories[name] && 'See more'}
147
- {this.state.showCategories[name] && 'See less'}
148
- <svg
149
- width="14"
150
- height="8"
151
- xmlns="http://www.w3.org/2000/svg"
152
- className={!this.state.showCategories[name] ? 'down' : 'up'}
153
- >
154
- <path
155
- d="M12.293.293L7 5.586 1.707.293A1 1 0 1 0 .293 1.707l6 6a.997.997 0 0 0 1.414 0l6-6A1 1 0 0 0 12.293.293"
156
- fill="#1563FF"
157
- fillRule="evenodd"
158
- />
159
- </svg>
160
- </a>
161
- </div>
162
- {this.state.showCategories[name] && (
163
- <div className="category-items flex-column">{categoryItems}</div>
164
- )}
165
- </div>
166
- )
167
- }
168
-
169
- render() {
170
- let categories = Object.keys(this.state.groupedIntegrations)
171
- categories = categories.map((category) => {
172
- return this.buildCategory(
173
- this.state.groupedIntegrations[category],
174
- category
175
- )
176
- })
177
-
178
- return (
179
- <div className="g-consent-dialog" data-testid="consent-mgr-dialog">
180
- {/* Manage preferences dialog */}
181
- {!this.state.showConfirmationDialog && (
182
- <div className="g-consent-visible-dialog flex-column">
183
- <div className="dialog-title flex-centered-row">
184
- <span>Data Collection Preferences</span>
185
- <div
186
- className="clickable flex-centered-row"
187
- onClick={() => {
188
- this.setState({ showConfirmationDialog: true })
189
- }}
190
- >
191
- <CloseButton />
192
- </div>
193
- </div>
194
- <div className="dialog-body">
195
- <p>
196
- HashiCorp uses data collected by cookies and JavaScript
197
- libraries to improve your browsing experience, analyze site
198
- traffic, and increase the overall performance of our site. By
199
- using our website, you’re agreeing to our{' '}
200
- <a
201
- href={this.props.privacyPolicyLink}
202
- target="_blank"
203
- rel="noopener noreferrer"
204
- data-testid="privacy-policy-link"
205
- >
206
- Privacy Policy
207
- </a>
208
- .
209
- </p>
210
- <p>
211
- The categories below outline which companies and tools we use
212
- for collecting data. To opt out of a category of data
213
- collection, set the toggle to “Off” and save your preferences.
214
- </p>
215
- <div id="outline">{categories}</div>
216
- </div>
217
- <div className="dialog-footer">
218
- <Button
219
- title="Cancel"
220
- className="button-cancel"
221
- theme={{
222
- variant: 'secondary',
223
- brand: 'neutral',
224
- background: 'light',
225
- }}
226
- onClick={() => {
227
- this.setState({ showConfirmationDialog: true })
228
- }}
229
- />
230
- <Button
231
- className="button-save"
232
- title="Save Preferences"
233
- onClick={() => {
234
- this.props.saveAndLoadAnalytics(this.state.consent)
235
- }}
236
- />
237
- </div>
238
- </div>
239
- )}
240
- {/* Cancellation confirmation dialog */}
241
- {this.state.showConfirmationDialog && (
242
- <div className="g-consent-visible-dialog">
243
- <div className="dialog-title flex-centered-row">
244
- <span>Are you sure?</span>
245
- </div>
246
- <div className="dialog-body">
247
- <p>
248
- Your preferences have not been saved. To continue using our
249
- website, you must either set individual preferences or agree to{' '}
250
- <a
251
- href={this.props.privacyPolicyLink}
252
- target="_blank"
253
- rel="noopener noreferrer"
254
- >
255
- our privacy policy
256
- </a>
257
- .
258
- </p>
259
- </div>
260
- <div className="dialog-footer">
261
- <Button
262
- title="Back to Preferences"
263
- theme={{
264
- variant: 'secondary',
265
- brand: 'neutral',
266
- background: 'light',
267
- }}
268
- className="button-cancel"
269
- onClick={() => {
270
- this.setState({ showConfirmationDialog: false })
271
- }}
272
- />
273
- <Button
274
- title="Agree & Close"
275
- className="button-save"
276
- onClick={() => {
277
- this.props.saveAndLoadAnalytics({ loadAll: true })
278
- }}
279
- />
280
- </div>
281
- </div>
282
- )}
283
- </div>
284
- )
285
- }
286
- }
@@ -1,19 +0,0 @@
1
- export default function CloseIcon() {
2
- return (
3
- <svg
4
- width="16"
5
- height="16"
6
- viewBox="0 0 16 16"
7
- xmlns="http://www.w3.org/2000/svg"
8
- >
9
- <title>Close Button</title>
10
- <path
11
- d="M1.778 1.778l12.541 12.541m-.097-12.541L1.681 14.319"
12
- stroke="#FFF"
13
- strokeWidth="2"
14
- fill="none"
15
- strokeLinecap="square"
16
- />
17
- </svg>
18
- )
19
- }
@@ -1,119 +0,0 @@
1
- import { Component } from 'react'
2
- import { render } from 'react-dom'
3
- import EventEmitter from 'events'
4
- import inEU from '@segment/in-eu'
5
- import ConsentBanner from './banner'
6
- import ConsentPreferences from './dialog'
7
- import { loadPreferences, savePreferences } from './cookies'
8
- import loadAnalytics from './load'
9
-
10
- const emitter = new EventEmitter()
11
-
12
- // TODO: remove this
13
- export function init(props) {
14
- render(<ConsentManager {...props} />, document.querySelector(props.container))
15
- }
16
-
17
- export function open() {
18
- emitter.emit('openDialog')
19
- }
20
-
21
- export default class ConsentManager extends Component {
22
- constructor(props) {
23
- super(props)
24
-
25
- this.state = {
26
- showDialog: props.showDialog || false,
27
- showBanner: false,
28
- preferences: loadPreferences() || {},
29
- }
30
- this.saveAndLoadAnalytics = this.saveAndLoadAnalytics.bind(this)
31
- this.openDialog = this.openDialog.bind(this)
32
- }
33
-
34
- saveAndLoadAnalytics(preferences) {
35
- if (typeof preferences === 'undefined') {
36
- preferences = { All: false, 'Segment.io': false }
37
- }
38
- savePreferences(preferences, this.props.version)
39
-
40
- loadAnalytics(
41
- preferences,
42
- this.props.segmentWriteKey,
43
- this.props.additionalServices
44
- )
45
-
46
- // Close all dialogs
47
- document.body.classList.remove('g-noscroll')
48
- this.setState({
49
- showDialog: false,
50
- showBanner: false,
51
- preferences: loadPreferences(),
52
- })
53
- }
54
-
55
- shouldRequireConsent() {
56
- // 1. Check cookies
57
- if (
58
- this.state.preferences &&
59
- this.state.preferences.version === this.props.version
60
- ) {
61
- // Load segment and custom integrations
62
- loadAnalytics(
63
- this.state.preferences,
64
- this.props.segmentWriteKey,
65
- this.props.additionalServices
66
- )
67
- return false
68
- }
69
- // 2. Check inEU. If in-eu, show consent. If not, show nothing. Load all.
70
- if (inEU() || this.props.forceShow) {
71
- return true
72
- } else {
73
- // Load all analytics
74
- this.saveAndLoadAnalytics({ loadAll: true })
75
- return false
76
- }
77
- }
78
-
79
- componentDidMount() {
80
- this.setState({ showBanner: this.shouldRequireConsent() })
81
- emitter.on('openDialog', this.openDialog)
82
- }
83
-
84
- openDialog() {
85
- document.body.classList.add('g-noscroll')
86
- this.setState({ showDialog: true, showBanner: false })
87
- }
88
-
89
- render() {
90
- return (
91
- <div id="g-consent-manager">
92
- {/* Consent banner at the bottom */}
93
- {this.state.showBanner && (
94
- <ConsentBanner
95
- privacyPolicyLink={this.props.privacyPolicyLink}
96
- onManagePreferences={this.openDialog}
97
- onAccept={() => {
98
- this.saveAndLoadAnalytics({ loadAll: true })
99
- }}
100
- />
101
- )}
102
- {/* Consent manager preferences dialog */}
103
- {this.state.showDialog && (
104
- <ConsentPreferences
105
- version={this.props.version}
106
- segmentWriteKey={this.props.segmentWriteKey}
107
- utilServerRoot={this.props.utilServerRoot}
108
- segmentServices={this.props.segmentServices}
109
- additionalServices={this.props.additionalServices}
110
- preferences={this.state.preferences}
111
- categories={this.props.categories}
112
- privacyPolicyLink={this.props.privacyPolicyLink}
113
- saveAndLoadAnalytics={this.saveAndLoadAnalytics}
114
- />
115
- )}
116
- </div>
117
- )
118
- }
119
- }
@@ -1,92 +0,0 @@
1
- /*
2
- integrations.js
3
- Fetches integrations from Segment given write key and applies user-defined
4
- overrides. Combines with custom scripts to give a complete view into
5
- scripts that the site is trying to load. Finally, groups it all by category.
6
- */
7
-
8
- export default function getIntegrations(
9
- segmentServices,
10
- additionalServices,
11
- segmentWriteKey,
12
- utilServerRoot
13
- ) {
14
- return fetchIntegrationsFromSegment(segmentWriteKey, utilServerRoot)
15
- .then(zipIntegrations.bind(this, segmentServices, additionalServices))
16
- .then(groupByCategory)
17
- }
18
-
19
- // Get integrations from Segment by write key
20
- function fetchIntegrationsFromSegment(segmentWriteKey, utilServerRoot) {
21
- return fetch(`${utilServerRoot}/seg_integrations/${segmentWriteKey}`).then(
22
- (res) => {
23
- if (!res.ok) {
24
- throw new Error(
25
- `Failed to fetch integrations: HTTP ${res.status} ${res.statusText}`
26
- )
27
- }
28
-
29
- return res.json()
30
- }
31
- )
32
- }
33
-
34
- // Include developer overrides for fetched Segment integrations
35
- function zipIntegrations(
36
- segmentOverrides,
37
- additionalServices,
38
- segmentOriginated
39
- ) {
40
- // Create Segment integration object with name as key for quick retrieval
41
- let segmentObj = segmentOriginated.reduce((obj, segment) => {
42
- obj[segment.name] = segment
43
- obj[segment.name].origin = 'segment'
44
- return obj
45
- }, {})
46
-
47
- // Go through each developer-defined segment service and update
48
- // segmentObj with any overrides
49
- for (var i = 0; i < segmentOverrides.length; i++) {
50
- if (segmentObj.hasOwnProperty(segmentOverrides[i].name)) {
51
- segmentObj[segmentOverrides[i].name] = Object.assign(
52
- segmentObj[segmentOverrides[i].name],
53
- segmentOverrides[i]
54
- )
55
- } else {
56
- /* eslint-disable-next-line */
57
- console.warn(
58
- `Unmatched integration config for ${segmentOverrides[i].name}`
59
- )
60
- }
61
- }
62
-
63
- // Include additional (non-Segment) services
64
- let allIntegrations = additionalServices
65
- ? additionalServices.map((integration) => {
66
- integration.origin = 'custom'
67
- return integration
68
- })
69
- : []
70
-
71
- for (const key in segmentObj) {
72
- allIntegrations.push(segmentObj[key])
73
- }
74
-
75
- // Returns array with all integrations, with origin key (segment or custom)
76
- return allIntegrations
77
- }
78
-
79
- // Group by category for display purposes
80
- function groupByCategory(integrations) {
81
- let grouped = {}
82
-
83
- integrations.forEach((integration) => {
84
- if (grouped.hasOwnProperty(integration.category)) {
85
- grouped[integration.category].push(integration)
86
- } else {
87
- grouped[integration.category] = [integration]
88
- }
89
- })
90
-
91
- return grouped
92
- }
@@ -1,139 +0,0 @@
1
- /*
2
- load.js
3
- Responsible for loading scripts, whether they are Segment-originated or
4
- custom defined.
5
- */
6
-
7
- export default function loadAnalytics(
8
- preferences,
9
- segmentWriteKey,
10
- additionalServices
11
- ) {
12
- // If analytics have already been added to page, it's likely you're updating your preferences
13
- // We reload the page to re-initiate the script with the updated integrations
14
- // TODO: Investigate alternatives to full page reload approach
15
- if (window.analytics && window.analytics.initialized) {
16
- window.location.reload()
17
- return
18
- }
19
-
20
- if (preferences.loadAll) {
21
- loadSegment(segmentWriteKey, { All: true })
22
- loadCustom(additionalServices)
23
- return
24
- }
25
-
26
- if (preferences.segment) {
27
- loadSegment(segmentWriteKey, preferences.segment)
28
- }
29
-
30
- if (preferences.custom) {
31
- loadCustom(additionalServices, preferences.custom)
32
- }
33
- }
34
-
35
- function loadSegment(writeKey, userPreferences = {}) {
36
- const integrations = Object.assign(
37
- { All: false, 'Segment.io': true },
38
- userPreferences
39
- )
40
-
41
- // Exit early if Segment snippet is already present on page
42
- if (window.analytics) return
43
-
44
- // Otherwise, construct and append script to <body>
45
- insertScript({
46
- body: constructSegmentSnippet(writeKey, integrations),
47
- addToBody: true,
48
- })
49
- }
50
-
51
- function loadCustom(services, userPreferences) {
52
- if (!services || services.length === 0) return
53
-
54
- if (userPreferences) {
55
- // Load according to user preferences
56
- const integrationNames = Object.keys(userPreferences)
57
- let service
58
- integrationNames.forEach((name) => {
59
- service = services.find((service) => {
60
- return userPreferences[name] && service.name === name
61
- })
62
- if (service) {
63
- insertScript(service)
64
- }
65
- })
66
- } else {
67
- // Load everything
68
- services.forEach((service) => {
69
- insertScript(service)
70
- })
71
- }
72
- }
73
-
74
- function insertScript(script) {
75
- const scriptElement = document.createElement('script')
76
- scriptElement.type = 'text/javascript'
77
-
78
- if (script.async) {
79
- scriptElement.setAttribute('async', '')
80
- }
81
-
82
- if (script.dataAttrs) {
83
- script.dataAttrs.forEach((attr) => {
84
- scriptElement.dataset[attr.name] = attr.value
85
- })
86
- }
87
-
88
- if (script.body) {
89
- scriptElement.text = script.body
90
- } else if (script.url) {
91
- scriptElement.src = script.url
92
- }
93
-
94
- if (script.addToBody) {
95
- document.body.appendChild(scriptElement)
96
- } else {
97
- document.head.appendChild(scriptElement)
98
- }
99
- }
100
-
101
- function constructSegmentSnippet(writeKey, integrations) {
102
- // Define a function that's responsible for sending Segment-related properties to Heap
103
- // We pass this callback function to Segment's ready method (https://segment.com/docs/sources/website/analytics.js/#ready)
104
- const readyCb = function passSegmentKeysToHeap() {
105
- if (!window.heap) return
106
-
107
- // Send XID
108
- if (!localStorage.getItem('seg_heap_xid')) {
109
- const xId = localStorage.getItem('seg_xid')
110
-
111
- if (xId) {
112
- window.heap.addUserProperties({
113
- 'Segment Cross Origin ID': JSON.parse(xId),
114
- })
115
- localStorage.setItem('seg_heap_xid', Date.now())
116
- }
117
- }
118
-
119
- // Send Anonymous ID
120
- if (!localStorage.getItem('seg_heap_anonymous_id')) {
121
- const anonId = localStorage.getItem('ajs_anonymous_id')
122
-
123
- if (anonId) {
124
- window.heap.addUserProperties({
125
- 'Segment Dotcom Anonymous ID': JSON.parse(anonId),
126
- })
127
- localStorage.setItem('seg_heap_anonymous_id', Date.now())
128
- }
129
- }
130
- }
131
-
132
- return `!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
133
- analytics.load("${writeKey}", ${
134
- integrations ? JSON.stringify({ integrations }) : {}
135
- });
136
- analytics.page();
137
- analytics.ready(${readyCb});
138
- }}();`
139
- }
@@ -1,45 +0,0 @@
1
- {
2
- "name": "@hashicorp/react-consent-manager",
3
- "version": "3.0.1",
4
- "lockfileVersion": 1,
5
- "requires": true,
6
- "dependencies": {
7
- "@hashicorp/react-button": {
8
- "version": "2.3.0",
9
- "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.3.0.tgz",
10
- "integrity": "sha512-1C6V8OxadkdDAkwgItDfNxx7ns9EB6znK39V94RBiPvElmsNLCEG7zujcQX71V2n+HMSv1JPgDvXp4WLICzK+Q==",
11
- "requires": {
12
- "@hashicorp/react-inline-svg": "^1.0.0",
13
- "slugify": "^1.3.6"
14
- }
15
- },
16
- "@hashicorp/react-inline-svg": {
17
- "version": "1.0.2",
18
- "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz",
19
- "integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw=="
20
- },
21
- "@segment/in-eu": {
22
- "version": "0.2.1",
23
- "resolved": "https://registry.npmjs.org/@segment/in-eu/-/in-eu-0.2.1.tgz",
24
- "integrity": "sha512-7JKBw/l3S9J0ldo/n6XPfd3sT89f300KOCvmZsd8sryVZOWlE4L2LMKT538I34bjRdaOd1aJ52TsOAZUOLqxiQ==",
25
- "requires": {
26
- "jstz": "^2.0.0"
27
- }
28
- },
29
- "js-cookie": {
30
- "version": "2.2.1",
31
- "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
32
- "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
33
- },
34
- "jstz": {
35
- "version": "2.1.1",
36
- "resolved": "https://registry.npmjs.org/jstz/-/jstz-2.1.1.tgz",
37
- "integrity": "sha512-8hfl5RD6P7rEeIbzStBz3h4f+BQHfq/ABtoU6gXKQv5OcZhnmrIpG7e1pYaZ8hS9e0mp+bxUj08fnDUbKctYyA=="
38
- },
39
- "slugify": {
40
- "version": "1.4.5",
41
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.5.tgz",
42
- "integrity": "sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ=="
43
- }
44
- }
45
- }