@hashicorp/react-components 0.0.0-canary.33d6c97 → 0.0.0-canary.43d0406
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 +3 -3
- package/src/components/marketo-form/utils.ts +4 -0
- package/src/components/nav-panel/components/panel/column/index.tsx +15 -2
- package/src/components/nav-panel/components/panel/column/style.module.css +11 -1
- package/src/components/nav-panel/components/panel/root/index.tsx +11 -2
- package/src/components/nav-panel/components/panel/root/style.module.css +19 -5
- package/src/components/nav-panel/components/promo/index.tsx +8 -1
- package/src/components/nav-panel/components/promo/style.module.css +26 -5
- package/src/components/nav-panel/product-panel/index.tsx +34 -4
- package/src/components/nav-panel/product-panel/style.module.css +126 -23
- package/src/lib/parse-url/index.ts +4 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hashicorp/react-components",
|
|
3
|
-
"version": "0.0.0-canary.
|
|
3
|
+
"version": "0.0.0-canary.43d0406",
|
|
4
4
|
"main": "src/index.ts",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"lint": "next-hashicorp lint",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"test:watch": "vitest watch"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@hashicorp/flight-icons": "^
|
|
11
|
+
"@hashicorp/flight-icons": "^3.5.0",
|
|
12
12
|
"@hashicorp/platform-product-meta": "^0.1.1",
|
|
13
13
|
"@hashicorp/platform-util": "^0.2.0",
|
|
14
14
|
"@hashicorp/react-design-system-components": "*",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"react-hook-form": "^7.43.5"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@hashicorp/platform-cli": "^2.
|
|
27
|
+
"@hashicorp/platform-cli": "^2.8.0",
|
|
28
28
|
"@hashicorp/platform-types": "^0.4.0",
|
|
29
29
|
"@testing-library/jest-dom": "^6.4.2",
|
|
30
30
|
"@vitejs/plugin-react": "^4.2.1",
|
|
@@ -426,6 +426,10 @@ export const resolverErrors = (
|
|
|
426
426
|
* @returns MarketoFormField[] with columnSplit property set
|
|
427
427
|
*/
|
|
428
428
|
export function setFieldsColumnSplit(fieldsArr: MarketoFormField[]) {
|
|
429
|
+
if (!fieldsArr) {
|
|
430
|
+
return []
|
|
431
|
+
}
|
|
432
|
+
|
|
429
433
|
return fieldsArr.map((f) => {
|
|
430
434
|
const columnSplit = getFieldColumnSplit(fieldsArr, f)
|
|
431
435
|
return { ...f, columnSplit }
|
|
@@ -4,8 +4,21 @@ import s from './style.module.css'
|
|
|
4
4
|
export interface NavColumnProps {
|
|
5
5
|
className?: string
|
|
6
6
|
children: React.ReactNode
|
|
7
|
+
hasSidePanel?: boolean
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
export default function Column({
|
|
10
|
-
|
|
10
|
+
export default function Column({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
hasSidePanel,
|
|
14
|
+
}: NavColumnProps) {
|
|
15
|
+
return (
|
|
16
|
+
<div
|
|
17
|
+
className={classNames(s.column, className, {
|
|
18
|
+
[s.hasSide]: hasSidePanel,
|
|
19
|
+
})}
|
|
20
|
+
>
|
|
21
|
+
{children}
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
11
24
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@custom-media --dev-dot-viewport (min-width: 1230px);
|
|
2
|
+
|
|
1
3
|
.column {
|
|
2
4
|
position: relative;
|
|
3
5
|
display: flex;
|
|
@@ -9,6 +11,14 @@
|
|
|
9
11
|
border-radius: var(--hdsplus-spacing-03);
|
|
10
12
|
|
|
11
13
|
@media (--large) {
|
|
12
|
-
|
|
14
|
+
&:not(.hasSide) {
|
|
15
|
+
margin: 0;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@media (--dev-dot-viewport) {
|
|
20
|
+
&.hasSide {
|
|
21
|
+
margin: 0;
|
|
22
|
+
}
|
|
13
23
|
}
|
|
14
24
|
}
|
|
@@ -4,8 +4,17 @@ import s from './style.module.css'
|
|
|
4
4
|
interface RootProps {
|
|
5
5
|
className?: string
|
|
6
6
|
children: React.ReactNode
|
|
7
|
+
hasSidePanel?: boolean
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
export default function Root({ className, children }: RootProps) {
|
|
10
|
-
return
|
|
10
|
+
export default function Root({ className, children, hasSidePanel }: RootProps) {
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
className={classNames(s.root, className, {
|
|
14
|
+
[s.hasSide]: hasSidePanel,
|
|
15
|
+
})}
|
|
16
|
+
>
|
|
17
|
+
{children}
|
|
18
|
+
</div>
|
|
19
|
+
)
|
|
11
20
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@custom-media --dev-dot-viewport (min-width: 1230px);
|
|
2
|
+
|
|
1
3
|
.root {
|
|
2
4
|
width: 100%;
|
|
3
5
|
display: flex;
|
|
@@ -7,10 +9,22 @@
|
|
|
7
9
|
min-height: calc(100dvh - var(--hdsplus-spacing-12));
|
|
8
10
|
|
|
9
11
|
@media (--large) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
&:not(.hasSide) {
|
|
13
|
+
justify-content: flex-start;
|
|
14
|
+
height: 100%;
|
|
15
|
+
min-height: fit-content;
|
|
16
|
+
padding: var(--hdsplus-spacing-05) var(--hdsplus-spacing-04);
|
|
17
|
+
gap: var(--hdsplus-spacing-04);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@media (--dev-dot-viewport) {
|
|
22
|
+
&.hasSide {
|
|
23
|
+
justify-content: flex-start;
|
|
24
|
+
height: 100%;
|
|
25
|
+
min-height: fit-content;
|
|
26
|
+
padding: var(--hdsplus-spacing-05) var(--hdsplus-spacing-04);
|
|
27
|
+
gap: var(--hdsplus-spacing-04);
|
|
28
|
+
}
|
|
15
29
|
}
|
|
16
30
|
}
|
|
@@ -16,6 +16,7 @@ export interface PromoProps {
|
|
|
16
16
|
slug?: string
|
|
17
17
|
icon?: string
|
|
18
18
|
theme: string
|
|
19
|
+
hasSidePanel?: boolean
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export default function Promo({
|
|
@@ -26,6 +27,7 @@ export default function Promo({
|
|
|
26
27
|
slug,
|
|
27
28
|
icon,
|
|
28
29
|
theme,
|
|
30
|
+
hasSidePanel,
|
|
29
31
|
}: PromoProps) {
|
|
30
32
|
const handleClick = useCallback((title, linkUrl, linkTitle, slug) => {
|
|
31
33
|
if (window && window.analytics) {
|
|
@@ -40,7 +42,12 @@ export default function Promo({
|
|
|
40
42
|
}, [])
|
|
41
43
|
|
|
42
44
|
return (
|
|
43
|
-
<div
|
|
45
|
+
<div
|
|
46
|
+
className={classNames(s.promo, {
|
|
47
|
+
[s.hasSide]: hasSidePanel,
|
|
48
|
+
[s.noSide]: !hasSidePanel,
|
|
49
|
+
})}
|
|
50
|
+
>
|
|
44
51
|
{icon && (
|
|
45
52
|
<div
|
|
46
53
|
className={classNames(s.icon, {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@custom-media --dev-dot-viewport (min-width: 1230px);
|
|
2
|
+
|
|
1
3
|
.promo {
|
|
2
4
|
display: flex;
|
|
3
5
|
border-radius: var(--hdsplus-spacing-01);
|
|
@@ -10,9 +12,19 @@
|
|
|
10
12
|
margin: var(--hdsplus-spacing-05);
|
|
11
13
|
|
|
12
14
|
@media (--large) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
&.noSide {
|
|
16
|
+
margin: 0;
|
|
17
|
+
width: min-content;
|
|
18
|
+
min-width: 100%;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@media (--dev-dot-viewport) {
|
|
23
|
+
&.hasSide {
|
|
24
|
+
margin: 0;
|
|
25
|
+
width: min-content;
|
|
26
|
+
min-width: 100%;
|
|
27
|
+
}
|
|
16
28
|
}
|
|
17
29
|
}
|
|
18
30
|
|
|
@@ -38,8 +50,17 @@
|
|
|
38
50
|
display: none;
|
|
39
51
|
|
|
40
52
|
@media (--large) {
|
|
41
|
-
|
|
42
|
-
|
|
53
|
+
@nest .noSide & {
|
|
54
|
+
display: block;
|
|
55
|
+
margin-top: 3px;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@media (--dev-dot-viewport) {
|
|
60
|
+
@nest .hasSide & {
|
|
61
|
+
display: block;
|
|
62
|
+
margin-top: 3px;
|
|
63
|
+
}
|
|
43
64
|
}
|
|
44
65
|
}
|
|
45
66
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { CSSProperties } from 'react'
|
|
2
|
+
import classNames from 'classnames'
|
|
1
3
|
import Link from 'next/link'
|
|
2
4
|
import * as NavPanel from '../components/panel'
|
|
3
5
|
import Promo, { type PromoProps } from '../components/promo'
|
|
@@ -18,8 +20,15 @@ const PRODUCT_LOGO_MAP = new Map([
|
|
|
18
20
|
['Nomad', 'nomad-fill-color'],
|
|
19
21
|
['Waypoint', 'waypoint-fill-color'],
|
|
20
22
|
['Vagrant', 'vagrant-fill-color'],
|
|
23
|
+
['HCP Vault Secrets', 'vault-secrets'],
|
|
24
|
+
['HCP Vault Radar', 'vault-radar'],
|
|
21
25
|
])
|
|
22
26
|
|
|
27
|
+
const PRODUCT_LOGO_EXCEPTION_CLASSNAMES = {
|
|
28
|
+
'HCP Vault Secrets': 'hcpVaultSecrets',
|
|
29
|
+
'HCP Vault Radar': 'hcpVaultRadar',
|
|
30
|
+
}
|
|
31
|
+
|
|
23
32
|
export interface ProductsPanelProps {
|
|
24
33
|
productCategories: any
|
|
25
34
|
promo?: PromoProps
|
|
@@ -40,15 +49,31 @@ const ProductPanel = ({
|
|
|
40
49
|
sidePanel,
|
|
41
50
|
}: ProductsPanelProps) => {
|
|
42
51
|
return (
|
|
43
|
-
<NavPanel.Root
|
|
52
|
+
<NavPanel.Root
|
|
53
|
+
className={classNames(s.productPanel, {
|
|
54
|
+
[s.hasSide]: sidePanel,
|
|
55
|
+
[s.noSide]: !sidePanel,
|
|
56
|
+
})}
|
|
57
|
+
hasSidePanel={Boolean(sidePanel)}
|
|
58
|
+
>
|
|
44
59
|
<div className={s.mainPanel}>
|
|
45
|
-
<NavPanel.Column>
|
|
60
|
+
<NavPanel.Column hasSidePanel={Boolean(sidePanel)}>
|
|
46
61
|
<ul className={s.productCategories}>
|
|
47
62
|
{productCategories.map(({ title, products }) => {
|
|
48
63
|
return (
|
|
49
64
|
<li key={title} className={s.productCategory}>
|
|
50
65
|
<TextPlus.Body className={s.eyebrow}>{title}</TextPlus.Body>
|
|
51
|
-
<ul
|
|
66
|
+
<ul
|
|
67
|
+
className={s.productList}
|
|
68
|
+
// Dynamically calculate row count based on number of items divided by expected columns
|
|
69
|
+
style={
|
|
70
|
+
{
|
|
71
|
+
'--row-count-above-mobile': Math.ceil(
|
|
72
|
+
products.length / 2
|
|
73
|
+
),
|
|
74
|
+
} as CSSProperties
|
|
75
|
+
}
|
|
76
|
+
>
|
|
52
77
|
{products.map((product) => {
|
|
53
78
|
return (
|
|
54
79
|
<li key={product.url}>
|
|
@@ -62,7 +87,7 @@ const ProductPanel = ({
|
|
|
62
87
|
})}
|
|
63
88
|
</ul>
|
|
64
89
|
</NavPanel.Column>
|
|
65
|
-
{promo ? <Promo {...promo} /> : null}
|
|
90
|
+
{promo ? <Promo {...promo} hasSidePanel={Boolean(sidePanel)} /> : null}
|
|
66
91
|
</div>
|
|
67
92
|
|
|
68
93
|
{sidePanel ? (
|
|
@@ -125,6 +150,11 @@ function NavProduct({ url, product, description }: NavProductProps) {
|
|
|
125
150
|
<div className={s.productLogo}>
|
|
126
151
|
<FlightIcon
|
|
127
152
|
name={PRODUCT_LOGO_MAP.get(product) ?? 'hashicorp-fill-color'}
|
|
153
|
+
className={
|
|
154
|
+
PRODUCT_LOGO_EXCEPTION_CLASSNAMES[product]
|
|
155
|
+
? s[PRODUCT_LOGO_EXCEPTION_CLASSNAMES[product]]
|
|
156
|
+
: undefined
|
|
157
|
+
}
|
|
128
158
|
/>
|
|
129
159
|
</div>
|
|
130
160
|
<div className={s.productTextContent}>
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
+
@custom-media --dev-dot-viewport (min-width: 1230px);
|
|
2
|
+
|
|
1
3
|
.productPanel {
|
|
2
4
|
height: 100%;
|
|
3
5
|
|
|
4
6
|
@media (--large) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
&.noSide {
|
|
8
|
+
display: grid;
|
|
9
|
+
grid-template-rows: 1fr;
|
|
10
|
+
grid-template-columns: max-content max-content;
|
|
11
|
+
padding: 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@media (--dev-dot-viewport) {
|
|
16
|
+
&.hasSide {
|
|
17
|
+
display: grid;
|
|
18
|
+
grid-template-rows: 1fr;
|
|
19
|
+
grid-template-columns: max-content max-content;
|
|
20
|
+
padding: 0;
|
|
21
|
+
}
|
|
9
22
|
}
|
|
10
23
|
}
|
|
11
24
|
|
|
@@ -16,7 +29,15 @@
|
|
|
16
29
|
margin: var(--hdsplus-spacing-06) 0 0;
|
|
17
30
|
|
|
18
31
|
@media (--large) {
|
|
19
|
-
|
|
32
|
+
@nest .noSide & {
|
|
33
|
+
margin: 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@media (--dev-dot-viewport) {
|
|
38
|
+
@nest .hasSide & {
|
|
39
|
+
margin: 0;
|
|
40
|
+
}
|
|
20
41
|
}
|
|
21
42
|
}
|
|
22
43
|
|
|
@@ -38,7 +59,17 @@
|
|
|
38
59
|
font-weight: var(--font-weight-semi-bold);
|
|
39
60
|
|
|
40
61
|
@media (--large) {
|
|
41
|
-
|
|
62
|
+
@nest .noSide & {
|
|
63
|
+
padding-bottom: 0;
|
|
64
|
+
padding-left: var(--hdsplus-spacing-06);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@media (--dev-dot-viewport) {
|
|
69
|
+
@nest .hasSide & {
|
|
70
|
+
padding-bottom: 0;
|
|
71
|
+
padding-left: var(--hdsplus-spacing-06);
|
|
72
|
+
}
|
|
42
73
|
}
|
|
43
74
|
}
|
|
44
75
|
|
|
@@ -50,10 +81,25 @@
|
|
|
50
81
|
padding: 0;
|
|
51
82
|
|
|
52
83
|
@media (--large) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
84
|
+
@nest .noSide & {
|
|
85
|
+
padding: var(--hdsplus-spacing-06) var(--hdsplus-spacing-05)
|
|
86
|
+
var(--hdsplus-spacing-04);
|
|
87
|
+
grid-auto-flow: column;
|
|
88
|
+
grid-template-columns: repeat(2, 300px);
|
|
89
|
+
grid-template-rows: repeat(var(--row-count-above-mobile, 1), max-content);
|
|
90
|
+
gap: 0;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media (--dev-dot-viewport) {
|
|
95
|
+
@nest .hasSide & {
|
|
96
|
+
padding: var(--hdsplus-spacing-06) var(--hdsplus-spacing-05)
|
|
97
|
+
var(--hdsplus-spacing-04);
|
|
98
|
+
grid-auto-flow: column;
|
|
99
|
+
grid-template-columns: repeat(2, 300px);
|
|
100
|
+
grid-template-rows: repeat(var(--row-count-above-mobile, 1), max-content);
|
|
101
|
+
gap: 0;
|
|
102
|
+
}
|
|
57
103
|
}
|
|
58
104
|
}
|
|
59
105
|
|
|
@@ -65,12 +111,26 @@
|
|
|
65
111
|
gap: var(--hdsplus-spacing-05);
|
|
66
112
|
|
|
67
113
|
@media (--large) {
|
|
68
|
-
|
|
69
|
-
|
|
114
|
+
@nest .noSide & {
|
|
115
|
+
padding: var(--hdsplus-spacing-03) var(--hdsplus-spacing-05);
|
|
116
|
+
margin-bottom: 0;
|
|
70
117
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
118
|
+
&:hover {
|
|
119
|
+
background-color: var(--token-color-surface-interactive-hover);
|
|
120
|
+
border-radius: var(--hdsplus-spacing-01);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@media (--dev-dot-viewport) {
|
|
126
|
+
@nest .hasSide & {
|
|
127
|
+
padding: var(--hdsplus-spacing-03) var(--hdsplus-spacing-05);
|
|
128
|
+
margin-bottom: 0;
|
|
129
|
+
|
|
130
|
+
&:hover {
|
|
131
|
+
background-color: var(--token-color-surface-interactive-hover);
|
|
132
|
+
border-radius: var(--hdsplus-spacing-01);
|
|
133
|
+
}
|
|
74
134
|
}
|
|
75
135
|
}
|
|
76
136
|
}
|
|
@@ -81,10 +141,23 @@
|
|
|
81
141
|
& svg {
|
|
82
142
|
height: 42px;
|
|
83
143
|
width: 42px;
|
|
144
|
+
}
|
|
84
145
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
146
|
+
@nest .noSide & {
|
|
147
|
+
& svg {
|
|
148
|
+
@media (--large) {
|
|
149
|
+
height: var(--hdsplus-spacing-08);
|
|
150
|
+
width: var(--hdsplus-spacing-08);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@nest .hasSide & {
|
|
156
|
+
& svg {
|
|
157
|
+
@media (--dev-dot-viewport) {
|
|
158
|
+
height: var(--hdsplus-spacing-08);
|
|
159
|
+
width: var(--hdsplus-spacing-08);
|
|
160
|
+
}
|
|
88
161
|
}
|
|
89
162
|
}
|
|
90
163
|
}
|
|
@@ -117,8 +190,17 @@
|
|
|
117
190
|
flex-direction: column;
|
|
118
191
|
|
|
119
192
|
@media (--large) {
|
|
120
|
-
|
|
121
|
-
var(--hdsplus-spacing-
|
|
193
|
+
@nest .noSide & {
|
|
194
|
+
padding: var(--hdsplus-spacing-07) 0 var(--hdsplus-spacing-05)
|
|
195
|
+
var(--hdsplus-spacing-04);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
@media (--dev-dot-viewport) {
|
|
200
|
+
@nest .hasSide & {
|
|
201
|
+
padding: var(--hdsplus-spacing-07) 0 var(--hdsplus-spacing-05)
|
|
202
|
+
var(--hdsplus-spacing-04);
|
|
203
|
+
}
|
|
122
204
|
}
|
|
123
205
|
}
|
|
124
206
|
|
|
@@ -129,7 +211,7 @@
|
|
|
129
211
|
flex-direction: column;
|
|
130
212
|
gap: var(--hdsplus-spacing-05);
|
|
131
213
|
margin: 0;
|
|
132
|
-
padding: var(--hdsplus-spacing-
|
|
214
|
+
padding: var(--hdsplus-spacing-07) var(--hdsplus-spacing-04)
|
|
133
215
|
var(--hdsplus-spacing-09) var(--hdsplus-spacing-07);
|
|
134
216
|
}
|
|
135
217
|
|
|
@@ -141,7 +223,7 @@
|
|
|
141
223
|
grid-template-columns: 1fr;
|
|
142
224
|
gap: var(--hdsplus-spacing-07);
|
|
143
225
|
|
|
144
|
-
@media (--
|
|
226
|
+
@media (--dev-dot-viewport) {
|
|
145
227
|
gap: var(--hdsplus-spacing-05);
|
|
146
228
|
}
|
|
147
229
|
}
|
|
@@ -152,7 +234,7 @@
|
|
|
152
234
|
margin-bottom: var(--hdsplus-spacing-05);
|
|
153
235
|
gap: var(--hdsplus-spacing-05);
|
|
154
236
|
|
|
155
|
-
@media (--
|
|
237
|
+
@media (--dev-dot-viewport) {
|
|
156
238
|
padding: var(--hdsplus-spacing-03) var(--hdsplus-spacing-05);
|
|
157
239
|
margin-bottom: 0;
|
|
158
240
|
|
|
@@ -191,3 +273,24 @@ packages/react-components/src/components/nav-panel/components/link-list/style.mo
|
|
|
191
273
|
line-height: 18px;
|
|
192
274
|
color: var(--token-color-foreground-primary);
|
|
193
275
|
}
|
|
276
|
+
|
|
277
|
+
/* Branding exception classnames */
|
|
278
|
+
|
|
279
|
+
/* Styles for HCP Vault mimic the spec for `product-square` icons,
|
|
280
|
+
while allowing the symbol inside the icon border to change color
|
|
281
|
+
based on the site's theme
|
|
282
|
+
*/
|
|
283
|
+
.hcpVaultSecrets,
|
|
284
|
+
.hcpVaultRadar {
|
|
285
|
+
padding: var(--hdsplus-spacing-01);
|
|
286
|
+
border: 2px solid var(--token-color-vault-brand);
|
|
287
|
+
border-radius: 3px;
|
|
288
|
+
|
|
289
|
+
& use {
|
|
290
|
+
fill: var(--token-color-foreground-strong);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
& path {
|
|
294
|
+
fill: inherit;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
@@ -26,5 +26,7 @@ export function parseUrl(url: string | undefined): {
|
|
|
26
26
|
const isRelative = (url) => url.startsWith('/')
|
|
27
27
|
const isAnchor = (url) => url.startsWith('#')
|
|
28
28
|
|
|
29
|
-
export const isInternal = (url) =>
|
|
30
|
-
new URL(url).hostname
|
|
29
|
+
export const isInternal = (url) => {
|
|
30
|
+
const hostname = new URL(url).hostname
|
|
31
|
+
return hostname === 'hashicorp.com'
|
|
32
|
+
}
|