@hashicorp/react-components 0.0.0-nightly.8df4a87 → 0.0.0-nightly.928c674

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 (170) hide show
  1. package/.eslintrc.js +1 -2
  2. package/.stylelintrc.js +1 -1
  3. package/README.md +1 -1
  4. package/package.json +9 -10
  5. package/postcss.config.js +1 -1
  6. package/src/components/nav-panel/components/flight-icon/index.tsx +51 -0
  7. package/src/components/nav-panel/components/flight-icon/style.module.css +3 -0
  8. package/src/components/nav-panel/components/link/index.tsx +127 -0
  9. package/src/components/nav-panel/components/link/style.module.css +64 -0
  10. package/src/components/nav-panel/components/link-list/index.tsx +13 -64
  11. package/src/components/nav-panel/components/link-list/style.module.css +1 -50
  12. package/src/components/nav-panel/components/panel/column/index.tsx +17 -2
  13. package/src/components/nav-panel/components/panel/column/style.module.css +13 -3
  14. package/src/components/nav-panel/components/panel/root/index.tsx +13 -2
  15. package/src/components/nav-panel/components/panel/root/style.module.css +20 -5
  16. package/src/components/nav-panel/components/promo/index.tsx +46 -19
  17. package/src/components/nav-panel/components/promo/style.module.css +59 -23
  18. package/src/components/nav-panel/components/text/index.tsx +34 -0
  19. package/src/components/nav-panel/product-panel/index.tsx +146 -32
  20. package/src/components/nav-panel/product-panel/style.module.css +321 -26
  21. package/src/components/nav-panel/standard-panel/index.tsx +4 -1
  22. package/src/components/nav-panel/standard-panel/style.module.css +2 -2
  23. package/src/lib/get-localized-link-props/index.test.ts +30 -0
  24. package/src/lib/get-localized-link-props/index.ts +45 -0
  25. package/src/lib/parse-url/index.test.ts +69 -0
  26. package/src/lib/parse-url/index.ts +97 -0
  27. package/src/lib/send-posthog-event/index.ts +22 -0
  28. package/src/lib/supported-locales/index.ts +10 -0
  29. package/src/lib/track-nav-click-event/index.ts +22 -0
  30. package/src/lib/v/index.ts +10 -0
  31. package/src/components/actions/index.tsx +0 -107
  32. package/src/components/actions/style.module.css +0 -28
  33. package/src/components/actions/types.ts +0 -73
  34. package/src/components/call-to-action/index.tsx +0 -205
  35. package/src/components/call-to-action/styles/variant-centered.module.css +0 -93
  36. package/src/components/call-to-action/styles/variant-compact-grid.module.css +0 -88
  37. package/src/components/call-to-action/styles/variant-compact.module.css +0 -91
  38. package/src/components/call-to-action/styles/variant-links.module.css +0 -85
  39. package/src/components/card/README.md +0 -11
  40. package/src/components/card/card.tsx +0 -45
  41. package/src/components/card/index.test.tsx +0 -69
  42. package/src/components/card/index.tsx +0 -14
  43. package/src/components/card/newsroom-card/index.test.tsx +0 -39
  44. package/src/components/card/newsroom-card/index.tsx +0 -37
  45. package/src/components/card/newsroom-card/style.module.css +0 -12
  46. package/src/components/card/partner-card/index.test.tsx +0 -57
  47. package/src/components/card/partner-card/index.tsx +0 -69
  48. package/src/components/card/partner-card/style.module.css +0 -24
  49. package/src/components/card/person-card/index.test.tsx +0 -71
  50. package/src/components/card/person-card/index.tsx +0 -93
  51. package/src/components/card/person-card/style.module.css +0 -33
  52. package/src/components/card/primitives.tsx +0 -176
  53. package/src/components/card/promo-card/index.tsx +0 -51
  54. package/src/components/card/resource-card/index.test.tsx +0 -48
  55. package/src/components/card/resource-card/index.tsx +0 -37
  56. package/src/components/card/style.module.css +0 -145
  57. package/src/components/card/types.ts +0 -66
  58. package/src/components/card/unified-card/index.tsx +0 -64
  59. package/src/components/consent-manager/README.md +0 -73
  60. package/src/components/consent-manager/components/banner/banner.module.css +0 -23
  61. package/src/components/consent-manager/components/banner/banner.test.tsx +0 -31
  62. package/src/components/consent-manager/components/banner/banner.tsx +0 -73
  63. package/src/components/consent-manager/components/dialog/dialog.module.css +0 -145
  64. package/src/components/consent-manager/components/dialog/dialog.test.tsx +0 -194
  65. package/src/components/consent-manager/components/dialog/dialog.tsx +0 -339
  66. package/src/components/consent-manager/img/icn_close.tsx +0 -19
  67. package/src/components/consent-manager/index.test.tsx +0 -334
  68. package/src/components/consent-manager/index.tsx +0 -186
  69. package/src/components/consent-manager/loader/README.md +0 -29
  70. package/src/components/consent-manager/loader/categories.ts +0 -22
  71. package/src/components/consent-manager/loader/index.tsx +0 -94
  72. package/src/components/consent-manager/loader/presets/enterprise.ts +0 -12
  73. package/src/components/consent-manager/loader/presets/oss.ts +0 -10
  74. package/src/components/consent-manager/loader/services.ts +0 -45
  75. package/src/components/consent-manager/scripts/custom.tsx +0 -59
  76. package/src/components/consent-manager/scripts/segment.tsx +0 -87
  77. package/src/components/consent-manager/style.module.css +0 -9
  78. package/src/components/consent-manager/types.ts +0 -55
  79. package/src/components/consent-manager/util/cookies.test.ts +0 -75
  80. package/src/components/consent-manager/util/cookies.ts +0 -70
  81. package/src/components/consent-manager/util/integrations.test.ts +0 -115
  82. package/src/components/consent-manager/util/integrations.ts +0 -110
  83. package/src/components/intro/index.tsx +0 -82
  84. package/src/components/intro/style.module.css +0 -67
  85. package/src/components/intro/types.ts +0 -44
  86. package/src/components/marketo-form/CHANGELOG.md +0 -122
  87. package/src/components/marketo-form/README.md +0 -1
  88. package/src/components/marketo-form/contexts/FormMetadata.ts +0 -11
  89. package/src/components/marketo-form/docs.mdx +0 -197
  90. package/src/components/marketo-form/fixtures/index.ts +0 -185
  91. package/src/components/marketo-form/form/index.tsx +0 -369
  92. package/src/components/marketo-form/index.test.tsx +0 -320
  93. package/src/components/marketo-form/index.ts +0 -11
  94. package/src/components/marketo-form/package.original.json +0 -30
  95. package/src/components/marketo-form/partials/error-message/index.tsx +0 -12
  96. package/src/components/marketo-form/partials/error-message/style.module.css +0 -13
  97. package/src/components/marketo-form/partials/field/index.tsx +0 -90
  98. package/src/components/marketo-form/partials/field-wrapper/index.tsx +0 -26
  99. package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +0 -32
  100. package/src/components/marketo-form/partials/fields/email-field/index.tsx +0 -35
  101. package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +0 -21
  102. package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +0 -37
  103. package/src/components/marketo-form/partials/fields/htmltext-field/index.tsx +0 -21
  104. package/src/components/marketo-form/partials/fields/htmltext-field/style.module.css +0 -6
  105. package/src/components/marketo-form/partials/fields/name-field/index.tsx +0 -19
  106. package/src/components/marketo-form/partials/fields/name-field/style.module.css +0 -13
  107. package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +0 -48
  108. package/src/components/marketo-form/partials/fields/select-field/index.tsx +0 -39
  109. package/src/components/marketo-form/partials/fields/select-field/style.module.css +0 -5
  110. package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +0 -30
  111. package/src/components/marketo-form/partials/fields/text-field/index.tsx +0 -30
  112. package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +0 -29
  113. package/src/components/marketo-form/partials/label/index.tsx +0 -24
  114. package/src/components/marketo-form/partials/label/style.module.css +0 -12
  115. package/src/components/marketo-form/partials/visibility-rule/index.tsx +0 -84
  116. package/src/components/marketo-form/props.js +0 -66
  117. package/src/components/marketo-form/server/api-routes.ts +0 -109
  118. package/src/components/marketo-form/server/client.ts +0 -98
  119. package/src/components/marketo-form/server/index.ts +0 -8
  120. package/src/components/marketo-form/types.ts +0 -268
  121. package/src/components/marketo-form/utils.test.tsx +0 -103
  122. package/src/components/marketo-form/utils.ts +0 -445
  123. package/src/components/next-steps/index.tsx +0 -143
  124. package/src/components/next-steps/style.module.css +0 -270
  125. package/src/components/next-steps/types.ts +0 -63
  126. package/src/components/product-badge/index.test.tsx +0 -11
  127. package/src/components/product-badge/index.tsx +0 -42
  128. package/src/components/product-badge/style.module.css +0 -76
  129. package/src/components/products-used/index.tsx +0 -84
  130. package/src/components/products-used/style.module.css +0 -87
  131. package/src/components/products-used/types.ts +0 -31
  132. package/src/components/related-content/index.test.tsx +0 -74
  133. package/src/components/related-content/index.tsx +0 -56
  134. package/src/components/related-content/style.module.css +0 -89
  135. package/src/components/related-content/types.ts +0 -21
  136. package/src/components/subnav/helpers/areBasePathsMatching.ts +0 -13
  137. package/src/components/subnav/helpers/traverse/index.ts +0 -42
  138. package/src/components/subnav/helpers/useHeightRef.ts +0 -42
  139. package/src/components/subnav/helpers/useNavRef.ts +0 -30
  140. package/src/components/subnav/helpers/useOverflowRef.ts +0 -85
  141. package/src/components/subnav/helpers/useStuckRef.ts +0 -51
  142. package/src/components/subnav/index.tsx +0 -199
  143. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.test.ts +0 -26
  144. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.ts +0 -22
  145. package/src/components/subnav/partials/CtaLinks/github-stars-link/index.tsx +0 -87
  146. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.test.ts +0 -29
  147. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.ts +0 -32
  148. package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +0 -85
  149. package/src/components/subnav/partials/CtaLinks/icons/github-logo.js +0 -20
  150. package/src/components/subnav/partials/CtaLinks/icons/github.svg.js +0 -7
  151. package/src/components/subnav/partials/CtaLinks/icons/star.js +0 -20
  152. package/src/components/subnav/partials/CtaLinks/index.tsx +0 -130
  153. package/src/components/subnav/partials/CtaLinks/style.module.css +0 -45
  154. package/src/components/subnav/partials/DropdownTrigger/index.tsx +0 -35
  155. package/src/components/subnav/partials/DropdownTrigger/style.module.css +0 -36
  156. package/src/components/subnav/partials/MenuItemsDefault/index.tsx +0 -151
  157. package/src/components/subnav/partials/MenuItemsDefault/style.module.css +0 -91
  158. package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +0 -139
  159. package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +0 -82
  160. package/src/components/subnav/partials/TitleLink/index.tsx +0 -113
  161. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +0 -9
  162. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +0 -9
  163. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-dark.ts +0 -23
  164. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-light.ts +0 -23
  165. package/src/components/subnav/partials/TitleLink/style.module.css +0 -43
  166. package/src/components/subnav/partials/nav-item-text/index.tsx +0 -37
  167. package/src/components/subnav/partials/nav-item-text/style.module.css +0 -15
  168. package/src/components/subnav/style.module.css +0 -68
  169. package/src/components/subnav/subnav-consts.ts +0 -1
  170. package/src/components/subnav/theme.module.css +0 -50
@@ -1,30 +0,0 @@
1
- {
2
- "name": "@hashicorp/react-marketo-form",
3
- "description": "A form component that dynamically renders a Marketo form",
4
- "version": "0.9.0",
5
- "author": "HashiCorp",
6
- "contributors": [
7
- "Dylan Staley"
8
- ],
9
- "dependencies": {
10
- "@hashicorp/platform-analytics": "^0.11.2",
11
- "@hashicorp/react-button": "^6.2.0",
12
- "@hashicorp/react-form-fields": "^0.2.0",
13
- "@vercel/fetch": "^6.2.0",
14
- "clsx": "^1.1.1",
15
- "js-cookie": "^3.0.1",
16
- "moize": "^6.1.3",
17
- "react-hook-form": "^7.37.0"
18
- },
19
- "license": "MPL-2.0",
20
- "peerDependencies": {
21
- "next": ">=11.x",
22
- "react": ">=16.x"
23
- },
24
- "publishConfig": {
25
- "access": "public"
26
- },
27
- "devDependencies": {
28
- "@types/js-cookie": "^3.0.2"
29
- }
30
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import styles from './style.module.css'
7
-
8
- const ErrorMessage = ({ error }: { error: string }) => {
9
- return <div className={styles.errorText}>{error}</div>
10
- }
11
-
12
- export default ErrorMessage
@@ -1,13 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- .errorText {
7
- --error-text-color: var(--danger);
8
-
9
- composes: g-type-body-small from global;
10
- color: var(--error-text-color);
11
- line-height: 1.4;
12
- margin-top: 4px;
13
- }
@@ -1,90 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import TextField from '../fields/text-field'
7
- import EmailField from '../fields/email-field'
8
- import TelephoneField from '../fields/telephone-field'
9
- import TextareaField from '../fields/textarea-field'
10
- import SelectField from '../fields/select-field'
11
- import CheckboxField from '../fields/checkbox-field'
12
- import HiddenField from '../fields/hidden-field'
13
- import HtmltextField from '../fields/htmltext-field'
14
- import RadioButtonsField from '../fields/radio-buttons-field'
15
- import FormPageUrlField from '../fields/form-page-url-field'
16
- import type { MarketoFormField, MarketoFormComponents } from '../../types'
17
-
18
- const Field = ({
19
- field,
20
- components,
21
- }: {
22
- field: MarketoFormField
23
- components?: MarketoFormComponents
24
- }) => {
25
- switch (field.dataType) {
26
- case 'text':
27
- if (components && 'text' in components) {
28
- const Component = components.text!
29
- return <Component field={field} />
30
- }
31
- return <TextField field={field} />
32
- case 'textArea':
33
- if (components && 'textArea' in components) {
34
- const Component = components.textArea!
35
- return <Component field={field} />
36
- }
37
- return <TextareaField field={field} />
38
- case 'email':
39
- if (components && 'email' in components) {
40
- const Component = components.email!
41
- return <Component field={field} />
42
- }
43
- return <EmailField field={field} />
44
- case 'telephone':
45
- if (components && 'telephone' in components) {
46
- const Component = components.telephone!
47
- return <Component field={field} />
48
- }
49
- return <TelephoneField field={field} />
50
- case 'select':
51
- if (components && 'select' in components) {
52
- const Component = components.select!
53
- return <Component field={field} />
54
- }
55
- return <SelectField field={field} />
56
- case 'checkbox':
57
- if (components && 'checkbox' in components) {
58
- const Component = components.checkbox!
59
- return <Component field={field} />
60
- }
61
- return <CheckboxField field={field} />
62
- case 'hidden':
63
- if (components && 'hidden' in components) {
64
- const Component = components.hidden!
65
- return <Component field={field} />
66
- }
67
- if (field.id === 'form_page_url__c') {
68
- return <FormPageUrlField field={field} />
69
- }
70
- return <HiddenField field={field} />
71
- case 'htmltext':
72
- if (components && 'htmltext' in components) {
73
- const Component = components.htmltext!
74
- return <Component field={field} />
75
- }
76
- return <HtmltextField field={field} />
77
- case 'radioButtons':
78
- if (components && 'radioButtons' in components) {
79
- const Component = components.radioButtons!
80
- return <Component field={field} />
81
- }
82
- return <RadioButtonsField field={field} />
83
- default:
84
- console.error(`Unknown form field type: ${(field as any).Datatype}`)
85
- }
86
-
87
- return null
88
- }
89
-
90
- export default Field
@@ -1,26 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import type { ReactNode } from 'react'
7
-
8
- const FieldWrapper = ({
9
- children,
10
- fieldId,
11
- }: {
12
- children: ReactNode
13
- fieldId: string
14
- }) => {
15
- return (
16
- <div
17
- style={{ marginBottom: '1rem' }}
18
- className="marketo-form-field-wrapper"
19
- data-field-id={fieldId}
20
- >
21
- {children}
22
- </div>
23
- )
24
- }
25
-
26
- export default FieldWrapper
@@ -1,32 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useFormContext } from 'react-hook-form'
7
- // import CheckboxInput from '@hashicorp/react-form-fields/checkbox'
8
- import Checkbox from '@hashicorp/react-design-system-components/src/components/form/checkbox'
9
- import FieldWrapper from '../../field-wrapper'
10
- import { formattedLabel, useErrorMessage } from '../../../utils'
11
- import type { MarketoFormCheckboxField } from '../../../types'
12
-
13
- const CheckboxField = ({ field }: { field: MarketoFormCheckboxField }) => {
14
- const { register, watch } = useFormContext()
15
- const error = useErrorMessage(field.id)
16
- const checked = watch(field.id, false)
17
-
18
- return (
19
- <FieldWrapper fieldId={field.id}>
20
- <Checkbox
21
- label={formattedLabel(field)}
22
- field={{
23
- ...register(field.id),
24
- checked,
25
- }}
26
- error={error}
27
- />
28
- </FieldWrapper>
29
- )
30
- }
31
-
32
- export default CheckboxField
@@ -1,35 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useFormContext } from 'react-hook-form'
7
- // import TextInput from '@hashicorp/react-form-fields/text'
8
- import TextInput from '@hashicorp/react-design-system-components/src/components/form/text-input'
9
- import FieldWrapper from '../../field-wrapper'
10
- import { formattedLabel, useErrorMessage } from '../../../utils'
11
- import type { MarketoFormEmailField } from '../../../types'
12
-
13
- const EmailField = ({ field }: { field: MarketoFormEmailField }) => {
14
- const { register } = useFormContext()
15
- const error = useErrorMessage(field.id)
16
-
17
- return (
18
- <FieldWrapper fieldId={field.id}>
19
- <TextInput
20
- label={formattedLabel(field)}
21
- type="email"
22
- field={{
23
- ...register(field.id),
24
- type: 'email',
25
- placeholder: field.hintText,
26
- }}
27
- size="large"
28
- error={error}
29
- isRequired={field.required}
30
- />
31
- </FieldWrapper>
32
- )
33
- }
34
-
35
- export default EmailField
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useEffect } from 'react'
7
- import { useFormContext } from 'react-hook-form'
8
- import type { MarketoFormHiddenField } from '../../../types'
9
-
10
- const FormPageUrlField = ({ field }: { field: MarketoFormHiddenField }) => {
11
- const { register, setValue } = useFormContext()
12
-
13
- useEffect(() => {
14
- const { protocol, host, pathname } = window.location
15
- setValue(field.id, `${protocol}//${host}${pathname}`)
16
- }, [])
17
-
18
- return <input type="hidden" {...register(field.id)} />
19
- }
20
-
21
- export default FormPageUrlField
@@ -1,37 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useEffect } from 'react'
7
- import { useFormContext } from 'react-hook-form'
8
- import type { MarketoFormHiddenField } from '../../../types'
9
- import cookies from 'js-cookie'
10
-
11
- const HiddenField = ({ field }: { field: MarketoFormHiddenField }) => {
12
- const { register, setValue } = useFormContext()
13
-
14
- useEffect(() => {
15
- if (field.autoFill && field.autoFill.valueFrom === 'query') {
16
- const searchParams = new URLSearchParams(window.location.search)
17
- if (searchParams.has(field.autoFill.parameterName)) {
18
- setValue(field.id, searchParams.get(field.autoFill.parameterName))
19
- }
20
- } else if (
21
- field.autoFill &&
22
- field.autoFill.valueFrom === 'default' &&
23
- field.autoFill.value
24
- ) {
25
- setValue(field.id, field.autoFill.value)
26
- } else if (field.autoFill && field.autoFill.valueFrom === 'cookie') {
27
- const fieldCookieValue = cookies.get(field.autoFill.parameterName)
28
- if (fieldCookieValue) {
29
- setValue(field.id, fieldCookieValue)
30
- }
31
- }
32
- }, [field, setValue])
33
-
34
- return <input type="hidden" {...register(field.id)} />
35
- }
36
-
37
- export default HiddenField
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import FieldWrapper from '../../field-wrapper'
7
- import type { MarketoFormHtmltextField } from '../../../types'
8
- import styles from './style.module.css'
9
-
10
- const Index = ({ field }: { field: MarketoFormHtmltextField }) => {
11
- return (
12
- <FieldWrapper fieldId={field.id}>
13
- <span
14
- className={styles.htmltext}
15
- dangerouslySetInnerHTML={{ __html: field.text }}
16
- />
17
- </FieldWrapper>
18
- )
19
- }
20
-
21
- export default Index
@@ -1,6 +0,0 @@
1
- .htmltext {
2
- composes: g-type-body-small from global;
3
- color: var(--wpl-neutral-500);
4
- margin-top: var(--wpl-spacing-02);
5
- margin-bottom: var(--wpl-spacing-05);
6
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import TextField from '../text-field'
7
- import type { MarketoFormField, MarketoFormTextField } from '../../../types'
8
- import styles from './style.module.css'
9
-
10
- const NameFields = ({ fields }: { fields: MarketoFormField[] }) => {
11
- return (
12
- <div className={styles.name}>
13
- <TextField field={fields[0] as MarketoFormTextField} />
14
- <TextField field={fields[1] as MarketoFormTextField} />
15
- </div>
16
- )
17
- }
18
-
19
- export default NameFields
@@ -1,13 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- .name {
7
- display: grid;
8
- grid-gap: 8px;
9
- @media (--medium-up) {
10
- grid-gap: 32px;
11
- grid-template-columns: 1fr 1fr;
12
- }
13
- }
@@ -1,48 +0,0 @@
1
- import { useFormContext } from 'react-hook-form'
2
- import RadioCard, {
3
- RadioCardGroup,
4
- } from '@hashicorp/react-design-system-components/src/components/form/radio-card'
5
- import FieldWrapper from '../../field-wrapper'
6
- import type { MarketoFormRadioButtonsField } from '../../../types'
7
-
8
- const RadioCardField = ({ field }: { field: MarketoFormRadioButtonsField }) => {
9
- const {
10
- register,
11
- watch,
12
- formState: { errors },
13
- } = useFormContext()
14
- const error = errors[field.id]?.message as string
15
- const currentSelection = watch(field.id)
16
-
17
- return (
18
- <FieldWrapper fieldId={field.id}>
19
- <RadioCardGroup
20
- error={error}
21
- layout="vertical"
22
- isRequired={field.required}
23
- legend={field.label}
24
- id={field.id}
25
- aria-describedby={error && `error-${field.id}-error`}
26
- >
27
- {field.fieldMetaData.values.map(({ label, value }) => (
28
- <RadioCard
29
- controlPosition="left"
30
- key={value}
31
- label={label}
32
- field={{
33
- ...register(field.id, { required: field.validationMessage }),
34
- checked: currentSelection === value,
35
- value,
36
- name: field.id,
37
- required: field.required,
38
- 'aria-invalid': Boolean(errors[field.id]),
39
- 'aria-describedby': error && `error-${field.id}-error`,
40
- }}
41
- />
42
- ))}
43
- </RadioCardGroup>
44
- </FieldWrapper>
45
- )
46
- }
47
-
48
- export default RadioCardField
@@ -1,39 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useFormContext } from 'react-hook-form'
7
- import Select from '@hashicorp/react-design-system-components/src/components/form/select'
8
- import FieldWrapper from '../../field-wrapper'
9
- import { formattedLabel, useErrorMessage } from '../../../utils'
10
- import type { MarketoFormSelectField } from '../../../types'
11
- import s from './style.module.css'
12
-
13
- const SelectField = ({ field }: { field: MarketoFormSelectField }) => {
14
- const { register } = useFormContext()
15
- const error = useErrorMessage(field.id)
16
-
17
- return (
18
- <FieldWrapper fieldId={field.id}>
19
- <Select
20
- field={{ ...register(field.id) }}
21
- size="large"
22
- label={formattedLabel(field)}
23
- error={error}
24
- isRequired={field.required}
25
- className={s.selectConstrainWidth}
26
- >
27
- {field.fieldMetaData.values
28
- ? field.fieldMetaData.values.map(({ label, value }) => (
29
- <option key={label} value={value}>
30
- {label}
31
- </option>
32
- ))
33
- : []}
34
- </Select>
35
- </FieldWrapper>
36
- )
37
- }
38
-
39
- export default SelectField
@@ -1,5 +0,0 @@
1
- .selectConstrainWidth {
2
- & select {
3
- width: 100%;
4
- }
5
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useFormContext } from 'react-hook-form'
7
- import TextInput from '@hashicorp/react-design-system-components/src/components/form/text-input'
8
- import FieldWrapper from '../../field-wrapper'
9
- import { formattedLabel, useErrorMessage } from '../../../utils'
10
- import type { MarketoFormTelephoneField } from '../../../types'
11
-
12
- const TelephoneField = ({ field }: { field: MarketoFormTelephoneField }) => {
13
- const { register } = useFormContext()
14
- const error = useErrorMessage(field.id)
15
-
16
- return (
17
- <FieldWrapper fieldId={field.id}>
18
- <TextInput
19
- label={formattedLabel(field)}
20
- type="tel"
21
- field={{ ...register(field.id), placeholder: field.hintText }}
22
- size="large"
23
- error={error}
24
- isRequired={field.required}
25
- />
26
- </FieldWrapper>
27
- )
28
- }
29
-
30
- export default TelephoneField
@@ -1,30 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useFormContext } from 'react-hook-form'
7
- import TextInput from '@hashicorp/react-design-system-components/src/components/form/text-input'
8
- import FieldWrapper from '../../field-wrapper'
9
- import { formattedLabel, useErrorMessage } from '../../../utils'
10
- import type { MarketoFormTextField } from '../../../types'
11
-
12
- const Index = ({ field }: { field: MarketoFormTextField }) => {
13
- const { register } = useFormContext()
14
- const error = useErrorMessage(field.id)
15
-
16
- return (
17
- <FieldWrapper fieldId={field.id}>
18
- <TextInput
19
- label={formattedLabel(field)}
20
- type="text"
21
- field={{ ...register(field.id), placeholder: field.hintText }}
22
- size="large"
23
- error={error}
24
- isRequired={field.required}
25
- />
26
- </FieldWrapper>
27
- )
28
- }
29
-
30
- export default Index
@@ -1,29 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useFormContext } from 'react-hook-form'
7
- import Textarea from '@hashicorp/react-design-system-components/src/components/form/textarea'
8
- import FieldWrapper from '../../field-wrapper'
9
- import { formattedLabel, useErrorMessage } from '../../../utils'
10
- import type { MarketoFormTextAreaField } from '../../../types'
11
-
12
- const Index = ({ field }: { field: MarketoFormTextAreaField }) => {
13
- const { register } = useFormContext()
14
- const error = useErrorMessage(field.id)
15
-
16
- return (
17
- <FieldWrapper fieldId={field.id}>
18
- <Textarea
19
- label={formattedLabel(field)}
20
- field={{ ...register(field.id), placeholder: field.hintText }}
21
- size="large"
22
- error={error}
23
- isRequired={field.required}
24
- />
25
- </FieldWrapper>
26
- )
27
- }
28
-
29
- export default Index
@@ -1,24 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import clsx from 'clsx'
7
- import s from './style.module.css'
8
-
9
- interface LabelProps {
10
- label: string
11
- fieldName: string
12
- className?: string
13
- }
14
-
15
- export default function Label({ label, fieldName, className }: LabelProps) {
16
- return (
17
- <label
18
- htmlFor={fieldName}
19
- className={clsx(className && className, s.label)}
20
- >
21
- {label}
22
- </label>
23
- )
24
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- .label {
7
- color: var(--gray-3);
8
- composes: g-type-label from global;
9
- display: block;
10
- padding-bottom: 8px;
11
- text-transform: uppercase;
12
- }
@@ -1,84 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { useMemo } from 'react'
7
- import { useFormContext } from 'react-hook-form'
8
- import Field from '../field'
9
- import type {
10
- MarketoFormField,
11
- MarketoFormComponents,
12
- VisibilityRule as VisibilityRuleType,
13
- } from '../../types'
14
-
15
- function ruleApplies(rule: VisibilityRuleType, value: any): boolean {
16
- switch (rule.operator) {
17
- case 'is':
18
- return (
19
- rule.values.includes(value) ||
20
- (value === false && rule.values.includes('no')) ||
21
- (value === true && rule.values.includes('yes'))
22
- )
23
- case 'isNot':
24
- return !rule.values.includes(value)
25
- case 'isEmpty':
26
- return value === null || typeof value === 'undefined' || value === ''
27
- default:
28
- return false
29
- }
30
- }
31
-
32
- const FieldWithVisibilityRule = ({
33
- field,
34
- components,
35
- }: {
36
- field: MarketoFormField
37
- components?: MarketoFormComponents
38
- }) => {
39
- const { watch } = useFormContext()
40
-
41
- // Currently we only support the first defined rule.
42
- const value = watch(field.visibilityRules!.rules![0].subjectField)
43
-
44
- const hasMatchingRule = useMemo(() => {
45
- return field.visibilityRules!.rules!.some((rule) =>
46
- ruleApplies(rule, value)
47
- )
48
- }, [field, value])
49
-
50
- if (
51
- hasMatchingRule &&
52
- (field.visibilityRules!.ruleType === 'show' ||
53
- field.visibilityRules!.ruleType === 'hide')
54
- ) {
55
- return field.visibilityRules!.ruleType === 'show' ? (
56
- <Field field={field} components={components} />
57
- ) : null
58
- }
59
-
60
- // If the ruleType is show, that means the field is hidden by default.
61
- return field.visibilityRules!.ruleType === 'show' ? null : (
62
- <Field field={field} components={components} />
63
- )
64
- }
65
-
66
- const VisibilityRule = ({
67
- field,
68
- components,
69
- }: {
70
- field: MarketoFormField
71
- components?: MarketoFormComponents
72
- }) => {
73
- if (
74
- field.visibilityRules &&
75
- (field.visibilityRules.ruleType === 'show' ||
76
- field.visibilityRules.ruleType === 'hide')
77
- ) {
78
- return <FieldWithVisibilityRule field={field} components={components} />
79
- }
80
-
81
- return <Field field={field} components={components} />
82
- }
83
-
84
- export default VisibilityRule