@codecademy/brand 5.4.0-alpha.53ec171ca.0 → 5.4.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.
@@ -3,6 +3,5 @@ type PanelProps = {
3
3
  tabIndex?: number;
4
4
  };
5
5
  export declare const BootcampsPanel: React.FC<PanelProps>;
6
- export declare const WorkshopsPanel: React.FC<PanelProps>;
7
6
  export declare const CoachingPanel: React.FC<PanelProps>;
8
7
  export {};
@@ -4,7 +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 { AppHeaderWorkshopCard } from './AppHeaderWorkshopCard';
7
+ import { coachingOfferingLinks } from './consts';
8
8
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
9
  const makeCta = (id, href, text, trackingTarget) => ({
10
10
  id,
@@ -72,49 +72,34 @@ export const BootcampsPanel = () => {
72
72
  })
73
73
  });
74
74
  };
75
- export const WorkshopsPanel = () => {
76
- const {
77
- globalHeaderDynamicData
78
- } = useGlobalHeaderDynamicDataContext();
79
- const upcomingWorkshops = globalHeaderDynamicData?.liveCoursesDropdown?.upcomingWorkshops ?? [];
80
- const description = /*#__PURE__*/_jsx(Box, {
81
- mb: 8,
82
- children: "Join live, interactive workshops designed to build practical skills in a short time. Led by experts, each session includes hands-on learning, real-time guidance, and community interaction to help you apply what you learn instantly."
83
- });
84
- return /*#__PURE__*/_jsx(PanelLayout, {
85
- heading: "Workshops",
86
- description: description,
87
- linkItem: makeCta('workshops', '/bootcamps#upcoming-workshops', 'Explore Workshops', 'topnav_live_courses_workshops'),
88
- children: upcomingWorkshops.length > 0 && /*#__PURE__*/_jsxs(_Fragment, {
89
- children: [/*#__PURE__*/_jsx(Text, {
90
- variant: "p-large",
91
- fontWeight: 700,
92
- as: "h3",
93
- children: "Upcoming workshops"
94
- }), /*#__PURE__*/_jsx(GridBox, {
95
- gridTemplateColumns: {
96
- _: '1fr',
97
- xs: '1fr 1fr'
98
- },
99
- gap: 24,
100
- pl: 0,
101
- as: "ul",
102
- listStyle: "none",
103
- mb: 24,
104
- children: upcomingWorkshops.map(workshop => /*#__PURE__*/_jsx(AppHeaderWorkshopCard, {
105
- workshop: workshop
106
- }, workshop.id))
107
- })]
108
- })
109
- });
110
- };
111
75
  export const CoachingPanel = () => {
112
- return /*#__PURE__*/_jsx(PanelLayout, {
76
+ return /*#__PURE__*/_jsxs(PanelLayout, {
113
77
  heading: "Coaching",
114
78
  description: /*#__PURE__*/_jsx(Box, {
115
79
  mb: 8,
116
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."
117
81
  }),
118
- 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
+ })]
119
104
  });
120
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
- import { BadgeIcon, CertificateIcon, ObjectiveIcon } from '@codecademy/gamut-icons';
2
- import { BootcampsPanel, CoachingPanel, WorkshopsPanel } from './NavPanels';
1
+ import { CertificateIcon, ObjectiveIcon } from '@codecademy/gamut-icons';
2
+ import { getCoachingOfferingNavLinks } from '../../../Coaching';
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,
@@ -9,15 +11,6 @@ export const LIVE_COURSES_NAV_SECTIONS = [{
9
11
  trackingTarget: 'topnav_live_courses_tab_bootcamps'
10
12
  },
11
13
  panel: BootcampsPanel
12
- }, {
13
- item: {
14
- icon: BadgeIcon,
15
- text: 'Workshops',
16
- id: 'workshops',
17
- type: 'live-courses-dropdown',
18
- trackingTarget: 'topnav_live_courses_tab_workshops'
19
- },
20
- panel: WorkshopsPanel
21
14
  }, {
22
15
  item: {
23
16
  icon: ObjectiveIcon,
@@ -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';
@@ -104,19 +104,8 @@ export type UpcomingLiveCoursesNavItem = {
104
104
  text: string;
105
105
  trackingTarget: string;
106
106
  };
107
- export type UpcomingWorkshopNavItem = {
108
- id: string;
109
- href: string;
110
- trackingTarget: string;
111
- title: string;
112
- instructorName: string;
113
- instructorTitle: string;
114
- nextCohortStartDate?: string;
115
- durationLabel?: string;
116
- };
117
107
  export type LiveCoursesDropdownData = {
118
108
  upcomingBootcamps: UpcomingLiveCoursesNavItem[];
119
- upcomingWorkshops: UpcomingWorkshopNavItem[];
120
109
  };
121
110
  export type GlobalHeaderDynamicData = {
122
111
  catalogDropdown: {
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.4.0-alpha.53ec171ca.0",
3
+ "version": "5.4.0",
4
4
  "description": "Brand component library for Codecademy",
5
5
  "license": "MIT",
6
6
  "repository": "git@github.com:codecademy-engineering/mono.git",
@@ -1,6 +0,0 @@
1
- import type { UpcomingWorkshopNavItem } from '../../../../GlobalHeader/types';
2
- type AppHeaderWorkshopCardProps = {
3
- workshop: UpcomingWorkshopNavItem;
4
- };
5
- export declare const AppHeaderWorkshopCard: React.FC<AppHeaderWorkshopCardProps>;
6
- export {};
@@ -1,135 +0,0 @@
1
- import _styled from "@emotion/styled/base";
2
- import { Anchor, Box, Card, FlexBox, Text } from '@codecademy/gamut';
3
- import { CalendarIcon, OptimizationClockIcon } from '@codecademy/gamut-icons';
4
- import { GridDense } from '@codecademy/gamut-patterns';
5
- import { useGlobalHeaderItemClick } from '../../../../GlobalHeader/context';
6
- import { Divider } from '../../../../InstructorCard';
7
- import { useAppHeaderDropdownContext } from '../../AppHeaderDropdownProvider';
8
- import { useAppHeaderSectionContext } from '../../AppHeaderSection/AppHeaderSectionContext';
9
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
- const StyledCard = /*#__PURE__*/_styled(Card, {
11
- target: "e1aahqt50",
12
- label: "StyledCard"
13
- })("&:hover{color:", ({
14
- theme
15
- }) => theme.colors.primary, ";border-color:", ({
16
- theme
17
- }) => theme.colors.primary, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9BcHBIZWFkZXIvQXBwSGVhZGVyRWxlbWVudHMvQXBwSGVhZGVyTGl2ZUNvdXJzZXNEcm9wZG93bi9BcHBIZWFkZXJXb3Jrc2hvcENhcmQvaW5kZXgudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVcrQiIsImZpbGUiOiIuLi8uLi8uLi8uLi8uLi9zcmMvQXBwSGVhZGVyL0FwcEhlYWRlckVsZW1lbnRzL0FwcEhlYWRlckxpdmVDb3Vyc2VzRHJvcGRvd24vQXBwSGVhZGVyV29ya3Nob3BDYXJkL2luZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuY2hvciwgQm94LCBDYXJkLCBGbGV4Qm94LCBUZXh0IH0gZnJvbSAnQGNvZGVjYWRlbXkvZ2FtdXQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJJY29uLCBPcHRpbWl6YXRpb25DbG9ja0ljb24gfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1pY29ucyc7XG5pbXBvcnQgeyBHcmlkRGVuc2UgfSBmcm9tICdAY29kZWNhZGVteS9nYW11dC1wYXR0ZXJucyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5cbmltcG9ydCB7IHVzZUdsb2JhbEhlYWRlckl0ZW1DbGljayB9IGZyb20gJy4uLy4uLy4uLy4uL0dsb2JhbEhlYWRlci9jb250ZXh0JztcbmltcG9ydCB0eXBlIHsgVXBjb21pbmdXb3Jrc2hvcE5hdkl0ZW0gfSBmcm9tICcuLi8uLi8uLi8uLi9HbG9iYWxIZWFkZXIvdHlwZXMnO1xuaW1wb3J0IHsgRGl2aWRlciB9IGZyb20gJy4uLy4uLy4uLy4uL0luc3RydWN0b3JDYXJkJztcbmltcG9ydCB7IHVzZUFwcEhlYWRlckRyb3Bkb3duQ29udGV4dCB9IGZyb20gJy4uLy4uL0FwcEhlYWRlckRyb3Bkb3duUHJvdmlkZXInO1xuaW1wb3J0IHsgdXNlQXBwSGVhZGVyU2VjdGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi9BcHBIZWFkZXJTZWN0aW9uL0FwcEhlYWRlclNlY3Rpb25Db250ZXh0JztcblxuY29uc3QgU3R5bGVkQ2FyZCA9IHN0eWxlZChDYXJkKWBcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuY29sb3JzLnByaW1hcnl9O1xuICAgIGJvcmRlci1jb2xvcjogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5jb2xvcnMucHJpbWFyeX07XG4gIH1cbmA7XG5cbnR5cGUgSW5mb1Jvd1Byb3BzID0ge1xuICBpY29uOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5jb25zdCBJbmZvUm93OiBSZWFjdC5GQzxJbmZvUm93UHJvcHM+ID0gKHsgaWNvbiwgY2hpbGRyZW4gfSkgPT4gKFxuICA8RmxleEJveCBhbGlnbkl0ZW1zPVwiY2VudGVyXCIgZ2FwPXs4fT5cbiAgICB7aWNvbn1cbiAgICA8VGV4dCBmb250U2l6ZT17MTR9IGxpbmVIZWlnaHQ9XCJiYXNlXCIgY29sb3I9XCJ0ZXh0XCI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9UZXh0PlxuICA8L0ZsZXhCb3g+XG4pO1xuXG50eXBlIEFwcEhlYWRlcldvcmtzaG9wQ2FyZFByb3BzID0ge1xuICB3b3Jrc2hvcDogVXBjb21pbmdXb3Jrc2hvcE5hdkl0ZW07XG59O1xuXG5leHBvcnQgY29uc3QgQXBwSGVhZGVyV29ya3Nob3BDYXJkOiBSZWFjdC5GQzxBcHBIZWFkZXJXb3Jrc2hvcENhcmRQcm9wcz4gPSAoe1xuICB3b3Jrc2hvcCxcbn0pID0+IHtcbiAgY29uc3QgeyBnbG9iYWxIZWFkZXJJdGVtQ2xpY2sgfSA9IHVzZUdsb2JhbEhlYWRlckl0ZW1DbGljaygpO1xuICBjb25zdCB7IGhhbmRsZUNsb3NlIH0gPSB1c2VBcHBIZWFkZXJEcm9wZG93bkNvbnRleHQoKTtcbiAgY29uc3QgeyB0YWJJbmRleCB9ID0gdXNlQXBwSGVhZGVyU2VjdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBsaW5rSXRlbSA9IHtcbiAgICB0eXBlOiAnbGluaycgYXMgY29uc3QsXG4gICAgaWQ6IHdvcmtzaG9wLmlkLFxuICAgIGhyZWY6IHdvcmtzaG9wLmhyZWYsXG4gICAgdGV4dDogd29ya3Nob3AudGl0bGUsXG4gICAgdHJhY2tpbmdUYXJnZXQ6IHdvcmtzaG9wLnRyYWNraW5nVGFyZ2V0LFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGxpPlxuICAgICAgPEFuY2hvclxuICAgICAgICBocmVmPXt3b3Jrc2hvcC5ocmVmfVxuICAgICAgICB2YXJpYW50PVwiaW50ZXJmYWNlXCJcbiAgICAgICAgZGlzcGxheT1cImJsb2NrXCJcbiAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICAgICAgZ2xvYmFsSGVhZGVySXRlbUNsaWNrKGV2ZW50LCBsaW5rSXRlbSk7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZENhcmRcbiAgICAgICAgICBib3JkZXJSYWRpdXM9XCJsZ1wiXG4gICAgICAgICAgYm9yZGVyPXsxfVxuICAgICAgICAgIGJvcmRlckNvbG9yPVwiYm9yZGVyLXRlcnRpYXJ5XCJcbiAgICAgICAgICBkaXNwbGF5PVwiZmxleFwiXG4gICAgICAgICAgYWxpZ25JdGVtcz1cImZsZXgtc3RhcnRcIlxuICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgIHB4PXsxNn1cbiAgICAgICAgICBweT17MjR9XG4gICAgICAgICAgbWluSGVpZ2h0PXsyMTl9XG4gICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgID5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgdmFyaWFudD1cInAtbGFyZ2VcIlxuICAgICAgICAgICAgZm9udFdlaWdodD17NzAwfVxuICAgICAgICAgICAgYXM9XCJoM1wiXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgdHJ1bmNhdGU9XCJlbGxpcHNpc1wiXG4gICAgICAgICAgICB0cnVuY2F0ZUxpbmVzPXsyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt3b3Jrc2hvcC50aXRsZX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPEJveCB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICAgIDxHcmlkRGVuc2UgaGVpZ2h0PXs0fSAvPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDxGbGV4Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBnYXA9ezR9IHdpZHRoPVwiMTAwJVwiPlxuICAgICAgICAgICAgPFRleHQgZm9udFNpemU9ezE0fSBmb250V2VpZ2h0PVwiYm9sZFwiIGxpbmVIZWlnaHQ9XCJiYXNlXCI+XG4gICAgICAgICAgICAgIHt3b3Jrc2hvcC5pbnN0cnVjdG9yTmFtZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIGZvbnRTaXplPXsxNH1cbiAgICAgICAgICAgICAgbGluZUhlaWdodD1cImJhc2VcIlxuICAgICAgICAgICAgICBjb2xvcj1cInRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgdHJ1bmNhdGU9XCJlbGxpcHNpc1wiXG4gICAgICAgICAgICAgIHRydW5jYXRlTGluZXM9ezF9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt3b3Jrc2hvcC5pbnN0cnVjdG9yVGl0bGV9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9GbGV4Qm94PlxuICAgICAgICAgIDxGbGV4Qm94XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIGFsaWduU2VsZj1cInN0cmV0Y2hcIlxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIG10PXs0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt3b3Jrc2hvcC5uZXh0Q29ob3J0U3RhcnREYXRlID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgPEluZm9Sb3cgaWNvbj17PENhbGVuZGFySWNvbiBzaXplPXsxNn0gYXJpYS1oaWRkZW4gLz59PlxuICAgICAgICAgICAgICAgICAgTmV4dCBjb2hvcnQ6IG9ueycgJ31cbiAgICAgICAgICAgICAgICAgIDxUZXh0IGFzPVwic3BhblwiIGZvbnRXZWlnaHQ9XCJib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt3b3Jrc2hvcC5uZXh0Q29ob3J0U3RhcnREYXRlfVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvSW5mb1Jvdz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt3b3Jrc2hvcC5kdXJhdGlvbkxhYmVsID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgPEluZm9Sb3cgaWNvbj17PE9wdGltaXphdGlvbkNsb2NrSWNvbiBzaXplPXsxNn0gYXJpYS1oaWRkZW4gLz59PlxuICAgICAgICAgICAgICAgICAgPFRleHQgYXM9XCJzcGFuXCIgZm9udFdlaWdodD1cImJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAge3dvcmtzaG9wLmR1cmF0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+eycgJ31cbiAgICAgICAgICAgICAgICAgIGxvbmdcbiAgICAgICAgICAgICAgICA8L0luZm9Sb3c+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9GbGV4Qm94PlxuICAgICAgICA8L1N0eWxlZENhcmQ+XG4gICAgICA8L0FuY2hvcj5cbiAgICA8L2xpPlxuICApO1xufTtcbiJdfQ== */"));
18
- const InfoRow = ({
19
- icon,
20
- children
21
- }) => /*#__PURE__*/_jsxs(FlexBox, {
22
- alignItems: "center",
23
- gap: 8,
24
- children: [icon, /*#__PURE__*/_jsx(Text, {
25
- fontSize: 14,
26
- lineHeight: "base",
27
- color: "text",
28
- children: children
29
- })]
30
- });
31
- export const AppHeaderWorkshopCard = ({
32
- workshop
33
- }) => {
34
- const {
35
- globalHeaderItemClick
36
- } = useGlobalHeaderItemClick();
37
- const {
38
- handleClose
39
- } = useAppHeaderDropdownContext();
40
- const {
41
- tabIndex
42
- } = useAppHeaderSectionContext();
43
- const linkItem = {
44
- type: 'link',
45
- id: workshop.id,
46
- href: workshop.href,
47
- text: workshop.title,
48
- trackingTarget: workshop.trackingTarget
49
- };
50
- return /*#__PURE__*/_jsx("li", {
51
- children: /*#__PURE__*/_jsx(Anchor, {
52
- href: workshop.href,
53
- variant: "interface",
54
- display: "block",
55
- tabIndex: tabIndex,
56
- onClick: event => {
57
- globalHeaderItemClick(event, linkItem);
58
- handleClose();
59
- },
60
- children: /*#__PURE__*/_jsxs(StyledCard, {
61
- borderRadius: "lg",
62
- border: 1,
63
- borderColor: "border-tertiary",
64
- display: "flex",
65
- alignItems: "flex-start",
66
- flexDirection: "column",
67
- px: 16,
68
- py: 24,
69
- minHeight: 219,
70
- height: "100%",
71
- children: [/*#__PURE__*/_jsx(Text, {
72
- variant: "p-large",
73
- fontWeight: 700,
74
- as: "h3",
75
- width: "100%",
76
- truncate: "ellipsis",
77
- truncateLines: 2,
78
- children: workshop.title
79
- }), /*#__PURE__*/_jsx(Box, {
80
- width: "100%",
81
- children: /*#__PURE__*/_jsx(GridDense, {
82
- height: 4
83
- })
84
- }), /*#__PURE__*/_jsxs(FlexBox, {
85
- flexDirection: "column",
86
- gap: 4,
87
- width: "100%",
88
- children: [/*#__PURE__*/_jsx(Text, {
89
- fontSize: 14,
90
- fontWeight: "bold",
91
- lineHeight: "base",
92
- children: workshop.instructorName
93
- }), /*#__PURE__*/_jsx(Text, {
94
- fontSize: 14,
95
- lineHeight: "base",
96
- color: "text-secondary",
97
- truncate: "ellipsis",
98
- truncateLines: 1,
99
- children: workshop.instructorTitle
100
- })]
101
- }), /*#__PURE__*/_jsxs(FlexBox, {
102
- flexDirection: "column",
103
- alignSelf: "stretch",
104
- width: "100%",
105
- mt: 4,
106
- children: [workshop.nextCohortStartDate ? /*#__PURE__*/_jsxs(_Fragment, {
107
- children: [/*#__PURE__*/_jsx(Divider, {}), /*#__PURE__*/_jsxs(InfoRow, {
108
- icon: /*#__PURE__*/_jsx(CalendarIcon, {
109
- size: 16,
110
- "aria-hidden": true
111
- }),
112
- children: ["Next cohort: on", ' ', /*#__PURE__*/_jsx(Text, {
113
- as: "span",
114
- fontWeight: "bold",
115
- children: workshop.nextCohortStartDate
116
- })]
117
- })]
118
- }) : null, workshop.durationLabel ? /*#__PURE__*/_jsxs(_Fragment, {
119
- children: [/*#__PURE__*/_jsx(Divider, {}), /*#__PURE__*/_jsxs(InfoRow, {
120
- icon: /*#__PURE__*/_jsx(OptimizationClockIcon, {
121
- size: 16,
122
- "aria-hidden": true
123
- }),
124
- children: [/*#__PURE__*/_jsx(Text, {
125
- as: "span",
126
- fontWeight: "bold",
127
- children: workshop.durationLabel
128
- }), ' ', "long"]
129
- })]
130
- }) : null]
131
- })]
132
- })
133
- })
134
- });
135
- };