@hashicorp/react-components 0.0.0-nightly.48bfabb → 0.0.0-nightly.546d10f

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hashicorp/react-components",
3
- "version": "0.0.0-nightly.48bfabb",
3
+ "version": "0.0.0-nightly.546d10f",
4
4
  "main": "src/index.ts",
5
5
  "scripts": {
6
6
  "lint": "next-hashicorp lint",
@@ -17,7 +17,6 @@ import CtaLinks, { type CtaLinkProps } from './partials/CtaLinks'
17
17
  import traverse, { isObject } from './helpers/traverse'
18
18
  import { areBasePathsMatching } from './helpers/areBasePathsMatching'
19
19
  import * as NavigationMenu from '@radix-ui/react-navigation-menu'
20
- import themeStyles from './theme.module.css'
21
20
  import s from './style.module.css'
22
21
 
23
22
  const productAllowList = {
@@ -175,9 +174,10 @@ function Subnav({ className, theme = 'light', ...restProps }: SubnavProps) {
175
174
  <style>{`:root{--subnav-height:${height}px}`}</style>
176
175
  <NavigationMenu.Root
177
176
  ref={wrapperRef}
178
- className={classNames(s.root, themeStyles[theme], className, {
177
+ className={classNames(s.root, className, {
179
178
  [s.isSticky]: isSticky,
180
179
  [s.hasOverflow]: hasOverflow,
180
+ 'hdsplus-dark-mode': theme === 'dark',
181
181
  })}
182
182
  aria-label={`${product} website navigation`}
183
183
  onValueChange={activatePanel}
@@ -3,15 +3,13 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- /* Note: consumes from theme.module.css, as marked */
7
-
8
6
  .root {
9
- --local-scrim-color: transparent;
10
- --local-divider-color: var(--border-color); /* from theme.module.css */
7
+ --local-scrim-opacity: 0;
8
+ --local-divider-color: var(--token-color-border-primary);
11
9
 
12
10
  position: relative;
13
- color: var(--gh-stars-icon-color); /* from theme.module.css */
14
- border: 1px solid var(--local-divider-color); /* from theme.module.css */
11
+ color: var(--token-color-foreground-primary);
12
+ border: 1px solid var(--local-divider-color);
15
13
  border-radius: 5px;
16
14
  background: none;
17
15
  transition: background 0.2s, border-color 0.2s;
@@ -27,17 +25,15 @@
27
25
  right: -1px;
28
26
  bottom: -1px;
29
27
  border-radius: 5px;
30
- transition: background 0.25s ease;
28
+ transition: opacity 0.25s ease;
29
+ opacity: var(--local-scrim-opacity);
31
30
  z-index: 0;
32
- background-color: var(--local-scrim-color);
31
+ background-color: var(--token-color-foreground-primary);
33
32
  }
34
33
 
35
34
  &:hover,
36
35
  &:active {
37
- --local-divider-color: transparent;
38
- --local-scrim-color: var(
39
- --gh-stars-scrim-color
40
- ); /* from theme.module.css */
36
+ --local-scrim-opacity: 0.12;
41
37
  }
42
38
  }
43
39
 
@@ -10,26 +10,26 @@
10
10
  list-style: none;
11
11
  padding: 0 0 0 var(--hdsplus-spacing-05);
12
12
  margin: 0;
13
- gap: 0 12px;
13
+ gap: 0 var(--hdsplus-spacing-04);
14
14
  @media (--medium-up) {
15
15
  gap: 0;
16
16
  }
17
17
 
18
18
  & > * + * {
19
19
  /* Spaces consecutive buttons horizontally on desktop */
20
- margin-left: 16px;
20
+ margin-left: var(--hdsplus-spacing-05);
21
21
  }
22
22
 
23
23
  &.isInDropdown {
24
24
  /* Allows consecutive buttons to wrap */
25
25
  flex-wrap: wrap;
26
26
  white-space: wrap;
27
- padding-left: 0;
27
+ padding-inline: var(--hdsplus-spacing-04);
28
28
 
29
29
  & > * {
30
30
  /* Spaces consecutive buttons vertically */
31
31
  margin-left: 0;
32
- margin-top: 16px;
32
+ margin-top: var(--hdsplus-spacing-05);
33
33
 
34
34
  &:last-of-type {
35
35
  margin-bottom: var(--hdsplus-spacing-04);
@@ -27,7 +27,7 @@ function DropdownTrigger(props: DropdownTriggerProps) {
27
27
  onMouseDown={(e) => e.preventDefault()}
28
28
  >
29
29
  <NavItemText isActive={isActive} text={text} />
30
- <FlightIcon name="chevron-down" color="var(--menu-item-text-color)" />
30
+ <FlightIcon name="chevron-down" />
31
31
  </NavigationMenu.Trigger>
32
32
  )
33
33
  }
@@ -3,8 +3,6 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- /* Note: consumes from theme.module.css, as marked */
7
-
8
6
  .root {
9
7
  composes: hds-typography-body-200 from global;
10
8
  composes: hds-font-weight-medium from global;
@@ -26,11 +24,16 @@
26
24
  width: 12px;
27
25
  height: 12px;
28
26
  transition: transform 0.3s;
29
- fill: var(--menu-item-text-color); /* from theme.module.css */
27
+ fill: var(--token-color-foreground-primary);
30
28
  }
31
29
 
32
30
  &:hover {
33
- background-color: var(--menu-item-hover-color);
31
+ background-color: var(--token-color-surface-interactive-hover);
34
32
  border-radius: var(--hdsplus-spacing-01);
35
33
  }
34
+
35
+ &:focus {
36
+ outline: 2px solid var(--token-color-focus-action-internal);
37
+ outline-style: auto;
38
+ }
36
39
  }
@@ -9,13 +9,19 @@ import NavItemText from '../nav-item-text'
9
9
  import DropdownTrigger from '../DropdownTrigger'
10
10
  import * as NavigationMenu from '@radix-ui/react-navigation-menu'
11
11
  import s from './style.module.css'
12
+ import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
12
13
 
13
14
  interface MenuItemsDefaultProps {
14
15
  menuItems: (
15
16
  | {
16
17
  text: string
17
18
  url: string
18
- submenu: { text: string; url: string; _isActiveUrl: string }[]
19
+ submenu: {
20
+ icon: string
21
+ text: string
22
+ url: string
23
+ _isActiveUrl: string
24
+ }[]
19
25
  _isActiveUrl: boolean
20
26
  }
21
27
  | 'divider'
@@ -86,7 +92,7 @@ function NavLink(props: NavLinkProps) {
86
92
 
87
93
  interface NavLinkWithDropdownProps {
88
94
  text: string
89
- submenu: { text: string; url: string; _isActiveUrl: string }[]
95
+ submenu: { icon: string; text: string; url: string; _isActiveUrl: string }[]
90
96
  activatePanel: (panel: string) => void
91
97
  }
92
98
 
@@ -128,12 +134,13 @@ class NavLinkWithDropdown extends React.Component<
128
134
  <NavigationMenu.Sub>
129
135
  <NavigationMenu.List className={s.dropdownList}>
130
136
  {submenu.map((submenuItem, stableIdx) => {
131
- const { text, url } = submenuItem
137
+ const { icon, text, url } = submenuItem
132
138
  return (
133
139
  // eslint-disable-next-line react/no-array-index-key
134
140
  <NavigationMenu.Item key={stableIdx}>
135
141
  <NavigationMenu.Link asChild>
136
142
  <Link className={s.submenuItem} href={url}>
143
+ {icon ? <FlightIcon name={icon} /> : null}
137
144
  {text}
138
145
  </Link>
139
146
  </NavigationMenu.Link>
@@ -3,8 +3,6 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- /* Note: consumes from theme.module.css, as marked */
7
-
8
6
  .root {
9
7
  display: flex;
10
8
  padding: 0 0 0 var(--hdsplus-spacing-08);
@@ -16,7 +14,6 @@
16
14
 
17
15
  .listItem {
18
16
  position: relative;
19
- white-space: nowrap;
20
17
  margin: 0;
21
18
  padding: 0;
22
19
  }
@@ -31,7 +28,7 @@
31
28
  white-space: nowrap;
32
29
 
33
30
  &:hover {
34
- background-color: var(--menu-item-hover-color);
31
+ background-color: var(--token-color-surface-interactive-hover);
35
32
  border-radius: var(--hdsplus-spacing-01);
36
33
  }
37
34
 
@@ -42,43 +39,58 @@
42
39
  }
43
40
 
44
41
  .submenuItem {
42
+ --submenu-item-background-color: transparent;
43
+
44
+ position: relative;
45
45
  composes: hds-typography-body-200 from global;
46
46
  composes: hds-font-weight-medium from global;
47
- display: block;
48
- color: var(--menu-item-text-color); /* from theme.module.css */
47
+ color: var(--token-color-foreground-primary);
48
+ display: flex;
49
+ gap: var(--hdsplus-spacing-04);
50
+ padding: var(--hdsplus-spacing-03);
51
+ min-width: 190px;
52
+ align-items: center;
53
+
54
+ &::before {
55
+ content: "";
56
+ position: absolute;
57
+ z-index: -1;
58
+ inset: 2px 0;
59
+ border-radius: var(--hdsplus-spacing-01);
60
+ background-color: var(--submenu-item-background-color);
61
+ }
49
62
 
50
63
  &:hover {
51
- text-decoration: underline;
64
+ --submenu-item-background-color: var(--token-color-surface-interactive-hover);
65
+ }
66
+
67
+ @media (--large) {
68
+ max-width: 416px;
69
+ }
70
+
71
+ &:focus {
72
+ outline: 2px solid var(--token-color-focus-action-internal);
73
+ outline-style: auto;
52
74
  }
53
75
  }
54
76
 
55
77
  .submenuModal {
56
- border-radius: 4px;
57
- box-shadow: var(--token-elevation-high-box-shadow); /* from theme.module.css */
58
- background: var(--dropdown-background-color); /* from theme.module.css */
78
+ border-radius: var(--hdsplus-spacing-03);
79
+ border: 1px solid var(--token-color-border-primary);
80
+ box-shadow: var(--token-elevation-high-box-shadow);
81
+ background: var(--token-color-surface-primary);
59
82
  z-index: 1;
60
- display: block;
61
83
  position: absolute;
62
84
  top: 100%;
63
- margin: 8px 0 0 0;
64
- padding: 24px;
85
+ margin: var(--hdsplus-spacing-03) 0 0 0;
86
+ padding: var(--hdsplus-spacing-04);
65
87
  left: 100%;
66
88
  transform: translateX(-100%);
67
89
  list-style: none;
68
-
69
- & li {
70
- & a:hover .text {
71
- text-decoration: underline;
72
- }
73
-
74
- & + li {
75
- margin-top: 6px;
76
- }
77
- }
78
90
  }
79
91
 
80
92
  .verticalDivider {
81
- background: var(--border-color); /* from theme.module.css */
93
+ background: var(--token-color-border-primary);
82
94
  height: 1.75rem;
83
95
  width: 1px;
84
96
  margin: 0 8px;
@@ -86,6 +98,7 @@
86
98
  }
87
99
 
88
100
  .dropdownList {
101
+ min-width: max-content;
89
102
  list-style: none;
90
103
  padding: 0;
91
104
  }
@@ -12,6 +12,7 @@ import DropdownTrigger from '../DropdownTrigger'
12
12
  import * as NavigationMenu from '@radix-ui/react-navigation-menu'
13
13
  import classNames from 'classnames'
14
14
  import s from './style.module.css'
15
+ import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
15
16
 
16
17
  interface MenuItemsOverflowProps {
17
18
  menuItems: (
@@ -19,7 +20,7 @@ interface MenuItemsOverflowProps {
19
20
  | {
20
21
  text: string
21
22
  url: string
22
- submenu: { url: string; text: string }[]
23
+ submenu: { icon: string; url: string; text: string }[]
23
24
  }
24
25
  )[]
25
26
  ctaLinks: CtaLinkProps
@@ -89,6 +90,7 @@ class MenuItemsOverflow extends React.Component<
89
90
  key={subStableIdx}
90
91
  url={subItem.url}
91
92
  text={subItem.text}
93
+ icon={subItem.icon}
92
94
  />
93
95
  ))}
94
96
  <hr className={s.divider} />
@@ -120,15 +122,17 @@ class MenuItemsOverflow extends React.Component<
120
122
  }
121
123
 
122
124
  interface SubmenuItemProps {
125
+ icon?: string
123
126
  url: string
124
127
  text: string
125
128
  }
126
129
 
127
- function SubmenuItem({ url, text }: SubmenuItemProps) {
130
+ function SubmenuItem({ icon, url, text }: SubmenuItemProps) {
128
131
  return (
129
132
  <li>
130
133
  <NavigationMenu.Link asChild>
131
134
  <Link className={s.submenuItem} href={url} title={v(text)}>
135
+ {icon ? <FlightIcon name={icon} /> : null}
132
136
  {text}
133
137
  </Link>
134
138
  </NavigationMenu.Link>
@@ -3,8 +3,6 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- /* Note: consumes from theme.module.css, as marked */
7
-
8
6
  .root {
9
7
  position: relative;
10
8
  display: flex;
@@ -12,14 +10,14 @@
12
10
  }
13
11
 
14
12
  .dropdown {
15
- background: var(--dropdown-background-color); /* from theme.module.css */
16
- border-radius: 4px;
13
+ background: var(--token-color-surface-primary);
14
+ border-radius: var(--hdsplus-spacing-03);
17
15
  box-shadow: var(--token-elevation-high-box-shadow);
18
- border: 1px solid var(--border-color);
16
+ border: 1px solid var(--token-color-border-primary);
19
17
  margin-top: 8px;
20
18
  max-height: calc(100vh - 300%);
21
19
  overflow-y: auto;
22
- padding: var(--hdsplus-spacing-04) var(--hdsplus-spacing-07);
20
+ padding: var(--hdsplus-spacing-04);
23
21
  position: absolute;
24
22
  right: 0;
25
23
  top: 100%;
@@ -52,27 +50,35 @@
52
50
 
53
51
  .submenuTitle {
54
52
  composes: g-type-label from global;
55
- margin: 12px 0 8px 0;
56
- color: var(--menu-item-heading-text-color); /* from theme.module.css */
53
+ margin: var(--hdsplus-spacing-04) var(--hdsplus-spacing-03) 8px;
54
+ color: var(--token-color-foreground-faint);
57
55
  }
58
56
 
59
57
  .divider {
60
- margin: 12px 0;
58
+ margin: var(--hdsplus-spacing-04) var(--hdsplus-spacing-03);
61
59
  border: 0;
62
60
  padding: 0;
63
61
  height: 1px;
64
- background: var(--border-color); /* from theme.module.css */
62
+ background: var(--token-color-border-primary);
65
63
  }
66
64
 
67
65
  .submenuItem {
68
- display: block;
69
- padding: 4px 0;
70
- color: var(--menu-item-text-color); /* from theme.module.css */
71
- font-weight: var(--font-weight-semi-bold);
72
- font-size: var(--token-typography-body-300-font-size);
66
+ composes: hds-typography-body-300 from global;
67
+ composes: hds-font-weight-semibold from global;
68
+ display: flex;
69
+ gap: var(--hdsplus-spacing-04);
70
+ padding: var(--hdsplus-spacing-02) var(--hdsplus-spacing-03);
71
+ color: var(--token-color-foreground-primary);
72
+ border-radius: var(--hdsplus-spacing-01);
73
+ align-items: center;
73
74
 
74
75
  &:hover {
75
- text-decoration: underline;
76
+ background-color: var(--token-color-surface-interactive-hover);
77
+ }
78
+
79
+ &:focus {
80
+ outline: 2px solid var(--token-color-focus-action-internal);
81
+ outline-style: auto;
76
82
  }
77
83
  }
78
84
 
@@ -10,7 +10,7 @@
10
10
  display: inline-flex;
11
11
  padding-block: var(--hdsplus-spacing-04);
12
12
  font-weight: var(--font-weight-bold);
13
- color: var(--title-text-color); /* from theme.module.css */
13
+ color: var(--token-color-foreground-primary); /* from theme.module.css */
14
14
  font-size: 1.25rem;
15
15
  line-height: 1.35rem;
16
16
 
@@ -3,13 +3,11 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- /* Note: consumes from theme.module.css, as marked */
7
-
8
6
  .root {
9
- color: var(--menu-item-text-color); /* from theme.module.css */
7
+ color: var(--token-color-foreground-primary);
10
8
  position: relative;
11
9
 
12
10
  &.isActive {
13
- color: var(--menu-item-text-color-active);
11
+ color: var(--token-color-foreground-strong);
14
12
  }
15
13
  }
@@ -3,19 +3,17 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- /* Note: consumes from theme.module.css, as marked */
7
-
8
6
  .root {
9
7
  position: sticky;
10
8
  top: -1px;
11
9
  z-index: 900;
12
- background: var(--background-color); /* from theme.module.css */
13
- border-top: 1px solid var(--border-color); /* from theme.module.css */
10
+ background: var(--token-color-surface-primary);
11
+ border-top: 1px solid var(--token-color-border-faint);
14
12
  border-bottom: 1px solid transparent;
15
13
  transition: border-bottom-color 0.8s;
16
14
 
17
15
  &.isSticky {
18
- border-bottom-color: var(--border-color); /* from theme.module.css */
16
+ border-bottom-color: var(--token-color-border-faint);
19
17
  }
20
18
 
21
19
  /*
@@ -27,4 +27,9 @@ describe('parseUrl', () => {
27
27
  )
28
28
  expect(url.href).toBe('/resources?type=case-study&products=terraform')
29
29
  })
30
+
31
+ it('leaves HashiCorp subdomain URLs intact', () => {
32
+ const url = parseUrl('https://developer.hashicorp.com/terraform')
33
+ expect(url.href).toBe('https://developer.hashicorp.com/terraform')
34
+ })
30
35
  })
@@ -1,50 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- /*
7
- Theme settings.
8
- Consumed in nearly all CSS files in this component,
9
- including in /partials.
10
- */
11
-
12
- .light {
13
- /* main */
14
- --background-color: var(--white);
15
- --border-color: var(--gray-5);
16
- --dropdown-background-color: var(--white);
17
-
18
- /* title or logo link */
19
- --title-text-color: var(--gray-1);
20
-
21
- /* github-stars-link */
22
- --gh-stars-icon-color: var(--black);
23
- --gh-stars-scrim-color: rgba(0, 0, 0, 0.1);
24
-
25
- /* menu items */
26
- --menu-item-text-color: #3B3D45;
27
- --menu-item-text-color-active: #0C0C0E;
28
- --menu-item-heading-text-color: var(--gray-3);
29
- --menu-item-hover-color: #F1F2F3;
30
- }
31
-
32
- .dark {
33
- /* main */
34
- --background-color: var(--black);
35
- --border-color: var(--gray-2);
36
- --dropdown-background-color: var(--gray-1);
37
-
38
- /* title or logo link */
39
- --title-text-color: var(--white);
40
-
41
- /* github-stars-link */
42
- --gh-stars-icon-color: var(--white);
43
- --gh-stars-scrim-color: rgba(255, 255, 255, 0.15);
44
-
45
- /* menu items */
46
- --menu-item-text-color: #D5D7DB;
47
- --menu-item-text-color-active: #EFEFF1;
48
- --menu-item-heading-text-color: var(--gray-4);
49
- --menu-item-hover-color: #1E222A;
50
- }