1"use strict";(self.__LOADABLE_LOADED_CHUNKS__=self.__LOADABLE_LOADED_CHUNKS__||[]).push([[593],{8052:(B,C,a)=>{a.d(C,{A:()=>u});var e=a(48322),g=a(99087);const f=g.default.div` 2 display: flex; 3 align-items: center; 4 justify-content: flex-end; 5 margin: 0 0 5rem 0; 6`;var x=a(82472);const s=g.default.button` 7 ${()=>(0,g.css)` 8 cursor: pointer; 9 background: ${x.A.white}; 10 width: 44px; 11 height: 44px; 12 border: 0.1rem solid #f5f5f5; 13 text-align: center; 14 display: inline-flex; 15 align-items: center; 16 justify-content: center; 17 margin-left: 1rem; 18 font-size: 1.4rem; 19 line-height: 3.2rem; 20 display: block; 21 color: ${x.A.black}; 22 background-color: ${x.A.greyAlt}; 23 24 &:enabled:hover { 25 background: ${x.A.greyLight}; 26 } 27 28 &:disabled { 29 opacity: 0.5; 30 cursor: default; 31 /* &:hover{ 32 bac 33 } */ 34 } 35 36 &.inactive { 37 border-bottom: 1px solid ${x.A.core_digital_cerulean}; 38 } 39 40 &.active { 41 } 42 43 .icon { 44 display: flex; 45 align-items: center; 46 justify-content: center; 47 svg { 48 height: 2.4rem; 49 path: { 50 fill: ${x.A.black}; 51 } 52 } 53 } 54 `} 55`,y=({className:b,label:E,updatePageIndex:A,index:w,disabled:T})=>{const d=(n,i)=>{if(T||typeof i!="number"||!Number.isFinite(i))return;const t=Math.trunc(Number(i));if(!Number.isNaN(t)){n.preventDefault();try{n.currentTarget?.blur?.()}catch{}try{A(t)}catch(o){console.error("[PaginationItem] updatePageIndex error",o)}}};return e.createElement(s,{disabled:T,type:"button",className:b,onClick:n=>d(n,w)},E==="Back"||E==="Next"?e.createElement("div",{className:"icon"},E==="Back"?"<":">"):E&&E.toString())},u=({className:b,paging:E,updatePageIndex:A,scrollTarget:w})=>{const T=(r,N)=>{try{i(Math.trunc(Number(r)))}catch{}try{let k=0;typeof window<"u"&&(k=document.documentElement&&document.documentElement.scrollTop||document.body&&document.body.scrollTop||window.pageYOffset||0);const P=A(r,N);if(typeof window<"u"){try{window.scrollTo(0,k)}catch{}const l=N!==void 0?N:w;if(l){const _=(()=>typeof l=="string"?l.startsWith(".")||l.startsWith("#")?l:`.${l}`:String(l))(),D=(()=>{try{const M=document.querySelector(_);if(!M)return 0;const F=M.getBoundingClientRect(),j=window.pageYOffset||document.documentElement&&document.documentElement.scrollTop||document.body&&document.body.scrollTop||0;return Math.max(0,Math.floor(F.top+j))}catch{return 0}})(),U=8;let L=0;const z=setInterval(()=>{try{window.scrollTo({top:D,behavior:"smooth"})}catch{try{window.scrollTo(0,D)}catch{}}L+=1;const M=document.documentElement&&document.documentElement.scrollTop||document.body&&document.body.scrollTop||0;if((Math.abs(M-D)<=2||L>=U)&&(clearInterval(z),Math.abs(M-D)>2))try{window.scrollTo(0,D)}catch{}},120);try{window.scrollTo({top:D,behavior:"smooth"})}catch{try{window.scrollTo(0,D)}catch{}}}else{let O=0;const U=setInterval(()=>{try{window.scrollTo({top:0,behavior:"smooth"})}catch{try{window.scrollTo(0,0)}catch{}}O+=1;const L=document.documentElement&&document.documentElement.scrollTop||document.body&&document.body.scrollTop||0;if((L===0||O>=8)&&(clearInterval(U),L!==0))try{window.scrollTo(0,0)}catch{}},120);try{window.scrollTo({top:0,behavior:"smooth"})}catch{try{window.scrollTo(0,0)}catch{}}}}return P}catch(k){try{typeof window<"u"&&window.scrollTo({top:0})}catch{}throw k}},[n,i]=e.useState(null);let{pageIndex:t,pageCount:o}={...E};const c=n!==null?n:t;t=Number.isFinite(Number(t))?Number(t):0,o=Math.max(1,Number.isFinite(Number(o))?Number(o):1),e.useEffect(()=>{try{const r=Number.isFinite(Number(t))?Number(t):0;n!==null&&r===n&&i(null)}catch{i(null)}},[t,n]);let m=Math.ceil(c-5/2);m<0&&(m=0);let I=m+5-1;I>o-1&&(I=o-1,m=o-5,m<0&&(m=0));let $=[];for(let r=m;r<=I;r++){let N=r==c;$.push({i:r,updatePageIndex:T,isCurrentPage:N})}return o<=0?null:e.createElement(f,{className:b},e.createElement(y,{className:`control prev ${c>0?"":"disabled"}`,disabled:!(c>0),index:Math.max(0,Math.min(c-1,o-1)),label:"Back",updatePageIndex:T}),$&&$?.length>0?$.map(r=>e.createElement(y,{index:Math.max(0,Math.min(r.i,o-1)),label:r.i+1,disabled:r.isCurrentPage||n!==null&&r.i===n,key:r.i,updatePageIndex:r.updatePageIndex,className:r.isCurrentPage||n!==null&&r.i===n?"inactive":"active"})):null,e.createElement(y,{className:`control next ${c<o-1?"":"disabled"}`,disabled:!(c<o-1),index:Math.max(0,Math.min(c+1,o-1)),label:"Next",updatePageIndex:T}))}},10191:(B,C,a)=>{a.d(C,{A:()=>S});var e=a(48322),g=a(99087);const f=g.default.button` 56 ${({theme:s,styleType:p})=>{let y={defaultStyles:s?.buttonStyles[p]?.default,hoverStyles:s?.buttonStyles[p]?.hover,focusStyles:s?.buttonStyles[p]?.focus};const h=u=>{if(!u)return;const{background_color:b,border_color:E,text_color:A,opacity:w}=u;return(0,g.css)` 57 ${b&&`background-color: ${b};`} 58 ${E&&`border: 2px solid ${E};`} 59 ${A&&` 60 color: ${A}; 61 .i { 62 path, 63 circle, 64 rect { 65 stroke: ${A}; 66 } 67 } 68 `} 69 ${w&&`opacity: ${w};`} 70 `};return(0,g.css)` 71 display: inline-block; 72 padding: 1.2rem 1.6rem; 73 border: none; 74 width: fit-content; 75 text-decoration: none; 76 text-align: center; 77 color: ${s.colors.white}; 78 background-color: ${s.colors.core_digital_cerulean}; 79 background: ${s.colors.core_digital_cerulean}
80 url('/_MB34Eg_9d49cebe-fa40-4682-96e7-4326239fc749/static-main/img/button-bg.svg') top right no-repeat; 81 background-size: contain; 82 83 ${h(y.defaultStyles)}; 84 transition: all 300ms ease-in-out; 85 86 &:hover { 87 ${h(y.hoverStyles)} 88 } 89 90 &:focus { 91 ${h(y.focusStyles)} 92 } 93 94 &.button--large { 95 padding: 2.4rem 3.2rem; 96 } 97 `}}; 98`,S=({className:s,title:p,size:y,children:h,styleType:u="primary",onClick:b,...E})=>e.createElement(f,{styleType:u,onClick:b,...E,className:`button button--${y} ${s}`},p||h)},16117:(B,C,a)=>{a.d(C,{A:()=>y});var e=a(48322),g=a(99087);const f=g.default.div` 99 ${({theme:h,breakpoint:u})=>(0,g.css)` 100 margin-bottom: 3.2rem; 101 102 .filter-toggle { 103 display: flex; 104 justify-content: center; 105 align-items: center; 106 padding: 1.2rem; 107 margin-bottom: 2.4rem; 108 border: 0; 109 width: 100%; 110 min-width: 12rem; 111 font-size: 1.4rem; 112 text-decoration: none; 113 text-align: center; 114 color: ${h.colors.white}; 115 background-color: ${h.colors.aquaAlt}; 116 cursor: pointer; 117 118 @media screen and (min-width: ${u}px) { 119 display: none; 120 } 121 122 &:hover, 123 &:focus { 124 text-decoration: underline; 125 } 126 } 127 128 .filter-hidden { 129 @media screen and (max-width: ${u}px) { 130 display: none; 131 } 132 } 133 134 .filter-visible { 135 display: block; 136 } 137 `}; 138`,x=h=>u=>{u.key==="Enter"&&h(u)};var S=a(10191),s=a(27745);const y=({breakpoint:h=840,children:u,className:b,openTitle:E="Open Filter",closeTitle:A="Close Filter"})=>{const[w,T]=(0,e.useState)(!1),[d,n]=(0,e.useState)(!1),[i,t]=(0,e.useState)(!0),o=()=>{T(!w),n(!d),t(!i)};return e.createElement(f,{className:b,breakpoint:h},e.createElement(S.A,{className:"filter-toggle",onClick:()=>o(),onKeyDown:x(()=>o),"aria-expanded":d,"aria-controls":"filteredContent"},w?A:E,e.createElement(s.I,{icon:w?"chevronUp":"chevronDown"})),e.createElement("div",{id:"filteredContent",className:`filter-toggle__children ${w?"filter-visible":"filter-hidden"}`,"aria-hidden":i},u))}},20548:(B,C,a)=>{a.d(C,{A:()=>T});var e=a(48322),g=a(82472),v=a(99087),f=a(973);const S=v.default.div` 139 ${({type:d})=>(0,v.css)` 140 position: relative; 141 width: 100%; 142 font-size: 1.4rem; 143 144 @media ${f.mq.medium} { 145 width: auto; 146 } 147 148 .dropdown__select { 149 position: relative; 150 margin-top: 1.2rem; 151 } 152 153 .filter-control__label { 154 color: ${g.A.blueAlt}; 155 font-weight: 600; 156 white-space: nowrap; 157 } 158 159 select { 160 padding: 1.6rem 4.8rem 1.6rem 1.6rem; 161 border: 1px solid ${g.A.grey}; 162 width: 100%; 163 cursor: pointer; 164 background: none; 165 -webkit-appearance: none; 166 -moz-appearance: none; 167 font-size: 1.4rem; 168 } 169 170 select::-ms-expand { 171 display: none; 172 } 173 174 input[type='checkbox'] { 175 float: right; 176 margin: 0.4rem; 177 width: 20px; 178 height: 20px; 179 } 180 181 .dropdown__icon { 182 pointer-events: none; 183 width: 24px; 184 height: 24px; 185 position: absolute; 186 top: 50%; 187 right: 5px; 188 transform-origin: 2.5px center; 189 transform: translateY(-50%) rotate(90deg); 190 } 191 192 ${d==="sort"&&(0,v.css)` 193 .dropdown__icon { 194 height: 18px; 195 width: 18px; 196 } 197 `} 198 `}; 199`;var s=a(97594);const y=v.default.div` 200 ${({theme:{colors:d}})=>{const n={color:`${d.blueAlt}`,bgColor:"#fff",borderRadius:"0",optionlabel:`${d.blueAlt}`,optionlabelBg:"white"};return(0,v.css)` 201 position: relative; 202 203 .filter-toggle { 204 background: ${n.bgColor}; 205 border: 1px solid black; 206 border-radius: ${n.borderRadius}; 207 padding: 1.6rem; 208 color: ${n.color}; 209 width: 100%; 210 display: flex; 211 justify-content: space-between; 212 align-items: center; 213 cursor: pointer; 214 /* background: rgba(255, 255, 255, 1) 215 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD0SURBVHgBpZLNDcIwDIWdlEoIoYpjaZKSERgBNoANGKFMABvABmUDRugIjEAPIHHj0AsXGmwhoFL/y5NycZ6/Z1m2hBBTx3HcJElu8IeUGi8Gg+GD2zYA5xC5rquho2gopIT9/pcuVvjOXaDUg713rQmakZRyS9ARqiXsrJRaFRoIKqU4NYF+YL4vt5VGNB3whVUeCqTgWthvUhEhdFce6oXo2Rf98aJir2cvGYOZ73ubfJi3MYbpy+UaQBtpTTvycEfjIAujmtblO2Z10OeTRwBmzZg1MSYNLCudx/Et7gR8Q8U0TeFojIE6WGPhOc1yh1uiF0dLQ+HwZpbXAAAAAElFTkSuQmCC') 216 no-repeat right 2.55rem center; */ 217 218 svg { 219 margin-left: 8px; 220 width: 12px; 221 height: auto; 222 transition: transform 0.2s ease-in-out; 223 } 224 &.open { 225 svg { 226 transform: scaleY(-1); 227 } 228 } 229 &.has-options { 230 font-weight: 700; 231 } 232 } 233 .drop-filter-set { 234 position: absolute; 235 overflow: hidden; 236 top: calc(100% - 0.2rem); 237 z-index: 98; 238 background: #fff; 239 width: 100%; 240 border-radius: 0; 241 box-shadow: 0 0.4rem 1.5rem rgba(0, 0, 0, 0.2);
242 overflow-y: scroll; 243 max-height: 200px; 244 245 &.closed { 246 display: none; 247 } 248 } 249 .filter-status { 250 display: flex; 251 justify-content: space-between; 252 align-items: center; 253 padding: 0.8rem 1.6rem; 254 margin-bottom: 1.6rem; 255 font-size: 1.4rem; 256 border-bottom: 1px solid ${d.blue}; 257 } 258 .clear-set { 259 padding: 0.4rem 1.6rem; 260 border: none; 261 border-radius: 0; 262 263 &:not(:disabled) { 264 cursor: pointer; 265 } 266 } 267 .filter-options { 268 padding: 0 1.6rem; 269 list-style-type: none; 270 margin-block: 0; 271 272 .filter-option { 273 margin-bottom: 0.8rem; 274 275 &:last-child label { 276 border-radius: 0; 277 } 278 input { 279 appearance: none; 280 background-color: #fff; 281 margin: 0; 282 margin-right: 0.8rem; 283 display: grid; 284 place-content: center; 285 font: inherit; 286 color: currentColor; 287 width: 2em; 288 height: 2em; 289 border: 0.15em solid currentColor; 290 transform: translateY(-0.075em); 291 292 &::before { 293 content: ''; 294 width: 18px; 295 height: 14px; 296 transform: scale(0); 297 background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxOCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgN0w2LjYyNzM5IDE0TDE4IDEuOTg4TDE2LjEzMTEgMEw2LjYyNzM5IDEwLjAzOEwxLjg1NTY3IDUuMDRMMCA3WiIgZmlsbD0iIzFENzBCOCIvPgo8L3N2Zz4K); 298 } 299 300 &:checked::before { 301 transform: scale(1); 302 } 303 } 304 label { 305 display: grid; 306 grid-template-columns: 1em auto; 307 align-items: center; 308 gap: 1.5em; 309 color: ${n.optionlabel}; 310 background: ${n.optionlabelBg}; 311 cursor: pointer; 312 } 313 } 314 } 315 `}}; 316`,u=(d,n,i)=>{const t=m=>{const I=m.type==="keyup"&&m.keyCode==27,$=!d.current.contains(m.target),r=m.relatedTarget&&!d.current.contains(m.relatedTarget);d.current&&($||r)&&c(),I&&(c(),n&&n.current&&n.current.focus())},o=()=>{document.removeEventListener("click",t,!1),document.removeEventListener("focusout",t,!1),document.removeEventListener("keyup",t,!1),document.addEventListener("click",t,!1),document.addEventListener("focusout",t,!1),document.addEventListener("keyup",t,!1)},c=()=>{document.removeEventListener("click",t,!1),document.removeEventListener("focusout",t,!1),document.removeEventListener("keyup",t,!1),i&&i()};return{initElementFocus:o,destroyElementFocus:c}},A=({filterKey:d,options:n,title:i,updateSelectedFilters:t})=>{const[o,c]=(0,e.useState)(!1),m=(0,e.useRef)(null),I=(0,e.useRef)(null),{initElementFocus:$,destroyElementFocus:r}=u(m,I,()=>c(!1));if(!n||n.length===0)return null;const N=l=>{c(l),l?$():r()},k=n.length,P=n.filter(l=>l.isSelected).length;return e.createElement(y,{ref:m},e.createElement("button",{ref:I,className:`filter-toggle 317 ${n.filter(l=>l.isSelected).length>0?" has-options":""} 318 ${o?" open":""}`,onClick:()=>N(!o)},e.createElement("span",null,e.createElement(s.A,null,"Listing filter "),i,!o&&e.createElement(e.Fragment,null,e.createElement("span",{"aria-hidden":"true"},` (${P})`),e.createElement(s.A,null,` ${P} of ${k} selected`))),e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 13 8",className:"filter-toggle-icon","aria-hidden":!0},e.createElement("path",{fill:"#005282",d:"M10.85 0 6.33 4.82 1.82 0 .33 1.59l6 6.41 6-6.41L10.85 0Z"}))),e.createElement("div",{className:`drop-filter-set ${o?"open":"closed"}`},e.createElement("div",{className:"filter-status"},e.createElement("div",null,P," of ",k," ",e.createElement(s.A,null,"selected")),e.createElement("button",{className:"clear-set",disabled:!n.some(l=>l.isSelected),onClick:()=>{n.filter(l=>l.isSelected).forEach(l=>{t(d,decodeURIComponent(l.key))})}},"Clear ",e.createElement(s.A,null,"filters"))),e.createElement("ul",{className:"filter-options"}
318,n.map(l=>{const _=`${d}-${decodeURIComponent(l.key)}`;return l.contentTypeId,l.title&&e.createElement("li",{key:decodeURIComponent(l.key),className:"filter-option"},e.createElement("label",{htmlFor:_},e.createElement("input",{id:_,className:l.isSelected?"active":void 0,type:"checkbox",checked:l.isSelected,onChange:()=>t(d,decodeURIComponent(l.key))}),l.contentTypeId==="dataStartingYear"?`${l.title}-${(Number(l.title)+1).toString().substring(2)}`:l.title,e.createElement(s.A,null,". Press escape to exit filter selection")))}))))},T=({className:d,defaultValue:n="Select",filterGroupKey:i,filters:t,label:o,multiSelect:c,type:m="default",updateSelectedFilters:I=($,r)=>({})})=>{const $=(r,N)=>{N==="0/2/24/28/2951"&&I(r,"0/2/24/28/2887"),I(r,N)};return!t||t.length<1?null:(t=t.filter(r=>r.key!=="0/2/24/28/2887"),e.createElement(S,{className:d,type:m},t.length===1&&t[0].key==="true"&&e.createElement(e.Fragment,null,o?e.createElement("label",{className:"filter-control__label",htmlFor:i},o,t.some(r=>r.isSelected)&&e.createElement("span",{style:{color:g.A.brightPink}}," *")):e.createElement(s.A,null,e.createElement("label",{htmlFor:i},n)),e.createElement("input",{type:"checkbox",id:i,checked:t[0].isSelected,onChange:r=>I(i,r.target.checked.toString())})),(t.length>1||t[0].key!=="true")&&e.createElement(A,{key:i,filterKey:i,options:t,title:o||"",updateSelectedFilters:$})))}},30685:(B,C,a)=>{a.d(C,{A:()=>S});var e=a(48322),g=a(14864),v=a(77334),f=a(69076);const S=({title:s=f.yy,description:p,keywords:y,image:h,type:u="WebPage",uri:b,department:E,speakable:A,courseMode:w,startDate:T,endDate:d,location:n,name:i,price:t})=>{const o=s===f.yy?s:`${s} | ${f.yy}`,c=h&&v.A.resolveRelativeUrl(h.asset.sys.uri),m={"@context":"https://schema.org","@type":u,name:o,...A?{speakable:{"@type":"SpeakableSpecification",cssSelector:[{speakable:A}]}}:{},...p?{description:p}:{},...b?{url:v.A.resolveRelativeUrl(b)}:{},provider:{"@type":"CollegeOrUniversity",name:f.yy,url:f.W6},...c?{image:c}:{},...u==="Course"?{hasCourseInstance:[{"@type":"CourseInstance",courseMode:w??"Onsite",...T?{startDate:T}:{},location:{"@type":n?"Place":void 0,name:i??f.yy},offers:{"@type":"Offer",price:t?t+" Fees quoted are per year and are subject to an annual increase":"TBD",priceCurrency:"GBP"}}]}:{}};return e.createElement(g.m,null,e.createElement("title",null,o),c?e.createElement("link",{rel:"preload",as:"image",href:c}):null,b&&e.createElement("link",{rel:"canonical",href:v.A.resolveRelativeUrl(b)}),p&&e.createElement("meta",{name:"description",content:p}),y&&e.createElement("meta",{name:"keywords",content:y}),e.createElement("meta",{property:"og:title",content:o}),p&&e.createElement("meta",{property:"og:description",content:p}),c&&e.createElement("meta",{property:"og:image",content:c}),e.createElement("meta",{property:"twitter:title",content:o}),p&&e.createElement("meta",{property:"twitter:description",content:p}),c&&e.createElement("meta",{property:"twitter:image",content:c}),e.createElement("script",{type:"application/ld+json"},JSON.stringify(m)))}},93183:(B,C,a)=>{a.d(C,{A:()=>v});var e=a(48322);const v=()=>{const[f,x]=(0,e.useState)({width:void 0,height:void 0});return(0,e.useEffect)(()=>{function S(){x({width:window.innerWidth,height:window.innerHeight})}return window.addEventListener("resize",S),S(),()=>window.removeEventListener("resize",S)},[]),f}}}]);
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.