PageSourceSearch

https://www.kcl.ac.uk/_GhbZtw_8fe3d6e8-6c75-4fc9-88ef-46b7f2723b06…/js/page.hub.1ac6a76f90d68cb1bef9.mjs

js kcl.ac.uk collected 2026-09-24 07:33:24 UTC 68,699 bytes, 2,055 lines download raw bytes

1"use strict";
2(self["__LOADABLE_LOADED_CHUNKS__"] = self["__LOADABLE_LOADED_CHUNKS__"] || []).push([[3973],{
3
4/***/ 55619
5(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6
7// ESM COMPAT FLAG
8__webpack_require__.r(__webpack_exports__);
9
10// EXPORTS
11__webpack_require__.d(__webpack_exports__, {
12  "default": () => (/* binding */ Hub)
13});
14
15// EXTERNAL MODULE: ./node_modules/react/index.js
16var react = __webpack_require__(29633);
17// EXTERNAL MODULE: ./node_modules/prop-types/index.js
18var prop_types = __webpack_require__(86627);
19var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
20// EXTERNAL MODULE: ./src/app/blocks/shared/context/entryContext.js
21var entryContext = __webpack_require__(12077);
22// EXTERNAL MODULE: ./src/app/blocks/shared/components/index.js + 138 modules
23var components = __webpack_require__(61009);
24// EXTERNAL MODULE: ./src/app/blocks/shared/utils/index.js + 7 modules
25var utils = __webpack_require__(92562);
26;// ./src/app/blocks/pages/Hub/utils/context-helpers.js
27
28const parseEntry = (entry) => {
29  if ((0,utils/* isInvalidObject */.b2)(entry)) {
30    return {};
31  }
32  return {
33    ...entry,
34    heroBannerSlides: entry.heroBanner2026?.heroBannerSlide || [],
35    showStudyAtKings: entry.showStudyAtKings || []
36  };
37};
38
39// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules
40var styled_components_browser_esm = __webpack_require__(67780);
41;// ./src/app/blocks/pages/Hub/HubPage.styled.js
42
43const HubPageStyled = styled_components_browser_esm["default"].div`
44  display: flex;
45`;
46
47// EXTERNAL MODULE: ./node_modules/react-scroll/modules/index.js
48var modules = __webpack_require__(95687);
49// EXTERNAL MODULE: ./src/app/blocks/shared/hooks/index.js + 17 modules
50var hooks = __webpack_require__(88429);
51// EXTERNAL MODULE: ./src/app/blocks/shared/utils/helpers.js
52var helpers = __webpack_require__(91655);
53// EXTERNAL MODULE: ./src/app/blocks/pages/Hub/HubPromoSection/HubPromoSection.js + 1 modules
54var HubPromoSection = __webpack_require__(43415);
55// EXTERNAL MODULE: ./src/app/blocks/pages/Hub/NewsEventCardPromo/NewsEventCardPromo.js + 6 modules
56var NewsEventCardPromo = __webpack_require__(8586);
57// EXTERNAL MODULE: ./src/app/blocks/pages/ContentGeneric/CourseListing/index.js + 6 modules
58var CourseListing = __webpack_require__(65795);
59// EXTERNAL MODULE: ./src/app/blocks/pages/Hub/PeopleGroupDisplayer/PeopleGroupDisplayer.js + 3 modules
60var PeopleGroupDisplayer = __webpack_require__(21309);
61// EXTERNAL MODULE: ./src/app/blocks/pages/Hub/ResearchProjectListing/ResearchProjectListing.js + 6 modules
62var ResearchProjectListing = __webpack_require__(84104);
63// EXTERNAL MODULE: ./src/app/blocks/pages/UndergraduateCourse/DiscoverMore/VideoCardPicker/VideoCardPicker.js + 1 modules
64var VideoCardPicker = __webpack_require__(26997);
65// EXTERNAL MODULE: ./src/app/blocks/pages/Hub/utils/index.js
66var Hub_utils = __webpack_require__(96517);
67// EXTERNAL MODULE: ./src/app/blocks/pages/Hub/Composer/Composer.styled.js
68var Composer_styled = __webpack_require__(80969);
69// EXTERNAL MODULE: ./src/app/blocks/pages/ContentGeneric/ContactUs/ContactUs.js + 4 modules
70var ContactUs = __webpack_require__(32624);
71;// ./src/app/blocks/pages/Hub/Composer/Composer.js
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86function Composer() {
87  const { bodyContentComposer } = (0,hooks/* useEntry */.EN)();
88  const getComponent = (componentObject, idx) => {
89    if ((0,helpers/* isInvalidObject */.b2)(componentObject)) return null;
90    const { type, value } = componentObject;
91    const variant = (0,Hub_utils/* getVariantByIndex */.Tw)(idx);
92    switch (type) {
93      case "newsEventCardPromo":
94        return /* @__PURE__ */ react.createElement(
95          NewsEventCardPromo/* NewsEventCardPromo */.v,
96          {
97            key: idx,
98            title: value.title,
99            orgUnit: value.orgUnits,
100            format: value.format,
101            backgroundColour: value.backgroundColour,
102            headingLevel: value.headingLevel
103          }
104        );
105      case "richText":
106        return /* @__PURE__ */ react.createElement(Composer_styled/* RichTextWrapper */.N, null, /* @__P
106URE__ */ react.createElement(components/* RichText */.sD, { value }));
107      case "promoSection":
108        return /* @__PURE__ */ react.createElement(HubPromoSection/* HubPromoSection */.U, { promoSection: value });
109      case "splitTextMedia":
110        return /* @__PURE__ */ react.createElement(components/* SplitTextMedia */.mk, { value });
111      case "courseListing":
112        return /* @__PURE__ */ react.createElement(CourseListing/* CourseListing */.y, { value });
113      case "peopleGroupPicker":
114        return /* @__PURE__ */ react.createElement(PeopleGroupDisplayer/* PeopleGroupDisplayer */.s, { peopleGroupPicker: value });
115      case "researchProjectListing":
116        return /* @__PURE__ */ react.createElement(ResearchProjectListing/* ResearchProjectListing */.h, { value });
117      case "pageDivider":
118        return /* @__PURE__ */ react.createElement(components/* DividerCta */.oB, { value });
119      case "testimonialPicker":
120        return /* @__PURE__ */ react.createElement(components/* Testimonials */.bZ, { value });
121      case "featureCard":
122        return /* @__PURE__ */ react.createElement(components/* FeatureCard */.dd, { value });
123      case "youTubeVideo":
124      case "kalturaVideo":
125        return /* @__PURE__ */ react.createElement(components/* Video */.Ce, { type, value });
126      case "videoCardPicker":
127        return /* @__PURE__ */ react.createElement(VideoCardPicker/* default */.A, { sectionData: value });
128      case "shortsVideoCard":
129        return /* @__PURE__ */ react.createElement(VideoCardPicker/* default */.A, { sectionData: value, portrait: true });
130      case "coursePicker":
131        return /* @__PURE__ */ react.createElement(components/* Courses */.nP, { value });
132      case "listComponentGroup":
133        return /* @__PURE__ */ react.createElement(components/* Lists */.Q8, { value, variant });
134      case "crmRealTimeMarketingForm":
135        return /* @__PURE__ */ react.createElement(modules/* Element */.Hg, { name: "dynamicscrm" }, /* @__PURE__ */ react.createElement(components/* RealTimeMarketingForm */.Qg, { value }));
136      case "geckoForm":
137        return /* @__PURE__ */ react.createElement(components/* GeckoForm */.QS, { value });
138      case "accordion":
139        return /* @__PURE__ */ react.createElement(
140          components/* AccordionsWithCanvas */.Sn,
141          {
142            value: { ...value, panels: value.tabSection }
143          }
144        );
145      case "contactUs":
146        return /* @__PURE__ */ react.createElement(
147          ContactUs/* ContactUs */.Z,
148          {
149            value,
150            fullWidth: true,
151            backgroundColour: value.backgroundColour
152          }
153        );
154      default:
155        return null;
156    }
157  };
158  return /* @__PURE__ */ react.createElement(react.Fragment, null, bodyContentComposer.map((item, idx) => {
159    return /* @__PURE__ */ react.createElement(react.Fragment, { key: idx }, getComponent(item, idx));
160  }));
161}
162
163;// ./src/app/blocks/pages/Hub/HubPage.js
164
165
166
167
168
169
170const HubPage = () => {
171  return /* @__PURE__ */ react.createElement(components/* PageLayout */.Mx, null, /* @__PURE__ */ react.createElement(entryContext/* EntryContextProvider */.B, { parseEntry: parseEntry }, /* @__PURE__ */ react.createElement(components/* HeaderSwitcher */.d1, null), /* @__PURE__ */ react.createElement(HubPageStyled, null, /* @__PURE__ */ react.createElement(components/* Main */.gZ, null, /* @__PURE__ */ react.createElement(components/* SectionNav */.T1, null), /* @__PURE__ */ react.createElement(components/* HeroCarousel */.ne, null), /* @__PURE__ */ react.createElement(components/* BreadcrumbNode */.Qn, null), /* @__PURE__ */ react.createElement(Composer, null), /* @__PURE__ */ react.createElement(components/* StudyAtKings */.Xl, null), /* @__PURE__ */ react.createElement(components/* ConnectWithUs */.bJ, null))), /* @__PURE__ */ react.createElement(components/* Footer */.wi, null)));
172};
173/* harmony default export */ const Hub_HubPage = (HubPage);
174
175// EXTERNAL MODULE: ./src/app/features/layout/components/Layout.js + 12 modules
176var Layout = __webpack_require__(919);
177// EXTERNAL MODULE: ./src/app/features/common/heroBanner/index.js
178var heroBanner = __webpack_require__(22886);
179// EXTERNAL MODULE: ./src/app/features/layout/fullWidthComposer/index.js + 30 modules
180var fullWidthComposer = __webpack_require__(62312);
181// EXTERNAL MODULE: ./src/app/features/common/Column/components/Column.js + 1 modules
182var Column = __webpack_require__(28429);
183// EXTERNAL MODULE: ./src/app/features/common/Container/components/Container.js
184var Container = __webpack_require__(48231);
185;// ./src/app/pages/HubPage/HubPage.styled.js
186
187const HubPage_styled_HubPageStyled = styled_components_browser_esm["default"].div``;
188/* harmony default export */ const HubPage_styled = (HubPage_styled_HubPageStyled);
189
190// EXTERNAL MODULE: ./src/app/features/search/components/search/HubSearch.js
191var HubSearch = __webpack_require__(14495);
192// EXTERNAL MODULE: ./src/app/features/common/index.js + 24 modules
193var common = __webpack_require__(70910);
194// EXTERNAL MODULE: ./src/app/features/search/components/search/HubSearch.styled.js
195var HubSearch_styled = __webpack_require__(61450);
196// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js
197var react_router = __webpack_require__(45666);
198;// ./src/app/features/search/components/search/HubSearchJobs.js
199
200
201
202
203
204const HubSearchJob = ({ showHeading }) => {
205  const [state, setState] = (0,react.useState)({
206    onSubmitClicked: false,
207    searchTerms: ""
208  });
209  const inputChangeHandler = (event) => {
210    setState({
211      ...state,
212      searchTerms: event.target.value
213    });
214  };
215  const onSubmitHandler = (event) => {
216    event.preventDefault();
217    setState({ ...state, onSubmitClicked: true });
218  };
219  return state.onSubmitClicked ? /* @__PURE__ */ react.createElement(
220    react_router/* Redirect */.rd,
221    {
222      push: true,
223      to: `/jobs/search?term=${state.searchTerms.replace("&", "%26")}`
224    }
225  ) : /* @__PURE__ */ react.createElement(HubSearch_styled/* default */.A, { onSubmit: (event) => onSubmitHandler(event) }, showHeading && /* @__PURE__ */ react.createElement(common/* Heading */.DZ, { level: 1 }, "Search for jobs"), /* @__PURE__ */ react.createElement("div", { className: "input-group" }, /* @__PURE__ */ react.createElement("label", { htmlFor: "search", className: "sr-only" }, "Search for jobs"), /* @__PURE__ */ react.createElement(
226    "input",
227    {
228      onChange: (event) => inputChangeHandler(event),
229      placeholder: "Search for jobs"
230    }
231  ), /* @__PURE__ */ react.createElement(
232    common/* Button */.$n,
233    {
234      uri: `/jobs/search?term=${state.searchTerms.replace("&", "%26")}`,
235      colour: "red",
236      title: "Find jobs",
237      role: "button"
238    }
239  )));
240};
241HubSearchJob.propTypes = {
242  showHeading: (prop_types_default()).bool
243};
244HubSearchJob.defaultProps = {
245  showHeading: true
246};
247/* harmony default export */ const HubSearchJobs = (HubSearchJob);
248
249;// ./src/app/pages/HubPage/HubPage.js
250
251
252
253
254
255
256
257
258
259
260const HubPage_HubPage = ({ entry }) => {
261  const showSearchOn = [
262    "53b55f5d-b28b-4655-b8db-a5b5c81d5fe5",
263    //Study hubpage
264    "4ba4e6e6-728f-4a39-83ef-7af83fe6f3d5",
265    //UG hubpage
266    "f2a4b17e-eaef-4875-9f78-8280d843fd39",
267    //PGT hubpage
268    "d122d8f5-5f4e-4279-87a7-0e8d8ce219ff"
269    //PGR hubpage
270  ];
271  const showJobSearchOn = [
272    "6017f527-a90c-42d4-a738-5a58c653030e"
273    //Job hubpage
274  ];
275  let searchLevel;
276  if (entry.sys.id === "f2a4b17e-eaef-4875-9f78-8280d843fd39") {
277    searchLevel = "postgraduate-taught";
278  } else if (entry.sys.id === "d122d8f5-5f4e-4279-87a7-0e8d8ce219ff") {
279    searchLevel = "postgraduate-research";
280  } else {
281    searchLevel = "undergraduate";
282  }
283  const isKifHome = entry.sys.id === "b81bd525-b36f-4118-92bc-e541900a595e";
284  return /* @__PURE__ */ react.createElement(Layout/* default */.A, { showThirdNav: entry.showThirdNavigation }, /* @__PURE__ */ react.createElement(HubPage_styled, null, !isKifHome && /* @__PURE__ */ react.createElement(
285    heroBanner/* default */.A,
286    {
287      heroBanner: entry.heroBanner,
288      pageTitle: entry.title,
289      className: "herobannerHub"
290    }
291  ), showSearchOn.some((entryId) => entryId === entry.sys.id) && /* @__PURE__ */ react.createElement(Container/* default */.A, null, /* @__PURE__ */ react.createElement(Column/* default */.A, null, /* @__PURE__ */ react.createElement(HubSearch/* default */.A, { level: searchLevel }))), showJobSearchOn.some((entryId) => entryId === entry.sys.id) && /* @__PURE__ */ react.createElement(Container/* default */.A, null, /* @__PURE__ */ react.createElement(Column/* default */.A, null, /* @__PURE__ */ react.createElement(HubSearchJobs, null))), /* @__PURE__ */ react.createElement(
292    fullWidthComposer/* default */.A,
293    {
294      composer: entry.bodyContentComposer,
295      entry,
296      title: entry.title
297    }
298  )));
299};
300HubPage_HubPage.propTypes = {
301  entry: (prop_types_default()).object
302};
303/* harmony default export */ const pages_HubPage_HubPage = (HubPage_HubPage);
304
305;// ./src/app/blocks/pages/Hub/index.js
306
307
308
309
310const pages_Hub_HubPage = ({ entry }) => {
311  if (entry.useNewBrand) {
312    return /* @__PURE__ */ react.createElement(Hub_HubPage, null);
313  }
314  return /* @__PURE__ */ react.createElement(pages_HubPage_HubPage, { entry });
315};
316pages_Hub_HubPage.propTypes = {
317  entry: (prop_types_default()).object
318};
319/* harmony default export */ const Hub = (pages_Hub_HubPage);
320
321
322/***/ },
323
324/***/ 26997
325(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
326
327
328// EXPORTS
329__webpack_require__.d(__webpack_exports__, {
330  A: () => (/* binding */ VideoCardPicker_VideoCardPicker)
331});
332
333// EXTERNAL MODULE: ./node_modules/prop-types/index.js
334var prop_types = __webpack_require__(86627);
335var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
336// EXTERNAL MODULE: ./node_modules/react/index.js
337var react = __webpack_require__(29633);
338// EXTERNAL MODULE: ./src/app/blocks/shared/utils/helpers.js
339var helpers = __webpack_require__(91655);
340// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules
341var styled_components_browser_esm = __webpack_require__(67780);
342;// ./src/app/blocks/pages/UndergraduateCourse/DiscoverMore/VideoCardPicker/VideoCardPicker.styled.js
343
344const VideoCardPickerStyled = styled_components_browser_esm["default"].div`
345  display: flex;
346  flex-direction: column;
347  row-gap: 40px;
348  padding-top: ${({ $noHeading }) => $noHeading ? "0" : "40px"};
349  padding-bottom: 40px;
350
351  h2,
352  h3 {
353    display: flex;
354    justify-content: center;
355    color: #000000;
356    font-family: Kings Caslon Display, sans-serif;
357    font-size: 2.375rem;
358    font-weight: 400;
359    line-height: 1;
360    text-transform: initial;
361  }
362
363  .video-cards-header {
364    text-align: center;
365  }
366
367  .video-cards-header-container {
368    display: flex;
369    flex-direction: column;
370    row-gap: 24px;
371  }
372
373  .video-cards-summary {
374    display: flex;
375    text-align: center;
376    max-width: 696px;
377    margin: 0 auto;
378    flex-direction: column;
379    font-family: 'Wix Madefor Text', sans-serif;
380    font-weight: 400;
381    font-size: 1.125rem;
382    line-height: 1.5;
383    color: #000000;
384  }
385
386  .video-cards-container {
387    display: flex;
388    display: grid;
389    grid-column-gap: 24px;
390    grid-row-gap: 32px;
391    margin-bottom: 16px;
392    justify-content: center;
393
394    ${({ $cardCount }) => {
395  if ($cardCount === 1) {
396    return `
397          grid-template-columns: 1fr;
398          max-width: 1200px;
399        `;
400  } else if ($cardCount === 2) {
401    return `
402          grid-template-columns: 1fr 1fr;
403          grid-template-columns: repeat(2, 360px);
404        `;
405  } else if ($cardCount === 4) {
406    return `
407          grid-template-columns: repeat(4, 1fr);
408        `;
409  } else {
410    return `
411          grid-template-columns: 1fr 1fr 1fr;
412          grid-template-columns: repeat(3, 280px);
413        `;
414  }
415}}
416  }
417
418  .video-cards-cta {
419    display: flex;
420    justify-content: center;
421  }
422
423  @media (max-width: ${(p) => p.theme.breakpoints.tablet}px) {
424    padding-top: ${({ $noHeading }) => $noHeading ? "0" : "16px"};
425    padding-bottom: 16px;
426    row-gap: 32px;
427
428    .video-cards-container {
429      display: grid;
430      grid-template-columns: 1fr;
431      margin-bottom: 16px;
432    }
433  }
434`;
435
436// EXTERNAL MODULE: ./src/app/blocks/pages/UndergraduateCourse/DiscoverMore/VideoCaseStudySection/VideoCard.js
437var VideoCard = __webpack_require__(98803);
438// EXTERNAL MODULE: ./src/app/blocks/shared/components/index.js + 138 modules
439var components = __webpack_require__(61009);
440;// ./src/app/blocks/pages/UndergraduateCourse/DiscoverMore/VideoCardPicker/VideoCardPicker.js
441
442
443
444
445
446
447const VideoCardPicker = ({ sectionData, portrait }) => {
448  if (!(0,helpers/* isValidArray */.OP)(sectionData.kalturaVideo)) {
449    return null;
450  }
451  const cardCount = sectionData.kalturaVideo.length;
452  const noHeading = !sectionData.title;
453  const bgColour = sectionData.backgroundColour === "Primary" ? "#ffffff" : "#EAEFF0";
454  return /* @__PURE__ */ react.createElement(components/* Section */.wn, { bgColour, spacing: noHeading ? "lg-no-top" : "" }, /* @__PURE__ */ react.createElement(
455    VideoCardPickerStyled,
456    {
457      $cardCount: cardCount,
458      $noHeading: noHeading,
459      className: "discover-more-video-cards"
460    },
461    /* @__PURE__ */ react.createElement("div", { className: "video-cards-header-container" }, /* @__PURE__ */ react.createElement(
462      components/* Heading */.DZ,
463      {
464        headingLevel: sectionData.headingLevel,
465        headingText: sectionData.title,
466        className: "video-cards-header"
467      }
468    ), sectionData.summary && /* @__PURE__ */ react.createElement("p", { className: "video-cards-summary" }, sectionData.summary)),
469    /* @__PURE__ */ react.createElement("div", { className: "video-cards-container" }, sectionData.kalturaVideo.map((video, idx) => /* @__PURE__ */ react.createElement(
470      VideoCard/* default */.A,
471      {
472        key: video.entryTitle || video.kalturaLink || idx,
473        cardData: video,
474        cardCount,
475        showCaseStudyLink: false,
476        portrait,
477        headingLevel: sectionData.headingLevel
478      }
479    ))),
480    sectionData.ctaLabel && sectionData.ctaLink?.url && /* @__PURE__ */ react.createElement("div", { className: "video-cards-cta" }, /* @__PURE__ */ react.createElement(
481      components/* Button */.$n,
482      {
483        variant: "primary",
484        onClick: () => window.location.href = sectionData.ctaLink.url
485      },
486      sectionData.ctaLabel
487    ))
488  ));
489};
490VideoCardPicker.propTypes = {
491  portrait: (prop_types_default()).bool,
492  sectionData: prop_types_default().shape({
493    title: (prop_types_default()).string,
494    kalturaVideo: prop_types_default().arrayOf((prop_types_default()).object).isRequired,
495    backgroundColour: (prop_types_default()).string,
496    headingLevel: prop_types_default().oneOf(["Level 2", "Level 3"]),
497    summary: (prop_types_default()).string,
498    ctaLabel: (prop_types_default()).string,
499    ctaLink: prop_types_default().shape({
500      label: (prop_types_default()).string,
501      url: (prop_types_default()).string
502    })
503  })
504};
505/* harmony default export */ const VideoCardPicker_VideoCardPicker = (VideoCardPicker);
506
507
508/***/ },
509
510/***/ 98803
511(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
512
513/* harmony export */ __webpack_require__.d(__webpack_exports__, {
514/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)
515/* harmony export */ });
516/* harmony import */ var _VideoCard_styled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(14339);
517/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29633);
518/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86627);
519/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);
520/* harmony import */ var _features_kalturaVideo_components_KalturaVideo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(39839);
521/* harmony import */ var _shared_components_LinkCta_LinkCta__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69750);
522/* harmony import */ var _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18149);
523/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70466);
524/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6__);
525/* harmony import */ var _shared_components__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(61009);
526
527
528
529
530
531
532
533
534const VideoCard = ({
535  cardData,
536  cardCount,
537  showCaseStudyLink,
538  portrait,
539  headingLevel
540}) => {
541  if (lodash_isEmpty__WEBPACK_IMPORTED_MODULE_6___default()(cardData)) {
542    return null;
543  }
544  const showLink = showCaseStudyLink && cardData.sys?.uri;
545  const titleText = cardData.title || cardData.videoTitle;
546  const descriptionText = cardData.description || cardData.videoDescription;
547  const childHeadingLevel = headingLevel === "Level 3" ? "Level 4" : "Level 3";
548  const hasDescription = showLink || titleText || descriptionText;
549  return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement(_VideoCard_styled__WEBPACK_IMPORTED_MODULE_0__/* .VideoCardStyled */ .p, { $cardCount: cardCount, $portrait: portrait }
549, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement(
550    _features_kalturaVideo_components_KalturaVideo__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,
551    {
552      className: "video-card-video",
553      url: cardData.kalturaVideo?.kalturaLink || cardData?.kalturaLink,
554      portrait
555    }
556  ), hasDescription && /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", { className: "video-card-description-container" }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", { className: "description-wrapper" }, showLink ? /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement(
557    _shared_components_LinkCta_LinkCta__WEBPACK_IMPORTED_MODULE_4__/* .LinkCta */ .$,
558    {
559      fullWidth: true,
560      url: cardData.sys.uri,
561      rightIcon: /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement(
562        _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_5__/* .FontAwesomeIcon */ .g,
563        {
564          icon: "fa-solid fa-arrow-right",
565          className: "icon--title"
566        }
567      ),
568      className: "promoCard--title"
569    },
570    cardData.title
571  ) : /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement(
572    _shared_components__WEBPACK_IMPORTED_MODULE_7__/* .Heading */ .DZ,
573    {
574      headingText: titleText,
575      headingLevel: childHeadingLevel
576    }
577  ), descriptionText && /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_1__.createElement("p", null, descriptionText))));
578};
579VideoCard.propTypes = {
580  cardData: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({
581    title: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),
582    videoTitle: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),
583    description: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),
584    videoDescription: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),
585    kalturaVideo: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({
586      kalturaLink: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)
587    }),
588    kalturaLink: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string),
589    sys: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({
590      uri: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)
591    })
592  }),
593  cardCount: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().number),
594  showCaseStudyLink: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),
595  portrait: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().bool),
596  headingLevel: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf(["Level 2", "Level 3"])
597};
598/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoCard);
599
600
601/***/ },
602
603/***/ 14339
604(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
605
606/* harmony export */ __webpack_require__.d(__webpack_exports__, {
607/* harmony export */   p: () => (/* binding */ VideoCardStyled)
608/* harmony export */ });
609/* harmony import */ var styled_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67780);
610/* harmony import */ var _theme_breakpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3726);
611
612
613const baseStyles = (0,styled_components__WEBPACK_IMPORTED_MODULE_0__.css)`
614  overflow: hidden;
615  display: flex;
616  flex-direction: column;
617  width: 100%;
618  gap: 0;
619
620  .video-card-video {
621    border-radius: ${(p) => p.$cardCount > 3 ? "4px" : "8px"};
622    overflow: hidden;
623    width: 100%;
624    height: 193.239px;
625    padding: 0;
626    margin: 0;
627    box-sizing: border-box;
628  }
629
630  .promoCard--title {
631    line-height: 150%;
632  }
633
634  .icon--title {
635    padding-top: 4.8px;
636    padding-left: 8px;
637  }
638
639  .video-card-description-container {
640    width: 100%;
641    display: flex;
642    flex-direction: column;
643    row-gap: 16px;
644    padding: 0;
645
646    .description-wrapper {
647      padding-top: 24px;
648      justify-content: flex-start;
649      align-items: flex-start;
650      height: 100%;
651      box-sizing: border-box;
652      display: flex;
653      flex-direction: column;
654      row-gap: 16px;
655
656      h3,
657      h4 {
658        color: #000000;
659        font-family: Wix Madefor Display, sans-serif;
660        font-weight: 700;
661        font-size: 1.313rem;
662        line-height: 1.3;
663        text-transform: none;
664      }
665
666      p {
667        color: #000000;
668        font-family: Wix Madefor Text, sans-serif;
669        font-weight: 400;
670        font-size: 1rem;
671        font-style: normal;
672        line-height: 1.5;
673        text-align: left;
674      }
675    }
676  }
677  @media (max-width: ${(p) => p.theme.breakpoints.tablet}px) {
678    .video-card-description-container {
679      .description-wrapper {
680        row-gap: 24px;
681      }
682    }
683  }
684`;
685const cardCountVariantStyles = (0,styled_components__WEBPACK_IMPORTED_MODULE_0__.css)`
686  @media (min-width: ${_theme_breakpoints__WEBPACK_IMPORTED_MODULE_1__/* .mediaBreakpoints */ .l.tablet}) {
687    ${(p) => {
688  switch (p.$cardCount) {
689    case 1:
690      return (0,styled_components__WEBPACK_IMPORTED_MODULE_0__.css)`
691            flex-direction: row;
692            max-width: 1200px;
693
694            .video-card-video {
695              flex: 1;
696              height: 100%;
697              min-height: 338.266px;
698              width: 580px;
699            }
700
701            .video-card-description-container {
702              flex: 1;
703              width: 50%;
704
705              .description-wrapper {
706                padding: 40px;
707                justify-content: center;
708
709                h3,
710                h4 {
711                  font-family: Kings Caslon Display, serif;
712                  font-size: 2rem;
713                  line-height: 1.2
714                  font-weight: 400;
715                }
716              }
717            }
718          `;
719    case 2:
720      return (0,styled_components__WEBPACK_IMPORTED_MODULE_0__.css)`
721            flex-direction: column;
722            gap: 0;
723
724            .video-card-video {
725              height: 338.266px;
726            }
727
728            .video-card-description-container {
729              .description-wrapper {
730                h3,
731                h4 {
732                  font-family: Kings Caslon Display, serif;
733                  font-size: 2rem;
734                  line-height: 1.2;
735                  line-height: 1.2;
736                  font-weight: 400;
737                }
738              }
739            }
740          `;
741    default:
742      return (0,styled_components__WEBPACK_IMPORTED_MODULE_0__.css)`
743            flex-direction: column;
744            gap: 0;
745
746            .video-card-video {
747              height: 216.338px;
748            }
749
750            .video-card-description-container {
751              .description-wrapper {
752                h3,
753                h4 {
754                  font-size: 1.313rem;
755                  line-height: 1.3;
756                  font-weight: 700;
757                  font-family: Wix Made for Display, sans-serif;
758                }
759              }
760            }
761          `;
762  }
763}};
764  }
765`;
766const VideoCardStyled = styled_components__WEBPACK_IMPORTED_MODULE_0__["default"].div`
767  ${baseStyles}
768  ${cardCountVariantStyles}
769  ${(p) => p.$portrait && (0,styled_components__WEBPACK_IMPORTED_MODULE_0__.css)`
770      .video-card-video {
771        height: auto;
772        min-height: unset;
773        overflow: visible;
774        width: 100%;
775      }
776    `}
777`;
778
779
780/***/ },
781
782/***/ 4093
783(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
784
785
786// EXPORTS
787__webpack_require__.d(__webpack_exports__, {
788  A: () => (/* binding */ BreadcrumbLink_BreadcrumbLink)
789});
790
791// EXTERNAL MODULE: ./node_modules/react/index.js
792var react = __webpack_require__(29633);
793// EXTERNAL MODULE: ./node_modules/prop-types/index.js
794var prop_types = __webpack_require__(86627);
795var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
796// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules
797var styled_components_browser_esm = __webpack_require__(67780);
798// EXTERNAL MODULE: ./src/app/theme/spacing.js
799var spacing = __webpack_require__(59778);
800;// ./src/app/features/common/BreadcrumbLink/BreadcrumbLink.styled.js
801
802
803const BreadcrumbLinkStyled = styled_components_browser_esm["default"].div`
804  margin: ${spacing/* default */.A.spacing24} 0 ${spacing/* default */.A.spacing32} 0;
805
806  a {
807    color: ${(p) => p.theme.colours.bluePrimary};
808    font-family: ${(p) => p.theme.font.family.regular};
809    font-weight: 400;
810    &::before {
811      content: '\\e901';
812      font-family: ${(p) => p.theme.font.family.icon};
813      font-size: 0.65rem;
814      margin-right: 8px;
815      display: inline-block;
816      vertical-align: middle;
817    }
818    &:hover {
819      color: ${(p) => p.theme.colours.blueSecondary};
820      text-decoration: none;
821      cursor: pointer;
822    }
823  }
824`;
825/* harmony default export */ const BreadcrumbLink_styled = (BreadcrumbLinkStyled);
826
827// EXTERNAL MODULE: ./src/app/features/common/index.js + 24 modules
828var common = __webpack_require__(70910);
829;// ./src/app/features/common/BreadcrumbLink/BreadcrumbLink.js
830
831
832
833
834function BreadcrumbLink({ path, children }) {
835  return /* @__PURE__ */ react.createElement(BreadcrumbLink_styled, null, /* @__PURE__ */ react.createElement(common/* Link */.N_, { uri: path }, children));
836}
837BreadcrumbLink.propTypes = {
838  path: (prop_types_default()).string,
839  children: prop_types_default().oneOfType([(prop_types_default()).node, (prop_types_default()).string])
840};
841/* harmony default export */ const BreadcrumbLink_BreadcrumbLink = (BreadcrumbLink);
842
843
844/***/ },
845
846/***/ 2962
847(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
848
849
850// EXPORTS
851__webpack_require__.d(__webpack_exports__, {
852  A: () => (/* binding */ Map_Map)
853});
854
855// EXTERNAL MODULE: ./node_modules/react/index.js
856var react = __webpack_require__(29633);
857// EXTERNAL MODULE: ./node_modules/prop-types/index.js
858var prop_types = __webpack_require__(86627);
859var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
860// EXTERNAL MODULE: ./src/app/core/util/isClient.js
861var isClient = __webpack_require__(74831);
862// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules
863var styled_components_browser_esm = __webpack_require__(67780);
864;// ./src/app/features/common/Map/Map.styled.js
865
866const MapStyled = styled_components_browser_esm["default"].div`
867  /* required styles */
868
869  .leaflet-pane,
870  .leaflet-tile,
871  .leaflet-marker-icon,
872  .leaflet-marker-shadow,
873  .leaflet-tile-container,
874  .leaflet-pane > svg,
875  .leaflet-pane > canvas,
876  .leaflet-zoom-box,
877  .leaflet-image-layer,
878  .leaflet-layer {
879    position: absolute;
880    left: 0;
881    top: 0;
882  }
883  .leaflet-container {
884    overflow: hidden;
885  }
886  .leaflet-tile,
887  .leaflet-marker-icon,
888  .leaflet-marker-shadow {
889    -webkit-user-select: none;
890    -moz-user-select: none;
891    user-select: none;
892    -webkit-user-drag: none;
893  }
894  /* Prevents IE11 from highlighting tiles in blue */
895  .leaflet-tile::selection {
896    background: transparent;
897  }
898  /* Safari renders non-retina tile on retina better with this, but Chrome is worse */
899  .leaflet-safari .leaflet-tile {
900    image-rendering: -webkit-optimize-contrast;
901  }
902  /* hack that prevents hw layers "stretching" when loading new tiles */
903  .leaflet-safari .leaflet-tile-container {
904    width: 1600px;
905    height: 1600px;
906    -webkit-transform-origin: 0 0;
907  }
908  .leaflet-marker-icon,
909  .leaflet-marker-shadow {
910    display: block;
911  }
912  /* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
913  /* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
914  .leaflet-container .leaflet-overlay-pane svg,
915  .leaflet-container .leaflet-marker-pane img,
916  .leaflet-container .leaflet-shadow-pane img,
917  .leaflet-container .leaflet-tile-pane img,
918  .leaflet-container img.leaflet-image-layer,
919  .leaflet-container .leaflet-tile {
920    max-width: none !important;
921    max-height: none !important;
922  }
923
924  .leaflet-container.leaflet-touch-zoom {
925    -ms-touch-action: pan-x pan-y;
926    touch-action: pan-x pan-y;
927  }
928  .leaflet-container.leaflet-touch-drag {
929    -ms-touch-action: pinch-zoom;
930    /* Fallback for FF which doesn't support pinch-zoom */
931    touch-action: none;
932    touch-action: pinch-zoom;
933  }
934  .leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
935    -ms-touch-action: none;
936    touch-action: none;
937  }
938  .leaflet-container {
939    -webkit-tap-highlight-color: transparent;
940  }
941  .leaflet-container a {
942    -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
943  }
944  .leaflet-tile {
945    filter: inherit;
946    visibility: hidden;
947  }
948  .leaflet-tile-loaded {
949    visibility: inherit;
950  }
951  .leaflet-zoom-box {
952    width: 0;
953    height: 0;
954    -moz-box-sizing: border-box;
955    box-sizing: border-box;
956    z-index: 800;
957  }
958  /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
959  .leaflet-overlay-pane svg {
960    -moz-user-select: none;
961  }
962
963  .leaflet-pane {
964    z-index: 400;
965  }
966
967  .leaflet-tile-pane {
968    z-index: 200;
969  }
970  .leaflet-overlay-pane {
971    z-index: 400;
972  }
973  .leaflet-shadow-pane {
974    z-index: 500;
975  }
976  .leaflet-marker-pane {
977    z-index: 600;
978  }
979  .leaflet-tooltip-pane {
980    z-index: 650;
981  }
982  .leaflet-popup-pane {
983    z-index: 700;
984  }
985
986  .leaflet-map-pane canvas {
987    z-index: 100;
988  }
989  .leaflet-map-pane svg {
990    z-index: 200;
991  }
992
993  .leaflet-vml-shape {
994    width: 1px;
995    height: 1px;
996  }
997  .lvml {
998    behavior: url(#default#VML);
999    display: inline-block;
1000    position: absolute;
1001  }
1002
1003  /* control positioning */
1004
1005  .leaflet-control {
1006    position: relative;
1007    z-index: 800;
1008    pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
1009    pointer-events: auto;
1010  }
1011  .leaflet-top,
1012  .leaflet-bottom {
1013    position: absolute;
1014    z-index: 1000;
1015    pointer-events: none;
1016  }
1017  .leaflet-top {
1018    top: 0;
1019  }
1020  .leaflet-right {
1021    right: 0;
1022  }
1023  .leaflet-bottom {
1024    bottom: 0;
1025  }
1026  .leaflet-left {
1027    left: 0;
1028  }
1029  .leaflet-control {
1030    float: left;
1031    clear: both;
1032  }
1033  .leaflet-right .leaflet-control {
1034    float: right;
1035  }
1036  .leaflet-top .leaflet-control {
1037    margin-top: 10px;
1038  }
1039  .leaflet-bottom .leaflet-control {
1040    margin-bottom: 10px;
1041  }
1042  .leaflet-left .leaflet-control {
1043    margin-left: 10px;
1044  }
1045  .leaflet-right .leaflet-control {
1046    margin-right: 10px;
1047  }
1048
1049  /* zoom and fade animations */
1050
1051  .leaflet-fade-anim .leaflet-tile {
1052    will-change: opacity;
1053  }
1054  .leaflet-fade-anim .leaflet-popup {
1055    opacity: 0;
1056    -webkit-transition: opacity 0.2s linear;
1057    -moz-transition: opacity 0.2s linear;
1058    transition: opacity 0.2s linear;
1059  }
1060  .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
1061    opacity: 1;
1062  }
1063  .leaflet-zoom-animated {
1064    -webkit-transform-origin: 0 0;
1065    -ms-transform-origin: 0 0;
1066    transform-origin: 0 0;
1067  }
1068  .leaflet-zoom-anim .leaflet-zoom-animated {
1069    will-change: transform;
1070  }
1071  .leaflet-zoom-anim .leaflet-zoom-animated {
1072    -webkit-transition: -webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1);
1073    -moz-transition: -moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1);
1074    transition: transform 0.25s cubic-bezier(0, 0, 0.25, 1);
1075  }
1076  .leaflet-zoom-anim .leaflet-tile,
1077  .leaflet-pan-anim .leaflet-tile {
1078    -webkit-transition: none;
1079    -moz-transition: none;
1080    transition: none;
1081  }
1082
1083  .leaflet-zoom-anim .leaflet-zoom-hide {
1084    visibility: hidden;
1085  }
1086
1087  /* cursors */
1088
1089  .leaflet-interactive {
1090    cursor: pointer;
1091  }
1092  .leaflet-grab {
1093    cursor: -webkit-grab;
1094    cursor: -moz-grab;
1095    cursor: grab;
1096  }
1097  .leaflet-crosshair,
1098  .leaflet-crosshair .leaflet-interactive {
1099    cursor: crosshair;
1100  }
1101  .leaflet-popup-pane,
1102  .leaflet-control {
1103    cursor: auto;
1104  }
1105  .leaflet-dragging .leaflet-grab,
1106  .leaflet-dragging .leaflet-grab .leaflet-interactive,
1107  .leaflet-dragging .leaflet-marker-draggable {
1108    cursor: move;
1109    cursor: -webkit-grabbing;
1110    cursor: -moz-grabbing;
1111    cursor: grabbing;
1112  }
1113
1114  /* marker & overlays interactivity */
1115  .leaflet-marker-icon,
1116  .leaflet-marker-shadow,
1117  .leaflet-image-layer,
1118  .leaflet-pane > svg path,
1119  .leaflet-tile-container {
1120    pointer-events: none;
1121  }
1122
1123  .leaflet-marker-icon.leaflet-interactive,
1124  .leaflet-image-layer.leaflet-interactive,
1125  .leaflet-pane > svg path.leaflet-interactive,
1126  svg.leaflet-image-layer.leaflet-interactive path {
1127    pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
1128    pointer-events: auto;
1129  }
1130
1131  /* visual tweaks */
1132
1133  .leaflet-container {
1134    background: #ddd;
1135    outline: 0;
1136  }
1137  .leaflet-container a {
1138    color: #0078a8;
1139  }
1140  .leaflet-container a.leaflet-active {
1141    outline: 2px solid orange;
1142  }
1143  .leaflet-zoom-box {
1144    border: 2px dotted #38f;
1145    background: rgba(255, 255, 255, 0.5);
1146  }
1147
1148  /* general typography */
1149  .leaflet-container {
1150    font: 12px/1.5 'Helvetica Neue', Arial, Helvetica, sans-serif;
1151  }
1152
1153  /* general toolbar styles */
1154
1155  .leaflet-bar {
1156    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.65);
1157    border-radius: 4px;
1158  }
1159  .leaflet-bar a,
1160  .leaflet-bar a:hover {
1161    background-color: #fff;
1162    border-bottom: 1px solid #ccc;
1163    width: 26px;
1164    height: 26px;
1165    line-height: 26px;
1166    display: block;
1167    text-align: center;
1168    text-decoration: none;
1169    color: black;
1170  }
1171  .leaflet-bar a,
1172  .leaflet-control-layers-toggle {
1173    background-position: 50% 50%;
1174    background-repeat: no-repeat;
1175    display: block;
1176  }
1177  .leaflet-bar a:hover {
1178    background-color: #f4f4f4;
1179  }
1180  .leaflet-bar a:first-child {
1181    border-top-left-radius: 4px;
1182    border-top-right-radius: 4px;
1183  }
1184  .leaflet-bar a:last-child {
1185    border-bottom-left-radius: 4px;
1186    border-bottom-right-radius: 4px;
1187    border-bottom: none;
1188  }
1189  .leaflet-bar a.leaflet-disabled {
1190    cursor: default;
1191    background-color: #f4f4f4;
1192    color: #bbb;
1193  }
1194
1195  .leaflet-touch .leaflet-bar a {
1196    width: 30px;
1197    height: 30px;
1198    line-height: 30px;
1199  }
1200  .leaflet-touch .leaflet-bar a:first-child {
1201    border-top-left-radius: 2px;
1202    border-top-right-radius: 2px;
1203  }
1204  .leaflet-touch .leaflet-bar a:last-child {
1205    border-bottom-left-radius: 2px;
1206    border-bottom-right-radius: 2px;
1207  }
1208
1209  /* zoom control */
1210
1211  .leaflet-control-zoom-in,
1212  .leaflet-control-zoom-out {
1213    font: bold 18px 'Lucida Console', Monaco, monospace;
1214    text-indent: 1px;
1215  }
1216
1217  .leaflet-touch .leaflet-control-zoom-in,
1218  .leaflet-touch .leaflet-control-zoom-out {
1219    font-size: 22px;
1220  }
1221
1222  /* layers control */
1223
1224  .leaflet-control-layers {
1225    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4);
1226    background: #fff;
1227    border-radius: 5px;
1228  }
1229  .leaflet-control-layers-toggle {
1230    background-image: url(images/layers.png);
1231    width: 36px;
1232    height: 36px;
1233  }
1234  .leaflet-retina .leaflet-control-layers-toggle {
1235    background-image: url(images/layers-2x.png);
1236    background-size: 26px 26px;
1237  }
1238  .leaflet-touch .leaflet-control-layers-toggle {
1239    width: 44px;
1240    height: 44px;
1241  }
1242  .leaflet-control-layers .leaflet-control-layers-list,
1243  .leaflet-control-layers-expanded .leaflet-control-layers-toggle {
1244    display: none;
1245  }
1246  .leaflet-control-layers-expanded .leaflet-control-layers-list {
1247    display: block;
1248    position: relative;
1249  }
1250  .leaflet-control-layers-expanded {
1251    padding: 6px 10px 6px 6px;
1252    color: #333;
1253    background: #fff;
1254  }
1255  .leaflet-control-layers-scrollbar {
1256    overflow-y: scroll;
1257    overflow-x: hidden;
1258    padding-right: 5px;
1259  }
1260  .leaflet-control-layers-selector {
1261    margin-top: 2px;
1262    position: relative;
1263    top: 1px;
1264  }
1265  .leaflet-control-layers label {
1266    display: block;
1267  }
1268  .leaflet-control-layers-separator {
1269    height: 0;
1270    border-top: 1px solid #ddd;
1271    margin: 5px -10px 5px -6px;
1272  }
1273
1274  /* Default icon URLs */
1275  .leaflet-default-icon-path {
1276    background-image: url(images/marker-icon.png);
1277  }
1278
1279  /* attribution and scale controls */
1280
1281  .leaflet-container .leaflet-control-attribution {
1282    background: #fff;
1283    background: rgba(255, 255, 255, 0.7);
1284    margin: 0;
1285  }
1286  .leaflet-control-attribution,
1287  .leaflet-control-scale-line {
1288    padding: 0 5px;
1289    color: #333;
1290  }
1291  .leaflet-control-attribution a {
1292    text-decoration: none;
1293
1294    font-size: inherit;
1295  }
1296  .leaflet-control-attribution a:hover {
1297    text-decoration: underline;
1298  }
1299  .leaflet-container .leaflet-control-attribution,
1300  .leaflet-container .leaflet-control-scale {
1301    font-size: 11px;
1302  }
1303  .leaflet-left .leaflet-control-scale {
1304    margin-left: 5px;
1305  }
1306  .leaflet-bottom .leaflet-control-scale {
1307    margin-bottom: 5px;
1308  }
1309  .leaflet-control-scale-line {
1310    border: 2px solid #777;
1311    border-top: none;
1312    line-height: 1.1;
1313    padding: 2px 5px 1px;
1314    font-size: 11px;
1315    white-space: nowrap;
1316    overflow: hidden;
1317    -moz-box-sizing: border-box;
1318    box-sizing: border-box;
1319
1320    background: #fff;
1321    background: rgba(255, 255, 255, 0.5);
1322  }
1323  .leaflet-control-scale-line:not(:first-child) {
1324    border-top: 2px solid #777;
1325    border-bottom: none;
1326    margin-top: -2px;
1327  }
1328  .leaflet-control-scale-line:not(:first-child):not(:last-child) {
1329    border-bottom: 2px solid #777;
1330  }
1331
1332  .leaflet-touch .leaflet-control-attribution,
1333  .leaflet-touch .leaflet-control-layers,
1334  .leaflet-touch .leaflet-bar {
1335    box-shadow: none;
1336  }
1337  .leaflet-touch .leaflet-control-layers,
1338  .leaflet-touch .leaflet-bar {
1339    border: 2px solid rgba(0, 0, 0, 0.2);
1340    background-clip: padding-box;
1341  }
1342
1343  /* popup */
1344
1345  .leaflet-popup {
1346    position: absolute;
1347    text-align: center;
1348    margin-bottom: 20px;
1349  }
1350  .leaflet-popup-content-wrapper {
1351    padding: 1px;
1352    text-align: left;
1353    border-radius: 12px;
1354  }
1355  .leaflet-popup-content {
1356    margin: 13px 19px;
1357    line-height: 1.4;
1358  }
1359  .leaflet-popup-content p {
1360    margin: 18px 0;
1361  }
1362  .leaflet-popup-tip-container {
1363    width: 40px;
1364    height: 20px;
1365    position: absolute;
1366    left: 50%;
1367    margin-left: -20px;
1368    overflow: hidden;
1369    pointer-events: none;
1370  }
1371  .leaflet-popup-tip {
1372    width: 17px;
1373    height: 17px;
1374    padding: 1px;
1375
1376    margin: -10px auto 0;
1377
1378    -webkit-transform: rotate(45deg);
1379    -moz-transform: rotate(45deg);
1380    -ms-transform: rotate(45deg);
1381    transform: rotate(45deg);
1382  }
1383  .leaflet-popup-content-wrapper,
1384  .leaflet-popup-tip {
1385    background: white;
1386    color: #333;
1387    box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);
1388  }
1389  .leaflet-container a.leaflet-popup-close-button {
1390    position: absolute;
1391    top: 0;
1392    right: 0;
1393    padding: 4px 4px 0 0;
1394    border: none;
1395    text-align: center;
1396    width: 18px;
1397    height: 14px;
1398    font: 16px/14px Tahoma, Verdana, sans-serif;
1399    color: #c3c3c3;
1400    text-decoration: none;
1401    font-weight: bold;
1402    background: transparent;
1403  }
1404  .leaflet-container a.leaflet-popup-close-button:hover {
1405    color: #999;
1406  }
1407  .leaflet-popup-scrolled {
1408    overflow: auto;
1409    border-bottom: 1px solid #ddd;
1410    border-top: 1px solid #ddd;
1411  }
1412
1413  .leaflet-oldie .leaflet-popup-content-wrapper {
1414    zoom: 1;
1415  }
1416  .leaflet-oldie .leaflet-popup-tip {
1417    width: 24px;
1418    margin: 0 auto;
1419
1420    -ms-filter: 'progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)';
1421    filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
1422  }
1423  .leaflet-oldie .leaflet-popup-tip-container {
1424    margin-top: -1px;
1425  }
1426
1427  .leaflet-oldie .leaflet-control-zoom,
1428  .leaflet-oldie .leaflet-control-layers,
1429  .leaflet-oldie .leaflet-popup-content-wrapper,
1430  .leaflet-oldie .leaflet-popup-tip {
1431    border: 1px solid #999;
1432  }
1433
1434  /* div icon */
1435
1436  .leaflet-div-icon {
1437    background: #fff;
1438    border: 1px solid #666;
1439  }
1440
1441  /* Tooltip */
1442  /* Base styles for the element that has a tooltip */
1443  .leaflet-tooltip {
1444    position: absolute;
1445    padding: 6px;
1446    background-color: #fff;
1447    border: 1px solid #fff;
1448    border-radius: 3px;
1449    color: #222;
1450    white-space: nowrap;
1451    -webkit-user-select: none;
1452    -moz-user-select: none;
1453    -ms-user-select: none;
1454    user-select: none;
1455    pointer-events: none;
1456    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
1457  }
1458  .leaflet-tooltip.leaflet-clickable {
1459    cursor: pointer;
1460    pointer-events: auto;
1461  }
1462  .leaflet-tooltip-top:before,
1463  .leaflet-tooltip-bottom:before,
1464  .leaflet-tooltip-left:before,
1465  .leaflet-tooltip-right:before {
1466    position: absolute;
1467    pointer-events: none;
1468    border: 6px solid transparent;
1469    background: transparent;
1470    content: '';
1471  }
1472
1473  /* Directions */
1474
1475  .leaflet-tooltip-bottom {
1476    margin-top: 6px;
1477  }
1478  .leaflet-tooltip-top {
1479    margin-top: -6px;
1480  }
1481  .leaflet-tooltip-bottom:before,
1482  .leaflet-tooltip-top:before {
1483    left: 50%;
1484    margin-left: -6px;
1485  }
1486  .leaflet-tooltip-top:before {
1487    bottom: 0;
1488    margin-bottom: -12px;
1489    border-top-color: #fff;
1490  }
1491  .leaflet-tooltip-bottom:before {
1492    top: 0;
1493    margin-top: -12px;
1494    margin-left: -6px;
1495    border-bottom-color: #fff;
1496  }
1497  .leaflet-tooltip-left {
1498    margin-left: -6px;
1499  }
1500  .leaflet-tooltip-right {
1501    margin-left: 6px;
1502  }
1503  .leaflet-tooltip-left:before,
1504  .leaflet-tooltip-right:before {
1505    top: 50%;
1506    margin-top: -6px;
1507  }
1508  .leaflet-tooltip-left:before {
1509    right: 0;
1510    margin-right: -12px;
1511    border-left-color: #fff;
1512  }
1513  .leaflet-tooltip-right:before {
1514    left: 0;
1515    margin-left: -12px;
1516    border-right-color: #fff;
1517  }
1518`;
1519/* harmony default export */ const Map_styled = (MapStyled);
1520
1521;// ./src/app/features/common/Map/Map.js
1522
1523
1524
1525
1526const Map = ({
1527  center,
1528  markers,
1529  height,
1530  zoomControl = true,
1531  zoom = 18,
1532  attributionControl = true
1533}) => {
1534  if ((0,isClient/* default */.A)()) {
1535    const {
1536      Map: LeafletMap,
1537      Marker,
1538      TileLayer,
1539      Popup
1540    } = __webpack_require__(74216);
1541    const L = __webpack_require__(48463);
1542    const pointerIcon = new L.Icon({
1543      iconUrl: "https://kcl.ac.uk/SiteElements/2017/images/marker.svg",
1544      iconRetinaUrl: "https://kcl.ac.uk/SiteElements/2017/images/marker.svg",
1545      iconAnchor: [12, 36],
1546      popupAnchor: [10, -44],
1547      iconSize: [24, 36]
1548    });
1549    const size = {
1550      width: "100%",
1551      height
1552    };
1553    return /* @__PURE__ */ react.createElement(Map_styled, null, /* @__PURE__ */ react.createElement(
1554      LeafletMap,
1555      {
1556        center,
1557        zoom,
1558        style: size,
1559        zoomControl,
1560        attributionControl
1561      },
1562      /* @__PURE__ */ react.createElement(
1563        TileLayer,
1564        {
1565          url: "https://{s}.tile.osm.org/{z}/{x}/{y}.png",
1566          attribution: '\xA9 <a href="http://osm.org/copyright">OpenStreetMap</a> \n        contributors'
1567        }
1568      ),
1569      markers.map(({ key, position }) => {
1570        return /* @__PURE__ */ react.createElement(Marker, { key, position, icon: pointerIcon }, " ", /* @__PURE__ */ react.createElement(Popup, null, /* @__PURE__ */ react.createElement(
1571          "a",
1572          {
1573            href: `https://www.google.com/maps/dir/?api=1&destination=${position}`
1574          },
1575          "Directions to ",
1576          key
1577        )));
1578      })
1579    ));
1580  }
1581  return null;
1582};
1583Map.propTypes = {
1584  center: (prop_types_default()).array,
1585  markers: (prop_types_default()).array,
1586  zoom: (prop_types_default()).number,
1587  zoomControl: (prop_types_default()).bool,
1588  attributionControl: (prop_types_default()).bool,
1589  height: (prop_types_default()).string
1590};
1591Map.defaultProps = {
1592  zoom: 15,
1593  height: "215px",
1594  zoomControl: false,
1595  attributionControl: false
1596};
1597/* harmony default export */ const Map_Map = (Map);
1598
1599
1600/***/ },
1601
1602/***/ 73540
1603(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1604
1605/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1606/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)
1607/* harmony export */ });
1608const formatDate = (date, format = "dd MMMM yyyy") => {
1609  if (!date) return null;
1610  const dateObj = new Date(date);
1611  const dateString = date.toString().split("T");
1612  const dateArr = dateString[0].split("-");
1613  const year = dateArr[0];
1614  const month = dateArr[1];
1615  const day = dateArr[2];
1616  const dayNameInt = dateObj.getDay();
1617  const timeArr = dateString[1].split(":");
1618  const hour = timeArr[0];
1619  const minute = timeArr[1];
1620  const YEAR = ["&&", "&"];
1621  const MONTH = ["\xA3\xA3\xA3\xA3", "\xA3\xA3\xA3", "\xA3\xA3", "\xA3"];
1622  const DAY = ["%%%%", "%%%", "%%", "%"];
1623  const HOUR24 = ["!!", "!"];
1624  const HOUR12 = ["^^", "^"];
1625  const MINUTE = ["**", "*"];
1626  const TF = ["??", "?"];
1627  let formattedDate = format.replace("yyyy", YEAR[0]).replace("yy", YEAR[1]).replace("y", "").replace("MMMM", MONTH[0]).replace("MMM", MONTH[1]).replace("MM", MONTH[2]).replace("M", MONTH[3]).replace("dddd", DAY[0]).replace("ddd", DAY[1]).replace("dd", DAY[2]).replace("d", DAY[3]).replace("HH", HOUR24[0]).replace("H", HOUR24[1]).replace("hh", HOUR12[0]).replace("h", HOUR12[1]).replace("mm", MINUTE[0]).replace("m", MINUTE[1]).replace("tt", TF[0]).replace("t", TF[1]).replace(YEAR[0], year).replace(YEAR[1], year.slice(-2)).replace(MONTH[0], monthsLong[parseInt(month, 10)]).replace(MONTH[1], monthsShort[parseInt(month, 10)]).replace(MONTH[2], month).replace(MONTH[3], parseInt(month, 10)).replace(DAY[0], daysLong[dayNameInt]).replace(DAY[1], daysShort[dayNameInt]).replace(DAY[2], day).replace(DAY[3], parseInt(day, 10)).replace(HOUR24[0], hour).replace(HOUR24[1], parseInt(hour, 10)).replace(HOUR12[0], parseHour(hour)).replace(HOUR12[1], parseInt(parseHour(hour), 10)).replace(MINUTE[0], minute).replace(MINUTE[1], parseInt(minute, 10)).replace(TF[0], parseTF(hour)).replace(TF[1], parseTF(hour).slice(0, -1));
1628  return formattedDate;
1629};
1630const monthsShort = [
1631  "",
1632  "Jan",
1633  "Feb",
1634  "Mar",
1635  "Apr",
1636  "May",
1637  "Jun",
1638  "Jul",
1639  "Aug",
1640  "Sep",
1641  "Oct",
1642  "Nov",
1643  "Dec"
1644];
1645const monthsLong = [
1646  "",
1647  "January",
1648  "February",
1649  "March",
1650  "April",
1651  "May",
1652  "June",
1653  "July",
1654  "August",
1655  "September",
1656  "October",
1657  "November",
1658  "December"
1659];
1660const daysShort = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1661const daysLong = [
1662  "Sunday",
1663  "Monday",
1664  "Tuesday",
1665  "Wednesday",
1666  "Thursday",
1667  "Friday",
1668  "Saturday"
1669];
1670const parseHour = (hour) => {
1671  return hour > 12 ? hour - 12 : hour;
1672};
1673const parseTF = (hour) => {
1674  return hour > 11 ? "PM" : "AM";
1675};
1676/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (formatDate);
1677
1678
1679/***/ },
1680
1681/***/ 14495
1682(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1683
1684/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1685/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)
1686/* harmony export */ });
1687/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29633);
1688/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(86627);
1689/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
1690/* harmony import */ var _features_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70910);
1691/* harmony import */ var _HubSearch_styled__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(61450);
1692/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(45666);
1693
1694
1695
1696
1697
1698const HubSearch = ({ showHeading, showFilters, level }) => {
1699  const dropdownOptions = [
1700    { value: "undergraduate", label: "Undergraduate" },
1701    { value: "postgraduate-taught", label: "Postgraduate taught" },
1702    { value: "postgraduate-research", label: "Postgraduate research" }
1703  ];
1704  const mappedOptions = dropdownOptions.map((option, idx) => /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("option", { key: idx, value: option.value }, option.label));
1705  const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
1706    dropdownOptions,
1707    selectedOption: level ? level : "undergraduate",
1708    onSubmitClicked: false,
1709    searchTerms: ""
1710  });
1711  const selectChangeHandler = (event) => {
1712    setState({
1713      ...state,
1714      selectedOption: event.target.value
1715    });
1716  };
1717  const inputChangeHandler = (event) => {
1718    setState({
1719      ...state,
1720      searchTerms: event.target.value
1721    });
1722  };
1723  const onSubmitHandler = (event) => {
1724    event.preventDefault();
1725    setState({ ...state, onSubmitClicked: true });
1726  };
1727  return state.onSubmitClicked ? /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(
1728    react_router_dom__WEBPACK_IMPORTED_MODULE_4__/* .Redirect */ .rd,
1729    {
1730      push: true,
1731      to: `/search/courses?level=${state.selectedOption}&term=${state.searchTerms.replace("&", "%26")}`
1732    }
1733  ) : /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(
1734    _HubSearch_styled__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A,
1735    {
1736      showFilters,
1737      onSubmit: (event) => onSubmitHandler(event)
1738    },
1739    showHeading && /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_features_common__WEBPACK_IMPORTED_MODULE_2__/* .Heading */ .DZ, { level: 1 }, "Search for courses"),
1740    /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "input-group" }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("label", { htmlFor: "search", className: "sr-only" }, "Search for courses"), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(
1741      "input",
1742      {
1743        onChange: (event) => inputChangeHandler(event),
1744        placeholder: "Search for courses",
1745        "data-test-id": "hub-search-input"
1746      }
1747    ), showFilters && /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(
1748      _features_common__WEBPACK_IMPORTED_MODULE_2__/* .Dropdown */ .ms,
1749      {
1750        id: "searchFilter",
1751        label: "Select a course type filter",
1752        onChange: (event) => selectChangeHandler(event),
1753        isInHubSearch: true,
1754        isAutoWidth: true,
1755        value: state.selectedOption
1756      },
1757      mappedOptions
1758    ), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(
1759      _features_common__WEBPACK_IMPORTED_MODULE_2__/* .Button */ .$n,
1760      {
1761        uri: `/search/courses?level=${state.selectedOption}&term=${state.searchTerms.replace("&", "%26")}`,
1762        colour: "red",
1763        title: "Find courses",
1764        role: "button"
1765      }
1766    ))
1767  );
1768};
1769HubSearch.propTypes = {
1770  showFilters: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
1771  showHeading: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
1772  level: prop_types__WEBPACK_IMPORTED_MODULE_1___default().oneOf([
1773    "undergraduate",
1774    "postgraduate-taught",
1775    "postgraduate-research"
1776  ])
1777};
1778HubSearch.defaultProps = {
1779  showHeading: true,
1780  showFilters: true
1781};
1782/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HubSearch);
1783
1784
1785/***/ },
1786
1787/***/ 61450
1788(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1789
1790/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1791/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)
1792/* harmony export */ });
1793/* harmony import */ var styled_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67780);
1794/* harmony import */ var _features_common_Dropdown_components_styled_Dropdown_styled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(96441);
1795/* harmony import */ var _features_common_button_components_styled_Button_styled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86595);
1796/* harmony import */ var _features_common_Icon_components_styled_Icon_styled__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4057);
1797/* harmony import */ var _theme_spacing__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(59778);
1798
1799
1800
1801
1802
1803const mobileHeight = 48;
1804const desktopHeight = 64;
1805const HubSearchStyled = styled_components__WEBPACK_IMPORTED_MODULE_0__["default"].form`
1806  margin: ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing32} 0;
1807
1808  ${_features_common_Dropdown_components_styled_Dropdown_styled__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A} {
1809    margin-right: 0;
1810
1811    select {
1812      height: ${mobileHeight}px;
1813    }
1814  }
1815
1816  input {
1817    display: inline-block;
1818    width: 100%;
1819    height: ${mobileHeight}px;
1820    margin: 0 0 ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing32} 0;
1821    padding: 0 ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing16};
1822    font-family: ${(p) => p.theme.font.family.regular};
1823    font-size: ${(p) => p.theme.font.size.px18};
1824    color: ${(p) => p.theme.colours.grey07};
1825    line-height: ${mobileHeight}px;
1826    background-color: ${(p) => p.theme.colours.grey12};
1827    border: 1px solid ${(p) => p.theme.colours.grey12};
1828    border-radius: 5px;
1829
1830    &::placeholder {
1831      font-size: ${(p) => p.theme.font.size.px18};
1832      font-family: ${(p) => p.theme.font.family.regular};
1833      color: ${(p) => p.theme.colours.grey07};
1834    }
1835  }
1836
1837  @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.medium}px) {
1838    ${_features_common_Dropdown_components_styled_Dropdown_styled__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A} {
1839      margin-right: ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing16};
1840
1841      select {
1842        height: ${desktopHeight}px;
1843        padding-right: ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing80};
1844      }
1845
1846      .dropdown-icon {
1847        width: ${desktopHeight}px;
1848      }
1849
1850      ${_features_common_Icon_components_styled_Icon_styled__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A} {
1851        font-size: 1.5rem;
1852      }
1853    }
1854
1855    ${_features_common_button_components_styled_Button_styled__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A} {
1856      padding: 18px ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing32} 18px; /*height is 64px */
1857    }
1858
1859    input {
1860      height: ${desktopHeight}px;
1861      margin-right: ${_theme_spacing__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.spacing16};
1862      font-size: ${(p) => p.theme.font.size.px18};
1863      line-height: ${desktopHeight}px;
1864
1865      &::placeholder {
1866        font-size: ${(p) => p.theme.font.size.px18};
1867      }
1868    }
1869  }
1870
1871  @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.large}px) {
1872    input {
1873      width: 50%;
1874    }
1875  }
1876`;
1877/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HubSearchStyled);
1878
1879
1880/***/ },
1881
1882/***/ 66081
1883(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1884
1885// ESM COMPAT FLAG
1886__webpack_require__.r(__webpack_exports__);
1887
1888// EXPORTS
1889__webpack_require__.d(__webpack_exports__, {
1890  "default": () => (/* binding */ JobVacancy)
1891});
1892
1893// EXTERNAL MODULE: ./node_modules/react/index.js
1894var react = __webpack_require__(29633);
1895// EXTERNAL MODULE: ./node_modules/prop-types/index.js
1896var prop_types = __webpack_require__(86627);
1897var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
1898// EXTERNAL MODULE: ./src/app/features/layout/components/Layout.js + 12 modules
1899var Layout = __webpack_require__(919);
1900// EXTERNAL MODULE: ./src/app/core/util/hooks/useDefaults.js + 1 modules
1901var useDefaults = __webpack_require__(19225);
1902// EXTERNAL MODULE: ./src/app/features/common/BreadcrumbLink/BreadcrumbLink.js + 1 modules
1903var BreadcrumbLink = __webpack_require__(4093);
1904// EXTERNAL MODULE: ./src/app/features/common/index.js + 24 modules
1905var common = __webpack_require__(70910);
1906// EXTERNAL MODULE: ./node_modules/react-markdown/src/react-markdown.js
1907var react_markdown = __webpack_require__(3133);
1908var react_markdown_default = /*#__PURE__*/__webpack_require__.n(react_markdown);
1909// EXTERNAL MODULE: ./src/app/features/eventListing/util/formatDate.js
1910var formatDate = __webpack_require__(73540);
1911// EXTERNAL MODULE: ./src/app/features/card/components/CardFactory.js
1912var CardFactory = __webpack_require__(22641);
1913// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules
1914var styled_components_browser_esm = __webpack_require__(67780);
1915// EXTERNAL MODULE: ./src/app/features/common/button/components.styled/Button.styled.js
1916var Button_styled = __webpack_require__(86595);
1917// EXTERNAL MODULE: ./src/app/theme/spacing.js
1918var spacing = __webpack_require__(59778);
1919;// ./src/app/pages/JobVacancy/JobVacancy.styled.js
1920
1921
1922
1923const JobVacancyPageStyled = styled_components_browser_esm["default"].div`
1924  .sidebar {
1925    display: none;
1926  }
1927  .sidePromo {
1928    margin-top: ${spacing/* default */.A.spacing16};
1929  }
1930  .markdown p a:hover {
1931    text-decoration: none;
1932  }
1933  .mainbutton {
1934    ${Button_styled/* default */.A} {
1935      width: 100%;
1936    }
1937  }
1938
1939  @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.large}px) {
1940    .sidebar {
1941      display: block;
1942    }
1943    .sidePromo {
1944      margin-top: 0;
1945    }
1946
1947    .mainbutton {
1948      display: flex;
1949      justify-content: center;
1950      align-items: center;
1951      ${Button_styled/* default */.A} {
1952        width: 50%;
1953      }
1954      padding-bottom: ${spacing/* default */.A.spacing8};
1955    }
1956  }
1957  .applyButton {
1958    margin-bottom: ${spacing/* default */.A.spacing16};
1959  }
1960`;
1961/* harmony default export */ const JobVacancy_styled = (JobVacancyPageStyled);
1962
1963// EXTERNAL MODULE: ./src/app/features/Keyline/Keyline.js + 1 modules
1964var Keyline = __webpack_require__(9396);
1965;// ./src/app/pages/JobVacancy/JobVacancy.js
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977const JobVacancyPage = ({ entry }) => {
1978  const { hasLoaded, defaults } = (0,useDefaults/* default */.A)(entry.sys.contentTypeId);
1979  const {
1980    vacancyID,
1981    gradeAndSalaryText,
1982    applyURL,
1983    recruitExternalCloseDate,
1984    recruitExternalOpenDate,
1985    orgGroupLocationText,
1986    recruitmentTypeDesc,
1987    contactPhoneText,
1988    contactPersonText,
1989    recruitManagementUnitDesc,
1990    recruitmentDeptDescription,
1991    jobDescription,
1992    furtherParticulars
1993  } = entry;
1994  const banner = hasLoaded && {
1995    ...defaults?.heroBanner,
1996    title: entry.entryTitle
1997  };
1998  const trimmedJobDesc = jobDescription?.replaceAll("&nbsp;", "");
1999  const trimmedFurther = furtherParticulars?.replaceAll("&nbsp;", "");
2000  return /* @__PURE__ */ react.createElement(Layout/* default */.A, { showThirdNav: true, hasHeaderMarginBottom: false }, /* @__PURE__ */ react.createElement(JobVacancy_styled, null, hasLoaded ? /* @__PURE__ */ react.createElement(common/* HeroBanner */.Hi, { heroBanner: banner, pageTitle: entry.entryTitle }) : null, /* @__PURE__ */ react.createElement(common/* Container */.mc, null, /* @__PURE__ */ react.createElement(common/* Column */.VP, { large: 8 }, /* @__PURE__ */ react.createElement("div", { className: "coreInformation" }, /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, vacancyID ? /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement("strong", null, "Job id:"), " ", vacancyID, ". ") : null, gradeAndSalaryText ? /* @__P
2000URE__ */ react.createElement(react.Fragment, null, " ", /* @__PURE__ */ react.createElement("strong", null, "Salary:"), " ", gradeAndSalaryText, ". ") : null), /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement("strong", null, " Posted:"), " ", (0,formatDate/* default */.A)(recruitExternalOpenDate, "dd MMMM yyyy"), ". ", /* @__PURE__ */ react.createElement("strong", null, " Closing date:"), " ", (0,formatDate/* default */.A)(recruitExternalCloseDate, "dd MMMM yyyy"), ". ")), /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, /* @__PURE__ */ react.createElement("strong", null, "Business unit:"), " ", recruitManagementUnitDesc, ". ", /* @__PURE__ */ react.createElement("strong", null, "Department:"), " ", recruitmentDeptDescription, ". "), entry?.contactPersonText != null && /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, /* @__PURE__ */ react.createElement("strong", null, "Contact details:"), " ", /* @__PURE__ */ react.createElement(react.Fragment, null, " ", /* @__PURE__ */ react.createElement("span", null, contactPersonText, ". ", " ", contactPhoneText))), /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, /* @__PURE__ */ react.createElement("strong", null, "Location: "), orgGroupLocationText, ". ", " ", /* @__PURE__ */ react.createElement("strong", null, "Category:"), " ", recruitmentTypeDesc || "No category added", ". ")), /* @__PURE__ */ react.createElement("div", { className: "backToSearch" }, /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, /* @__PURE__ */ react.createElement(Keyline/* default */.A, { thin: true }), /* @__PURE__ */ react.createElement(BreadcrumbLink/* default */.A, { path: "/jobs/search" }, "Back to ", /* @__PURE__ */ react.createElement("strong", null, "job search"), " "))), /* @__PURE__ */ react.createElement("div", { className: "markdown" }
2000, trimmedJobDesc != null ? /* @__PURE__ */ react.createElement(
2001    (react_markdown_default()),
2002    {
2003      components: {
2004        h1: ({ children }) => /* @__PURE__ */ react.createElement(common/* Heading */.DZ, { level: 3 }, children),
2005        p: common/* Paragraph */.fz,
2006        ul: common/* UnorderedList */.Xy,
2007        ol: common/* OrderedList */._J
2008      }
2009    },
2010    trimmedJobDesc
2011  ) : /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, "No job description found in the feed.")), /* @__PURE__ */ react.createElement("div", { className: "markdown" }, trimmedFurther != null ? /* @__PURE__ */ react.createElement(
2012    (react_markdown_default()),
2013    {
2014      components: {
2015        h1: ({ children }) => /* @__PURE__ */ react.createElement(common/* Heading */.DZ, { level: 3 }, children),
2016        p: common/* Paragraph */.fz,
2017        ul: common/* UnorderedList */.Xy,
2018        ol: common/* OrderedList */._J
2019      }
2020    },
2021    trimmedFurther
2022  ) : /* @__PURE__ */ react.createElement(common/* Paragraph */.fz, null, "No further details found in the feed.")), /* @__PURE__ */ react.createElement("div", { className: "applyButton mainbutton" }, /* @__PURE__ */ react.createElement(
2023    common/* Button */.$n,
2024    {
2025      testId: "apply-button-main",
2026      target: "_blank",
2027      uri: applyURL,
2028      colour: "red",
2029      title: "Apply now",
2030      className: "btn",
2031      isBlock: false
2032    }
2033  )), defaults?.techHelp != null ? /* @__PURE__ */ react.createElement("div", { className: "techhelp" }, /* @__PURE__ */ react.createElement(common/* Richtext */.gF, null, defaults?.techHelp)) : null, defaults?.numberedList && /* @__PURE__ */ react.createElement(common/* NumberedList */.fZ, { entry: defaults.numberedList })), /* @__PURE__ */ react.createElement(common/* Column */.VP, { large: 4 }, /* @__PURE__ */ react.createElement("div", { className: "applyButton sidebar" }, /* @__PURE__ */ react.createElement(
2034    common/* Button */.$n,
2035    {
2036      testId: "apply-button-side",
2037      target: "_blank",
2038      uri: applyURL,
2039      colour: "red",
2040      isBlock: true,
2041      title: "Apply now"
2042    }
2043  )), defaults?.techHelp != null ? /* @__PURE__ */ react.createElement("div", { className: "techhelp" }, /* @__PURE__ */ react.createElement(common/* Richtext */.gF, null, defaults?.techHelp)) : null, /* @__PURE__ */ react.createElement("div", { className: "sidePromo" }, defaults?.promo?.length > 0 && /* @__PURE__ */ react.createElement(react.Fragment, null, defaults.promo.map((promo) => {
2044    return /* @__PURE__ */ react.createElement(CardFactory/* default */.A, { entry: promo, key: promo.sys.id });
2045  })))))));
2046};
2047JobVacancyPage.propTypes = {
2048  entry: (prop_types_default()).object
2049};
2050/* harmony default export */ const JobVacancy = (JobVacancyPage);
2051
2052
2053/***/ }
2054
2055}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.