@hashicorp/react-components 0.0.0-nightly.8df4a87 → 0.0.0-nightly.928c674

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