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(" ", ""); 1999 const trimmedFurther = furtherParticulars?.replaceAll(" ", ""); 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.