@hashicorp/react-components 0.0.0-nightly.f20702c → 0.0.0-nightly.f32b6b8

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 (166) hide show
  1. package/.eslintrc.js +1 -2
  2. package/.stylelintrc.js +1 -1
  3. package/README.md +1 -1
  4. package/package.json +4 -8
  5. package/postcss.config.js +1 -1
  6. package/src/components/nav-panel/components/flight-icon/index.tsx +51 -0
  7. package/src/components/nav-panel/components/flight-icon/style.module.css +3 -0
  8. package/src/components/nav-panel/components/link/index.tsx +127 -0
  9. package/src/components/nav-panel/components/link/style.module.css +64 -0
  10. package/src/components/nav-panel/components/link-list/index.tsx +13 -65
  11. package/src/components/nav-panel/components/link-list/style.module.css +1 -50
  12. package/src/components/nav-panel/components/panel/column/style.module.css +2 -2
  13. package/src/components/nav-panel/components/panel/root/style.module.css +5 -5
  14. package/src/components/nav-panel/components/promo/index.tsx +31 -11
  15. package/src/components/nav-panel/components/promo/style.module.css +33 -19
  16. package/src/components/nav-panel/components/text/index.tsx +34 -0
  17. package/src/components/nav-panel/product-panel/index.tsx +55 -18
  18. package/src/components/nav-panel/product-panel/style.module.css +133 -53
  19. package/src/components/nav-panel/standard-panel/index.tsx +3 -0
  20. package/src/components/nav-panel/standard-panel/style.module.css +2 -2
  21. package/src/lib/get-localized-link-props/index.test.ts +30 -0
  22. package/src/lib/get-localized-link-props/index.ts +45 -0
  23. package/src/lib/parse-url/index.test.ts +35 -1
  24. package/src/lib/parse-url/index.ts +74 -9
  25. package/src/lib/send-posthog-event/index.ts +22 -0
  26. package/src/lib/supported-locales/index.ts +10 -0
  27. package/src/lib/track-nav-click-event/index.ts +5 -5
  28. package/src/components/actions/index.tsx +0 -107
  29. package/src/components/actions/style.module.css +0 -28
  30. package/src/components/actions/types.ts +0 -73
  31. package/src/components/call-to-action/index.tsx +0 -205
  32. package/src/components/call-to-action/styles/variant-centered.module.css +0 -93
  33. package/src/components/call-to-action/styles/variant-compact-grid.module.css +0 -88
  34. package/src/components/call-to-action/styles/variant-compact.module.css +0 -91
  35. package/src/components/call-to-action/styles/variant-links.module.css +0 -85
  36. package/src/components/card/README.md +0 -11
  37. package/src/components/card/card.tsx +0 -45
  38. package/src/components/card/index.test.tsx +0 -69
  39. package/src/components/card/index.tsx +0 -14
  40. package/src/components/card/newsroom-card/index.test.tsx +0 -39
  41. package/src/components/card/newsroom-card/index.tsx +0 -37
  42. package/src/components/card/newsroom-card/style.module.css +0 -12
  43. package/src/components/card/partner-card/index.test.tsx +0 -57
  44. package/src/components/card/partner-card/index.tsx +0 -69
  45. package/src/components/card/partner-card/style.module.css +0 -24
  46. package/src/components/card/person-card/index.test.tsx +0 -71
  47. package/src/components/card/person-card/index.tsx +0 -93
  48. package/src/components/card/person-card/style.module.css +0 -33
  49. package/src/components/card/primitives.tsx +0 -176
  50. package/src/components/card/promo-card/index.tsx +0 -51
  51. package/src/components/card/resource-card/index.test.tsx +0 -48
  52. package/src/components/card/resource-card/index.tsx +0 -37
  53. package/src/components/card/style.module.css +0 -145
  54. package/src/components/card/types.ts +0 -66
  55. package/src/components/card/unified-card/index.tsx +0 -64
  56. package/src/components/consent-manager/README.md +0 -73
  57. package/src/components/consent-manager/components/banner/banner.module.css +0 -23
  58. package/src/components/consent-manager/components/banner/banner.test.tsx +0 -31
  59. package/src/components/consent-manager/components/banner/banner.tsx +0 -73
  60. package/src/components/consent-manager/components/dialog/dialog.module.css +0 -145
  61. package/src/components/consent-manager/components/dialog/dialog.test.tsx +0 -194
  62. package/src/components/consent-manager/components/dialog/dialog.tsx +0 -339
  63. package/src/components/consent-manager/img/icn_close.tsx +0 -19
  64. package/src/components/consent-manager/index.test.tsx +0 -334
  65. package/src/components/consent-manager/index.tsx +0 -186
  66. package/src/components/consent-manager/loader/README.md +0 -29
  67. package/src/components/consent-manager/loader/categories.ts +0 -22
  68. package/src/components/consent-manager/loader/index.tsx +0 -94
  69. package/src/components/consent-manager/loader/presets/enterprise.ts +0 -12
  70. package/src/components/consent-manager/loader/presets/oss.ts +0 -10
  71. package/src/components/consent-manager/loader/services.ts +0 -45
  72. package/src/components/consent-manager/scripts/custom.tsx +0 -59
  73. package/src/components/consent-manager/scripts/segment.tsx +0 -87
  74. package/src/components/consent-manager/style.module.css +0 -9
  75. package/src/components/consent-manager/types.ts +0 -55
  76. package/src/components/consent-manager/util/cookies.test.ts +0 -75
  77. package/src/components/consent-manager/util/cookies.ts +0 -70
  78. package/src/components/consent-manager/util/integrations.test.ts +0 -115
  79. package/src/components/consent-manager/util/integrations.ts +0 -110
  80. package/src/components/intro/index.tsx +0 -82
  81. package/src/components/intro/style.module.css +0 -67
  82. package/src/components/intro/types.ts +0 -44
  83. package/src/components/marketo-form/CHANGELOG.md +0 -122
  84. package/src/components/marketo-form/README.md +0 -1
  85. package/src/components/marketo-form/contexts/FormMetadata.ts +0 -11
  86. package/src/components/marketo-form/docs.mdx +0 -197
  87. package/src/components/marketo-form/fixtures/index.ts +0 -185
  88. package/src/components/marketo-form/form/index.tsx +0 -369
  89. package/src/components/marketo-form/index.test.tsx +0 -320
  90. package/src/components/marketo-form/index.ts +0 -11
  91. package/src/components/marketo-form/package.original.json +0 -30
  92. package/src/components/marketo-form/partials/error-message/index.tsx +0 -12
  93. package/src/components/marketo-form/partials/error-message/style.module.css +0 -13
  94. package/src/components/marketo-form/partials/field/index.tsx +0 -90
  95. package/src/components/marketo-form/partials/field-wrapper/index.tsx +0 -26
  96. package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +0 -32
  97. package/src/components/marketo-form/partials/fields/email-field/index.tsx +0 -35
  98. package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +0 -21
  99. package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +0 -37
  100. package/src/components/marketo-form/partials/fields/htmltext-field/index.tsx +0 -21
  101. package/src/components/marketo-form/partials/fields/htmltext-field/style.module.css +0 -18
  102. package/src/components/marketo-form/partials/fields/name-field/index.tsx +0 -19
  103. package/src/components/marketo-form/partials/fields/name-field/style.module.css +0 -13
  104. package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +0 -48
  105. package/src/components/marketo-form/partials/fields/select-field/index.tsx +0 -39
  106. package/src/components/marketo-form/partials/fields/select-field/style.module.css +0 -5
  107. package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +0 -30
  108. package/src/components/marketo-form/partials/fields/text-field/index.tsx +0 -30
  109. package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +0 -29
  110. package/src/components/marketo-form/partials/label/index.tsx +0 -24
  111. package/src/components/marketo-form/partials/label/style.module.css +0 -12
  112. package/src/components/marketo-form/partials/visibility-rule/index.tsx +0 -84
  113. package/src/components/marketo-form/props.js +0 -66
  114. package/src/components/marketo-form/server/api-routes.ts +0 -109
  115. package/src/components/marketo-form/server/client.ts +0 -98
  116. package/src/components/marketo-form/server/index.ts +0 -8
  117. package/src/components/marketo-form/types.ts +0 -268
  118. package/src/components/marketo-form/utils.test.tsx +0 -103
  119. package/src/components/marketo-form/utils.ts +0 -449
  120. package/src/components/next-steps/index.tsx +0 -137
  121. package/src/components/next-steps/style.module.css +0 -270
  122. package/src/components/next-steps/types.ts +0 -63
  123. package/src/components/product-badge/index.test.tsx +0 -11
  124. package/src/components/product-badge/index.tsx +0 -42
  125. package/src/components/product-badge/style.module.css +0 -76
  126. package/src/components/products-used/index.tsx +0 -84
  127. package/src/components/products-used/style.module.css +0 -87
  128. package/src/components/products-used/types.ts +0 -31
  129. package/src/components/related-content/index.test.tsx +0 -74
  130. package/src/components/related-content/index.tsx +0 -56
  131. package/src/components/related-content/style.module.css +0 -89
  132. package/src/components/related-content/types.ts +0 -21
  133. package/src/components/subnav/helpers/areBasePathsMatching.ts +0 -13
  134. package/src/components/subnav/helpers/traverse/index.ts +0 -42
  135. package/src/components/subnav/helpers/useHeightRef.ts +0 -42
  136. package/src/components/subnav/helpers/useNavRef.ts +0 -30
  137. package/src/components/subnav/helpers/useOverflowRef.ts +0 -85
  138. package/src/components/subnav/helpers/useStuckRef.ts +0 -51
  139. package/src/components/subnav/index.tsx +0 -199
  140. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.test.ts +0 -26
  141. package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.ts +0 -22
  142. package/src/components/subnav/partials/CtaLinks/github-stars-link/index.tsx +0 -87
  143. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.test.ts +0 -29
  144. package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.ts +0 -32
  145. package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +0 -81
  146. package/src/components/subnav/partials/CtaLinks/icons/github-logo.js +0 -20
  147. package/src/components/subnav/partials/CtaLinks/icons/github.svg.js +0 -7
  148. package/src/components/subnav/partials/CtaLinks/icons/star.js +0 -20
  149. package/src/components/subnav/partials/CtaLinks/index.tsx +0 -130
  150. package/src/components/subnav/partials/CtaLinks/style.module.css +0 -45
  151. package/src/components/subnav/partials/DropdownTrigger/index.tsx +0 -35
  152. package/src/components/subnav/partials/DropdownTrigger/style.module.css +0 -39
  153. package/src/components/subnav/partials/MenuItemsDefault/index.tsx +0 -158
  154. package/src/components/subnav/partials/MenuItemsDefault/style.module.css +0 -104
  155. package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +0 -143
  156. package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +0 -88
  157. package/src/components/subnav/partials/TitleLink/index.tsx +0 -113
  158. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +0 -10
  159. package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +0 -10
  160. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-dark.ts +0 -23
  161. package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-light.ts +0 -23
  162. package/src/components/subnav/partials/TitleLink/style.module.css +0 -43
  163. package/src/components/subnav/partials/nav-item-text/index.tsx +0 -37
  164. package/src/components/subnav/partials/nav-item-text/style.module.css +0 -13
  165. package/src/components/subnav/style.module.css +0 -66
  166. package/src/components/subnav/subnav-consts.ts +0 -1
@@ -1,158 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import React from 'react'
7
- import Link from 'next/link'
8
- import NavItemText from '../nav-item-text'
9
- import DropdownTrigger from '../DropdownTrigger'
10
- import * as NavigationMenu from '@radix-ui/react-navigation-menu'
11
- import s from './style.module.css'
12
- import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
13
-
14
- interface MenuItemsDefaultProps {
15
- menuItems: (
16
- | {
17
- text: string
18
- url: string
19
- submenu: {
20
- icon: string
21
- text: string
22
- url: string
23
- _isActiveUrl: string
24
- }[]
25
- _isActiveUrl: boolean
26
- }
27
- | 'divider'
28
- )[]
29
- activatePanel: (panel: string) => void
30
- }
31
-
32
- function MenuItemsDefault(props: MenuItemsDefaultProps) {
33
- const { menuItems, activatePanel } = props
34
- return (
35
- <NavigationMenu.List className={s.root}>
36
- {menuItems.map((menuItem, stableIdx) => {
37
- if (menuItem === 'divider') {
38
- // eslint-disable-next-line react/no-array-index-key
39
- return <VerticalDivider key={stableIdx} />
40
- }
41
- const { text, url, submenu, _isActiveUrl } = menuItem
42
- return menuItem.submenu ? (
43
- <NavLinkWithDropdown
44
- // This array is stable, so we can use index as key
45
- // eslint-disable-next-line react/no-array-index-key
46
- key={stableIdx}
47
- text={text}
48
- submenu={submenu}
49
- activatePanel={activatePanel}
50
- />
51
- ) : (
52
- <NavLink
53
- // This array is stable, so we can use index as key
54
- // eslint-disable-next-line react/no-array-index-key
55
- key={stableIdx}
56
- text={text}
57
- url={url}
58
- isActive={_isActiveUrl}
59
- />
60
- )
61
- })}
62
- </NavigationMenu.List>
63
- )
64
- }
65
-
66
- function VerticalDivider() {
67
- return (
68
- <li>
69
- <span className={s.verticalDivider} />
70
- </li>
71
- )
72
- }
73
-
74
- interface NavLinkProps {
75
- text: string
76
- url: string
77
- isActive: boolean
78
- }
79
-
80
- function NavLink(props: NavLinkProps) {
81
- const { text, url, isActive } = props
82
- return (
83
- <NavigationMenu.Item className={s.listItem}>
84
- <NavigationMenu.Link asChild>
85
- <Link className={s.navLink} href={url}>
86
- <NavItemText isActive={isActive} text={text} />
87
- </Link>
88
- </NavigationMenu.Link>
89
- </NavigationMenu.Item>
90
- )
91
- }
92
-
93
- interface NavLinkWithDropdownProps {
94
- text: string
95
- submenu: { icon: string; text: string; url: string; _isActiveUrl: string }[]
96
- activatePanel: (panel: string) => void
97
- }
98
-
99
- interface NavLinkWithDropdownState {
100
- isCollapsed: boolean
101
- }
102
-
103
- class NavLinkWithDropdown extends React.Component<
104
- NavLinkWithDropdownProps,
105
- NavLinkWithDropdownState
106
- > {
107
- render() {
108
- const { text, submenu, activatePanel } = this.props
109
- const hasActiveChild = submenu.some((s) => s._isActiveUrl)
110
-
111
- const handleFocusOutside = () => {
112
- // Since the content opens when the focus is on the dropdown trigger, handleFocusOutside gets called
113
- // because the content is open but focus is outside of it. When the focus is on the trigger we want
114
- // this content to be open so we ignore it in this case.
115
- if (
116
- !document ||
117
- !document.activeElement?.id ||
118
- !document.activeElement.id.includes('trigger')
119
- ) {
120
- activatePanel('')
121
- }
122
- }
123
- return (
124
- <NavigationMenu.Item className={s.listItem} value={text}>
125
- <DropdownTrigger
126
- text={text}
127
- isActive={hasActiveChild}
128
- activatePanel={activatePanel}
129
- />
130
- <NavigationMenu.Content
131
- className={s.submenuModal}
132
- onFocusOutside={handleFocusOutside}
133
- >
134
- <NavigationMenu.Sub>
135
- <NavigationMenu.List className={s.dropdownList}>
136
- {submenu.map((submenuItem, stableIdx) => {
137
- const { icon, text, url } = submenuItem
138
- return (
139
- // eslint-disable-next-line react/no-array-index-key
140
- <NavigationMenu.Item key={stableIdx}>
141
- <NavigationMenu.Link asChild>
142
- <Link className={s.submenuItem} href={url}>
143
- {icon ? <FlightIcon name={icon} /> : null}
144
- {text}
145
- </Link>
146
- </NavigationMenu.Link>
147
- </NavigationMenu.Item>
148
- )
149
- })}
150
- </NavigationMenu.List>
151
- </NavigationMenu.Sub>
152
- </NavigationMenu.Content>
153
- </NavigationMenu.Item>
154
- )
155
- }
156
- }
157
-
158
- export default MenuItemsDefault
@@ -1,104 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- .root {
7
- display: flex;
8
- padding: 0 0 0 var(--hdsplus-spacing-08);
9
- margin: 0;
10
- align-items: center;
11
- justify-content: flex-end;
12
- list-style: none;
13
- }
14
-
15
- .listItem {
16
- position: relative;
17
- margin: 0;
18
- padding: 0;
19
- }
20
-
21
- .navLink {
22
- composes: hds-typography-body-200 from global;
23
- composes: hds-font-weight-medium from global;
24
- position: relative;
25
- padding: var(--hdsplus-spacing-04);
26
- display: flex;
27
- align-items: center;
28
- white-space: nowrap;
29
-
30
- &:hover {
31
- background-color: var(--token-color-surface-interactive-hover);
32
- border-radius: var(--hdsplus-spacing-01);
33
- }
34
-
35
- &:focus {
36
- outline: 2px solid var(--token-color-focus-action-internal);
37
- outline-style: auto;
38
- }
39
- }
40
-
41
- .submenuItem {
42
- --submenu-item-background-color: transparent;
43
-
44
- position: relative;
45
- composes: hds-typography-body-200 from global;
46
- composes: hds-font-weight-medium from global;
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
- }
62
-
63
- &:hover {
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;
74
- }
75
- }
76
-
77
- .submenuModal {
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);
82
- z-index: 1;
83
- position: absolute;
84
- top: 100%;
85
- margin: var(--hdsplus-spacing-03) 0 0 0;
86
- padding: var(--hdsplus-spacing-04);
87
- left: 100%;
88
- transform: translateX(-100%);
89
- list-style: none;
90
- }
91
-
92
- .verticalDivider {
93
- background: var(--token-color-border-primary);
94
- height: 1.75rem;
95
- width: 1px;
96
- margin: 0 8px;
97
- display: block;
98
- }
99
-
100
- .dropdownList {
101
- min-width: max-content;
102
- list-style: none;
103
- padding: 0;
104
- }
@@ -1,143 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import React from 'react'
7
- import { vercelSplit } from '../../../../lib/v'
8
- import Link from 'next/link'
9
- import type { Products } from '@hashicorp/platform-product-meta'
10
- import CtaLinks, { type CtaLinkProps } from '../CtaLinks'
11
- import DropdownTrigger from '../DropdownTrigger'
12
- import * as NavigationMenu from '@radix-ui/react-navigation-menu'
13
- import classNames from 'classnames'
14
- import s from './style.module.css'
15
- import FlightIcon from '@hashicorp/react-design-system-components/src/components/flight-icon'
16
-
17
- interface MenuItemsOverflowProps {
18
- menuItems: (
19
- | 'divider'
20
- | {
21
- text: string
22
- url: string
23
- submenu: { icon: string; url: string; text: string }[]
24
- }
25
- )[]
26
- ctaLinks: CtaLinkProps
27
- product?: Products
28
- hideGithubStars?: boolean
29
- menuText: string
30
- constrainWidth?: boolean
31
- activatePanel: (panel: string) => void
32
- }
33
-
34
- interface MenuItemsOverflowState {
35
- isCollapsed: boolean
36
- }
37
-
38
- class MenuItemsOverflow extends React.Component<
39
- MenuItemsOverflowProps,
40
- MenuItemsOverflowState
41
- > {
42
- render() {
43
- const {
44
- menuItems,
45
- ctaLinks,
46
- product,
47
- hideGithubStars,
48
- menuText,
49
- constrainWidth,
50
- activatePanel,
51
- } = this.props
52
-
53
- const handleFocusOutside = () => {
54
- // Since the content opens when the focus is on the dropdown trigger, handleFocusOutside gets called
55
- // because the content is open but focus is outside of it. When the focus is on the trigger we want
56
- // this content to be open so we ignore it in this case.
57
- if (
58
- !document ||
59
- !document.activeElement?.id ||
60
- !document.activeElement.id.includes('trigger')
61
- ) {
62
- activatePanel('')
63
- }
64
- }
65
-
66
- return (
67
- <NavigationMenu.List className={s.list}>
68
- <NavigationMenu.Item className={s.root} value={menuText}>
69
- <DropdownTrigger text={menuText} activatePanel={activatePanel} />
70
- <NavigationMenu.Content
71
- className={classNames(s.dropdown, {
72
- [s.constrained]: constrainWidth,
73
- })}
74
- onFocusOutside={handleFocusOutside}
75
- >
76
- <ul className={s.ulElem}>
77
- {menuItems.map((menuItem, stableIdx) => {
78
- if (menuItem === 'divider') return null
79
- const { text, url, submenu } = menuItem
80
- if (submenu) {
81
- // If we have a submenu, we need to flatten it
82
- return (
83
- // eslint-disable-next-line react/no-array-index-key
84
- <div key={stableIdx}>
85
- <div className={s.submenuTitle}>{text}</div>
86
- <hr className={s.divider} />
87
- {submenu.map((subItem, subStableIdx) => (
88
- <SubmenuItem
89
- // eslint-disable-next-line react/no-array-index-key
90
- key={subStableIdx}
91
- url={subItem.url}
92
- text={subItem.text}
93
- icon={subItem.icon}
94
- />
95
- ))}
96
- <hr className={s.divider} />
97
- </div>
98
- )
99
- } else {
100
- return (
101
- <SubmenuItem
102
- // eslint-disable-next-line react/no-array-index-key
103
- key={stableIdx}
104
- url={url}
105
- text={text}
106
- />
107
- )
108
- }
109
- })}
110
- </ul>
111
- <CtaLinks
112
- links={ctaLinks}
113
- isInDropdown={true}
114
- product={product}
115
- hideGithubStars={hideGithubStars}
116
- />
117
- </NavigationMenu.Content>
118
- </NavigationMenu.Item>
119
- </NavigationMenu.List>
120
- )
121
- }
122
- }
123
-
124
- interface SubmenuItemProps {
125
- icon?: string
126
- url: string
127
- text: string
128
- }
129
-
130
- function SubmenuItem({ icon, url, text }: SubmenuItemProps) {
131
- return (
132
- <li>
133
- <NavigationMenu.Link asChild>
134
- <Link className={s.submenuItem} href={url} title={vercelSplit(text)}>
135
- {icon ? <FlightIcon name={icon} /> : null}
136
- {text}
137
- </Link>
138
- </NavigationMenu.Link>
139
- </li>
140
- )
141
- }
142
-
143
- export default MenuItemsOverflow
@@ -1,88 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- .root {
7
- position: relative;
8
- display: flex;
9
- justify-content: flex-end;
10
- }
11
-
12
- .dropdown {
13
- background: var(--token-color-surface-primary);
14
- border-radius: var(--hdsplus-spacing-03);
15
- box-shadow: var(--token-elevation-high-box-shadow);
16
- border: 1px solid var(--token-color-border-primary);
17
- margin-top: 8px;
18
- max-height: calc(100vh - 300%);
19
- overflow-y: auto;
20
- padding: var(--hdsplus-spacing-04);
21
- position: absolute;
22
- right: 0;
23
- top: 100%;
24
- width: calc(100vw - var(--hdsplus-spacing-08));
25
- z-index: 1;
26
-
27
- @nest :global(.hashidaysConference) & {
28
- padding: 12px 24px;
29
- }
30
-
31
- &.constrained {
32
- max-width: 568px;
33
- width: calc(100vw - var(--hdsplus-spacing-10));
34
-
35
- @media (--medium-up) {
36
- width: max-content;
37
- }
38
- }
39
-
40
- @media (--medium-up) {
41
- width: max-content;
42
- }
43
- }
44
-
45
- .ulElem {
46
- padding: 0;
47
- margin: 0;
48
- list-style: none;
49
- }
50
-
51
- .submenuTitle {
52
- composes: g-type-label from global;
53
- margin: var(--hdsplus-spacing-04) var(--hdsplus-spacing-03) 8px;
54
- color: var(--token-color-foreground-faint);
55
- }
56
-
57
- .divider {
58
- margin: var(--hdsplus-spacing-04) var(--hdsplus-spacing-03);
59
- border: 0;
60
- padding: 0;
61
- height: 1px;
62
- background: var(--token-color-border-primary);
63
- }
64
-
65
- .submenuItem {
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;
74
-
75
- &:hover {
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;
82
- }
83
- }
84
-
85
- .list {
86
- margin: 0;
87
- list-style: none;
88
- }
@@ -1,113 +0,0 @@
1
- /**
2
- * Copyright (c) HashiCorp, Inc.
3
- * SPDX-License-Identifier: MPL-2.0
4
- */
5
-
6
- import { forwardRef } from 'react'
7
- import { camelCase } from 'camel-case'
8
- import Link from 'next/link'
9
- import Image from 'next/image'
10
- import { vercelSplit } from '../../../../lib/v'
11
- import classNames from 'classnames'
12
- import * as CommunityProductLogosOnDark from './mktg-logos/all-community-product-logos_on-dark'
13
- import * as CommunityProductLogosOnLight from './mktg-logos/all-community-product-logos_on-light'
14
- import * as PrimaryLogosOnDark from './mktg-logos/all-primary-logos_on-dark'
15
- import * as PrimaryLogosOnLight from './mktg-logos/all-primary-logos_on-light'
16
- import HashiCorpLogoOnLight from '@hashicorp/web-mktg-logos/src/hashicorp/hashicorp-horizontal_on-light.svg'
17
- import HashiCorpLogoOnDark from '@hashicorp/web-mktg-logos/src/hashicorp/hashicorp-horizontal_on-dark.svg'
18
- import HCPLogoOnLight from '@hashicorp/web-mktg-logos/src/hcp/hcp-horizontal_on-light.svg'
19
- import HCPLogoOnDark from '@hashicorp/web-mktg-logos/src/hcp/hcp-horizontal_on-dark.svg'
20
- import WaypointLogoAttrOnLight from '@hashicorp/web-mktg-logos/src/waypoint/hashicorp-waypoint-attributed/hashicorp-waypoint_on-light.svg'
21
- import WaypointLogoAttrOnDark from '@hashicorp/web-mktg-logos/src/waypoint/hashicorp-waypoint-attributed/hashicorp-waypoint_on-dark.svg'
22
- import HCPTerraformLogoOnLight from '@hashicorp/web-mktg-logos/src/terraform/hcp-terraform/hcp-terraform_on-light.svg'
23
- import HCPTerraformLogoOnDark from '@hashicorp/web-mktg-logos/src/terraform/hcp-terraform/hcp-terraform_on-dark.svg'
24
- import s from './style.module.css'
25
-
26
- const logoDict = {
27
- light: {
28
- hashicorp: HashiCorpLogoOnLight,
29
- hcp: HCPLogoOnLight,
30
- tfc: HCPTerraformLogoOnLight,
31
- 'hashicorp tfc': HCPTerraformLogoOnLight,
32
- 'hashicorp waypoint': WaypointLogoAttrOnLight,
33
- },
34
- dark: {
35
- hashicorp: HashiCorpLogoOnDark,
36
- hcp: HCPLogoOnDark,
37
- tfc: HCPTerraformLogoOnDark,
38
- 'hashicorp tfc': HCPTerraformLogoOnDark,
39
- 'hashicorp waypoint': WaypointLogoAttrOnDark,
40
- },
41
- }
42
-
43
- interface TitleLinkProps {
44
- text: string
45
- url: string
46
- product?: string
47
- theme: 'light' | 'dark'
48
- }
49
-
50
- function getLogo(
51
- text: string,
52
- theme: 'light' | 'dark'
53
- ): {
54
- src: string
55
- alt: string
56
- width: number
57
- height: number
58
- } {
59
- const lowerText = text.toLowerCase()
60
- const themeLogos = logoDict[theme]
61
-
62
- if (themeLogos[lowerText]) {
63
- return themeLogos[lowerText]
64
- }
65
-
66
- const isCommunityLogo =
67
- lowerText.startsWith('hashicorp') && lowerText !== 'hashicorp'
68
-
69
- if (isCommunityLogo) {
70
- if (theme === 'light') {
71
- return CommunityProductLogosOnLight[lowerText.split(' ')[1]]
72
- }
73
- return CommunityProductLogosOnDark[lowerText.split(' ')[1]]
74
- }
75
-
76
- if (theme === 'light') {
77
- return PrimaryLogosOnLight[lowerText]
78
- }
79
- return PrimaryLogosOnDark[lowerText]
80
- }
81
-
82
- const TitleLink = forwardRef<HTMLAnchorElement, TitleLinkProps>(
83
- ({ text, url, product, theme }, ref) => {
84
- const parsedText = vercelSplit(text)
85
- const Logo = getLogo(parsedText, theme)
86
-
87
- return (
88
- <Link
89
- className={classNames(
90
- s.root,
91
- s[`brand-${product}`],
92
- s[camelCase(parsedText)]
93
- )}
94
- href={url}
95
- title={parsedText}
96
- ref={ref}
97
- >
98
- {Logo ? (
99
- <Image
100
- {...Logo}
101
- alt={Logo.alt ? Logo.alt : `${product} logo`}
102
- className={s.logo}
103
- />
104
- ) : (
105
- parsedText
106
- )}
107
- </Link>
108
- )
109
- }
110
- )
111
- TitleLink.displayName = 'TitleLink'
112
-
113
- export default TitleLink
@@ -1,10 +0,0 @@
1
- import boundary from '@hashicorp/web-mktg-logos/src/boundary/boundary-community/boundary-community_on-dark.svg'
2
- import consul from '@hashicorp/web-mktg-logos/src/consul/consul-community/consul-community_on-dark.svg'
3
- import nomad from '@hashicorp/web-mktg-logos/src/nomad/nomad-community/nomad-community_on-dark.svg'
4
- import packer from '@hashicorp/web-mktg-logos/src/packer/packer-community/packer-community_on-dark.svg'
5
- import terraform from '@hashicorp/web-mktg-logos/src/terraform/terraform-community/terraform-community_on-dark.svg'
6
- import vagrant from '@hashicorp/web-mktg-logos/src/vagrant/vagrant-community/vagrant-community_on-dark.svg'
7
- import vault from '@hashicorp/web-mktg-logos/src/vault/vault-community/vault-community_on-dark.svg'
8
- import waypoint from '@hashicorp/web-mktg-logos/src/waypoint/hashicorp-waypoint-attributed/hashicorp-waypoint_on-dark.svg'
9
-
10
- export { boundary, consul, nomad, packer, terraform, vagrant, vault, waypoint }
@@ -1,10 +0,0 @@
1
- import boundary from '@hashicorp/web-mktg-logos/src/boundary/boundary-community/boundary-community_on-light.svg'
2
- import consul from '@hashicorp/web-mktg-logos/src/consul/consul-community/consul-community_on-light.svg'
3
- import nomad from '@hashicorp/web-mktg-logos/src/nomad/nomad-community/nomad-community_on-light.svg'
4
- import packer from '@hashicorp/web-mktg-logos/src/packer/packer-community/packer-community_on-light.svg'
5
- import terraform from '@hashicorp/web-mktg-logos/src/terraform/terraform-community/terraform-community_on-light.svg'
6
- import vagrant from '@hashicorp/web-mktg-logos/src/vagrant/vagrant-community/vagrant-community_on-light.svg'
7
- import vault from '@hashicorp/web-mktg-logos/src/vault/vault-community/vault-community_on-light.svg'
8
- import waypoint from '@hashicorp/web-mktg-logos/src/waypoint/hashicorp-waypoint-attributed/hashicorp-waypoint_on-light.svg'
9
-
10
- export { boundary, consul, nomad, packer, terraform, vagrant, vault, waypoint }
@@ -1,23 +0,0 @@
1
- import boundary from '@hashicorp/web-mktg-logos/src/boundary/boundary/boundary_on-dark.svg'
2
- import consul from '@hashicorp/web-mktg-logos/src/consul/consul/consul_on-dark.svg'
3
- import nomad from '@hashicorp/web-mktg-logos/src/nomad/nomad/nomad_on-dark.svg'
4
- import packer from '@hashicorp/web-mktg-logos/src/packer/packer/packer_on-dark.svg'
5
- import terraform from '@hashicorp/web-mktg-logos/src/terraform/terraform/terraform_on-dark.svg'
6
- import vagrant from '@hashicorp/web-mktg-logos/src/vagrant/vagrant/vagrant_on-dark.svg'
7
- import vault from '@hashicorp/web-mktg-logos/src/vault/vault/vault_on-dark.svg'
8
- import waypoint from '@hashicorp/web-mktg-logos/src/waypoint/waypoint/waypoint_on-dark.svg'
9
- import hashiconf from '@hashicorp/web-mktg-logos/src/conferences/hashiconf_on-dark.svg'
10
- import hashidays from '@hashicorp/web-mktg-logos/src/conferences/hashidays_on-dark.svg'
11
-
12
- export {
13
- boundary,
14
- consul,
15
- nomad,
16
- packer,
17
- terraform,
18
- vagrant,
19
- vault,
20
- waypoint,
21
- hashiconf,
22
- hashidays,
23
- }
@@ -1,23 +0,0 @@
1
- import boundary from '@hashicorp/web-mktg-logos/src/boundary/boundary/boundary_on-light.svg'
2
- import consul from '@hashicorp/web-mktg-logos/src/consul/consul/consul_on-light.svg'
3
- import nomad from '@hashicorp/web-mktg-logos/src/nomad/nomad/nomad_on-light.svg'
4
- import packer from '@hashicorp/web-mktg-logos/src/packer/packer/packer_on-light.svg'
5
- import terraform from '@hashicorp/web-mktg-logos/src/terraform/terraform/terraform_on-light.svg'
6
- import vagrant from '@hashicorp/web-mktg-logos/src/vagrant/vagrant/vagrant_on-light.svg'
7
- import vault from '@hashicorp/web-mktg-logos/src/vault/vault/vault_on-light.svg'
8
- import waypoint from '@hashicorp/web-mktg-logos/src/waypoint/waypoint/waypoint_on-light.svg'
9
- import hashiconf from '@hashicorp/web-mktg-logos/src/conferences/hashiconf_on-light.svg'
10
- import hashidays from '@hashicorp/web-mktg-logos/src/conferences/hashidays_on-light.svg'
11
-
12
- export {
13
- boundary,
14
- consul,
15
- nomad,
16
- packer,
17
- terraform,
18
- vagrant,
19
- vault,
20
- waypoint,
21
- hashiconf,
22
- hashidays,
23
- }