@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.
- package/.eslintrc.js +1 -2
- package/.stylelintrc.js +1 -1
- package/README.md +1 -1
- package/package.json +9 -10
- package/postcss.config.js +1 -1
- package/src/components/nav-panel/components/flight-icon/index.tsx +51 -0
- package/src/components/nav-panel/components/flight-icon/style.module.css +3 -0
- package/src/components/nav-panel/components/link/index.tsx +127 -0
- package/src/components/nav-panel/components/link/style.module.css +64 -0
- package/src/components/nav-panel/components/link-list/index.tsx +13 -64
- package/src/components/nav-panel/components/link-list/style.module.css +1 -50
- package/src/components/nav-panel/components/panel/column/index.tsx +17 -2
- package/src/components/nav-panel/components/panel/column/style.module.css +13 -3
- package/src/components/nav-panel/components/panel/root/index.tsx +13 -2
- package/src/components/nav-panel/components/panel/root/style.module.css +20 -5
- package/src/components/nav-panel/components/promo/index.tsx +46 -19
- package/src/components/nav-panel/components/promo/style.module.css +59 -23
- package/src/components/nav-panel/components/text/index.tsx +34 -0
- package/src/components/nav-panel/product-panel/index.tsx +146 -32
- package/src/components/nav-panel/product-panel/style.module.css +321 -26
- package/src/components/nav-panel/standard-panel/index.tsx +4 -1
- package/src/components/nav-panel/standard-panel/style.module.css +2 -2
- package/src/lib/get-localized-link-props/index.test.ts +30 -0
- package/src/lib/get-localized-link-props/index.ts +45 -0
- package/src/lib/parse-url/index.test.ts +69 -0
- package/src/lib/parse-url/index.ts +97 -0
- package/src/lib/send-posthog-event/index.ts +22 -0
- package/src/lib/supported-locales/index.ts +10 -0
- package/src/lib/track-nav-click-event/index.ts +22 -0
- package/src/lib/v/index.ts +10 -0
- package/src/components/actions/index.tsx +0 -107
- package/src/components/actions/style.module.css +0 -28
- package/src/components/actions/types.ts +0 -73
- package/src/components/call-to-action/index.tsx +0 -205
- package/src/components/call-to-action/styles/variant-centered.module.css +0 -93
- package/src/components/call-to-action/styles/variant-compact-grid.module.css +0 -88
- package/src/components/call-to-action/styles/variant-compact.module.css +0 -91
- package/src/components/call-to-action/styles/variant-links.module.css +0 -85
- package/src/components/card/README.md +0 -11
- package/src/components/card/card.tsx +0 -45
- package/src/components/card/index.test.tsx +0 -69
- package/src/components/card/index.tsx +0 -14
- package/src/components/card/newsroom-card/index.test.tsx +0 -39
- package/src/components/card/newsroom-card/index.tsx +0 -37
- package/src/components/card/newsroom-card/style.module.css +0 -12
- package/src/components/card/partner-card/index.test.tsx +0 -57
- package/src/components/card/partner-card/index.tsx +0 -69
- package/src/components/card/partner-card/style.module.css +0 -24
- package/src/components/card/person-card/index.test.tsx +0 -71
- package/src/components/card/person-card/index.tsx +0 -93
- package/src/components/card/person-card/style.module.css +0 -33
- package/src/components/card/primitives.tsx +0 -176
- package/src/components/card/promo-card/index.tsx +0 -51
- package/src/components/card/resource-card/index.test.tsx +0 -48
- package/src/components/card/resource-card/index.tsx +0 -37
- package/src/components/card/style.module.css +0 -145
- package/src/components/card/types.ts +0 -66
- package/src/components/card/unified-card/index.tsx +0 -64
- package/src/components/consent-manager/README.md +0 -73
- package/src/components/consent-manager/components/banner/banner.module.css +0 -23
- package/src/components/consent-manager/components/banner/banner.test.tsx +0 -31
- package/src/components/consent-manager/components/banner/banner.tsx +0 -73
- package/src/components/consent-manager/components/dialog/dialog.module.css +0 -145
- package/src/components/consent-manager/components/dialog/dialog.test.tsx +0 -194
- package/src/components/consent-manager/components/dialog/dialog.tsx +0 -339
- package/src/components/consent-manager/img/icn_close.tsx +0 -19
- package/src/components/consent-manager/index.test.tsx +0 -334
- package/src/components/consent-manager/index.tsx +0 -186
- package/src/components/consent-manager/loader/README.md +0 -29
- package/src/components/consent-manager/loader/categories.ts +0 -22
- package/src/components/consent-manager/loader/index.tsx +0 -94
- package/src/components/consent-manager/loader/presets/enterprise.ts +0 -12
- package/src/components/consent-manager/loader/presets/oss.ts +0 -10
- package/src/components/consent-manager/loader/services.ts +0 -45
- package/src/components/consent-manager/scripts/custom.tsx +0 -59
- package/src/components/consent-manager/scripts/segment.tsx +0 -87
- package/src/components/consent-manager/style.module.css +0 -9
- package/src/components/consent-manager/types.ts +0 -55
- package/src/components/consent-manager/util/cookies.test.ts +0 -75
- package/src/components/consent-manager/util/cookies.ts +0 -70
- package/src/components/consent-manager/util/integrations.test.ts +0 -115
- package/src/components/consent-manager/util/integrations.ts +0 -110
- package/src/components/intro/index.tsx +0 -82
- package/src/components/intro/style.module.css +0 -67
- package/src/components/intro/types.ts +0 -44
- package/src/components/marketo-form/CHANGELOG.md +0 -122
- package/src/components/marketo-form/README.md +0 -1
- package/src/components/marketo-form/contexts/FormMetadata.ts +0 -11
- package/src/components/marketo-form/docs.mdx +0 -197
- package/src/components/marketo-form/fixtures/index.ts +0 -185
- package/src/components/marketo-form/form/index.tsx +0 -369
- package/src/components/marketo-form/index.test.tsx +0 -320
- package/src/components/marketo-form/index.ts +0 -11
- package/src/components/marketo-form/package.original.json +0 -30
- package/src/components/marketo-form/partials/error-message/index.tsx +0 -12
- package/src/components/marketo-form/partials/error-message/style.module.css +0 -13
- package/src/components/marketo-form/partials/field/index.tsx +0 -90
- package/src/components/marketo-form/partials/field-wrapper/index.tsx +0 -26
- package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +0 -32
- package/src/components/marketo-form/partials/fields/email-field/index.tsx +0 -35
- package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +0 -21
- package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +0 -37
- package/src/components/marketo-form/partials/fields/htmltext-field/index.tsx +0 -21
- package/src/components/marketo-form/partials/fields/htmltext-field/style.module.css +0 -6
- package/src/components/marketo-form/partials/fields/name-field/index.tsx +0 -19
- package/src/components/marketo-form/partials/fields/name-field/style.module.css +0 -13
- package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +0 -48
- package/src/components/marketo-form/partials/fields/select-field/index.tsx +0 -39
- package/src/components/marketo-form/partials/fields/select-field/style.module.css +0 -5
- package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +0 -30
- package/src/components/marketo-form/partials/fields/text-field/index.tsx +0 -30
- package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +0 -29
- package/src/components/marketo-form/partials/label/index.tsx +0 -24
- package/src/components/marketo-form/partials/label/style.module.css +0 -12
- package/src/components/marketo-form/partials/visibility-rule/index.tsx +0 -84
- package/src/components/marketo-form/props.js +0 -66
- package/src/components/marketo-form/server/api-routes.ts +0 -109
- package/src/components/marketo-form/server/client.ts +0 -98
- package/src/components/marketo-form/server/index.ts +0 -8
- package/src/components/marketo-form/types.ts +0 -268
- package/src/components/marketo-form/utils.test.tsx +0 -103
- package/src/components/marketo-form/utils.ts +0 -445
- package/src/components/next-steps/index.tsx +0 -143
- package/src/components/next-steps/style.module.css +0 -270
- package/src/components/next-steps/types.ts +0 -63
- package/src/components/product-badge/index.test.tsx +0 -11
- package/src/components/product-badge/index.tsx +0 -42
- package/src/components/product-badge/style.module.css +0 -76
- package/src/components/products-used/index.tsx +0 -84
- package/src/components/products-used/style.module.css +0 -87
- package/src/components/products-used/types.ts +0 -31
- package/src/components/related-content/index.test.tsx +0 -74
- package/src/components/related-content/index.tsx +0 -56
- package/src/components/related-content/style.module.css +0 -89
- package/src/components/related-content/types.ts +0 -21
- package/src/components/subnav/helpers/areBasePathsMatching.ts +0 -13
- package/src/components/subnav/helpers/traverse/index.ts +0 -42
- package/src/components/subnav/helpers/useHeightRef.ts +0 -42
- package/src/components/subnav/helpers/useNavRef.ts +0 -30
- package/src/components/subnav/helpers/useOverflowRef.ts +0 -85
- package/src/components/subnav/helpers/useStuckRef.ts +0 -51
- package/src/components/subnav/index.tsx +0 -199
- package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.test.ts +0 -26
- package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.ts +0 -22
- package/src/components/subnav/partials/CtaLinks/github-stars-link/index.tsx +0 -87
- package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.test.ts +0 -29
- package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.ts +0 -32
- package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +0 -85
- package/src/components/subnav/partials/CtaLinks/icons/github-logo.js +0 -20
- package/src/components/subnav/partials/CtaLinks/icons/github.svg.js +0 -7
- package/src/components/subnav/partials/CtaLinks/icons/star.js +0 -20
- package/src/components/subnav/partials/CtaLinks/index.tsx +0 -130
- package/src/components/subnav/partials/CtaLinks/style.module.css +0 -45
- package/src/components/subnav/partials/DropdownTrigger/index.tsx +0 -35
- package/src/components/subnav/partials/DropdownTrigger/style.module.css +0 -36
- package/src/components/subnav/partials/MenuItemsDefault/index.tsx +0 -151
- package/src/components/subnav/partials/MenuItemsDefault/style.module.css +0 -91
- package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +0 -139
- package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +0 -82
- package/src/components/subnav/partials/TitleLink/index.tsx +0 -113
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +0 -9
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +0 -9
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-dark.ts +0 -23
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-light.ts +0 -23
- package/src/components/subnav/partials/TitleLink/style.module.css +0 -43
- package/src/components/subnav/partials/nav-item-text/index.tsx +0 -37
- package/src/components/subnav/partials/nav-item-text/style.module.css +0 -15
- package/src/components/subnav/style.module.css +0 -68
- package/src/components/subnav/subnav-consts.ts +0 -1
- 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,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,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,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,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
|