@codecademy/brand 5.2.0-alpha.f811da96e.0 → 5.3.0-alpha.3da6931a6.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.
- package/dist/AppBarDeprecated/styles/index.module.scss +4 -2
- package/dist/AppHeader/AppHeaderElements/AppHeaderLiveCoursesDropdown/NavPanels.js +62 -8
- package/dist/AppHeader/AppHeaderElements/AppHeaderLiveCoursesDropdown/consts.d.ts +1 -0
- package/dist/AppHeader/AppHeaderElements/AppHeaderLiveCoursesDropdown/consts.js +2 -0
- package/dist/Coaching/coachingOfferingIcons.d.ts +4 -0
- package/dist/Coaching/coachingOfferingIcons.js +7 -0
- package/dist/Coaching/coachingOfferings.d.ts +18 -0
- package/dist/Coaching/coachingOfferings.js +17 -0
- package/dist/Coaching/getCoachingOfferingNavLinks.d.ts +3 -0
- package/dist/Coaching/getCoachingOfferingNavLinks.js +14 -0
- package/dist/Coaching/getCoachingOfferingNavLinks.test.js +10 -0
- package/dist/Coaching/index.d.ts +3 -0
- package/dist/Coaching/index.js +3 -0
- package/dist/GlobalHeader/types.d.ts +10 -0
- package/dist/Loading/styles.module.scss +4 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { Anchor, Box } from '@codecademy/gamut';
|
|
1
|
+
import { Anchor, Box, GridBox, Text } from '@codecademy/gamut';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { useGlobalHeaderItemClick } from '../../../GlobalHeader/context';
|
|
3
|
+
import { useGlobalHeaderDynamicDataContext, useGlobalHeaderItemClick } from '../../../GlobalHeader/context';
|
|
4
4
|
import { useAppHeaderSectionContext } from '../AppHeaderSection/AppHeaderSectionContext';
|
|
5
5
|
import { PanelLayout } from '../AppHeaderSection/PanelLayout';
|
|
6
|
-
import {
|
|
6
|
+
import { SkillTile } from '../AppHeaderSkillTile';
|
|
7
|
+
import { coachingOfferingLinks } from './consts';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
7
9
|
const makeCta = (id, href, text, trackingTarget) => ({
|
|
8
10
|
id,
|
|
9
11
|
href,
|
|
@@ -18,17 +20,22 @@ export const BootcampsPanel = () => {
|
|
|
18
20
|
const {
|
|
19
21
|
globalHeaderItemClick
|
|
20
22
|
} = useGlobalHeaderItemClick();
|
|
23
|
+
const {
|
|
24
|
+
globalHeaderDynamicData
|
|
25
|
+
} = useGlobalHeaderDynamicDataContext();
|
|
21
26
|
const privateBootcampFormUrl = 'https://forms.office.com/r/qqjDwRmkqA';
|
|
27
|
+
const upcomingBootcamps = globalHeaderDynamicData?.liveCoursesDropdown?.upcomingBootcamps ?? [];
|
|
22
28
|
const description = /*#__PURE__*/_jsxs(Box, {
|
|
23
29
|
mb: 8,
|
|
24
|
-
children: ["Join live virtual bootcamps that span multiple weeks and help you build real-world, in-demand skills. Led by experts, each bootcamp includes instructor support, community,
|
|
30
|
+
children: ["Join live virtual bootcamps that span multiple weeks and help you build real-world, in-demand skills. Led by experts, each bootcamp includes instructor support, community, professional mentorship\u2014and comes with Codecademy Pro access.", /*#__PURE__*/_jsx("br", {}), "Looking for a private bootcamp?", ' ', /*#__PURE__*/_jsx(Anchor, {
|
|
25
31
|
tabIndex: tabIndex,
|
|
26
32
|
href: privateBootcampFormUrl,
|
|
27
33
|
onClick: event => globalHeaderItemClick(event, {
|
|
28
34
|
type: 'link',
|
|
29
35
|
href: privateBootcampFormUrl,
|
|
30
36
|
text: 'Get in touch',
|
|
31
|
-
id: 'private-bootcamp-contact'
|
|
37
|
+
id: 'private-bootcamp-contact',
|
|
38
|
+
trackingTarget: 'topnav_live_courses_private_bootcamp_contact'
|
|
32
39
|
}),
|
|
33
40
|
children: "Get in touch"
|
|
34
41
|
})]
|
|
@@ -36,16 +43,63 @@ export const BootcampsPanel = () => {
|
|
|
36
43
|
return /*#__PURE__*/_jsx(PanelLayout, {
|
|
37
44
|
heading: "Bootcamps",
|
|
38
45
|
description: description,
|
|
39
|
-
linkItem: makeCta('bootcamps', '/bootcamps', 'Explore Bootcamps', 'topnav_live_courses_bootcamps')
|
|
46
|
+
linkItem: makeCta('bootcamps', '/bootcamps', 'Explore all Bootcamps', 'topnav_live_courses_bootcamps'),
|
|
47
|
+
children: upcomingBootcamps.length > 0 && /*#__PURE__*/_jsxs(_Fragment, {
|
|
48
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
49
|
+
variant: "p-large",
|
|
50
|
+
fontWeight: 700,
|
|
51
|
+
as: "h3",
|
|
52
|
+
children: "Upcoming bootcamps"
|
|
53
|
+
}), /*#__PURE__*/_jsx(GridBox, {
|
|
54
|
+
gridTemplateColumns: {
|
|
55
|
+
_: '1fr',
|
|
56
|
+
xs: '1fr 1fr'
|
|
57
|
+
},
|
|
58
|
+
gap: 8,
|
|
59
|
+
pl: 0,
|
|
60
|
+
as: "ul",
|
|
61
|
+
listStyle: "none",
|
|
62
|
+
mb: 24,
|
|
63
|
+
children: upcomingBootcamps.map(bootcamp => /*#__PURE__*/_jsx("li", {
|
|
64
|
+
children: /*#__PURE__*/_jsx(SkillTile, {
|
|
65
|
+
item: {
|
|
66
|
+
...bootcamp,
|
|
67
|
+
type: 'link'
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
}, bootcamp.id))
|
|
71
|
+
})]
|
|
72
|
+
})
|
|
40
73
|
});
|
|
41
74
|
};
|
|
42
75
|
export const CoachingPanel = () => {
|
|
43
|
-
return /*#__PURE__*/
|
|
76
|
+
return /*#__PURE__*/_jsxs(PanelLayout, {
|
|
44
77
|
heading: "Coaching",
|
|
45
78
|
description: /*#__PURE__*/_jsx(Box, {
|
|
46
79
|
mb: 8,
|
|
47
80
|
children: "Get personalized mentorship from expert coaches to accelerate your career journey. Whether you're preparing for technical interviews, exploring career options, or seeking guidance, 1:1 coaching gives you tailored support to reach your goals."
|
|
48
81
|
}),
|
|
49
|
-
linkItem: makeCta('coaching', '/coaching', 'Explore Coaching', 'topnav_live_courses_coaching')
|
|
82
|
+
linkItem: makeCta('coaching', '/coaching', 'Explore Coaching', 'topnav_live_courses_coaching'),
|
|
83
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
84
|
+
variant: "p-large",
|
|
85
|
+
fontWeight: 700,
|
|
86
|
+
as: "h3",
|
|
87
|
+
children: "Our offerings"
|
|
88
|
+
}), /*#__PURE__*/_jsx(GridBox, {
|
|
89
|
+
gridTemplateColumns: {
|
|
90
|
+
_: '1fr',
|
|
91
|
+
xs: '1fr 1fr'
|
|
92
|
+
},
|
|
93
|
+
gap: 8,
|
|
94
|
+
pl: 0,
|
|
95
|
+
as: "ul",
|
|
96
|
+
listStyle: "none",
|
|
97
|
+
mb: 24,
|
|
98
|
+
children: coachingOfferingLinks.map(offering => /*#__PURE__*/_jsx("li", {
|
|
99
|
+
children: /*#__PURE__*/_jsx(SkillTile, {
|
|
100
|
+
item: offering
|
|
101
|
+
})
|
|
102
|
+
}, offering.id))
|
|
103
|
+
})]
|
|
50
104
|
});
|
|
51
105
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AppHeaderLiveCoursesDropdownItem } from '../../shared';
|
|
3
|
+
export declare const coachingOfferingLinks: import("../../shared").AppHeaderLinkItem[];
|
|
3
4
|
export type NavSectionConfig = {
|
|
4
5
|
item: AppHeaderLiveCoursesDropdownItem;
|
|
5
6
|
panel: React.ComponentType<{
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CertificateIcon, ObjectiveIcon } from '@codecademy/gamut-icons';
|
|
2
|
+
import { getCoachingOfferingNavLinks } from '../../../Coaching';
|
|
2
3
|
import { BootcampsPanel, CoachingPanel } from './NavPanels';
|
|
4
|
+
export const coachingOfferingLinks = getCoachingOfferingNavLinks();
|
|
3
5
|
export const LIVE_COURSES_NAV_SECTIONS = [{
|
|
4
6
|
item: {
|
|
5
7
|
icon: CertificateIcon,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type GamutIconProps } from '@codecademy/gamut-icons';
|
|
2
|
+
import type React from 'react';
|
|
3
|
+
import type { CoachingOfferingIcon } from './coachingOfferings';
|
|
4
|
+
export declare const COACHING_OFFERING_ICONS: Record<CoachingOfferingIcon, React.ComponentType<GamutIconProps>>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BookBookmarkIcon, HammerWrenchIcon, ProgrammingTeamChatIcon, QuizIcon } from '@codecademy/gamut-icons';
|
|
2
|
+
export const COACHING_OFFERING_ICONS = {
|
|
3
|
+
career: ProgrammingTeamChatIcon,
|
|
4
|
+
technical: HammerWrenchIcon,
|
|
5
|
+
behavioral: QuizIcon,
|
|
6
|
+
tutoring: BookBookmarkIcon
|
|
7
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const COACHING_OFFERINGS: readonly [{
|
|
2
|
+
readonly title: "Career guidance and mentorship";
|
|
3
|
+
readonly icon: "career";
|
|
4
|
+
readonly bullets: readonly ["Clarify your career goals with a dedicated coach.", "Portfolio and resume reviews.", "Explore growth opportunities with guidance tailored to where you are."];
|
|
5
|
+
}, {
|
|
6
|
+
readonly title: "Technical mock interview";
|
|
7
|
+
readonly icon: "technical";
|
|
8
|
+
readonly bullets: readonly ["Practice coding and system design questions.", "Personalized feedback on your problem-solving approach and delivery.", "Build confidence for your next technical interview."];
|
|
9
|
+
}, {
|
|
10
|
+
readonly title: "Behavioral mock interview";
|
|
11
|
+
readonly icon: "behavioral";
|
|
12
|
+
readonly bullets: readonly ["Practice with an expert coach until you are interview-ready.", "Learn to structure answers and tell your story authentically.", "Personalized feedback to sharpen your delivery."];
|
|
13
|
+
}, {
|
|
14
|
+
readonly title: "Tutoring";
|
|
15
|
+
readonly icon: "tutoring";
|
|
16
|
+
readonly bullets: readonly ["1:1 guidance on new or existing technical skills with experts in your target field.", "Complex concepts broken down at your pace.", "Hands-on practice with real-time support."];
|
|
17
|
+
}];
|
|
18
|
+
export type CoachingOfferingIcon = (typeof COACHING_OFFERINGS)[number]['icon'];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const COACHING_OFFERINGS = [{
|
|
2
|
+
title: 'Career guidance and mentorship',
|
|
3
|
+
icon: 'career',
|
|
4
|
+
bullets: ['Clarify your career goals with a dedicated coach.', 'Portfolio and resume reviews.', 'Explore growth opportunities with guidance tailored to where you are.']
|
|
5
|
+
}, {
|
|
6
|
+
title: 'Technical mock interview',
|
|
7
|
+
icon: 'technical',
|
|
8
|
+
bullets: ['Practice coding and system design questions.', 'Personalized feedback on your problem-solving approach and delivery.', 'Build confidence for your next technical interview.']
|
|
9
|
+
}, {
|
|
10
|
+
title: 'Behavioral mock interview',
|
|
11
|
+
icon: 'behavioral',
|
|
12
|
+
bullets: ['Practice with an expert coach until you are interview-ready.', 'Learn to structure answers and tell your story authentically.', 'Personalized feedback to sharpen your delivery.']
|
|
13
|
+
}, {
|
|
14
|
+
title: 'Tutoring',
|
|
15
|
+
icon: 'tutoring',
|
|
16
|
+
bullets: ['1:1 guidance on new or existing technical skills with experts in your target field.', 'Complex concepts broken down at your pace.', 'Hands-on practice with real-time support.']
|
|
17
|
+
}];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { COACHING_OFFERING_ICONS } from './coachingOfferingIcons';
|
|
2
|
+
import { COACHING_OFFERINGS } from './coachingOfferings';
|
|
3
|
+
export const COACHING_OFFERING_NAV_LIMIT = 4;
|
|
4
|
+
export const getCoachingOfferingNavLinks = () => COACHING_OFFERINGS.slice(0, COACHING_OFFERING_NAV_LIMIT).map(({
|
|
5
|
+
title,
|
|
6
|
+
icon
|
|
7
|
+
}) => ({
|
|
8
|
+
id: icon,
|
|
9
|
+
href: '/coaching',
|
|
10
|
+
text: title,
|
|
11
|
+
type: 'link',
|
|
12
|
+
icon: COACHING_OFFERING_ICONS[icon],
|
|
13
|
+
trackingTarget: `topnav_live_courses_coaching_${icon}`
|
|
14
|
+
}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { COACHING_OFFERINGS } from './coachingOfferings';
|
|
2
|
+
import { COACHING_OFFERING_NAV_LIMIT, getCoachingOfferingNavLinks } from './getCoachingOfferingNavLinks';
|
|
3
|
+
describe('getCoachingOfferingNavLinks', () => {
|
|
4
|
+
it('returns at most four nav links', () => {
|
|
5
|
+
expect(getCoachingOfferingNavLinks().length).toBeLessThanOrEqual(COACHING_OFFERING_NAV_LIMIT);
|
|
6
|
+
});
|
|
7
|
+
it('returns the first offerings up to the nav limit', () => {
|
|
8
|
+
expect(getCoachingOfferingNavLinks().length).toBe(Math.min(COACHING_OFFERINGS.length, COACHING_OFFERING_NAV_LIMIT));
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -98,6 +98,15 @@ export type PromotedPath = {
|
|
|
98
98
|
difficulty: CourseDifficulty | null;
|
|
99
99
|
durationHours: number | null;
|
|
100
100
|
};
|
|
101
|
+
export type UpcomingLiveCoursesNavItem = {
|
|
102
|
+
id: string;
|
|
103
|
+
href: string;
|
|
104
|
+
text: string;
|
|
105
|
+
trackingTarget: string;
|
|
106
|
+
};
|
|
107
|
+
export type LiveCoursesDropdownData = {
|
|
108
|
+
upcomingBootcamps: UpcomingLiveCoursesNavItem[];
|
|
109
|
+
};
|
|
101
110
|
export type GlobalHeaderDynamicData = {
|
|
102
111
|
catalogDropdown: {
|
|
103
112
|
banner: {
|
|
@@ -116,5 +125,6 @@ export type GlobalHeaderDynamicData = {
|
|
|
116
125
|
totalCertificationPathCount: number;
|
|
117
126
|
};
|
|
118
127
|
};
|
|
128
|
+
liveCoursesDropdown: LiveCoursesDropdownData;
|
|
119
129
|
};
|
|
120
130
|
export {};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "~@codecademy/gamut-styles/utils";
|
|
2
|
+
|
|
1
3
|
$c-offset: 169;
|
|
2
4
|
$inner-offset: 287;
|
|
3
5
|
$outer-offset: 361;
|
|
@@ -74,11 +76,11 @@ $animation-duration: 3s;
|
|
|
74
76
|
|
|
75
77
|
.fullPage {
|
|
76
78
|
width: 100%;
|
|
77
|
-
height:
|
|
79
|
+
height: viewport-height(-(utils.$height-header));
|
|
78
80
|
}
|
|
79
81
|
|
|
80
82
|
.loading {
|
|
81
|
-
width: 120px;
|
|
83
|
+
width: utils.px-rem(120px);
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
.underline {
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export * from './CareerPathCard';
|
|
|
22
22
|
export * from './Carousel';
|
|
23
23
|
export * from './CertificationPathCard';
|
|
24
24
|
export * from './CoachingSessionCard';
|
|
25
|
+
export * from './Coaching';
|
|
25
26
|
export * from './CommunityEventCard';
|
|
26
27
|
export * from './CommunityEventToast';
|
|
27
28
|
export * from './ContentGroupBaseCard';
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,7 @@ export * from './CareerPathCard';
|
|
|
22
22
|
export * from './Carousel';
|
|
23
23
|
export * from './CertificationPathCard';
|
|
24
24
|
export * from './CoachingSessionCard';
|
|
25
|
+
export * from './Coaching';
|
|
25
26
|
export * from './CommunityEventCard';
|
|
26
27
|
export * from './CommunityEventToast';
|
|
27
28
|
export * from './ContentGroupBaseCard';
|
package/package.json
CHANGED