@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.
- package/package.json +4 -8
- 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-list/index.tsx +15 -9
- package/src/components/nav-panel/components/link-list/style.module.css +10 -10
- package/src/components/nav-panel/components/panel/column/style.module.css +2 -2
- package/src/components/nav-panel/components/panel/root/style.module.css +5 -5
- package/src/components/nav-panel/components/promo/index.tsx +15 -9
- package/src/components/nav-panel/components/promo/style.module.css +26 -12
- package/src/components/nav-panel/components/text/index.tsx +34 -0
- package/src/components/nav-panel/product-panel/index.tsx +34 -14
- package/src/components/nav-panel/product-panel/style.module.css +77 -36
- package/src/components/nav-panel/standard-panel/index.tsx +3 -0
- 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 +40 -1
- package/src/lib/parse-url/index.ts +75 -9
- package/src/lib/send-posthog-event/index.ts +22 -0
- package/src/lib/supported-locales/index.ts +1 -0
- package/src/lib/track-nav-click-event/index.ts +4 -4
- package/src/lib/v/index.ts +4 -5
- 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 -18
- 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 -449
- package/src/components/next-steps/index.tsx +0 -137
- 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,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import * as React from 'react'
|
|
7
|
-
import classNames from 'classnames'
|
|
8
|
-
import Image from 'next/image'
|
|
9
|
-
import Link from 'next/link'
|
|
10
|
-
import HDSCard from '@hashicorp/react-design-system-components/src/components/card'
|
|
11
|
-
import { TextPlus } from '@hashicorp/react-design-system-components/src/components/text'
|
|
12
|
-
import { IconArrowRight24 } from '@hashicorp/flight-icons/svg-react/arrow-right-24'
|
|
13
|
-
import ProductBadge from '../product-badge'
|
|
14
|
-
import type {
|
|
15
|
-
CardPrimitiveProps,
|
|
16
|
-
ThumbnailProps,
|
|
17
|
-
MetaProps,
|
|
18
|
-
ContentProps,
|
|
19
|
-
HeadingProps,
|
|
20
|
-
ProductBadgesProps,
|
|
21
|
-
DescriptionProps,
|
|
22
|
-
} from './types'
|
|
23
|
-
import s from './style.module.css'
|
|
24
|
-
|
|
25
|
-
const Card = React.forwardRef<HTMLAnchorElement, CardPrimitiveProps>(
|
|
26
|
-
(props, ref) => {
|
|
27
|
-
const {
|
|
28
|
-
withArrow = true,
|
|
29
|
-
heading,
|
|
30
|
-
link,
|
|
31
|
-
clickHandler,
|
|
32
|
-
isExternal,
|
|
33
|
-
hasBorder = true,
|
|
34
|
-
children,
|
|
35
|
-
className,
|
|
36
|
-
} = props
|
|
37
|
-
|
|
38
|
-
const linkProps = isExternal
|
|
39
|
-
? { target: '_blank', rel: 'noopener noreferrer' }
|
|
40
|
-
: {}
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<HDSCard
|
|
44
|
-
level="mid"
|
|
45
|
-
levelHover="high"
|
|
46
|
-
className={classNames(s.card, className)}
|
|
47
|
-
overflow="hidden"
|
|
48
|
-
hasBorder={hasBorder}
|
|
49
|
-
>
|
|
50
|
-
<div className={s.contentContainer}>
|
|
51
|
-
{children}
|
|
52
|
-
|
|
53
|
-
<div className={s.cta} data-testid="wpl-card-cta">
|
|
54
|
-
{withArrow ? <IconArrowRight24 /> : null}
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<Link
|
|
58
|
-
href={link}
|
|
59
|
-
ref={ref}
|
|
60
|
-
className={s.link}
|
|
61
|
-
aria-label={heading}
|
|
62
|
-
onClickCapture={clickHandler}
|
|
63
|
-
{...linkProps}
|
|
64
|
-
/>
|
|
65
|
-
</div>
|
|
66
|
-
</HDSCard>
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
function Thumbnail({ src, alt }: ThumbnailProps) {
|
|
72
|
-
return (
|
|
73
|
-
<div className={s.thumbnail} data-testid="wpl-card-thumbnail">
|
|
74
|
-
<div className={s.image}>
|
|
75
|
-
<Image src={src} alt={alt} width={800} height={450} />
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function PersonThumbnail({ src, alt }: ThumbnailProps) {
|
|
82
|
-
return (
|
|
83
|
-
<div className={s.personThumbnail} data-testid="wpl-card-thumbnail">
|
|
84
|
-
<div className={s.image}>
|
|
85
|
-
<Image src={src} alt={alt} width={800} height={450} />
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function LogoThumbnail({ src, alt }: ThumbnailProps) {
|
|
92
|
-
return (
|
|
93
|
-
<div className={s.logoThumbnail} data-testid="wpl-card-logo-thumbnail">
|
|
94
|
-
<div className={s.image}>
|
|
95
|
-
<Image src={src} alt={alt} width={800} height={450} />
|
|
96
|
-
</div>
|
|
97
|
-
</div>
|
|
98
|
-
)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function Meta({ items }: MetaProps) {
|
|
102
|
-
return (
|
|
103
|
-
<ul className={s.meta} data-testid="wpl-card-meta">
|
|
104
|
-
{items.map((item, stableIdx) => {
|
|
105
|
-
return (
|
|
106
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
107
|
-
<li key={stableIdx}>
|
|
108
|
-
<TextPlus.Label>
|
|
109
|
-
{item}
|
|
110
|
-
{stableIdx < items.length - 1 ? (
|
|
111
|
-
<span className={s.metaSeparator} aria-hidden={true}>
|
|
112
|
-
|
|
|
113
|
-
</span>
|
|
114
|
-
) : null}
|
|
115
|
-
</TextPlus.Label>
|
|
116
|
-
</li>
|
|
117
|
-
)
|
|
118
|
-
})}
|
|
119
|
-
</ul>
|
|
120
|
-
)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function Content({ children }: ContentProps) {
|
|
124
|
-
return (
|
|
125
|
-
<div className={s.content} data-testid="wpl-card-content">
|
|
126
|
-
{children}
|
|
127
|
-
</div>
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function Heading({ as = 'h2', children }: HeadingProps) {
|
|
132
|
-
return (
|
|
133
|
-
<TextPlus.DisplayExpressive tag={as} size="200" className={s.heading}>
|
|
134
|
-
{children}
|
|
135
|
-
</TextPlus.DisplayExpressive>
|
|
136
|
-
)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function ProductBadges({ badges, children }: ProductBadgesProps) {
|
|
140
|
-
return (
|
|
141
|
-
<div className={s.productBadges} data-testid="wpl-card-badges">
|
|
142
|
-
{badges.map((badge, stableIdx) => {
|
|
143
|
-
return (
|
|
144
|
-
<ProductBadge
|
|
145
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
146
|
-
key={`product-badge-${stableIdx}`}
|
|
147
|
-
productName={badge}
|
|
148
|
-
hasDot={true}
|
|
149
|
-
/>
|
|
150
|
-
)
|
|
151
|
-
})}
|
|
152
|
-
{children}
|
|
153
|
-
</div>
|
|
154
|
-
)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function Description({ children }: DescriptionProps) {
|
|
158
|
-
return (
|
|
159
|
-
<TextPlus.Body tag="p" size="200" className={s.description}>
|
|
160
|
-
{children}
|
|
161
|
-
</TextPlus.Body>
|
|
162
|
-
)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
Card.displayName = 'Card'
|
|
166
|
-
export {
|
|
167
|
-
Card,
|
|
168
|
-
Thumbnail,
|
|
169
|
-
PersonThumbnail,
|
|
170
|
-
LogoThumbnail,
|
|
171
|
-
Meta,
|
|
172
|
-
Content,
|
|
173
|
-
Heading,
|
|
174
|
-
Description,
|
|
175
|
-
ProductBadges,
|
|
176
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import * as CardPrimitives from '../primitives'
|
|
7
|
-
import type { ThumbnailProps } from '../types'
|
|
8
|
-
|
|
9
|
-
export interface PromoCardProps {
|
|
10
|
-
heading: string
|
|
11
|
-
description?: string
|
|
12
|
-
eyebrow?: string
|
|
13
|
-
link: string
|
|
14
|
-
clickHandler?: () => void
|
|
15
|
-
thumbnail?: ThumbnailProps
|
|
16
|
-
withArrow?: boolean
|
|
17
|
-
isExternal?: boolean
|
|
18
|
-
className?: string
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function PromoCard({
|
|
22
|
-
heading,
|
|
23
|
-
description,
|
|
24
|
-
eyebrow,
|
|
25
|
-
link,
|
|
26
|
-
clickHandler,
|
|
27
|
-
thumbnail,
|
|
28
|
-
withArrow = false,
|
|
29
|
-
isExternal = false,
|
|
30
|
-
className,
|
|
31
|
-
}: PromoCardProps) {
|
|
32
|
-
return (
|
|
33
|
-
<CardPrimitives.Card
|
|
34
|
-
heading={heading}
|
|
35
|
-
link={link}
|
|
36
|
-
withArrow={withArrow}
|
|
37
|
-
isExternal={isExternal}
|
|
38
|
-
className={className}
|
|
39
|
-
clickHandler={clickHandler}
|
|
40
|
-
>
|
|
41
|
-
{thumbnail ? <CardPrimitives.Thumbnail {...thumbnail} /> : null}
|
|
42
|
-
<CardPrimitives.Content>
|
|
43
|
-
{eyebrow ? <CardPrimitives.Meta items={[eyebrow]} /> : null}
|
|
44
|
-
<CardPrimitives.Heading>{heading}</CardPrimitives.Heading>
|
|
45
|
-
{description ? (
|
|
46
|
-
<CardPrimitives.Description>{description}</CardPrimitives.Description>
|
|
47
|
-
) : null}
|
|
48
|
-
</CardPrimitives.Content>
|
|
49
|
-
</CardPrimitives.Card>
|
|
50
|
-
)
|
|
51
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { render, screen } from '@testing-library/react'
|
|
7
|
-
import { ResourceCard } from '.'
|
|
8
|
-
|
|
9
|
-
const defaultProps = {
|
|
10
|
-
link: 'https://hashicorp.com',
|
|
11
|
-
heading: 'Example heading',
|
|
12
|
-
date: 'August 15, 2022',
|
|
13
|
-
category: 'Category',
|
|
14
|
-
thumbnail: {
|
|
15
|
-
src: 'https://www.datocms-assets.com/19447/1648680074-screenshot-2022-03-31-at-00-40-47.png',
|
|
16
|
-
alt: 'HashiConf Europe 2022 Recap',
|
|
17
|
-
},
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
describe('<ResourceCard />', () => {
|
|
21
|
-
it('should render the provided date and category with separator', () => {
|
|
22
|
-
const expectedMeta = [defaultProps.date, defaultProps.category]
|
|
23
|
-
|
|
24
|
-
render(<ResourceCard {...defaultProps} />)
|
|
25
|
-
|
|
26
|
-
const metaElement = screen.getByTestId('wpl-card-meta')
|
|
27
|
-
|
|
28
|
-
expectedMeta.forEach((item) => {
|
|
29
|
-
expect(metaElement).toContainElement(screen.getByText(item))
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
expect(metaElement).toContainElement(screen.getByText('|'))
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
it('should not render the date if no date is provided', () => {
|
|
36
|
-
const defaultPropsWithoutDate = { ...defaultProps, date: '' }
|
|
37
|
-
|
|
38
|
-
render(<ResourceCard {...defaultPropsWithoutDate} />)
|
|
39
|
-
|
|
40
|
-
const metaElement = screen.getByTestId('wpl-card-meta')
|
|
41
|
-
|
|
42
|
-
expect(metaElement).toContainElement(
|
|
43
|
-
screen.getByText(defaultProps.category)
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
expect(metaElement).not.toContainElement(screen.queryByText('|'))
|
|
47
|
-
})
|
|
48
|
-
})
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { CardProps, ThumbnailProps } from '../types'
|
|
7
|
-
import { UnifiedCard } from '../unified-card'
|
|
8
|
-
|
|
9
|
-
export interface ResourceCardProps {
|
|
10
|
-
heading: string
|
|
11
|
-
date?: string
|
|
12
|
-
category: string
|
|
13
|
-
link: string
|
|
14
|
-
productBadges?: CardProps['productBadges']
|
|
15
|
-
thumbnail: ThumbnailProps
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function ResourceCard({
|
|
19
|
-
heading,
|
|
20
|
-
date,
|
|
21
|
-
category,
|
|
22
|
-
link,
|
|
23
|
-
productBadges,
|
|
24
|
-
thumbnail,
|
|
25
|
-
}: ResourceCardProps) {
|
|
26
|
-
const meta: string[] = date ? [date, category] : [category]
|
|
27
|
-
|
|
28
|
-
return (
|
|
29
|
-
<UnifiedCard
|
|
30
|
-
heading={heading}
|
|
31
|
-
link={link}
|
|
32
|
-
meta={meta}
|
|
33
|
-
productBadges={productBadges}
|
|
34
|
-
thumbnail={thumbnail}
|
|
35
|
-
/>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
.card {
|
|
7
|
-
display: flex;
|
|
8
|
-
flex-direction: column;
|
|
9
|
-
flex-grow: 1;
|
|
10
|
-
transition: 0.2s ease;
|
|
11
|
-
transition-property: transform, box-shadow, border-color, background-color;
|
|
12
|
-
|
|
13
|
-
&:hover {
|
|
14
|
-
transform: translateY(-2px);
|
|
15
|
-
|
|
16
|
-
& .cta svg {
|
|
17
|
-
transform: translateX(2px);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
&.dark {
|
|
22
|
-
& .thumbnail {
|
|
23
|
-
border-bottom: 0;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
&:focus-within {
|
|
28
|
-
outline-color: var(--token-color-focus-action-external);
|
|
29
|
-
outline-width: 2px;
|
|
30
|
-
outline-style: solid;
|
|
31
|
-
outline-offset: 0;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.contentContainer {
|
|
36
|
-
display: flex;
|
|
37
|
-
flex-direction: column;
|
|
38
|
-
flex-grow: 1;
|
|
39
|
-
overflow: hidden;
|
|
40
|
-
position: relative;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.link {
|
|
44
|
-
position: absolute;
|
|
45
|
-
inset: 0;
|
|
46
|
-
outline: none;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.thumbnail {
|
|
50
|
-
& .image {
|
|
51
|
-
position: relative;
|
|
52
|
-
display: grid;
|
|
53
|
-
aspect-ratio: 16 / 9;
|
|
54
|
-
overflow: hidden;
|
|
55
|
-
|
|
56
|
-
& img {
|
|
57
|
-
object-fit: cover;
|
|
58
|
-
object-position: center;
|
|
59
|
-
width: 100%;
|
|
60
|
-
height: 100%;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.personThumbnail {
|
|
66
|
-
composes: thumbnail;
|
|
67
|
-
& .image {
|
|
68
|
-
aspect-ratio: 4 / 3;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.logoThumbnail {
|
|
73
|
-
composes: thumbnail;
|
|
74
|
-
padding: var(--hdsplus-spacing-07);
|
|
75
|
-
|
|
76
|
-
& .image {
|
|
77
|
-
aspect-ratio: none;
|
|
78
|
-
|
|
79
|
-
& img {
|
|
80
|
-
aspect-ratio: 16 / 9;
|
|
81
|
-
object-fit: contain;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.meta {
|
|
87
|
-
color: var(--token-color-foreground-faint);
|
|
88
|
-
text-transform: uppercase;
|
|
89
|
-
margin: 0;
|
|
90
|
-
display: flex;
|
|
91
|
-
flex-wrap: wrap;
|
|
92
|
-
list-style: none;
|
|
93
|
-
padding: 0;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.metaSeparator {
|
|
97
|
-
--padding-x: 12px;
|
|
98
|
-
|
|
99
|
-
padding-left: var(--padding-x);
|
|
100
|
-
padding-right: var(--padding-x);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.content {
|
|
104
|
-
display: flex;
|
|
105
|
-
flex-direction: column;
|
|
106
|
-
flex-grow: 1;
|
|
107
|
-
row-gap: 16px;
|
|
108
|
-
padding: 20px 20px 0 20px;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.heading {
|
|
112
|
-
font-weight: var(--token-typography-font-weight-bold);
|
|
113
|
-
color: var(--token-color-foreground-strong);
|
|
114
|
-
margin: 0;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.description {
|
|
118
|
-
color: var(--token-color-foreground-primary);
|
|
119
|
-
margin: 0;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.productBadges {
|
|
123
|
-
margin-top: auto;
|
|
124
|
-
display: flex;
|
|
125
|
-
flex-wrap: wrap;
|
|
126
|
-
gap: 8px;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.cta {
|
|
130
|
-
display: flex;
|
|
131
|
-
align-items: center;
|
|
132
|
-
justify-content: flex-end;
|
|
133
|
-
color: var(--token-color-foreground-primary);
|
|
134
|
-
padding: 8px 20px 20px 20px;
|
|
135
|
-
margin-top: auto;
|
|
136
|
-
transition: color 0.25s ease;
|
|
137
|
-
|
|
138
|
-
& svg {
|
|
139
|
-
transition: transform 0.25s ease;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
&:empty {
|
|
143
|
-
padding-top: 0;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ReactNode } from 'react'
|
|
7
|
-
import type { ProductBadgeProps } from '../product-badge'
|
|
8
|
-
import type { NewsroomCardProps } from './newsroom-card'
|
|
9
|
-
import type { PersonCardProps } from './person-card'
|
|
10
|
-
import type { ResourceCardProps } from './resource-card'
|
|
11
|
-
import type { UnifiedCardProps } from './unified-card'
|
|
12
|
-
|
|
13
|
-
export interface BaseCardProps {
|
|
14
|
-
withArrow?: boolean
|
|
15
|
-
heading: string
|
|
16
|
-
link: string
|
|
17
|
-
clickHandler?: () => void
|
|
18
|
-
isExternal?: boolean
|
|
19
|
-
hasBorder?: boolean
|
|
20
|
-
className?: string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface CardPrimitiveProps extends BaseCardProps {
|
|
24
|
-
children: ReactNode
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface ThumbnailProps {
|
|
28
|
-
src: string
|
|
29
|
-
alt: string
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface MetaProps {
|
|
33
|
-
items: Array<string | ReactNode>
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface ContentProps {
|
|
37
|
-
children: ReactNode
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface HeadingProps {
|
|
41
|
-
as?: 'h2' | 'h3' | 'h4'
|
|
42
|
-
children: string
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface ProductBadgesProps {
|
|
46
|
-
badges: Array<ProductBadgeProps['productName']>
|
|
47
|
-
children?: ReactNode
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface DescriptionProps {
|
|
51
|
-
children: string
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface CardProps extends BaseCardProps {
|
|
55
|
-
thumbnail?: ThumbnailProps
|
|
56
|
-
meta?: MetaProps['items']
|
|
57
|
-
description?: DescriptionProps['children']
|
|
58
|
-
productBadges?: ProductBadgesProps['badges']
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export {
|
|
62
|
-
NewsroomCardProps,
|
|
63
|
-
PersonCardProps,
|
|
64
|
-
ResourceCardProps,
|
|
65
|
-
UnifiedCardProps,
|
|
66
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) HashiCorp, Inc.
|
|
3
|
-
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ReactNode } from 'react'
|
|
7
|
-
import Badge from '@hashicorp/react-design-system-components/src/components/badge'
|
|
8
|
-
import * as CardPrimitives from '../primitives'
|
|
9
|
-
import type { CardProps, ThumbnailProps } from '../types'
|
|
10
|
-
|
|
11
|
-
export interface UnifiedCardProps {
|
|
12
|
-
heading: string
|
|
13
|
-
meta?: string[]
|
|
14
|
-
link: string
|
|
15
|
-
productBadges?: CardProps['productBadges']
|
|
16
|
-
badges?: (string | [ReactNode, string])[]
|
|
17
|
-
thumbnail?: ThumbnailProps
|
|
18
|
-
withArrow?: boolean
|
|
19
|
-
isExternal?: boolean
|
|
20
|
-
className?: string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function UnifiedCard({
|
|
24
|
-
heading,
|
|
25
|
-
meta,
|
|
26
|
-
link,
|
|
27
|
-
productBadges,
|
|
28
|
-
badges,
|
|
29
|
-
thumbnail,
|
|
30
|
-
withArrow = false,
|
|
31
|
-
isExternal = false,
|
|
32
|
-
className,
|
|
33
|
-
}: UnifiedCardProps) {
|
|
34
|
-
return (
|
|
35
|
-
<CardPrimitives.Card
|
|
36
|
-
heading={heading}
|
|
37
|
-
link={link}
|
|
38
|
-
withArrow={withArrow}
|
|
39
|
-
isExternal={isExternal}
|
|
40
|
-
className={className}
|
|
41
|
-
>
|
|
42
|
-
{thumbnail ? <CardPrimitives.Thumbnail {...thumbnail} /> : null}
|
|
43
|
-
<CardPrimitives.Content>
|
|
44
|
-
{meta && meta.length > 0 ? <CardPrimitives.Meta items={meta} /> : null}
|
|
45
|
-
<CardPrimitives.Heading>{heading}</CardPrimitives.Heading>
|
|
46
|
-
{productBadges && productBadges?.length > 0 ? (
|
|
47
|
-
<CardPrimitives.ProductBadges badges={productBadges}>
|
|
48
|
-
{badges && badges.length > 0
|
|
49
|
-
? badges.map((badge, stableIdx) => {
|
|
50
|
-
if (Array.isArray(badge)) {
|
|
51
|
-
return (
|
|
52
|
-
<Badge key={stableIdx} icon={badge[0]} text={badge[1]} />
|
|
53
|
-
)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return <Badge key={stableIdx} text={badge} />
|
|
57
|
-
})
|
|
58
|
-
: null}
|
|
59
|
-
</CardPrimitives.ProductBadges>
|
|
60
|
-
) : null}
|
|
61
|
-
</CardPrimitives.Content>
|
|
62
|
-
</CardPrimitives.Card>
|
|
63
|
-
)
|
|
64
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Consent Manager
|
|
2
|
-
|
|
3
|
-
A GDPR-compliant consent manager.
|
|
4
|
-
|
|
5
|
-
### Props
|
|
6
|
-
|
|
7
|
-
- `version` (integer) - version number, bump up to override previous consent preferences
|
|
8
|
-
- `container` (string) - id of container where the consent manager should live
|
|
9
|
-
- `companyName` (string) - your company name to be inserted in various copy
|
|
10
|
-
- `privacyPolicyLink` (string) - link to your company's privacy policy
|
|
11
|
-
- `segmentWriteKey` (string) - your production segment write key
|
|
12
|
-
- `segmentServices` (array of objects) - use this to override the category or description of a service provided by Segment
|
|
13
|
-
- `name` - name of the Segment integration, must match the integration you are overriding
|
|
14
|
-
- `category` _[optional]_ - new category name
|
|
15
|
-
- `description` _[optional]_ - new description
|
|
16
|
-
- `categories` (array) - State of toggle
|
|
17
|
-
- `name` - name of category
|
|
18
|
-
- `description` - description for the category
|
|
19
|
-
- `additionalServices` (array of objects) - additional integrations outside of Segment that you wish to include in the consent manager
|
|
20
|
-
- `name` - name of service
|
|
21
|
-
- `description` - description of service
|
|
22
|
-
- `category` - category of service
|
|
23
|
-
- `body` _[optional]_ - javascript body associated with service _If present, overrides `url` below_
|
|
24
|
-
- `url` _[optional]_ - url of js file associated with service
|
|
25
|
-
- `async` (bool) _[optional]_ - add `async` property to script element
|
|
26
|
-
- `addToBody` (bool) _[optional]_ - inject script before closing `<body>` tag
|
|
27
|
-
- `dataAttrs` (arr) _[optional]_ - array of `data-` attributes to add to script tag
|
|
28
|
-
- `name` (str) - name of data attribute (`data-name`)
|
|
29
|
-
- `value` (str) - value of `data` attribute to set
|
|
30
|
-
- `showDialog` (bool) - whether or not the dialog `open` attribute is true
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
## `SegmentPreloadScript`
|
|
34
|
-
|
|
35
|
-
In `v9.0.0`, ConsentManager now exports a `SegmentPreloadScript` component. Why? ConsentManager uses a very similar Segment script to the current preloading script that we use in our `_document.tsx/js` files.
|
|
36
|
-
|
|
37
|
-
Now that we're updating both with a custom Segment AJS URL and CDN hostname, it makes sense for the two to be co-located.
|
|
38
|
-
|
|
39
|
-
Expect the new change to look like the following:
|
|
40
|
-
|
|
41
|
-
```diff
|
|
42
|
-
// pages/_document.tsx
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
import Document, { Html, Head, Main, NextScript } from 'next/document'
|
|
46
|
-
import HashiHead from '@hashicorp/react-head'
|
|
47
|
-
+ import { SegmentPreloadScript } from '@web/react-components/src/components/consent-manager/scripts/segment'
|
|
48
|
-
// other imports
|
|
49
|
-
|
|
50
|
-
export default class MyDocument extends Document {
|
|
51
|
-
static async getInitialProps(ctx) {
|
|
52
|
-
const initialProps = await Document.getInitialProps(ctx)
|
|
53
|
-
return { ...initialProps }
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
render() {
|
|
57
|
-
return (
|
|
58
|
-
<Html lang="en">
|
|
59
|
-
<Head>
|
|
60
|
-
<HashiHead />
|
|
61
|
-
</Head>
|
|
62
|
-
<body>
|
|
63
|
-
- <script
|
|
64
|
-
- dangerouslySetInnerHTML={{
|
|
65
|
-
- __html: `!function(){var analytics=window... ... ...`
|
|
66
|
-
- }}
|
|
67
|
-
- />
|
|
68
|
-
+ <SegmentPreloadScript />
|
|
69
|
-
|
|
70
|
-
// etc...
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
No additional updates are necessary!
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
.root {
|
|
2
|
-
background-color: var(--token-color-surface-strong);
|
|
3
|
-
width: 100%;
|
|
4
|
-
padding: 10px 15px;
|
|
5
|
-
position: fixed;
|
|
6
|
-
bottom: 0;
|
|
7
|
-
left: 0;
|
|
8
|
-
z-index: 10;
|
|
9
|
-
font-size: 0.9rem;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.innerContainer {
|
|
13
|
-
composes: g-grid-container from global;
|
|
14
|
-
display: flex;
|
|
15
|
-
justify-content: space-between;
|
|
16
|
-
align-items: center;
|
|
17
|
-
gap: var(--hdsplus-spacing-01);
|
|
18
|
-
flex-direction: column;
|
|
19
|
-
|
|
20
|
-
@media (min-width: 1350px) {
|
|
21
|
-
flex-direction: row;
|
|
22
|
-
}
|
|
23
|
-
}
|