@codecademy/brand 5.2.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.
@@ -4,6 +4,7 @@ import { useGlobalHeaderDynamicDataContext, useGlobalHeaderItemClick } from '../
4
4
  import { useAppHeaderSectionContext } from '../AppHeaderSection/AppHeaderSectionContext';
5
5
  import { PanelLayout } from '../AppHeaderSection/PanelLayout';
6
6
  import { SkillTile } from '../AppHeaderSkillTile';
7
+ import { coachingOfferingLinks } from './consts';
7
8
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
8
9
  const makeCta = (id, href, text, trackingTarget) => ({
9
10
  id,
@@ -72,12 +73,33 @@ export const BootcampsPanel = () => {
72
73
  });
73
74
  };
74
75
  export const CoachingPanel = () => {
75
- return /*#__PURE__*/_jsx(PanelLayout, {
76
+ return /*#__PURE__*/_jsxs(PanelLayout, {
76
77
  heading: "Coaching",
77
78
  description: /*#__PURE__*/_jsx(Box, {
78
79
  mb: 8,
79
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."
80
81
  }),
81
- 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
+ })]
82
104
  });
83
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,3 @@
1
+ import type { AppHeaderLinkItem } from '../AppHeader/shared/types';
2
+ export declare const COACHING_OFFERING_NAV_LIMIT = 4;
3
+ export declare const getCoachingOfferingNavLinks: () => AppHeaderLinkItem[];
@@ -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
+ });
@@ -0,0 +1,3 @@
1
+ export * from './coachingOfferings';
2
+ export * from './coachingOfferingIcons';
3
+ export * from './getCoachingOfferingNavLinks';
@@ -0,0 +1,3 @@
1
+ export * from './coachingOfferings';
2
+ export * from './coachingOfferingIcons';
3
+ export * from './getCoachingOfferingNavLinks';
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codecademy/brand",
3
- "version": "5.2.0",
3
+ "version": "5.3.0-alpha.3da6931a6.0",
4
4
  "description": "Brand component library for Codecademy",
5
5
  "license": "MIT",
6
6
  "repository": "git@github.com:codecademy-engineering/mono.git",