@hashicorp/react-components 1.1.10 → 1.1.11

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 (162) hide show
  1. package/package.json +4 -8
  2. package/src/components/nav-panel/components/flight-icon/index.tsx +51 -0
  3. package/src/components/nav-panel/components/flight-icon/style.module.css +3 -0
  4. package/src/components/nav-panel/components/link-list/index.tsx +15 -9
  5. package/src/components/nav-panel/components/link-list/style.module.css +10 -10
  6. package/src/components/nav-panel/components/panel/column/style.module.css +2 -2
  7. package/src/components/nav-panel/components/panel/root/style.module.css +5 -5
  8. package/src/components/nav-panel/components/promo/index.tsx +15 -9
  9. package/src/components/nav-panel/components/promo/style.module.css +26 -12
  10. package/src/components/nav-panel/components/text/index.tsx +34 -0
  11. package/src/components/nav-panel/product-panel/index.tsx +34 -14
  12. package/src/components/nav-panel/product-panel/style.module.css +77 -36
  13. package/src/components/nav-panel/standard-panel/index.tsx +3 -0
  14. package/src/components/nav-panel/standard-panel/style.module.css +2 -2
  15. package/src/lib/get-localized-link-props/index.test.ts +30 -0
  16. package/src/lib/get-localized-link-props/index.ts +45 -0
  17. package/src/lib/parse-url/index.test.ts +40 -1
  18. package/src/lib/parse-url/index.ts +75 -9
  19. package/src/lib/send-posthog-event/index.ts +22 -0
  20. package/src/lib/supported-locales/index.ts +1 -0
  21. package/src/lib/track-nav-click-event/index.ts +4 -4
  22. package/src/lib/v/index.ts +4 -5
  23. package/src/components/actions/index.tsx +0 -107
  24. package/src/components/actions/style.module.css +0 -28
  25. package/src/components/actions/types.ts +0 -73
  26. package/src/components/call-to-action/index.tsx +0 -205
  27. package/src/components/call-to-action/styles/variant-centered.module.css +0 -93
  28. package/src/components/call-to-action/styles/variant-compact-grid.module.css +0 -88
  29. package/src/components/call-to-action/styles/variant-compact.module.css +0 -91
  30. package/src/components/call-to-action/styles/variant-links.module.css +0 -85
  31. package/src/components/card/README.md +0 -11
  32. package/src/components/card/card.tsx +0 -45
  33. package/src/components/card/index.test.tsx +0 -69
  34. package/src/components/card/index.tsx +0 -14
  35. package/src/components/card/newsroom-card/index.test.tsx +0 -39
  36. package/src/components/card/newsroom-card/index.tsx +0 -37
  37. package/src/components/card/newsroom-card/style.module.css +0 -12
  38. package/src/components/card/partner-card/index.test.tsx +0 -57
  39. package/src/components/card/partner-card/index.tsx +0 -69
  40. package/src/components/card/partner-card/style.module.css +0 -24
  41. package/src/components/card/person-card/index.test.tsx +0 -71
  42. package/src/components/card/person-card/index.tsx +0 -93
  43. package/src/components/card/person-card/style.module.css +0 -33
  44. package/src/components/card/primitives.tsx +0 -176
  45. package/src/components/card/promo-card/index.tsx +0 -51
  46. package/src/components/card/resource-card/index.test.tsx +0 -48
  47. package/src/components/card/resource-card/index.tsx +0 -37
  48. package/src/components/card/style.module.css +0 -145
  49. package/src/components/card/types.ts +0 -66
  50. package/src/components/card/unified-card/index.tsx +0 -64
  51. package/src/components/consent-manager/README.md +0 -73
  52. package/src/components/consent-manager/components/banner/banner.module.css +0 -23
  53. package/src/components/consent-manager/components/banner/banner.test.tsx +0 -31
  54. package/src/components/consent-manager/components/banner/banner.tsx +0 -73
  55. package/src/components/consent-manager/components/dialog/dialog.module.css +0 -145
  56. package/src/components/consent-manager/components/dialog/dialog.test.tsx +0 -194
  57. package/src/components/consent-manager/components/dialog/dialog.tsx +0 -339
  58. package/src/components/consent-manager/img/icn_close.tsx +0 -19
  59. package/src/components/consent-manager/index.test.tsx +0 -334
  60. package/src/components/consent-manager/index.tsx +0 -186
  61. package/src/components/consent-manager/loader/README.md +0 -29
  62. package/src/components/consent-manager/loader/categories.ts +0 -22
  63. package/src/components/consent-manager/loader/index.tsx +0 -94
  64. package/src/components/consent-manager/loader/presets/enterprise.ts +0 -12
  65. package/src/components/consent-manager/loader/presets/oss.ts +0 -10
  66. package/src/components/consent-manager/loader/services.ts +0 -45
  67. package/src/components/consent-manager/scripts/custom.tsx +0 -59
  68. package/src/components/consent-manager/scripts/segment.tsx +0 -87
  69. package/src/components/consent-manager/style.module.css +0 -9
  70. package/src/components/consent-manager/types.ts +0 -55
  71. package/src/components/consent-manager/util/cookies.test.ts +0 -75
  72. package/src/components/consent-manager/util/cookies.ts +0 -70
  73. package/src/components/consent-manager/util/integrations.test.ts +0 -115
  74. package/src/components/consent-manager/util/integrations.ts +0 -110
  75. package/src/components/intro/index.tsx +0 -82
  76. package/src/components/intro/style.module.css +0 -67
  77. package/src/components/intro/types.ts +0 -44
  78. package/src/components/marketo-form/CHANGELOG.md +0 -122
  79. package/src/components/marketo-form/README.md +0 -1
  80. package/src/components/marketo-form/contexts/FormMetadata.ts +0 -11
  81. package/src/components/marketo-form/docs.mdx +0 -197
  82. package/src/components/marketo-form/fixtures/index.ts +0 -185
  83. package/src/components/marketo-form/form/index.tsx +0 -369
  84. package/src/components/marketo-form/index.test.tsx +0 -320
  85. package/src/components/marketo-form/index.ts +0 -11
  86. package/src/components/marketo-form/package.original.json +0 -30
  87. package/src/components/marketo-form/partials/error-message/index.tsx +0 -12
  88. package/src/components/marketo-form/partials/error-message/style.module.css +0 -13
  89. package/src/components/marketo-form/partials/field/index.tsx +0 -90
  90. package/src/components/marketo-form/partials/field-wrapper/index.tsx +0 -26
  91. package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +0 -32
  92. package/src/components/marketo-form/partials/fields/email-field/index.tsx +0 -35
  93. package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +0 -21
  94. package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +0 -37
  95. package/src/components/marketo-form/partials/fields/htmltext-field/index.tsx +0 -21
  96. package/src/components/marketo-form/partials/fields/htmltext-field/style.module.css +0 -18
  97. package/src/components/marketo-form/partials/fields/name-field/index.tsx +0 -19
  98. package/src/components/marketo-form/partials/fields/name-field/style.module.css +0 -13
  99. package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +0 -48
  100. package/src/components/marketo-form/partials/fields/select-field/index.tsx +0 -39
  101. package/src/components/marketo-form/partials/fields/select-field/style.module.css +0 -5
  102. package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +0 -30
  103. package/src/components/marketo-form/partials/fields/text-field/index.tsx +0 -30
  104. package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +0 -29
  105. package/src/components/marketo-form/partials/label/index.tsx +0 -24
  106. package/src/components/marketo-form/partials/label/style.module.css +0 -12
  107. package/src/components/marketo-form/partials/visibility-rule/index.tsx +0 -84
  108. package/src/components/marketo-form/props.js +0 -66
  109. package/src/components/marketo-form/server/api-routes.ts +0 -109
  110. package/src/components/marketo-form/server/client.ts +0 -98
  111. package/src/components/marketo-form/server/index.ts +0 -8
  112. package/src/components/marketo-form/types.ts +0 -268
  113. package/src/components/marketo-form/utils.test.tsx +0 -103
  114. package/src/components/marketo-form/utils.ts +0 -449
  115. package/src/components/next-steps/index.tsx +0 -137
  116. package/src/components/next-steps/style.module.css +0 -270
  117. package/src/components/next-steps/types.ts +0 -63
  118. package/src/components/product-badge/index.test.tsx +0 -11
  119. package/src/components/product-badge/index.tsx +0 -42
  120. package/src/components/product-badge/style.module.css +0 -76
  121. package/src/components/products-used/index.tsx +0 -84
  122. package/src/components/products-used/style.module.css +0 -87
  123. package/src/components/products-used/types.ts +0 -31
  124. package/src/components/related-content/index.test.tsx +0 -74
  125. package/src/components/related-content/index.tsx +0 -56
  126. package/src/components/related-content/style.module.css +0 -89
  127. package/src/components/related-content/types.ts +0 -21
  128. package/src/components/subnav/helpers/areBasePathsMatching.ts +0 -13
  129. package/src/components/subnav/helpers/traverse/index.ts +0 -42
  130. package/src/components/subnav/helpers/useHeightRef.ts +0 -42
  131. package/src/components/subnav/helpers/useNavRef.ts +0 -30
  132. package/src/components/subnav/helpers/useOverflowRef.ts +0 -85
  133. package/src/components/subnav/helpers/useStuckRef.ts +0 -51
  134. package/src/components/subnav/index.tsx +0 -199
  135. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.test.ts +0 -26
  136. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.ts +0 -22
  137. package/src/components/subnav/partials/CtaLinks/github-stars-link/index.tsx +0 -87
  138. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.test.ts +0 -29
  139. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.ts +0 -32
  140. package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +0 -85
  141. package/src/components/subnav/partials/CtaLinks/icons/github-logo.js +0 -20
  142. package/src/components/subnav/partials/CtaLinks/icons/github.svg.js +0 -7
  143. package/src/components/subnav/partials/CtaLinks/icons/star.js +0 -20
  144. package/src/components/subnav/partials/CtaLinks/index.tsx +0 -130
  145. package/src/components/subnav/partials/CtaLinks/style.module.css +0 -45
  146. package/src/components/subnav/partials/DropdownTrigger/index.tsx +0 -35
  147. package/src/components/subnav/partials/DropdownTrigger/style.module.css +0 -36
  148. package/src/components/subnav/partials/MenuItemsDefault/index.tsx +0 -151
  149. package/src/components/subnav/partials/MenuItemsDefault/style.module.css +0 -91
  150. package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +0 -139
  151. package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +0 -82
  152. package/src/components/subnav/partials/TitleLink/index.tsx +0 -113
  153. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +0 -9
  154. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +0 -9
  155. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-dark.ts +0 -23
  156. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-light.ts +0 -23
  157. package/src/components/subnav/partials/TitleLink/style.module.css +0 -43
  158. package/src/components/subnav/partials/nav-item-text/index.tsx +0 -37
  159. package/src/components/subnav/partials/nav-item-text/style.module.css +0 -15
  160. package/src/components/subnav/style.module.css +0 -68
  161. package/src/components/subnav/subnav-consts.ts +0 -1
  162. package/src/components/subnav/theme.module.css +0 -50
@@ -1,75 +0,0 @@
1
- import cookies from 'js-cookie'
2
- import * as cookiesJS from './cookies.js'
3
-
4
- it('should not show preferences loaded before cookies are saved', () => {
5
- expect(cookiesJS.preferencesSavedAndLoaded()).toBe(false)
6
- })
7
-
8
- it('should show preferences loaded if cookies are loaded', () => {
9
- const preferences = JSON.stringify({ loadAll: true, version: 1 })
10
- const originalCookiesGet = cookies.get
11
-
12
- // mocks
13
- cookies.get = vi.fn().mockImplementationOnce(() => preferences)
14
- cookiesJS.loadPreferences()
15
-
16
- const preferencesLoaded = cookiesJS.preferencesSavedAndLoaded()
17
- expect(preferencesLoaded).toBe(true)
18
-
19
- cookies.get = originalCookiesGet
20
- })
21
-
22
- it('should get the domain', () => {
23
- const originalLocation = global.window.location
24
- const originalCookiesGet = cookies.get
25
- const originalCookiesSet = cookies.set
26
-
27
- // mocks
28
- delete global.window.location
29
- global.window.location = { hostname: 'foo.bar.baz.net' }
30
- cookies.get = vi.fn().mockImplementationOnce(() => 'baz.net')
31
- cookies.set = vi.fn()
32
-
33
- expect(cookiesJS.getDomain()).toBe('baz.net')
34
-
35
- // restore mocks
36
- global.window.location = originalLocation
37
- cookies.get = originalCookiesGet
38
- cookies.set = originalCookiesSet
39
- })
40
-
41
- it('should load preferences', () => {
42
- const preferences = { loadAll: true, version: 1 }
43
- const originalCookiesGet = cookies.get
44
-
45
- // mocks
46
- cookies.get = vi.fn().mockImplementationOnce(() => preferences)
47
-
48
- expect(cookiesJS.loadPreferences()).toStrictEqual(preferences)
49
-
50
- // restore mocks
51
- cookies.get = originalCookiesGet
52
- })
53
-
54
- it('should save preferences', () => {
55
- global.window.location = { hostname: 'foo.bar.baz.net' }
56
- const preferences = { loadAll: true, version: 1 }
57
- const version = 1
58
- const args = [
59
- cookiesJS.COOKIE_KEY,
60
- JSON.stringify(preferences),
61
- { expires: cookiesJS.COOKIE_EXPIRES, domain: '' },
62
- ]
63
- const originalCookiesSet = cookies.set
64
-
65
- // mocks
66
- cookies.set = vi.fn()
67
-
68
- cookiesJS.savePreferences(preferences, version)
69
-
70
- const lastArgs = cookies.set.mock.calls[cookies.set.mock.calls.length - 1]
71
-
72
- expect(lastArgs).toStrictEqual(args)
73
-
74
- cookies.set = originalCookiesSet
75
- })
@@ -1,70 +0,0 @@
1
- /*
2
- Cookies structure:
3
- {
4
- { segment: { Hotjar: true, Intercom: false, .. } },
5
- { custom: { OptinMonster: true } },
6
- { categories: { Functional: true } }
7
- }
8
- */
9
-
10
- import cookies from 'js-cookie'
11
- export const COOKIE_KEY = 'hashi-consent-preferences'
12
- export const COOKIE_EXPIRES = 183
13
-
14
- let preferences = undefined
15
- let preferencesLoaded = false
16
-
17
- export function getDomain() {
18
- const host = window.location.hostname
19
- const parts = host.split('.')
20
- const levels: string[] = []
21
- let result = ''
22
-
23
- // get all domain levels
24
- for (let i = parts.length - 2; i >= 0; i--) {
25
- levels.push(parts.slice(i).join('.'))
26
- }
27
-
28
- // find top level domain
29
- for (let i = 0; i < levels.length; i++) {
30
- const cname = '__tld__'
31
- const domain = levels[i]
32
- const opts = { domain: '.' + domain }
33
-
34
- cookies.set(cname, '1', opts)
35
- if (cookies.get(cname)) {
36
- cookies.set(cname, 'null', opts)
37
- result = domain
38
- break
39
- }
40
- }
41
-
42
- return result
43
- }
44
-
45
- export const loadPreferences = () => {
46
- if (!preferences) {
47
- const value = cookies.get(COOKIE_KEY)
48
- if (value && value !== {}.toString()) {
49
- preferences = JSON.parse(value)
50
- if (preferences) {
51
- preferencesLoaded = true
52
- }
53
- }
54
- }
55
-
56
- return preferences
57
- }
58
-
59
- export function savePreferences(prefs, version) {
60
- const domain = getDomain()
61
- const prefsWithVersion = Object.assign(prefs, { version: version })
62
- cookies.set(COOKIE_KEY, JSON.stringify(prefsWithVersion), {
63
- expires: COOKIE_EXPIRES,
64
- domain,
65
- })
66
- preferences = prefsWithVersion
67
- preferencesLoaded = true
68
- }
69
-
70
- export const preferencesSavedAndLoaded = () => preferencesLoaded
@@ -1,115 +0,0 @@
1
- test('fetches integrations from segment, formats them as expected', async () => {
2
- vi.resetModules()
3
- global.fetch = () =>
4
- Promise.resolve({
5
- ok: true,
6
- json: () => mockSegmentResponse,
7
- }) as any
8
- const getIntegrations = await import('./integrations')
9
- const resp = await getIntegrations.default(
10
- mockProps.segmentServices,
11
- mockProps.additionalServices,
12
- 'XXX - segment key'
13
- )
14
- expect(resp['Test Category'][0].name).toBe('Test Non-Segment Service')
15
- expect(resp['Test Category'][0].origin).toBe('custom')
16
- expect(resp['Test Category'][1].name).toBe('Test Non-Segment Service 2')
17
- expect(resp['Test Category'][1].origin).toBe('custom')
18
- expect(resp['Test Category'][2].name).toBe('Google Analytics')
19
- expect(resp['Test Category'][2].origin).toBe('segment')
20
- expect(resp['Test Category'][3].name).toBe('LinkedIn Insight Tag')
21
- expect(resp['Test Category'][3].origin).toBe('segment')
22
- expect(resp['Email Marketing'][0].name).toBe('Marketo V2')
23
- expect(resp['Email Marketing'][0].origin).toBe('segment')
24
- })
25
-
26
- const mockSegmentResponse = [
27
- {
28
- name: 'Google Analytics',
29
- creationName: 'Google Analytics',
30
- description:
31
- 'Google Analytics is the most popular analytics tool for the web. It’s free and provides a wide range of features. It’s especially good at measuring traffic sources and ad campaigns.',
32
- website: 'http://google.com/analytics',
33
- category: 'Test Category',
34
- },
35
- {
36
- name: 'LinkedIn Insight Tag',
37
- creationName: 'LinkedIn Insight Tag',
38
- description:
39
- 'The LinkedIn Insight Tag is a piece of lightweight JavaScript code that you can add to your website to enable in-depth campaign reporting and unlock valuable insights about your website visitors. As a LinkedIn Marketing Solutions customer, you can use the LinkedIn Insight Tag to track conversions, retarget website visitors, and unlock additional insights about members interacting with your ads.',
40
- website: 'https://www.linkedin.com',
41
- category: 'Advertising',
42
- },
43
- {
44
- name: 'Marketo V2',
45
- creationName: 'Marketo V2',
46
- description:
47
- 'Marketo is a marketing automation tool that can help you engage customers and prospects.',
48
- website: 'https://www.marketo.com/',
49
- category: 'Email Marketing',
50
- },
51
- {
52
- name: 'Heap',
53
- creationName: 'Heap',
54
- description:
55
- 'Heap is an analytics tool that automatically tracks all of the actions your users perform just by flipping a switch, instead of after adding custom tracking code.',
56
- website: 'http://heapanalytics.com',
57
- category: 'Analytics',
58
- },
59
- {
60
- name: 'Google Tag Manager',
61
- creationName: 'Google Tag Manager',
62
- description:
63
- 'Google Tag Manager lets you add or update your website tags, easily and for free.',
64
- website: 'https://www.google.com/analytics/tag-manager/',
65
- category: 'Tag Managers',
66
- },
67
- {
68
- name: 'Amazon S3',
69
- creationName: 'Amazon S3',
70
- description:
71
- 'Our Amazon S3 copies our log files of your raw API calls from our S3 bucket to yours, where you can then perform custom analysis on them.',
72
- website: 'http://aws.amazon.com/s3',
73
- category: 'Analytics',
74
- },
75
- ]
76
-
77
- const mockProps = {
78
- segmentServices: [
79
- {
80
- name: 'LinkedIn Insight Tag',
81
- category: 'Test Category',
82
- description: 'description',
83
- },
84
- ],
85
- additionalServices: [
86
- {
87
- name: 'Test Non-Segment Service',
88
- category: 'Test Category',
89
- description: 'description',
90
- body: 'test body',
91
- url: 'test url',
92
- },
93
- {
94
- name: 'Test Non-Segment Service 2',
95
- category: 'Test Category',
96
- description: 'description',
97
- body: 'test body 2',
98
- url: 'test url 2',
99
- async: true,
100
- addToBody: true,
101
- dataAttrs: [
102
- {
103
- name: 'test',
104
- value: 'foobar',
105
- },
106
- ],
107
- },
108
- ],
109
- categories: [
110
- {
111
- name: 'Test Category',
112
- description: 'description',
113
- },
114
- ],
115
- }
@@ -1,110 +0,0 @@
1
- import type { ConsentManagerService } from '../types'
2
-
3
- /*
4
- integrations.js
5
- Fetches integrations from Segment given write key and applies user-defined
6
- overrides. Combines with custom scripts to give a complete view into
7
- scripts that the site is trying to load. Finally, groups it all by category.
8
- */
9
-
10
- export type ConsentManagerServiceWithOrigin = ConsentManagerService & {
11
- origin: string
12
- }
13
-
14
- export default function getIntegrations(
15
- segmentServices: ConsentManagerService[] = [],
16
- additionalServices: ConsentManagerService[] = [],
17
- segmentWriteKey: string | undefined
18
- ): Promise<Record<string, ConsentManagerServiceWithOrigin[]>> {
19
- return fetchIntegrationsFromSegment(segmentWriteKey)
20
- .then((segmentOriginated) =>
21
- zipIntegrations(segmentServices, additionalServices, segmentOriginated)
22
- )
23
- .then(groupByCategory)
24
- }
25
-
26
- interface SegmentIntegration {
27
- name: string
28
- creationName: string
29
- description: string
30
- website: string
31
- category: string
32
- }
33
-
34
- // Get integrations from Segment by write key
35
- async function fetchIntegrationsFromSegment(
36
- segmentWriteKey: string | undefined
37
- ) {
38
- const res = await fetch(
39
- `https://artemis.hashicorp.com/v1/projects/${segmentWriteKey}/integrations`
40
- )
41
- if (!res.ok) {
42
- throw new Error(
43
- `Failed to fetch integrations: HTTP ${res.status} ${res.statusText}`
44
- )
45
- }
46
- return (await res.json()) as SegmentIntegration[]
47
- }
48
-
49
- // Include developer overrides for fetched Segment integrations
50
- function zipIntegrations(
51
- segmentOverrides: ConsentManagerService[],
52
- additionalServices: ConsentManagerService[] | undefined,
53
- segmentOriginated: SegmentIntegration[]
54
- ): ConsentManagerServiceWithOrigin[] {
55
- // Create Segment integration object with name as key for quick retrieval
56
- const segmentObj = segmentOriginated.reduce((obj, segment) => {
57
- obj[segment.name] = segment
58
- obj[segment.name].origin = 'segment'
59
- return obj
60
- }, {})
61
-
62
- // Go through each developer-defined segment service and update
63
- // segmentObj with any overrides
64
- for (let i = 0; i < segmentOverrides.length; i++) {
65
- if (
66
- Object.prototype.hasOwnProperty.call(segmentObj, segmentOverrides[i].name)
67
- ) {
68
- segmentObj[segmentOverrides[i].name] = Object.assign(
69
- segmentObj[segmentOverrides[i].name],
70
- segmentOverrides[i]
71
- )
72
- } else {
73
- /* eslint-disable-next-line */
74
- console.warn(
75
- `Unmatched integration config for ${segmentOverrides[i].name}`
76
- )
77
- }
78
- }
79
-
80
- // Include additional (non-Segment) services
81
- const allIntegrations = additionalServices
82
- ? additionalServices.map((integration) => {
83
- return { ...integration, origin: 'custom' }
84
- })
85
- : []
86
-
87
- for (const key in segmentObj) {
88
- allIntegrations.push(segmentObj[key])
89
- }
90
-
91
- // Returns array with all integrations, with origin key (segment or custom)
92
- return allIntegrations
93
- }
94
-
95
- // Group by category for display purposes
96
- function groupByCategory(
97
- integrations: ConsentManagerServiceWithOrigin[]
98
- ): Record<string, ConsentManagerServiceWithOrigin[]> {
99
- const grouped: Record<string, ConsentManagerServiceWithOrigin[]> = {}
100
-
101
- integrations.forEach((integration) => {
102
- if (Object.prototype.hasOwnProperty.call(grouped, integration.category)) {
103
- grouped[integration.category].push(integration)
104
- } else {
105
- grouped[integration.category] = [integration]
106
- }
107
- })
108
-
109
- return grouped
110
- }
@@ -1,82 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import classNames from 'classnames'
7
- import type { IntroProps } from './types'
8
- import Actions from '../actions'
9
- import s from './style.module.css'
10
-
11
- export default function Intro({
12
- appearance = 'light',
13
- textAlignment = 'left',
14
- eyebrow,
15
- heading,
16
- headingElement: HeadingElement = 'h2',
17
- headingSize = 2,
18
- description,
19
- actions,
20
- }: IntroProps) {
21
- const headingSizeClassname = `g-type-display-${headingSize}`
22
- const descriptionSizeClassname =
23
- headingSize === 1 ? 'g-type-body-large' : 'g-type-body'
24
- const descriptionClassName = classNames(
25
- s.description,
26
- descriptionSizeClassname
27
- )
28
- return (
29
- <div
30
- className={classNames(s.intro, s[appearance], s[textAlignment])}
31
- data-testid="intro"
32
- >
33
- {eyebrow ? <p className={s.eyebrow}>{eyebrow}</p> : null}
34
- <HeadingElement className={classNames(s.heading, headingSizeClassname)}>
35
- {heading}
36
- </HeadingElement>
37
- <Description className={descriptionClassName}>{description}</Description>
38
- {actions && actions.ctas && actions.ctas.length > 0 ? (
39
- <div className={s.actions}>
40
- <Actions
41
- appearance={appearance}
42
- layout={actions.layout}
43
- alignment={textAlignment}
44
- theme={actions.theme}
45
- size={actions.size}
46
- ctas={actions.ctas}
47
- />
48
- </div>
49
- ) : null}
50
- </div>
51
- )
52
- }
53
-
54
- const containsHTML = (str: string) => /<[a-z][\s\S]*>/i.test(str)
55
-
56
- function Description({
57
- className,
58
- children,
59
- }: {
60
- className: string
61
- children: IntroProps['description']
62
- }) {
63
- // ReactNode
64
- if (typeof children === 'object') {
65
- return <div className={className}>{children}</div>
66
- }
67
-
68
- // HTML String
69
- if (typeof children === 'string' && containsHTML(children)) {
70
- return (
71
- <div
72
- dangerouslySetInnerHTML={{
73
- __html: children,
74
- }}
75
- className={className}
76
- />
77
- )
78
- }
79
-
80
- // String
81
- return <p className={className}>{children}</p>
82
- }
@@ -1,67 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- .intro {
7
- position: relative;
8
- display: flex;
9
- flex-direction: column;
10
-
11
- &.center {
12
- text-align: center;
13
- align-items: center;
14
- }
15
- }
16
-
17
- .eyebrow {
18
- --color: var(--wpl-neutral-500);
19
-
20
- composes: hdsplus-typography-label from global;
21
- font-weight: var(--font-weight-bold);
22
- text-transform: uppercase;
23
- margin: 0 0 32px;
24
- color: var(--color);
25
-
26
- @nest .dark & {
27
- --color: var(--wpl-neutral-300);
28
- }
29
- }
30
-
31
- .heading {
32
- --color: var(--wpl-neutral-900);
33
-
34
- margin: 0;
35
- color: var(--color);
36
-
37
- @nest .dark & {
38
- --color: var(--wpl-neutral-0);
39
- }
40
- }
41
-
42
- .description {
43
- --color: var(--wpl-neutral-500);
44
-
45
- margin: 16px 0 0;
46
- color: var(--color);
47
-
48
- @nest .dark & {
49
- --color: var(--wpl-neutral-400);
50
- }
51
-
52
- & > * {
53
- color: inherit;
54
-
55
- &:first-child {
56
- margin-top: 0;
57
- }
58
-
59
- &:last-child {
60
- margin-bottom: 0;
61
- }
62
- }
63
- }
64
-
65
- .actions {
66
- margin-top: 32px;
67
- }
@@ -1,44 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import type { ActionsProps } from '../actions/types'
7
- import React from 'react'
8
-
9
- type WithOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
10
-
11
- export interface IntroProps {
12
- /**
13
- * Display intro on light or dark backgrounds.
14
- */
15
- appearance?: 'light' | 'dark'
16
- /**
17
- * Controls the text alignment rendering.
18
- */
19
- textAlignment?: 'left' | 'center'
20
- /**
21
- * Optional text displayed above the heading.
22
- */
23
- eyebrow?: string
24
- /**
25
- * Text displayed within the heading element.
26
- */
27
- heading: string
28
- /**
29
- * Controls which element the heading renders as.
30
- */
31
- headingElement?: 'h1' | 'h2' | 'h3' | 'h4'
32
- /**
33
- * Controls the size at which the heading is rendered.
34
- */
35
- headingSize?: 1 | 2 | 3
36
- /**
37
- * Text following the heading element.
38
- */
39
- description: string | React.ReactNode
40
- /**
41
- * Render CTAs following the description element.
42
- */
43
- actions?: WithOptional<ActionsProps, 'ctas'>
44
- }
@@ -1,122 +0,0 @@
1
- # @hashicorp/react-marketo-form
2
-
3
- ## 0.9.0
4
-
5
- ### Minor Changes
6
-
7
- - [#928](https://github.com/hashicorp/react-components/pull/928) [`cc787d0f`](https://github.com/hashicorp/react-components/commit/cc787d0f5c880fe5d569b68ea54d56e5bc1642b6) Thanks [@dstaley](https://github.com/dstaley)! - Add support for htmltext fields
8
-
9
- ### Patch Changes
10
-
11
- - [#972](https://github.com/hashicorp/react-components/pull/972) [`dbb75084`](https://github.com/hashicorp/react-components/commit/dbb75084839ef20949c37114ea3e58ebd955b33d) Thanks [@dstaley](https://github.com/dstaley)! - Remove content API
12
-
13
- ## 0.8.4
14
-
15
- ### Patch Changes
16
-
17
- - [#959](https://github.com/hashicorp/react-components/pull/959) [`2084dc74`](https://github.com/hashicorp/react-components/commit/2084dc74bb3390227011c9b2052b4ac393554b6e) Thanks [@dstaley](https://github.com/dstaley)! - Treat all-whitespace values as invalid
18
-
19
- ## 0.8.3
20
-
21
- ### Patch Changes
22
-
23
- - [#941](https://github.com/hashicorp/react-components/pull/941) [`855af8ac`](https://github.com/hashicorp/react-components/commit/855af8ac0cad8a89920b733c1f914d2dff91c391) Thanks [@BRKalow](https://github.com/BRKalow)! - Updates @hashicorp/platform-analytics to address type errors.
24
-
25
- - Updated dependencies [[`b4ac21ad`](https://github.com/hashicorp/react-components/commit/b4ac21adec2d76163e1f6a9c3ca5173440d4a934)]:
26
- - @hashicorp/react-form-fields@0.2.0
27
-
28
- ## 0.8.2
29
-
30
- ### Patch Changes
31
-
32
- - [#886](https://github.com/hashicorp/react-components/pull/886) [`cbb148e4`](https://github.com/hashicorp/react-components/commit/cbb148e409f362333e6e898b529cd5c92462b79c) Thanks [@dstaley](https://github.com/dstaley)! - Require emails to have domains
33
-
34
- ## 0.8.1
35
-
36
- ### Patch Changes
37
-
38
- - [#884](https://github.com/hashicorp/react-components/pull/884) [`d7a4fda2`](https://github.com/hashicorp/react-components/commit/d7a4fda22665ab92ad075c66ca11811b13d819ce) Thanks [@dstaley](https://github.com/dstaley)! - Explicitly set default values for hidden fields
39
-
40
- ## 0.8.0
41
-
42
- ### Minor Changes
43
-
44
- - [#857](https://github.com/hashicorp/react-components/pull/857) [`2dfb913c`](https://github.com/hashicorp/react-components/commit/2dfb913cde43b4354183bbd04e65975aadd995e5) Thanks [@dstaley](https://github.com/dstaley)! - Add support for Marketo-driven localization
45
-
46
- ### Patch Changes
47
-
48
- - Updated dependencies [[`3c65a8bf`](https://github.com/hashicorp/react-components/commit/3c65a8bf3a6699fe9fca4422f6ff04a26ffeefd4)]:
49
- - @hashicorp/react-form-fields@0.1.1
50
-
51
- ## 0.7.1
52
-
53
- ### Patch Changes
54
-
55
- - [#868](https://github.com/hashicorp/react-components/pull/868) [`10a7dc7f`](https://github.com/hashicorp/react-components/commit/10a7dc7f92b55533a8a0c0c0216999695b165913) Thanks [@dstaley](https://github.com/dstaley)! - - `MarketoForm` will now treat skipped records as errors, and correctly invoke any `onSubmitError` handlers.
56
- - Added a new `onSubmitStart` handler that's called as soon as the submission process begins.
57
-
58
- ## 0.7.0
59
-
60
- ### Minor Changes
61
-
62
- - [#816](https://github.com/hashicorp/react-components/pull/816) [`e6c258c8`](https://github.com/hashicorp/react-components/commit/e6c258c860adb36363827995cb89e54ea2b5f21e) Thanks [@dstaley](https://github.com/dstaley)! - Use @hashicorp/react-form-fields for base field inputs
63
-
64
- ## 0.6.0
65
-
66
- ### Minor Changes
67
-
68
- - [#832](https://github.com/hashicorp/react-components/pull/832) [`50fbf782`](https://github.com/hashicorp/react-components/commit/50fbf782f2e0c7640f2d26e4f07f0fe477bad245) Thanks [@dstaley](https://github.com/dstaley)! - Call segment.identify on form submissions
69
-
70
- ## 0.5.0
71
-
72
- ### Minor Changes
73
-
74
- - [#828](https://github.com/hashicorp/react-components/pull/828) [`bafded5c`](https://github.com/hashicorp/react-components/commit/bafded5c510546f1ea236e3455d7af8fb5060115) Thanks [@nandereck](https://github.com/nandereck)! - Allow for hidden autofill values to be passed through
75
-
76
- ## 0.4.0
77
-
78
- ### Minor Changes
79
-
80
- - [#815](https://github.com/hashicorp/react-components/pull/815) [`5850beac`](https://github.com/hashicorp/react-components/commit/5850beac3128d64d2b9853f023640d33461672e2) Thanks [@nandereck](https://github.com/nandereck)! - Surface field ID on the FieldWrapper component
81
-
82
- ## 0.3.2
83
-
84
- ### Patch Changes
85
-
86
- - [#791](https://github.com/hashicorp/react-components/pull/791) [`6bd4f1cb`](https://github.com/hashicorp/react-components/commit/6bd4f1cbf150b2f6238500004e00bd116c25a40a) Thanks [@dstaley](https://github.com/dstaley)! - Export Field component for external usage
87
-
88
- ## 0.3.1
89
-
90
- ### Patch Changes
91
-
92
- - [#802](https://github.com/hashicorp/react-components/pull/802) [`67020b77`](https://github.com/hashicorp/react-components/commit/67020b77bccd38298078d3b5e1fa8757a81e09d8) Thanks [@dstaley](https://github.com/dstaley)! - Throw error if form query parameter is missing
93
-
94
- ## 0.3.0
95
-
96
- ### Minor Changes
97
-
98
- - [`1125f588`](https://github.com/hashicorp/react-components/commit/1125f588137049b7c91b018342cc199da88d1e23) Thanks [@dstaley](https://github.com/dstaley)! - Report skipped records as errors
99
-
100
- ## 0.2.0
101
-
102
- ### Minor Changes
103
-
104
- - [#755](https://github.com/hashicorp/react-components/pull/755) [`e803cc00`](https://github.com/hashicorp/react-components/commit/e803cc00d473a6570328473dfb760c5b52a8b3b2) Thanks [@dstaley](https://github.com/dstaley)! - Update react-hook-form
105
-
106
- ## 0.1.2
107
-
108
- ### Patch Changes
109
-
110
- - [#745](https://github.com/hashicorp/react-components/pull/745) [`e8424612`](https://github.com/hashicorp/react-components/commit/e842461209fcebc5a940128dad1f0acaf8183780) Thanks [@dstaley](https://github.com/dstaley)! - Keep dirty values when resetting form
111
-
112
- ## 0.1.1
113
-
114
- ### Patch Changes
115
-
116
- - [#743](https://github.com/hashicorp/react-components/pull/743) [`cbbd5082`](https://github.com/hashicorp/react-components/commit/cbbd508249da7b7bf737ccafc9cfe679686b9c18) Thanks [@dstaley](https://github.com/dstaley)! - Correctly keep modified values when recalculating initial state
117
-
118
- ## 0.1.0
119
-
120
- ### Minor Changes
121
-
122
- - [#630](https://github.com/hashicorp/react-components/pull/630) [`fdccbcc9`](https://github.com/hashicorp/react-components/commit/fdccbcc99ed85aafbdc6af4442f482d6ce5820af) Thanks [@dstaley](https://github.com/dstaley)! - Initial release
@@ -1 +0,0 @@
1
- # @hashicorp/react-marketo-form