@codecademy/brand 3.28.0-alpha.e4c902328e.0 → 3.29.0-alpha.034f48155f.0

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 (57) hide show
  1. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/MarketingBanner.d.ts +2 -1
  2. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/MarketingBanner.js +3 -3
  3. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/NavPanels.d.ts +1 -0
  4. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/NavPanels.js +8 -5
  5. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/consts.d.ts +2 -1
  6. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/consts.js +52 -2
  7. package/dist/AppHeader/AppHeaderElements/AppHeaderCatalogDropdown/index.js +5 -4
  8. package/dist/AppHeader/AppHeaderElements/AppHeaderDietCard/index.js +7 -5
  9. package/dist/AppHeader/AppHeaderElements/AppHeaderLinkSections/index.js +0 -0
  10. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/AppHeaderSection.test.js +193 -0
  11. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/MobileBackButton.d.ts +25 -0
  12. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/MobileBackButton.js +13 -2
  13. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/MobileNavMenu.js +12 -3
  14. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/NavSection.d.ts +21 -0
  15. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/NavSection.js +206 -0
  16. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/PanelLayout.d.ts +2 -1
  17. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/PanelLayout.js +8 -0
  18. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/elements.d.ts +2 -55
  19. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/elements.js +18 -69
  20. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/index.d.ts +10 -15
  21. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/index.js +28 -89
  22. package/dist/AppHeaderMobile/AppHeaderSubMenuMobile/index.js +8 -6
  23. package/dist/DropdownButton/index.d.ts +1 -3
  24. package/dist/GlobalHeader/context.d.ts +3 -1
  25. package/dist/GlobalHeader/context.js +19 -15
  26. package/dist/GlobalHeader/index.js +50 -47
  27. package/dist/GlobalHeader/types.d.ts +1 -0
  28. package/dist/stories/Atoms/BetaSticker.stories.js +0 -1
  29. package/dist/stories/Molecules/AppBar.stories.d.ts +0 -1
  30. package/dist/stories/Molecules/AppBar.stories.js +1 -2
  31. package/dist/stories/Molecules/AppHeader/AppHeaderLink.stories.js +0 -2
  32. package/dist/stories/Molecules/AppHeader/AppHeaderLogo.stories.js +1 -2
  33. package/dist/stories/Molecules/Banner.stories.js +0 -3
  34. package/dist/stories/Molecules/CurriculumCard.stories.js +0 -7
  35. package/dist/stories/Molecules/EmptySection.stories.js +1 -2
  36. package/dist/stories/Molecules/EnhancedBanner.stories.js +1 -1
  37. package/dist/stories/Molecules/HubCard.stories.js +0 -1
  38. package/dist/stories/Molecules/NotificationList.stories.js +1 -2
  39. package/dist/stories/Molecules/Testimonial.stories.js +4 -8
  40. package/dist/stories/Organisms/GlobalFooter.stories.js +1 -2
  41. package/dist/stories/Organisms/GlobalHeader/About.stories.js +1 -2
  42. package/dist/stories/Organisms/GlobalHeader/Bootcamp.stories.js +1 -2
  43. package/dist/stories/Organisms/GlobalHeader/Enterprise.stories.js +1 -2
  44. package/dist/stories/Organisms/GlobalHeader/Simple.stories.js +1 -2
  45. package/dist/stories/Organisms/GlobalPage.stories.js +0 -2
  46. package/dist/stories/Organisms/LayoutMenu.stories.js +3 -6
  47. package/dist/stories/Organisms/LayoutMenuVariant.stories.js +2 -4
  48. package/dist/stories/Organisms/PageFeatures.stories.js +1 -9
  49. package/dist/stories/Organisms/PageHero.stories.js +10 -20
  50. package/dist/stories/Organisms/PagePrefooter.stories.js +4 -8
  51. package/dist/stories/Organisms/PageSingleFeature.stories.js +10 -20
  52. package/dist/stories/Organisms/PageVideoGallery.stories.js +5 -10
  53. package/dist/stories/Organisms/ScoreSummary.stories.js +4 -8
  54. package/dist/svg.d.ts +0 -1
  55. package/package.json +2 -1
  56. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/NavTabs.d.ts +0 -20
  57. package/dist/AppHeader/AppHeaderElements/AppHeaderSection/NavTabs.js +0 -126
@@ -33,22 +33,19 @@ export const RegularButton = {
33
33
  ...ctaArgs,
34
34
  buttonType: 'fill'
35
35
  }
36
- }),
37
- name: 'Regular Button'
36
+ })
38
37
  };
39
38
  export const WithoutButton = {
40
39
  render: args => /*#__PURE__*/_jsx(PagePrefooter, {
41
40
  ...args,
42
41
  cta: undefined
43
- }),
44
- name: 'Without Button'
42
+ })
45
43
  };
46
44
  export const WithoutDescription = {
47
45
  render: args => /*#__PURE__*/_jsx(PagePrefooter, {
48
46
  ...args,
49
47
  desc: undefined
50
- }),
51
- name: 'Without Description'
48
+ })
52
49
  };
53
50
  export const DarkMode = {
54
51
  render: args => /*#__PURE__*/_jsx(Background, {
@@ -57,6 +54,5 @@ export const DarkMode = {
57
54
  children: /*#__PURE__*/_jsx(PagePrefooter, {
58
55
  ...args
59
56
  })
60
- }),
61
- name: 'Dark Mode'
57
+ })
62
58
  };
@@ -28,8 +28,7 @@ export default meta;
28
28
  export const SingleFeature = {
29
29
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
30
30
  ...args
31
- }),
32
- name: 'Single Feature'
31
+ })
33
32
  };
34
33
  export const Video = {
35
34
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
@@ -42,8 +41,7 @@ export const Video = {
42
41
  autoplay: true
43
42
  },
44
43
  title: "What's it like to be a Software Engineer"
45
- }),
46
- name: 'Video'
44
+ })
47
45
  };
48
46
  export const AdjustTheMediaWidth = {
49
47
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
@@ -61,24 +59,21 @@ export const RegularButton = {
61
59
  buttonType: 'fill'
62
60
  },
63
61
  mediaWidth: 4
64
- }),
65
- name: 'Regular Button'
62
+ })
66
63
  };
67
64
  export const WithoutButton = {
68
65
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
69
66
  ...args,
70
67
  cta: undefined,
71
68
  mediaWidth: 3
72
- }),
73
- name: 'Without Button'
69
+ })
74
70
  };
75
71
  export const WithoutDescription = {
76
72
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
77
73
  ...args,
78
74
  desc: undefined,
79
75
  mediaWidth: 4
80
- }),
81
- name: 'Without Description'
76
+ })
82
77
  };
83
78
  export const Eyebrow = {
84
79
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
@@ -86,8 +81,7 @@ export const Eyebrow = {
86
81
  eyebrow: {
87
82
  text: 'Codecademy'
88
83
  }
89
- }),
90
- name: 'Eyebrow'
84
+ })
91
85
  };
92
86
  export const AccentEyebrow = {
93
87
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
@@ -96,8 +90,7 @@ export const AccentEyebrow = {
96
90
  text: 'Codecademy',
97
91
  accent: true
98
92
  }
99
- }),
100
- name: 'Accent Eyebrow'
93
+ })
101
94
  };
102
95
  export const HideImageOnMobile = {
103
96
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
@@ -111,8 +104,7 @@ export const WithoutMedia = {
111
104
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
112
105
  ...args,
113
106
  media: undefined
114
- }),
115
- name: 'Without Media'
107
+ })
116
108
  };
117
109
  export const DarkMode = {
118
110
  render: args => /*#__PURE__*/_jsx(Background, {
@@ -124,8 +116,7 @@ export const DarkMode = {
124
116
  text: 'Codecademy'
125
117
  }
126
118
  })
127
- }),
128
- name: 'Dark Mode'
119
+ })
129
120
  };
130
121
  export const PausableImage = {
131
122
  render: args => /*#__PURE__*/_jsx(PageSingleFeature, {
@@ -153,6 +144,5 @@ export const LinkableImage = {
153
144
  eyebrow: {
154
145
  text: 'Codecademy'
155
146
  }
156
- }),
157
- name: 'Linkable Image'
147
+ })
158
148
  };
@@ -32,8 +32,7 @@ export default meta;
32
32
  export const VideoGallery = {
33
33
  render: args => /*#__PURE__*/_jsx(PageVideoGallery, {
34
34
  ...args
35
- }),
36
- name: 'Video Gallery'
35
+ })
37
36
  };
38
37
  export const RegularButton = {
39
38
  render: args => /*#__PURE__*/_jsx(PageVideoGallery, {
@@ -42,21 +41,18 @@ export const RegularButton = {
42
41
  ...ctaArgs,
43
42
  buttonType: 'fill'
44
43
  }
45
- }),
46
- name: 'Regular Button'
44
+ })
47
45
  };
48
46
  export const WithoutDescription = {
49
47
  render: args => /*#__PURE__*/_jsx(PageVideoGallery, {
50
48
  ...args,
51
49
  desc: undefined
52
- }),
53
- name: 'Without Description'
50
+ })
54
51
  };
55
52
  export const GalleryOnly = {
56
53
  render: args => /*#__PURE__*/_jsx(PageVideoGallery, {
57
54
  videos: args.videos
58
- }),
59
- name: 'Gallery Only'
55
+ })
60
56
  };
61
57
  export const DarkMode = {
62
58
  render: args => /*#__PURE__*/_jsx(Background, {
@@ -65,6 +61,5 @@ export const DarkMode = {
65
61
  children: /*#__PURE__*/_jsx(PageVideoGallery, {
66
62
  ...args
67
63
  })
68
- }),
69
- name: 'Dark Mode'
64
+ })
70
65
  };
@@ -79,8 +79,7 @@ export const RowLayout = {
79
79
  slug: 'becp-22-going-off-platform-with-html-and-css',
80
80
  title: 'Going off-platform with HTML and CSS'
81
81
  }]
82
- }),
83
- name: 'Row Layout'
82
+ })
84
83
  };
85
84
  export const ColumnLayout = {
86
85
  render: args => /*#__PURE__*/_jsx(ScoreSummary, {
@@ -126,8 +125,7 @@ export const ColumnLayout = {
126
125
  slug: 'wdcp-22-practice-javascript-syntax-arrays-loops-objects-iterators',
127
126
  title: 'Practice JavaScript Syntax: Arrays, Loops, Objects, Iterators'
128
127
  }]
129
- }),
130
- name: 'Column Layout'
128
+ })
131
129
  };
132
130
  export const RowLayoutNoMaxWidth = {
133
131
  render: args => /*#__PURE__*/_jsx(ScoreSummary, {
@@ -214,8 +212,7 @@ export const Description = {
214
212
  slug: 'wdcp-22-practice-javascript-syntax-arrays-loops-objects-iterators',
215
213
  title: 'Practice JavaScript Syntax: Arrays, Loops, Objects, Iterators'
216
214
  }]
217
- }),
218
- name: 'Description'
215
+ })
219
216
  };
220
217
  export const DescriptionInColumnLayout = {
221
218
  render: args => /*#__PURE__*/_jsx(ScoreSummary, {
@@ -294,6 +291,5 @@ export const ColorfulIcons = {
294
291
  },
295
292
  trackSlug: undefined,
296
293
  untestedSubContent: []
297
- }),
298
- name: 'Colorful Icons'
294
+ })
299
295
  };
package/dist/svg.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  declare module '*.svg' {
2
- type AssetURL = string;
3
2
  const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
4
3
  const content: string;
5
4
 
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@codecademy/brand",
3
3
  "description": "Brand component library for Codecademy",
4
- "version": "3.28.0-alpha.e4c902328e.0",
4
+ "version": "3.29.0-alpha.034f48155f.0",
5
5
  "author": "Codecademy Engineering <dev@codecademy.com>",
6
6
  "dependencies": {
7
7
  "@emotion/is-prop-valid": "^1.2.1",
8
8
  "@splidejs/react-splide": "^0.7.12",
9
9
  "@splidejs/splide": "4.1.3",
10
+ "@types/recurly__recurly-js": "4.22.0",
10
11
  "classnames": "^2.3.2",
11
12
  "date-fns": "^2.30.0",
12
13
  "emojisplosion": "^2.6.1",
@@ -1,20 +0,0 @@
1
- import React, { PropsWithChildren } from 'react';
2
- import { AppHeaderCatalogDropdownItem, AppHeaderResourcesDropdownItem } from '../../shared';
3
- interface NavTabPanelProps extends PropsWithChildren {
4
- isActiveTab: boolean;
5
- index: number;
6
- id: string;
7
- }
8
- declare const NavTabPanel: ({ children, isActiveTab, index, id, }: NavTabPanelProps) => import("react/jsx-runtime").JSX.Element;
9
- declare const NavTabList: React.ForwardRefExoticComponent<{
10
- children: React.ReactNode;
11
- type: string;
12
- } & React.RefAttributes<HTMLDivElement>>;
13
- declare const NavTab: ({ item, onSelect, isActive, onKeyDown, index, }: {
14
- item: AppHeaderCatalogDropdownItem | AppHeaderResourcesDropdownItem;
15
- onSelect: (id: string, event?: React.MouseEvent, item?: AppHeaderCatalogDropdownItem | AppHeaderResourcesDropdownItem) => void;
16
- isActive: boolean;
17
- onKeyDown: (event: React.KeyboardEvent) => void;
18
- index: number;
19
- }) => import("react/jsx-runtime").JSX.Element;
20
- export { NavTabPanel, NavTabList, NavTab };
@@ -1,126 +0,0 @@
1
- import { Box, FlexBox } from '@codecademy/gamut';
2
- import { ArrowChevronRightIcon } from '@codecademy/gamut-icons';
3
- import React, { useContext, useEffect, useRef } from 'react';
4
- import { AppHeaderDropdownContext } from '../AppHeaderDropdownProvider';
5
- import { NavIconButton, NavIconButtonContainer, NavigationButton, OverflowText, StyledNavTabPanel } from './elements';
6
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
7
- // Tab content, only one should be visible at a time
8
- const NavTabPanel = ({
9
- children,
10
- isActiveTab,
11
- index,
12
- id
13
- }) => {
14
- return /*#__PURE__*/_jsx(StyledNavTabPanel, {
15
- isFirst: index === 0,
16
- role: "tabpanel",
17
- id: `${id}-panel`,
18
- "aria-labelledby": `${id}-tab`,
19
- display: isActiveTab ? 'block' : 'none',
20
- gridColumn: "2 / span 12",
21
- gridRow: "1 / span 8",
22
- bg: "background",
23
- px: 32,
24
- pt: 16,
25
- pb: 24,
26
- children: children
27
- });
28
- };
29
-
30
- // Holds all of the tab buttons
31
- const NavTabList = /*#__PURE__*/React.forwardRef(({
32
- children,
33
- type
34
- }, ref) => {
35
- return /*#__PURE__*/_jsx(FlexBox, {
36
- role: "tablist",
37
- "aria-label": `${type.replace('-dropdown', '')} navigation`,
38
- "aria-orientation": "vertical",
39
- flexDirection: "column",
40
- gap: 8,
41
- ref: ref,
42
- children: children
43
- });
44
- });
45
-
46
- // Tab button, lets you switch between tabs
47
- // at larger breakpoints we use a normal button, at smaller
48
- // breakpoints we use an IconButton.
49
- const NavTab = ({
50
- item,
51
- onSelect,
52
- isActive,
53
- onKeyDown,
54
- index
55
- }) => {
56
- const sharedButtonProps = {
57
- role: 'tab',
58
- 'aria-selected': isActive,
59
- 'aria-controls': `${item.id}-panel`,
60
- onClick: event => onSelect(item.id, event, item),
61
- onKeyDown,
62
- tabIndex: isActive ? 0 : -1,
63
- isActive,
64
- id: `${item.id}-tab`
65
- };
66
- const buttonRef = useRef(null);
67
- const {
68
- setFirstItemRef
69
- } = useContext(AppHeaderDropdownContext);
70
- useEffect(() => {
71
- if (index === 0 && buttonRef.current) {
72
- setFirstItemRef?.(buttonRef.current);
73
- }
74
- }, [index, setFirstItemRef]);
75
- return /*#__PURE__*/_jsxs(_Fragment, {
76
- children: [/*#__PURE__*/_jsxs(NavigationButton, {
77
- ref: buttonRef,
78
- ...sharedButtonProps,
79
- children: [/*#__PURE__*/_jsxs(FlexBox, {
80
- gap: 8,
81
- alignItems: "center",
82
- children: [item.icon && /*#__PURE__*/_jsx(Box, {
83
- height: 24,
84
- width: 24,
85
- children: /*#__PURE__*/_jsx(item.icon, {
86
- size: 24
87
- })
88
- }), /*#__PURE__*/_jsx(OverflowText, {
89
- variant: "p-large",
90
- maxWidth: {
91
- _: '110px',
92
- md: 'none'
93
- },
94
- children: item.text
95
- })]
96
- }), isActive && /*#__PURE__*/_jsx(Box, {
97
- display: {
98
- _: 'none',
99
- sm: 'block'
100
- },
101
- mt: 4,
102
- children: /*#__PURE__*/_jsx(ArrowChevronRightIcon, {
103
- "data-testid": "chevron-right-icon"
104
- })
105
- })]
106
- }), item.icon && /*#__PURE__*/_jsx(NavIconButtonContainer, {
107
- display: {
108
- _: 'none',
109
- xs: 'grid',
110
- sm: 'none'
111
- },
112
- ...sharedButtonProps,
113
- children: /*#__PURE__*/_jsx(NavIconButton, {
114
- icon: item.icon,
115
- tip: item.text,
116
- tipProps: {
117
- alignment: 'right-center',
118
- narrow: false,
119
- placement: 'floating'
120
- },
121
- "aria-label": item.text
122
- })
123
- })]
124
- });
125
- };
126
- export { NavTabPanel, NavTabList, NavTab };