@hashicorp/react-components 0.0.0-nightly.4a6f4f8 → 0.0.0-nightly.52c0d39

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 (85) hide show
  1. package/package.json +5 -4
  2. package/src/components/actions/index.tsx +5 -5
  3. package/src/components/call-to-action/index.tsx +7 -7
  4. package/src/components/card/index.test.tsx +1 -1
  5. package/src/components/card/newsroom-card/index.test.tsx +1 -1
  6. package/src/components/card/partner-card/index.tsx +3 -3
  7. package/src/components/card/person-card/index.tsx +1 -1
  8. package/src/components/card/primitives.tsx +16 -15
  9. package/src/components/card/resource-card/index.test.tsx +1 -1
  10. package/src/components/card/resource-card/index.tsx +3 -0
  11. package/src/components/card/types.ts +2 -2
  12. package/src/components/card/unified-card/index.spec.tsx +40 -0
  13. package/src/components/card/unified-card/index.tsx +5 -11
  14. package/src/components/marketo-form/contexts/FormMetadata.ts +2 -0
  15. package/src/components/marketo-form/form/index.tsx +4 -2
  16. package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +1 -1
  17. package/src/components/marketo-form/partials/fields/email-field/index.tsx +1 -1
  18. package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +12 -1
  19. package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +1 -0
  20. package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +1 -1
  21. package/src/components/marketo-form/partials/fields/select-field/index.tsx +1 -1
  22. package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +1 -1
  23. package/src/components/marketo-form/partials/fields/text-field/index.tsx +1 -1
  24. package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +1 -1
  25. package/src/components/marketo-form/types.ts +5 -11
  26. package/src/components/nav-panel/components/link-list/index.tsx +15 -9
  27. package/src/components/nav-panel/components/panel/column/index.tsx +15 -2
  28. package/src/components/nav-panel/components/panel/column/style.module.css +12 -2
  29. package/src/components/nav-panel/components/panel/root/index.tsx +11 -2
  30. package/src/components/nav-panel/components/panel/root/style.module.css +19 -5
  31. package/src/components/nav-panel/components/promo/index.tsx +20 -10
  32. package/src/components/nav-panel/components/promo/style.module.css +28 -6
  33. package/src/components/nav-panel/product-panel/index.tsx +29 -11
  34. package/src/components/nav-panel/product-panel/style.module.css +127 -26
  35. package/src/components/nav-panel/standard-panel/index.tsx +3 -0
  36. package/src/components/nav-panel/standard-panel/style.module.css +1 -1
  37. package/src/components/next-steps/index.tsx +3 -2
  38. package/src/components/product-badge/index.tsx +1 -1
  39. package/src/components/subnav/index.tsx +13 -3
  40. package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +8 -12
  41. package/src/components/subnav/partials/CtaLinks/index.tsx +9 -8
  42. package/src/components/subnav/partials/CtaLinks/style.module.css +4 -4
  43. package/src/components/subnav/partials/DropdownTrigger/index.tsx +2 -2
  44. package/src/components/subnav/partials/DropdownTrigger/style.module.css +7 -4
  45. package/src/components/subnav/partials/MenuItemsDefault/index.tsx +30 -8
  46. package/src/components/subnav/partials/MenuItemsDefault/style.module.css +37 -24
  47. package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +20 -4
  48. package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +22 -16
  49. package/src/components/subnav/partials/TitleLink/index.tsx +6 -4
  50. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +2 -1
  51. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +2 -1
  52. package/src/components/subnav/partials/TitleLink/style.module.css +1 -1
  53. package/src/components/subnav/partials/nav-item-text/style.module.css +2 -4
  54. package/src/components/subnav/style.module.css +4 -6
  55. package/src/lib/get-localized-link-props/index.test.ts +30 -0
  56. package/src/lib/get-localized-link-props/index.ts +46 -0
  57. package/src/lib/parse-url/index.test.ts +40 -1
  58. package/src/lib/parse-url/index.ts +85 -11
  59. package/src/lib/supported-locales/index.ts +1 -0
  60. package/src/lib/v/index.ts +4 -5
  61. package/src/components/consent-manager/README.md +0 -73
  62. package/src/components/consent-manager/components/banner/banner.module.css +0 -23
  63. package/src/components/consent-manager/components/banner/banner.test.tsx +0 -31
  64. package/src/components/consent-manager/components/banner/banner.tsx +0 -73
  65. package/src/components/consent-manager/components/dialog/dialog.module.css +0 -145
  66. package/src/components/consent-manager/components/dialog/dialog.test.tsx +0 -194
  67. package/src/components/consent-manager/components/dialog/dialog.tsx +0 -339
  68. package/src/components/consent-manager/img/icn_close.tsx +0 -19
  69. package/src/components/consent-manager/index.test.tsx +0 -334
  70. package/src/components/consent-manager/index.tsx +0 -186
  71. package/src/components/consent-manager/loader/README.md +0 -29
  72. package/src/components/consent-manager/loader/categories.ts +0 -22
  73. package/src/components/consent-manager/loader/index.tsx +0 -94
  74. package/src/components/consent-manager/loader/presets/enterprise.ts +0 -12
  75. package/src/components/consent-manager/loader/presets/oss.ts +0 -10
  76. package/src/components/consent-manager/loader/services.ts +0 -45
  77. package/src/components/consent-manager/scripts/custom.tsx +0 -59
  78. package/src/components/consent-manager/scripts/segment.tsx +0 -87
  79. package/src/components/consent-manager/style.module.css +0 -9
  80. package/src/components/consent-manager/types.ts +0 -55
  81. package/src/components/consent-manager/util/cookies.test.ts +0 -75
  82. package/src/components/consent-manager/util/cookies.ts +0 -70
  83. package/src/components/consent-manager/util/integrations.test.ts +0 -115
  84. package/src/components/consent-manager/util/integrations.ts +0 -110
  85. package/src/components/subnav/theme.module.css +0 -50
@@ -1,3 +1,5 @@
1
+ @custom-media --dev-dot-viewport (min-width: 924px);
2
+
1
3
  .column {
2
4
  position: relative;
3
5
  display: flex;
@@ -5,10 +7,18 @@
5
7
  justify-content: flex-start;
6
8
  min-width: 190px;
7
9
  padding: 0;
8
- margin: 0 var(--hdsplus-spacing-05);
10
+ margin: 0 var(--hdsplus-spacing-07);
9
11
  border-radius: var(--hdsplus-spacing-03);
10
12
 
11
13
  @media (--large) {
12
- margin: 0;
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 <div className={classNames(s.root, className)}>{children}</div>
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: 924px);
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
- justify-content: flex-start;
11
- height: 100%;
12
- min-height: fit-content;
13
- padding: var(--hdsplus-spacing-05) var(--hdsplus-spacing-04);
14
- gap: var(--hdsplus-spacing-04);
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
  }
@@ -1,14 +1,15 @@
1
1
  import { useCallback } from 'react'
2
2
  import classNames from 'classnames'
3
- import { v } from '../../../../lib/v'
3
+ import { vercelSplit } from '../../../../lib/v'
4
4
  import Link from 'next/link'
5
- import { parseUrl } from '../../../../lib/parse-url'
5
+ import { getLocalizedLinkProps } from '../../../../lib/get-localized-link-props'
6
6
  import { trackNavClickEvent } from '../../../../lib/track-nav-click-event'
7
- import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
7
+ import FlightIcon from '@hashicorp/react-hds/src/components/flight-icon'
8
8
  import * as NavigationMenu from '@radix-ui/react-navigation-menu'
9
9
  import s from './style.module.css'
10
10
 
11
11
  export interface PromoProps {
12
+ locale?: string
12
13
  title: string
13
14
  description: string
14
15
  linkUrl: string
@@ -16,9 +17,11 @@ export interface PromoProps {
16
17
  slug?: string
17
18
  icon?: string
18
19
  theme: string
20
+ hasSidePanel?: boolean
19
21
  }
20
22
 
21
23
  export default function Promo({
24
+ locale,
22
25
  title,
23
26
  description,
24
27
  linkUrl,
@@ -26,6 +29,7 @@ export default function Promo({
26
29
  slug,
27
30
  icon,
28
31
  theme,
32
+ hasSidePanel,
29
33
  }: PromoProps) {
30
34
  const handleClick = useCallback((title, linkUrl, linkTitle, slug) => {
31
35
  if (window && window.analytics) {
@@ -40,23 +44,28 @@ export default function Promo({
40
44
  }, [])
41
45
 
42
46
  return (
43
- <div className={s.promo}>
47
+ <div
48
+ className={classNames(s.promo, {
49
+ [s.hasSide]: hasSidePanel,
50
+ [s.noSide]: !hasSidePanel,
51
+ })}
52
+ >
44
53
  {icon && (
45
54
  <div
46
55
  className={classNames(s.icon, {
47
- [s.hashidays]: v(theme) === 'hashidays',
48
- [s.hashiconf]: v(theme) === 'hashiconf',
56
+ [s.hashidays]: vercelSplit(theme) === 'hashidays',
57
+ [s.hashiconf]: vercelSplit(theme) === 'hashiconf',
49
58
  })}
50
59
  >
51
- <FlightIcon name={v(icon)} />
60
+ <FlightIcon name={vercelSplit(icon)} />
52
61
  </div>
53
62
  )}
54
63
  <div className={s.rightContent}>
55
64
  <div>
56
65
  <div
57
66
  className={classNames(s.title, {
58
- [s.hashidays]: v(theme) === 'hashidays',
59
- [s.hashiconf]: v(theme) === 'hashiconf',
67
+ [s.hashidays]: vercelSplit(theme) === 'hashidays',
68
+ [s.hashiconf]: vercelSplit(theme) === 'hashiconf',
60
69
  })}
61
70
  >
62
71
  {title}
@@ -65,7 +74,8 @@ export default function Promo({
65
74
  </div>
66
75
  <NavigationMenu.Link asChild>
67
76
  <Link
68
- href={parseUrl(linkUrl).href}
77
+ locale={locale ? locale : undefined}
78
+ {...getLocalizedLinkProps(linkUrl, locale)}
69
79
  className={s.link}
70
80
  onClickCapture={() => handleClick(title, linkUrl, linkTitle, slug)}
71
81
  >
@@ -1,3 +1,5 @@
1
+ @custom-media --dev-dot-viewport (min-width: 924px);
2
+
1
3
  .promo {
2
4
  display: flex;
3
5
  border-radius: var(--hdsplus-spacing-01);
@@ -7,12 +9,23 @@
7
9
  var(--hdsplus-spacing-06) var(--hdsplus-spacing-08);
8
10
  flex-direction: row;
9
11
  gap: var(--hdsplus-spacing-04);
10
- margin: var(--hdsplus-spacing-05);
12
+ margin: var(--hdsplus-spacing-07);
13
+ margin-bottom: var(--hdsplus-spacing-09);
11
14
 
12
15
  @media (--large) {
13
- margin: 0;
14
- width: min-content;
15
- min-width: 100%;
16
+ &.noSide {
17
+ margin: 0;
18
+ width: min-content;
19
+ min-width: 100%;
20
+ }
21
+ }
22
+
23
+ @media (--dev-dot-viewport) {
24
+ &.hasSide {
25
+ margin: 0;
26
+ width: min-content;
27
+ min-width: 100%;
28
+ }
16
29
  }
17
30
  }
18
31
 
@@ -38,8 +51,17 @@
38
51
  display: none;
39
52
 
40
53
  @media (--large) {
41
- display: block;
42
- margin-top: 3px;
54
+ @nest .noSide & {
55
+ display: block;
56
+ margin-top: 3px;
57
+ }
58
+ }
59
+
60
+ @media (--dev-dot-viewport) {
61
+ @nest .hasSide & {
62
+ display: block;
63
+ margin-top: 3px;
64
+ }
43
65
  }
44
66
  }
45
67
 
@@ -1,16 +1,17 @@
1
+ import classNames from 'classnames'
1
2
  import Link from 'next/link'
2
3
  import * as NavPanel from '../components/panel'
3
4
  import Promo, { type PromoProps } from '../components/promo'
5
+ import { getLocalizedLinkProps } from '../../../lib/get-localized-link-props'
4
6
  import { Products } from '@hashicorp/platform-product-meta'
5
- import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
6
- import { TextPlus } from '@hashicorp/react-design-system-components/src/components/text'
7
- import { parseUrl } from '../../../lib/parse-url'
7
+ import FlightIcon from '@hashicorp/react-hds/src/components/flight-icon'
8
+ import { TextPlus } from '@hashicorp/react-hds/src/components/text'
8
9
  import { trackNavClickEvent } from '../../../lib/track-nav-click-event'
9
10
  import * as NavigationMenu from '@radix-ui/react-navigation-menu'
10
11
  import s from './style.module.css'
11
12
 
12
13
  const PRODUCT_LOGO_MAP = new Map([
13
- ['Terraform', 'terraform-fill-color'],
14
+ ['Terraform', 'terraform-fill'],
14
15
  ['Packer', 'packer-fill-color'],
15
16
  ['Vault', 'vault-fill-color'],
16
17
  ['Boundary', 'boundary-fill-color'],
@@ -23,11 +24,13 @@ const PRODUCT_LOGO_MAP = new Map([
23
24
  ])
24
25
 
25
26
  const PRODUCT_LOGO_EXCEPTION_CLASSNAMES = {
27
+ Terraform: 'terraform',
26
28
  'HCP Vault Secrets': 'hcpVaultSecrets',
27
29
  'HCP Vault Radar': 'hcpVaultRadar',
28
30
  }
29
31
 
30
32
  export interface ProductsPanelProps {
33
+ locale: string
31
34
  productCategories: any
32
35
  promo?: PromoProps
33
36
  sidePanel?: {
@@ -42,14 +45,21 @@ export interface ProductsPanelProps {
42
45
  }
43
46
 
44
47
  const ProductPanel = ({
48
+ locale,
45
49
  productCategories,
46
50
  promo,
47
51
  sidePanel,
48
52
  }: ProductsPanelProps) => {
49
53
  return (
50
- <NavPanel.Root className={s.productPanel}>
54
+ <NavPanel.Root
55
+ className={classNames(s.productPanel, {
56
+ [s.hasSide]: sidePanel,
57
+ [s.noSide]: !sidePanel,
58
+ })}
59
+ hasSidePanel={Boolean(sidePanel)}
60
+ >
51
61
  <div className={s.mainPanel}>
52
- <NavPanel.Column>
62
+ <NavPanel.Column hasSidePanel={Boolean(sidePanel)}>
53
63
  <ul className={s.productCategories}>
54
64
  {productCategories.map(({ title, products }) => {
55
65
  return (
@@ -59,7 +69,7 @@ const ProductPanel = ({
59
69
  {products.map((product) => {
60
70
  return (
61
71
  <li key={product.url}>
62
- <NavProduct {...product} />
72
+ <NavProduct locale={locale} {...product} />
63
73
  </li>
64
74
  )
65
75
  })}
@@ -69,7 +79,7 @@ const ProductPanel = ({
69
79
  })}
70
80
  </ul>
71
81
  </NavPanel.Column>
72
- {promo ? <Promo {...promo} /> : null}
82
+ {promo ? <Promo {...promo} hasSidePanel={Boolean(sidePanel)} /> : null}
73
83
  </div>
74
84
 
75
85
  {sidePanel ? (
@@ -87,7 +97,12 @@ const ProductPanel = ({
87
97
  {sidePanel.navItems.map(({ icon, title, description, url }) => {
88
98
  return (
89
99
  <li key={title}>
90
- <Link href={parseUrl(url).href} className={s.sidePanelItem}>
100
+ <Link
101
+ aria-label={`${title} - ${description}`}
102
+ {...getLocalizedLinkProps(url, locale)}
103
+ locale={locale ? locale : undefined}
104
+ className={classNames(s.sidePanelItem, s.focusIndicator)}
105
+ >
91
106
  <div className={s.iconBackground}>
92
107
  <FlightIcon
93
108
  size={16}
@@ -113,16 +128,19 @@ const ProductPanel = ({
113
128
  }
114
129
 
115
130
  export interface NavProductProps {
131
+ locale?: string
116
132
  url: string
117
133
  product: Products | string
118
134
  description: string
119
135
  }
120
136
 
121
- function NavProduct({ url, product, description }: NavProductProps) {
137
+ function NavProduct({ locale, url, product, description }: NavProductProps) {
122
138
  return (
123
139
  <NavigationMenu.Link asChild>
124
140
  <Link
125
- href={parseUrl(url).href}
141
+ aria-label={`${product} - ${description}`}
142
+ {...getLocalizedLinkProps(url, locale)}
143
+ locale={locale ? locale : undefined}
126
144
  onClickCapture={() => {
127
145
  trackNavClickEvent(product, url, 'products')
128
146
  }}
@@ -1,11 +1,24 @@
1
+ @custom-media --dev-dot-viewport (min-width: 924px);
2
+
1
3
  .productPanel {
2
4
  height: 100%;
3
5
 
4
6
  @media (--large) {
5
- display: grid;
6
- grid-template-rows: 1fr;
7
- grid-template-columns: max-content max-content;
8
- padding: 0;
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
 
@@ -13,10 +26,18 @@
13
26
  list-style: none;
14
27
  padding: 0;
15
28
  display: grid;
16
- margin: var(--hdsplus-spacing-06) 0 0;
29
+ margin: var(--hdsplus-spacing-07) 0 0;
17
30
 
18
31
  @media (--large) {
19
- margin: 0;
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
- padding: 0 0 var(--hdsplus-spacing-01) var(--hdsplus-spacing-04);
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,31 @@
50
81
  padding: 0;
51
82
 
52
83
  @media (--large) {
53
- grid-auto-flow: row;
54
- grid-template-columns: repeat(2, 300px);
55
- grid-template-rows: repeat(2, max-content);
56
- gap: 0;
84
+ @nest .noSide & {
85
+ padding: var(--hdsplus-spacing-06) var(--hdsplus-spacing-05)
86
+ var(--hdsplus-spacing-04);
87
+ grid-auto-flow: row;
88
+ grid-template-columns: repeat(2, 300px);
89
+ grid-template-rows: repeat(2, 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: row;
99
+ grid-template-columns: repeat(2, 300px);
100
+ grid-template-rows: repeat(2, max-content);
101
+ gap: 0;
102
+ }
103
+ }
104
+
105
+ & li:last-child {
106
+ & .productWrapper {
107
+ margin-bottom: 0;
108
+ }
57
109
  }
58
110
  }
59
111
 
@@ -65,12 +117,26 @@
65
117
  gap: var(--hdsplus-spacing-05);
66
118
 
67
119
  @media (--large) {
68
- padding: var(--hdsplus-spacing-05);
69
- margin-bottom: 0;
120
+ @nest .noSide & {
121
+ padding: var(--hdsplus-spacing-03) var(--hdsplus-spacing-05);
122
+ margin-bottom: 0;
123
+
124
+ &:hover {
125
+ background-color: var(--token-color-surface-interactive-hover);
126
+ border-radius: var(--hdsplus-spacing-01);
127
+ }
128
+ }
129
+ }
70
130
 
71
- &:hover {
72
- background-color: var(--token-color-surface-interactive-hover);
73
- border-radius: var(--hdsplus-spacing-01);
131
+ @media (--dev-dot-viewport) {
132
+ @nest .hasSide & {
133
+ padding: var(--hdsplus-spacing-03) var(--hdsplus-spacing-05);
134
+ margin-bottom: 0;
135
+
136
+ &:hover {
137
+ background-color: var(--token-color-surface-interactive-hover);
138
+ border-radius: var(--hdsplus-spacing-01);
139
+ }
74
140
  }
75
141
  }
76
142
  }
@@ -81,10 +147,23 @@
81
147
  & svg {
82
148
  height: 42px;
83
149
  width: 42px;
150
+ }
151
+
152
+ @nest .noSide & {
153
+ & svg {
154
+ @media (--large) {
155
+ height: var(--hdsplus-spacing-08);
156
+ width: var(--hdsplus-spacing-08);
157
+ }
158
+ }
159
+ }
84
160
 
85
- @media (--large) {
86
- height: var(--hdsplus-spacing-08);
87
- width: var(--hdsplus-spacing-08);
161
+ @nest .hasSide & {
162
+ & svg {
163
+ @media (--dev-dot-viewport) {
164
+ height: var(--hdsplus-spacing-08);
165
+ width: var(--hdsplus-spacing-08);
166
+ }
88
167
  }
89
168
  }
90
169
  }
@@ -117,8 +196,17 @@
117
196
  flex-direction: column;
118
197
 
119
198
  @media (--large) {
120
- padding: var(--hdsplus-spacing-05) 0 var(--hdsplus-spacing-05)
121
- var(--hdsplus-spacing-04);
199
+ @nest .noSide & {
200
+ padding: var(--hdsplus-spacing-07) 0 var(--hdsplus-spacing-09)
201
+ var(--hdsplus-spacing-04);
202
+ }
203
+ }
204
+
205
+ @media (--dev-dot-viewport) {
206
+ @nest .hasSide & {
207
+ padding: var(--hdsplus-spacing-07) 0 var(--hdsplus-spacing-09)
208
+ var(--hdsplus-spacing-04);
209
+ }
122
210
  }
123
211
  }
124
212
 
@@ -129,7 +217,7 @@
129
217
  flex-direction: column;
130
218
  gap: var(--hdsplus-spacing-05);
131
219
  margin: 0;
132
- padding: var(--hdsplus-spacing-05) var(--hdsplus-spacing-07)
220
+ padding: var(--hdsplus-spacing-07) var(--hdsplus-spacing-04)
133
221
  var(--hdsplus-spacing-09) var(--hdsplus-spacing-07);
134
222
  }
135
223
 
@@ -141,7 +229,7 @@
141
229
  grid-template-columns: 1fr;
142
230
  gap: var(--hdsplus-spacing-07);
143
231
 
144
- @media (--large) {
232
+ @media (--dev-dot-viewport) {
145
233
  gap: var(--hdsplus-spacing-05);
146
234
  }
147
235
  }
@@ -149,12 +237,10 @@
149
237
  /* Lifted from .productWrapper */
150
238
  .sidePanelItem {
151
239
  display: flex;
152
- margin-bottom: var(--hdsplus-spacing-05);
153
240
  gap: var(--hdsplus-spacing-05);
154
241
 
155
- @media (--large) {
242
+ @media (--dev-dot-viewport) {
156
243
  padding: var(--hdsplus-spacing-03) var(--hdsplus-spacing-05);
157
- margin-bottom: 0;
158
244
 
159
245
  &:hover {
160
246
  background-color: var(--token-color-surface-interactive-hover);
@@ -194,6 +280,21 @@ packages/react-components/src/components/nav-panel/components/link-list/style.mo
194
280
 
195
281
  /* Branding exception classnames */
196
282
 
283
+ /* Allows switching to a dark-mode-specific color for Terraform */
284
+ .terraform {
285
+ & use {
286
+ fill: var(--token-color-terraform-brand);
287
+
288
+ @nest [data-theme='dark'] & {
289
+ fill: var(--token-color-terraform-foreground);
290
+ }
291
+ }
292
+
293
+ & path {
294
+ fill: inherit;
295
+ }
296
+ }
297
+
197
298
  /* Styles for HCP Vault mimic the spec for `product-square` icons,
198
299
  while allowing the symbol inside the icon border to change color
199
300
  based on the site's theme
@@ -12,12 +12,14 @@ interface StandardPanelProps {
12
12
  navData: NavItem[]
13
13
  promo?: PromoProps
14
14
  sectionName?: string
15
+ locale?: any
15
16
  }
16
17
 
17
18
  const StandardPanel = ({
18
19
  navData,
19
20
  promo,
20
21
  sectionName = '',
22
+ locale,
21
23
  }: StandardPanelProps) => {
22
24
  return (
23
25
  <NavPanel.Root>
@@ -26,6 +28,7 @@ const StandardPanel = ({
26
28
  return (
27
29
  <NavPanel.Column key={stableIdx}>
28
30
  <LinkList
31
+ locale={locale}
29
32
  links={navItems}
30
33
  linkClickHandler={(text, href) => {
31
34
  trackNavClickEvent(text, href, sectionName)
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  gap: var(--hdsplus-spacing-03);
4
4
  flex-direction: column;
5
- margin-top: var(--hdsplus-spacing-06);
5
+ margin-top: var(--hdsplus-spacing-07);
6
6
 
7
7
  @media (--large) {
8
8
  flex-direction: row;
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) HashiCorp, Inc.
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
+ 'use client'
5
6
 
6
7
  import { useState } from 'react'
7
8
  import Badge from '@hashicorp/react-badge'
@@ -10,7 +11,7 @@ import ExpandableArrow from '@hashicorp/react-expandable-arrow'
10
11
  import Intro from '../intro'
11
12
  import Link from 'next/link'
12
13
  import type { NextStepsProps } from './types'
13
- import StandaloneLink from '@hashicorp/react-design-system-components/src/components/standalone-link'
14
+ import { HDSPlusStandaloneLink } from '@hashicorp/react-mds/src/hds-plus/standalone-link'
14
15
  import { IconArrowRight16 } from '@hashicorp/flight-icons/svg-react/arrow-right-16'
15
16
  import useProductMeta from '@hashicorp/platform-product-meta'
16
17
  import s from './style.module.css'
@@ -69,7 +70,7 @@ export default function NextSteps({
69
70
  {cta ? (
70
71
  <div className={s.cta}>
71
72
  <p className={s.ctaCopy}>{cta.copy}</p>
72
- <StandaloneLink
73
+ <HDSPlusStandaloneLink
73
74
  href={cta.href}
74
75
  text={cta.ctaText}
75
76
  icon={
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import type { Products } from '@hashicorp/platform-product-meta'
7
- import Badge from '@hashicorp/react-design-system-components/src/components/badge'
7
+ import Badge from '@hashicorp/react-hds/src/components/badge'
8
8
  import { IconDot16 } from '@hashicorp/flight-icons/svg-react/dot-16'
9
9
  import s from './style.module.css'
10
10