@hashicorp/react-components 0.0.0-canary.57d393c

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 (149) 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 +3 -0
  5. package/global.d.ts +6 -0
  6. package/package.json +31 -0
  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/src/components/consent-manager/README.md +73 -0
  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/src/components/subnav/partials/CtaLinks/icons/github.svg.js +7 -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
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import { createContext } from 'react'
7
+ import type { MarketoFormMetadata } from '../types'
8
+
9
+ export const FormMetadataContext = createContext<MarketoFormMetadata | null>(
10
+ null
11
+ )
@@ -0,0 +1,197 @@
1
+ ---
2
+ componentName: 'MarketoForm'
3
+ ---
4
+
5
+ Renders a form from Marketo.
6
+
7
+ <LiveComponent>
8
+ {`<MarketoForm
9
+ metadata={{
10
+ result: [
11
+ {
12
+ id: 9999,
13
+ name: "FORM - Contact Sales",
14
+ description: "",
15
+ createdAt: "2020-08-26T21:35:12Z+0000",
16
+ updatedAt: "2022-11-11T01:39:32Z+0000",
17
+ url: "https://app-ab32.marketo.com/#FO1307B2",
18
+ status: "approved",
19
+ theme: "simple",
20
+ language: "English",
21
+ locale: "en_US",
22
+ progressiveProfiling: false,
23
+ labelPosition: "left",
24
+ fontFamily: "Helvetica",
25
+ fontSize: "13px",
26
+ folder: {
27
+ type: "Folder",
28
+ value: 32792,
29
+ folderName: "01. In use forms",
30
+ },
31
+ knownVisitor: {
32
+ type: "form",
33
+ template: null,
34
+ },
35
+ thankYouList: [
36
+ {
37
+ followupType: "none",
38
+ followupValue: null,
39
+ default: true,
40
+ },
41
+ ],
42
+ buttonLocation: 120,
43
+ buttonLabel: "Submit",
44
+ waitingLabel: "Please Wait",
45
+ workSpaceId: 1,
46
+ },
47
+ ],
48
+ }}
49
+ fields={{
50
+ result: [
51
+ {
52
+ id: "FirstName",
53
+ label: "First Name:",
54
+ dataType: "text",
55
+ validationMessage: "This field is required.",
56
+ required: true,
57
+ visibilityRules: {
58
+ ruleType: "alwaysShow",
59
+ },
60
+ },
61
+ {
62
+ id: "LastName",
63
+ label: "Last Name:",
64
+ dataType: "text",
65
+ validationMessage: "This field is required.",
66
+ required: true,
67
+ visibilityRules: {
68
+ ruleType: "alwaysShow",
69
+ },
70
+ },
71
+ {
72
+ id: "Email",
73
+ label: "Business Email:",
74
+ dataType: "email",
75
+ validationMessage:
76
+ "Must be valid email. <span class='mktoErrorDetail'>example@yourdomain.com</span>",
77
+ required: true,
78
+ visibilityRules: {
79
+ ruleType: "alwaysShow",
80
+ },
81
+ },
82
+ {
83
+ id: "Company",
84
+ label: "Company:",
85
+ dataType: "text",
86
+ validationMessage: "This field is required.",
87
+ required: true,
88
+ visibilityRules: {
89
+ ruleType: "alwaysShow",
90
+ },
91
+ },
92
+ {
93
+ id: "FavoriteProduct",
94
+ label: "Favorite HashiCorp Product",
95
+ dataType: "select",
96
+ required: true,
97
+ validationMessage: "This field is required.",
98
+ visibilityRules: {
99
+ ruleType: "alwaysShow",
100
+ },
101
+ fieldMetaData: {
102
+ values: [
103
+ { label: "Terraform", value: "terraform" },
104
+ { label: "Packer", value: "packer" },
105
+ { label: "Consul", value: "consul" },
106
+ { label: "Vault", value: "vault" },
107
+ { label: "Boundary", value: "boundary" },
108
+ { label: "Nomad", value: "nomad" },
109
+ { label: "Waypoint", value: "waypoint" },
110
+ { label: "Vagrant", value: "vagrant" },
111
+ ],
112
+ },
113
+ },
114
+ {
115
+ id: "appendToNotes",
116
+ label: "Comments",
117
+ dataType: "textArea",
118
+ required: false,
119
+ validationMessage: "This field is required.",
120
+ visibilityRules: {
121
+ ruleType: "alwaysShow",
122
+ },
123
+ },
124
+ {
125
+ id: "Phone",
126
+ label: "Phone:",
127
+ dataType: "text",
128
+ validationMessage: "This field is required.",
129
+ required: false,
130
+ visibilityRules: {
131
+ ruleType: "show",
132
+ rules: [
133
+ {
134
+ subjectField: "fastTracktoSales",
135
+ operator: "is",
136
+ values: ["yes"],
137
+ altLabel: "Phone Number:",
138
+ },
139
+ ],
140
+ },
141
+ },
142
+ {
143
+ id: "fastTracktoSales",
144
+ label:
145
+ "I'd like a sales person to contact me about a trial or pricing.",
146
+ dataType: "checkbox",
147
+ validationMessage: "This field is required.",
148
+ rowNumber: 6,
149
+ columnNumber: 0,
150
+ required: false,
151
+ formPrefill: true,
152
+ fieldMetaData: {
153
+ initiallyChecked: false,
154
+ },
155
+ visibilityRules: {
156
+ ruleType: "alwaysShow",
157
+ },
158
+ },
159
+ {
160
+ id: "Consent_Privacy_Policy__c",
161
+ label: "Send me news about HashiCorp products, releases and events.",
162
+ dataType: "checkbox",
163
+ validationMessage: "This field is required.",
164
+ rowNumber: 6,
165
+ columnNumber: 0,
166
+ required: false,
167
+ formPrefill: true,
168
+ fieldMetaData: {
169
+ initiallyChecked: false,
170
+ },
171
+ visibilityRules: {
172
+ ruleType: "alwaysShow",
173
+ },
174
+ },
175
+ {
176
+ id: "SHRtbFRleHRfMjAyMy0wNC0wNVQyMjo0NDo0Ny45OTZa",
177
+ labelWidth: 260,
178
+ dataType: "htmltext",
179
+ rowNumber: 9,
180
+ columnNumber: 0,
181
+ visibilityRules: {
182
+ ruleType: "alwaysShow"
183
+ },
184
+ text: "By submitting this form, you acknowledge and agree that HashiCorp will process your personal information in accordance with the <a href=\\"https://hashicorp.com/trust/privacy\\" target=\\"_blank\\" id=\\"\\">Privacy Policy</a>."
185
+ }
186
+ ],
187
+ }}
188
+ submitTitle="Download Now"
189
+ onSubmitSuccess={() => alert("Success!")}
190
+ onSubmitFailure={() => alert("Failure!")}
191
+ />`}
192
+ </LiveComponent>
193
+ ;
194
+
195
+ ### Props
196
+
197
+ <PropsTable props={componentProps} />
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ import type { MarketoFormField } from '../types'
7
+
8
+ const BASIC_FORM_PROPS = {
9
+ metadata: {
10
+ result: [
11
+ {
12
+ id: 9999,
13
+ language: 'English',
14
+ waitingLabel: 'Submitting...',
15
+ buttonLabel: 'Submit',
16
+ },
17
+ ],
18
+ },
19
+ fields: {
20
+ result: [
21
+ {
22
+ id: 'FirstName',
23
+ label: 'First Name',
24
+ dataType: 'text',
25
+ validationMessage: 'This field is required.',
26
+ rowNumber: 3,
27
+ columnNumber: 0,
28
+ required: true,
29
+ visibilityRules: {
30
+ ruleType: 'alwaysShow',
31
+ },
32
+ },
33
+ {
34
+ id: 'LastName',
35
+ label: 'Last Name',
36
+ dataType: 'text',
37
+ validationMessage: 'This field is required.',
38
+ rowNumber: 3,
39
+ columnNumber: 0,
40
+ required: true,
41
+ formPrefill: true,
42
+ visibilityRules: {
43
+ ruleType: 'alwaysShow',
44
+ },
45
+ },
46
+ ] as MarketoFormField[],
47
+ },
48
+ }
49
+
50
+ const UTM_FORM_PROPS = {
51
+ ...BASIC_FORM_PROPS,
52
+ fields: {
53
+ result: [
54
+ ...BASIC_FORM_PROPS.fields.result,
55
+ {
56
+ id: 'utm_medium__c',
57
+ label: 'utm_medium:',
58
+ dataType: 'hidden',
59
+ rowNumber: 7,
60
+ columnNumber: 0,
61
+ required: false,
62
+ autoFill: {
63
+ value: '',
64
+ valueFrom: 'query',
65
+ parameterName: 'utm_medium',
66
+ },
67
+ visibilityRules: {
68
+ ruleType: 'alwaysShow',
69
+ },
70
+ },
71
+ {
72
+ id: 'form_page_url__c',
73
+ label: 'form_page_url:',
74
+ dataType: 'hidden',
75
+ rowNumber: 7,
76
+ columnNumber: 0,
77
+ required: false,
78
+ visibilityRules: {
79
+ ruleType: 'alwaysShow',
80
+ },
81
+ },
82
+ ] as MarketoFormField[],
83
+ },
84
+ }
85
+
86
+ const COOKIE_UTM_FORM_PROPS = {
87
+ ...BASIC_FORM_PROPS,
88
+ fields: {
89
+ result: [
90
+ ...BASIC_FORM_PROPS.fields.result,
91
+ {
92
+ id: 'utm_content__c',
93
+ label: 'utm_content:',
94
+ dataType: 'hidden',
95
+ rowNumber: 7,
96
+ columnNumber: 0,
97
+ required: false,
98
+ autoFill: {
99
+ value: '',
100
+ valueFrom: 'query',
101
+ parameterName: 'utm_content',
102
+ },
103
+ visibilityRules: {
104
+ ruleType: 'alwaysShow',
105
+ },
106
+ },
107
+ ] as MarketoFormField[],
108
+ },
109
+ }
110
+
111
+ const VISIBILITY_RULE_FORM_PROPS = {
112
+ ...BASIC_FORM_PROPS,
113
+ fields: {
114
+ result: [
115
+ ...BASIC_FORM_PROPS.fields.result,
116
+ {
117
+ id: 'Phone',
118
+ label: 'Phone Number',
119
+ dataType: 'telephone',
120
+ validationMessage: 'Must be a phone number.',
121
+ rowNumber: 6,
122
+ columnNumber: 0,
123
+ required: false,
124
+ formPrefill: true,
125
+ visibilityRules: {
126
+ rules: [
127
+ {
128
+ subjectField: 'fastTracktoSales',
129
+ operator: 'is',
130
+ values: ['yes'],
131
+ altLabel: 'Phone Number:',
132
+ },
133
+ ],
134
+ ruleType: 'show',
135
+ },
136
+ },
137
+ {
138
+ id: 'fastTracktoSales',
139
+ label: 'Have salesperson contact me',
140
+ dataType: 'checkbox',
141
+ validationMessage: 'This field is required.',
142
+ rowNumber: 7,
143
+ columnNumber: 0,
144
+ required: false,
145
+ formPrefill: true,
146
+ fieldMetaData: {
147
+ initiallyChecked: false,
148
+ },
149
+ visibilityRules: {
150
+ ruleType: 'alwaysShow',
151
+ },
152
+ },
153
+ ] as MarketoFormField[],
154
+ },
155
+ }
156
+
157
+ const HIDDEN_COOKIE_FIELD_FORM_PROPS = {
158
+ ...BASIC_FORM_PROPS,
159
+ fields: {
160
+ result: [
161
+ ...BASIC_FORM_PROPS.fields.result,
162
+ {
163
+ id: 'cookieHiddenField',
164
+ label: 'Cookie Value',
165
+ dataType: 'hidden',
166
+ rowNumber: 20,
167
+ columnNumber: 0,
168
+ required: false,
169
+ autoFill: {
170
+ value: '',
171
+ valueFrom: 'cookie',
172
+ parameterName: 'hidden_cookie_field',
173
+ },
174
+ },
175
+ ] as MarketoFormField[],
176
+ },
177
+ }
178
+
179
+ export {
180
+ BASIC_FORM_PROPS,
181
+ UTM_FORM_PROPS,
182
+ VISIBILITY_RULE_FORM_PROPS,
183
+ COOKIE_UTM_FORM_PROPS,
184
+ HIDDEN_COOKIE_FIELD_FORM_PROPS,
185
+ }