{"version":3,"sources":["webpack:///./src/components/helpers/Container/index.tsx","webpack:///./src/configs.ts","webpack:///./src/utilities/objects.ts","webpack:///./src/components/Carousel/index.tsx","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/common/SvgImage/index.tsx","webpack:///./src/components/common/Button/index.tsx","webpack:///./src/components/common/Hero/index.tsx","webpack:///./src/components/common/ImageWithFocalPoint/index.tsx","webpack:///./src/components/common/Link/index.tsx","webpack:///./src/components/common/Overlay/index.tsx","webpack:///./src/components/common/Stats/index.tsx","webpack:///./src/components/NewsCard/index.tsx","webpack:///./src/core/config/index.ts","webpack:///./src/contexts/Localizations/index.tsx","webpack:///./src/contexts/Localizations/defaultLocalizations.ts","webpack:///./src/components/common/Tag/index.tsx","webpack:///./src/components/common/Image/index.tsx","webpack:///./src/components/common/ImageObject/index.tsx","webpack:///./src/components/GatewayCarousel/index.tsx","webpack:///./src/components/FeaturedNewsCard/index.tsx","webpack:///./src/components/common/UnderlineTitle/index.tsx","webpack:///./src/components/common/Content/index.tsx","webpack:///./src/components/common/Contact/index.tsx","webpack:///./src/components/common/RichText/index.tsx","webpack:///./src/hooks/useHabitat.tsx","webpack:///./src/components/RelatedContent/index.tsx","webpack:///./src/utilities/browser.ts","webpack:///./src/components/common/JumpList/index.tsx","webpack:///./src/breakpoints.ts","webpack:///./src/components/common/ResponsiveTable/index.tsx","webpack:///./src/components/common/DateCategory/index.tsx","webpack:///./src/components/common/Accordion/index.tsx","webpack:///./src/components/common/ImageBasic/index.tsx","webpack:///./src/components/common/Loader/index.tsx","webpack:///./src/components/common/SocialLinks/index.tsx","webpack:///./src/components/common/TagList/index.tsx","webpack:///./src/components/common/Paginaton/index.tsx","webpack:///./src/components/helpers/Grid/index.tsx","webpack:///./src/hooks/UseOutsideAlerter.ts"],"names":["children","className","CSS_CLASSES","isActive","isOpen","isShowing","navIsShowing","overlayIsShowing","DISCIPLINE","gravel","indoor","para","road","track","trials","other","isIdenticalObject","objectA","objectB","aProps","Object","getOwnPropertyNames","bProps","length","i","propName","title","slickConfig","large","containerTheme","viewMoreLink","controlInline","slider","sliderBody","hasSetPosition","setHasSetPosition","nextIsDisabled","setNextIsDisabled","previousIsDisabled","setPreviousIsDisabled","arrowsAreHidden","setArrowsAreHidden","checkSlickDisabled","slickNextButton","current","querySelector","slickPreviousButton","classList","contains","defaultSlickSettings","accessibility","dots","infinite","speed","slidesToShow","slidesToScroll","initialSlide","arrows","useTransform","responsive","breakpoint","settings","onInit","setTimeout","afterChange","assign","paddleIcon","slickGoTo","type","disabled","onClick","slickPrev","aria-label","ariaHidden","reference","slickNext","iconAfter","ref","aria-hidden","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","resolve","module","exports","xlinkHref","style","text","icon","ariaLabel","showLoader","iconOnly","fullWidth","isProcessing","handleClick","buttonClass","SvgImage","Hero","backLink","colorTheme","image","imageSize","isDarkened","isLanding","isForPage","root","classes","push","join","Container","href","url","ImageObject","fitType","useFocalPoint","aspectRatio","aspectRatioMobile","mobileImageTriggerWidth","widthSizes","isLoaded","hasTransparentBackground","focalPoint","setFocalPoint","file","details","xPercentile","x","width","yPercentile","y","height","Image","alt","cropTo","xQuadrant","yQuadrant","setFocalArea","isExternal","isButton","buttonType","buttonColour","target","rel","bodyElm","document","body","handleClose","hasCloseRedirect","containerLess","closeOverlay","remove","handleKeyUp","event","keyCode","add","window","addEventListener","removeEventListener","stats","discipline","head","slice","label","value","stat","key","category","date","thumbnail","locale","toLowerCase","Boolean","format","config","env","apiUrl","webSettings","baseUrl","webUrl","storybookApi","localizations","shareConfig","shareUrl","mobileOnly","cookieConfig","cookiePolicy","cookiePolicyExpirationDays","xsrfRequestToken","translationsNotation","LocalizationContext","documentElement","lang","translations","expand","mobileImageTriggerWidthDefault","md","aspectRatioMap","undefined","lowQualityWidth","media","data-sizes","data-srcset","widthSize","Math","ceil","parseInt","onLoad","objectPosition","data-src","innerWidth","defaultWidths","noAnimate","srcset","setSrcset","src","size","index","Number","GatewayCard","rider","openInNewTab","description","firstname","lastname","cards","themeColor","variableWidth","disableUppercase","intro","contact","content","link","secondaryLink","downloads","isTitleFloating","download","toReadable","phoneNumber","split","replace","addr","tel","fax","email","website","facebook","instagram","twitter","dangerouslySetInnerHTML","__html","updateHabitat","relatedItems","moreNewsLink","featuredItem","isPages","relatedItem","insertUrlParam","includeHash","history","pushState","searchParams","URLSearchParams","location","search","set","newurl","protocol","host","pathname","toString","hash","path","getUrlParamValue","entries","hashes","indexOf","params","val","decodeURIComponent","getAllUrlParams","filter","param","isMobile","test","navigator","scrollIntoView","elemToScrollTo","behaviour","MSInputMethodContext","behavior","isPortrait","items","action","selectedValue","theme","useScroller","useSearch","name","disableFirst","withDatePicker","defaultDatePickerValue","onDateChange","includeDates","datePickerLocale","wrapperRef","setValue","setIsOpen","options","setOptions","isClosing","setIsClosing","searchValue","setSearchValue","close","mapSelection","item","visible","handleChange","optionIndex","preventDefault","optionsSelection","selected","filteredOptions","option","displayText","includes","createOption","role","createSearch","placeholder","calendar","searchLabel","onChange","currentTarget","toggle","dateIndex","findIndex","inline","xxs","xs","sm","ml","lg","xl","xxl","xxxl","xxxxl","headers","rows","stickyCol","moreClassName","headerClassName","rowClassName","cellClassName","nested","isExpanded","setExpanded","rowExpandedStates","setRowExpandedStates","some","row","fromEntries","aria-expanded","header","alwaysVisible","hiddenOnMobile","trim","scope","rowIndex","Table","colIndex","Fragment","toggleExpandRow","colSpan","dateFormat","dateTime","AccordionPanel","activeTab","toggleTab","isAsync","isResults","setHeight","asyncContentLoaded","setAsyncContentLoaded","wrapper","calculatePanelHeight","panelElement","ontransitionend","scrollHeight","requestAnimationFrame","props","onBeforeLoad","panels","panelsInState","setPanelsInState","mappedPanels","panel","useIntrinsicHeight","setIsLoaded","list","tags","tag","defaultProps","pageQueryKey","state","pages","firstPageIndex","lastPageIndex","previousPageIndex","nextPageIndex","currentPage","isFirstPageDisabled","isLastPageDisabled","totalAmountOfPages","isPreviousDisabled","isNextDisabled","maxVisiblePagesMobile","maxVisiblePagesDesktop","maxVisiblePages","componentDidMount","this","handdleMaxVisiblePages","stopPropagation","getPager","componentDidUpdate","prevProps","totalItems","itemsPerPage","setState","generateVisablePages","maxVisibleOffset","startPage","endPage","Array","from","s","l","viewportWidth","changePage","page","retainRoute","String","generateButton","isDisabled","rootLocation","render","overflowHidden","Column","isFlush","container","handler","handleClickOutside"],"mappings":"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","file":"habitat.22.component.js","sourcesContent":["import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface ContainerProps {\r\n children: JSX.Element | JSX.Element[];\r\n}\r\n\r\nconst Container = ({ children }: ContainerProps) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nexport default Container;\r\n","import { Discipline, DisciplineCodes } from 'core/typings';\r\n\r\nimport {\r\n CookieConfig,\r\n SharePlatformDetail,\r\n} from './typings/configs';\r\n\r\nexport const COOKIE_CONFIG: CookieConfig = {\r\n cookiePolicy: 'c_policy',\r\n cookiePolicyExpirationDays: 60,\r\n xsrfRequestToken: 'XSRF-REQUEST-TOKEN',\r\n};\r\n\r\nexport const CSS_CLASSES = {\r\n isActive: 'is-open',\r\n isOpen: 'is-open',\r\n isShowing: 'is-showing',\r\n navIsShowing: 'nav-is-showing',\r\n overlayIsShowing: 'overlay-is-showing',\r\n};\r\n\r\nexport const SHARE_PLATFORM_DETAILS: SharePlatformDetail[] = [\r\n {\r\n id: 'facebook',\r\n shareUrl: 'https://www.facebook.com/sharer/sharer.php?u=',\r\n },\r\n {\r\n id: 'twitter',\r\n shareUrl: 'https://twitter.com/intent/tweet?url=',\r\n },\r\n {\r\n id: 'whatsapp',\r\n shareUrl: 'whatsapp://send?text=',\r\n },\r\n {\r\n id: 'copylink',\r\n shareUrl: null,\r\n },\r\n];\r\n\r\nexport const DISCIPLINE: Record = {\r\n 'bmx-freestyle': 'bfr',\r\n 'bmx-racing': 'bmx',\r\n 'cycling-esport': 'ces',\r\n 'cyclo-cross': 'cro',\r\n gravel: 'gra',\r\n indoor: 'ind',\r\n 'mountain-bike': 'mtb',\r\n para: 'par',\r\n road: 'roa',\r\n track: 'pis',\r\n trials: 'tri',\r\n other: 'cpt',\r\n};\r\n","/**\r\n * Checks if two objects are identical\r\n * This is a good method for prop checking in componentDidUpdate\r\n */\r\nconst isIdenticalObject = (objectA: any, objectB: any) => {\r\n const aProps = Object.getOwnPropertyNames(objectA);\r\n const bProps = Object.getOwnPropertyNames(objectB);\r\n\r\n if (aProps.length !== bProps.length) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < aProps.length; i++) {\r\n const propName = aProps[i];\r\n if (objectA[propName] !== objectB[propName]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * Breaks arrar into chunks based on a specified size\r\n */\r\nconst arrChunks = (arr: any[], size: number) => {\r\n if (!Array.isArray(arr)) {\r\n throw new Error('Chunk expects argument one to be type of array.');\r\n }\r\n\r\n const len = {\r\n length: Math.ceil(arr.length / size),\r\n };\r\n\r\n return Array.from(len).map((value, index) => (\r\n arr.slice(index * size, (index * size) + size)\r\n ));\r\n};\r\n\r\n// Put asyncForEach into a module\r\nconst asyncForEach = async (array: any[], callback: Function) => {\r\n // eslint-disable-next-line no-plusplus\r\n for (let index = 0; index < array.length; index++) {\r\n // eslint-disable-next-line no-await-in-loop\r\n await callback(array[index], index, array);\r\n }\r\n};\r\n\r\nexport {\r\n isIdenticalObject,\r\n arrChunks,\r\n asyncForEach,\r\n};\r\n","import * as React from 'react';\r\nimport { useState, useRef, useEffect } from 'react';\r\nimport Slider, { Settings as SlickConfig } from 'react-slick';\r\nimport CarouselProps from './type';\r\nimport { SvgImage, Link } from '../common';\r\nimport '../../styles/vendor/slick-caroursel.scss';\r\nimport './styles.scss';\r\n\r\nconst Carousel = ({\r\n title,\r\n children,\r\n slickConfig,\r\n large,\r\n containerTheme,\r\n viewMoreLink,\r\n controlInline,\r\n}: CarouselProps) => {\r\n const slider = useRef(null);\r\n const sliderBody = useRef(null);\r\n const [hasSetPosition, setHasSetPosition] = useState(false); // fix for initialSlide !== 0\r\n const [nextIsDisabled, setNextIsDisabled] = useState(true);\r\n const [previousIsDisabled, setPreviousIsDisabled] = useState(true);\r\n const [arrowsAreHidden, setArrowsAreHidden] = useState(false);\r\n\r\n /**\r\n * Checks for the disabled slick controls in order to set\r\n * the state accordingly to enable/disable custom next/previous\r\n * buttons.\r\n */\r\n const checkSlickDisabled = () => {\r\n const slickNextButton = sliderBody.current?.querySelector('.slick-next') as HTMLButtonElement;\r\n const slickPreviousButton = sliderBody.current?.querySelector('.slick-prev') as HTMLButtonElement;\r\n if (slickNextButton) {\r\n setNextIsDisabled(\r\n slickNextButton.classList.contains('slick-disabled'),\r\n );\r\n }\r\n\r\n if (slickPreviousButton) {\r\n setPreviousIsDisabled(\r\n slickPreviousButton.classList.contains('slick-disabled'),\r\n );\r\n }\r\n };\r\n\r\n // Default slick settings\r\n const defaultSlickSettings: SlickConfig = {\r\n accessibility: true,\r\n dots: false,\r\n infinite: false,\r\n speed: 500,\r\n slidesToShow: 5.15,\r\n slidesToScroll: 1,\r\n initialSlide: 0,\r\n arrows: true,\r\n useTransform: false,\r\n responsive: [\r\n {\r\n breakpoint: 1600,\r\n settings: {\r\n slidesToShow: 4.1,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 1400,\r\n settings: {\r\n slidesToShow: 3.5,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 3.1,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 950,\r\n settings: {\r\n slidesToShow: 2.5,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 750,\r\n settings: {\r\n slidesToShow: 2.1,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 550,\r\n settings: {\r\n slidesToShow: 1.5,\r\n },\r\n },\r\n {\r\n breakpoint: 400,\r\n settings: {\r\n arrows: false,\r\n slidesToShow: 1.1,\r\n },\r\n },\r\n ],\r\n onInit: () => {\r\n setTimeout(() => checkSlickDisabled(), 1500);\r\n },\r\n afterChange: () => {\r\n checkSlickDisabled();\r\n },\r\n };\r\n\r\n // Merge the any settings passed in via props with the default settings.\r\n const [settings] = useState(\r\n slickConfig ? Object.assign(defaultSlickSettings, slickConfig) : defaultSlickSettings,\r\n );\r\n\r\n useEffect(() => {\r\n checkSlickDisabled();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (previousIsDisabled && nextIsDisabled) {\r\n setArrowsAreHidden(true);\r\n } else {\r\n setArrowsAreHidden(false);\r\n }\r\n }, [previousIsDisabled, nextIsDisabled]);\r\n\r\n const paddleIcon = large\r\n ? '#icon-right-paddle-light'\r\n : '#icon-right-paddle';\r\n\r\n useEffect(() => {\r\n if (slider.current && !hasSetPosition) {\r\n slider.current?.slickGoTo(settings.initialSlide || 0);\r\n setHasSetPosition(true);\r\n }\r\n }, [settings.initialSlide, hasSetPosition, slider]);\r\n\r\n return (\r\n
\r\n
\r\n {title && (\r\n

{title}

\r\n )}\r\n {!controlInline && (\r\n
\r\n slider.current?.slickPrev()}\r\n aria-label=\"previous\"\r\n >\r\n \r\n \r\n slider.current?.slickNext()}\r\n aria-label=\"next\"\r\n >\r\n \r\n \r\n {viewMoreLink && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n
\r\n \r\n {children}\r\n \r\n
\r\n {controlInline && (\r\n
\r\n slider.current?.slickPrev()}\r\n aria-label=\"previous\"\r\n >\r\n \r\n \r\n slider.current?.slickNext()}\r\n aria-label=\"next\"\r\n >\r\n \r\n \r\n {viewMoreLink && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Carousel;\r\n","var map = {\n\t\"./af\": 58,\n\t\"./af.js\": 58,\n\t\"./ar\": 59,\n\t\"./ar-dz\": 60,\n\t\"./ar-dz.js\": 60,\n\t\"./ar-kw\": 61,\n\t\"./ar-kw.js\": 61,\n\t\"./ar-ly\": 62,\n\t\"./ar-ly.js\": 62,\n\t\"./ar-ma\": 63,\n\t\"./ar-ma.js\": 63,\n\t\"./ar-sa\": 64,\n\t\"./ar-sa.js\": 64,\n\t\"./ar-tn\": 65,\n\t\"./ar-tn.js\": 65,\n\t\"./ar.js\": 59,\n\t\"./az\": 66,\n\t\"./az.js\": 66,\n\t\"./be\": 67,\n\t\"./be.js\": 67,\n\t\"./bg\": 68,\n\t\"./bg.js\": 68,\n\t\"./bm\": 69,\n\t\"./bm.js\": 69,\n\t\"./bn\": 70,\n\t\"./bn-bd\": 71,\n\t\"./bn-bd.js\": 71,\n\t\"./bn.js\": 70,\n\t\"./bo\": 72,\n\t\"./bo.js\": 72,\n\t\"./br\": 73,\n\t\"./br.js\": 73,\n\t\"./bs\": 74,\n\t\"./bs.js\": 74,\n\t\"./ca\": 75,\n\t\"./ca.js\": 75,\n\t\"./cs\": 76,\n\t\"./cs.js\": 76,\n\t\"./cv\": 77,\n\t\"./cv.js\": 77,\n\t\"./cy\": 78,\n\t\"./cy.js\": 78,\n\t\"./da\": 79,\n\t\"./da.js\": 79,\n\t\"./de\": 80,\n\t\"./de-at\": 81,\n\t\"./de-at.js\": 81,\n\t\"./de-ch\": 82,\n\t\"./de-ch.js\": 82,\n\t\"./de.js\": 80,\n\t\"./dv\": 83,\n\t\"./dv.js\": 83,\n\t\"./el\": 84,\n\t\"./el.js\": 84,\n\t\"./en-au\": 85,\n\t\"./en-au.js\": 85,\n\t\"./en-ca\": 86,\n\t\"./en-ca.js\": 86,\n\t\"./en-gb\": 87,\n\t\"./en-gb.js\": 87,\n\t\"./en-ie\": 88,\n\t\"./en-ie.js\": 88,\n\t\"./en-il\": 89,\n\t\"./en-il.js\": 89,\n\t\"./en-in\": 90,\n\t\"./en-in.js\": 90,\n\t\"./en-nz\": 91,\n\t\"./en-nz.js\": 91,\n\t\"./en-sg\": 92,\n\t\"./en-sg.js\": 92,\n\t\"./eo\": 93,\n\t\"./eo.js\": 93,\n\t\"./es\": 94,\n\t\"./es-do\": 95,\n\t\"./es-do.js\": 95,\n\t\"./es-mx\": 96,\n\t\"./es-mx.js\": 96,\n\t\"./es-us\": 97,\n\t\"./es-us.js\": 97,\n\t\"./es.js\": 94,\n\t\"./et\": 98,\n\t\"./et.js\": 98,\n\t\"./eu\": 99,\n\t\"./eu.js\": 99,\n\t\"./fa\": 100,\n\t\"./fa.js\": 100,\n\t\"./fi\": 101,\n\t\"./fi.js\": 101,\n\t\"./fil\": 102,\n\t\"./fil.js\": 102,\n\t\"./fo\": 103,\n\t\"./fo.js\": 103,\n\t\"./fr\": 40,\n\t\"./fr-ca\": 104,\n\t\"./fr-ca.js\": 104,\n\t\"./fr-ch\": 105,\n\t\"./fr-ch.js\": 105,\n\t\"./fr.js\": 40,\n\t\"./fy\": 106,\n\t\"./fy.js\": 106,\n\t\"./ga\": 107,\n\t\"./ga.js\": 107,\n\t\"./gd\": 108,\n\t\"./gd.js\": 108,\n\t\"./gl\": 109,\n\t\"./gl.js\": 109,\n\t\"./gom-deva\": 110,\n\t\"./gom-deva.js\": 110,\n\t\"./gom-latn\": 111,\n\t\"./gom-latn.js\": 111,\n\t\"./gu\": 112,\n\t\"./gu.js\": 112,\n\t\"./he\": 113,\n\t\"./he.js\": 113,\n\t\"./hi\": 114,\n\t\"./hi.js\": 114,\n\t\"./hr\": 115,\n\t\"./hr.js\": 115,\n\t\"./hu\": 116,\n\t\"./hu.js\": 116,\n\t\"./hy-am\": 117,\n\t\"./hy-am.js\": 117,\n\t\"./id\": 118,\n\t\"./id.js\": 118,\n\t\"./is\": 119,\n\t\"./is.js\": 119,\n\t\"./it\": 120,\n\t\"./it-ch\": 121,\n\t\"./it-ch.js\": 121,\n\t\"./it.js\": 120,\n\t\"./ja\": 122,\n\t\"./ja.js\": 122,\n\t\"./jv\": 123,\n\t\"./jv.js\": 123,\n\t\"./ka\": 124,\n\t\"./ka.js\": 124,\n\t\"./kk\": 125,\n\t\"./kk.js\": 125,\n\t\"./km\": 126,\n\t\"./km.js\": 126,\n\t\"./kn\": 127,\n\t\"./kn.js\": 127,\n\t\"./ko\": 128,\n\t\"./ko.js\": 128,\n\t\"./ku\": 129,\n\t\"./ku.js\": 129,\n\t\"./ky\": 130,\n\t\"./ky.js\": 130,\n\t\"./lb\": 131,\n\t\"./lb.js\": 131,\n\t\"./lo\": 132,\n\t\"./lo.js\": 132,\n\t\"./lt\": 133,\n\t\"./lt.js\": 133,\n\t\"./lv\": 134,\n\t\"./lv.js\": 134,\n\t\"./me\": 135,\n\t\"./me.js\": 135,\n\t\"./mi\": 136,\n\t\"./mi.js\": 136,\n\t\"./mk\": 137,\n\t\"./mk.js\": 137,\n\t\"./ml\": 138,\n\t\"./ml.js\": 138,\n\t\"./mn\": 139,\n\t\"./mn.js\": 139,\n\t\"./mr\": 140,\n\t\"./mr.js\": 140,\n\t\"./ms\": 141,\n\t\"./ms-my\": 142,\n\t\"./ms-my.js\": 142,\n\t\"./ms.js\": 141,\n\t\"./mt\": 143,\n\t\"./mt.js\": 143,\n\t\"./my\": 144,\n\t\"./my.js\": 144,\n\t\"./nb\": 145,\n\t\"./nb.js\": 145,\n\t\"./ne\": 146,\n\t\"./ne.js\": 146,\n\t\"./nl\": 147,\n\t\"./nl-be\": 148,\n\t\"./nl-be.js\": 148,\n\t\"./nl.js\": 147,\n\t\"./nn\": 149,\n\t\"./nn.js\": 149,\n\t\"./oc-lnc\": 150,\n\t\"./oc-lnc.js\": 150,\n\t\"./pa-in\": 151,\n\t\"./pa-in.js\": 151,\n\t\"./pl\": 152,\n\t\"./pl.js\": 152,\n\t\"./pt\": 153,\n\t\"./pt-br\": 154,\n\t\"./pt-br.js\": 154,\n\t\"./pt.js\": 153,\n\t\"./ro\": 155,\n\t\"./ro.js\": 155,\n\t\"./ru\": 156,\n\t\"./ru.js\": 156,\n\t\"./sd\": 157,\n\t\"./sd.js\": 157,\n\t\"./se\": 158,\n\t\"./se.js\": 158,\n\t\"./si\": 159,\n\t\"./si.js\": 159,\n\t\"./sk\": 160,\n\t\"./sk.js\": 160,\n\t\"./sl\": 161,\n\t\"./sl.js\": 161,\n\t\"./sq\": 162,\n\t\"./sq.js\": 162,\n\t\"./sr\": 163,\n\t\"./sr-cyrl\": 164,\n\t\"./sr-cyrl.js\": 164,\n\t\"./sr.js\": 163,\n\t\"./ss\": 165,\n\t\"./ss.js\": 165,\n\t\"./sv\": 166,\n\t\"./sv.js\": 166,\n\t\"./sw\": 167,\n\t\"./sw.js\": 167,\n\t\"./ta\": 168,\n\t\"./ta.js\": 168,\n\t\"./te\": 169,\n\t\"./te.js\": 169,\n\t\"./tet\": 170,\n\t\"./tet.js\": 170,\n\t\"./tg\": 171,\n\t\"./tg.js\": 171,\n\t\"./th\": 172,\n\t\"./th.js\": 172,\n\t\"./tk\": 173,\n\t\"./tk.js\": 173,\n\t\"./tl-ph\": 174,\n\t\"./tl-ph.js\": 174,\n\t\"./tlh\": 175,\n\t\"./tlh.js\": 175,\n\t\"./tr\": 176,\n\t\"./tr.js\": 176,\n\t\"./tzl\": 177,\n\t\"./tzl.js\": 177,\n\t\"./tzm\": 178,\n\t\"./tzm-latn\": 179,\n\t\"./tzm-latn.js\": 179,\n\t\"./tzm.js\": 178,\n\t\"./ug-cn\": 180,\n\t\"./ug-cn.js\": 180,\n\t\"./uk\": 181,\n\t\"./uk.js\": 181,\n\t\"./ur\": 182,\n\t\"./ur.js\": 182,\n\t\"./uz\": 183,\n\t\"./uz-latn\": 184,\n\t\"./uz-latn.js\": 184,\n\t\"./uz.js\": 183,\n\t\"./vi\": 185,\n\t\"./vi.js\": 185,\n\t\"./x-pseudo\": 186,\n\t\"./x-pseudo.js\": 186,\n\t\"./yo\": 187,\n\t\"./yo.js\": 187,\n\t\"./zh-cn\": 188,\n\t\"./zh-cn.js\": 188,\n\t\"./zh-hk\": 189,\n\t\"./zh-hk.js\": 189,\n\t\"./zh-mo\": 190,\n\t\"./zh-mo.js\": 190,\n\t\"./zh-tw\": 191,\n\t\"./zh-tw.js\": 191\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 229;","import * as React from 'react';\r\n\r\ninterface SvgImageProps {\r\n title?: string;\r\n reference: string;\r\n ariaHidden?: boolean;\r\n className?: string;\r\n}\r\n\r\nconst SvgImage = ({\r\n title,\r\n reference,\r\n ariaHidden,\r\n className,\r\n}: SvgImageProps) => (\r\n \r\n {title && (\r\n {title}\r\n )}\r\n \r\n \r\n);\r\n\r\nexport default SvgImage;\r\n","import * as React from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface ButtonProps {\r\n type: 'button' | 'submit' | 'reset';\r\n style?: 'default' | 'secondary' | 'transparent' | 'uci';\r\n text?: string;\r\n icon?: {\r\n reference: string;\r\n title: string;\r\n } | undefined;\r\n role?: 'button';\r\n ariaLabel?: string;\r\n disabled?: boolean;\r\n showLoader?: boolean;\r\n iconOnly?: boolean;\r\n fullWidth?: boolean;\r\n isProcessing?: boolean;\r\n handleClick?: (event: React.MouseEvent) => void | undefined;\r\n}\r\n\r\nconst Button = ({\r\n type = 'button',\r\n style = 'default',\r\n text,\r\n icon,\r\n ariaLabel,\r\n disabled = false,\r\n showLoader = false,\r\n iconOnly = false,\r\n fullWidth = false,\r\n isProcessing = false,\r\n handleClick,\r\n}: ButtonProps) => {\r\n const buttonClass = `\r\n button\r\n button--${style}\r\n ${text && 'button--has-label'}\r\n ${icon && 'button--has-icon'}\r\n ${iconOnly && 'button--icon-only'}\r\n ${fullWidth && 'button--full-width'}\r\n ${showLoader && 'button--updating'}\r\n ${disabled && 'button--disabled'}\r\n ${isProcessing && 'button--processing'}\r\n `;\r\n\r\n return (\r\n \r\n {icon && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {text && (\r\n
\r\n {text}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Button;\r\n","import * as React from 'react';\r\n\r\nimport Container from '../../helpers/Container';\r\nimport ImageObject from '../ImageObject';\r\nimport SvgImage from '../SvgImage';\r\nimport { HeroBannerProps } from './type';\r\nimport './styles.scss';\r\n\r\nconst HeroBanner = ({\r\n ariaHidden,\r\n backLink,\r\n children,\r\n colorTheme = 'blue',\r\n image,\r\n imageSize = 'half',\r\n isDarkened,\r\n isLanding,\r\n isForPage,\r\n}: HeroBannerProps) => {\r\n const root = 'hero-banner';\r\n const classes = [\r\n root,\r\n `${root}--theme-${colorTheme}`,\r\n ];\r\n if (isDarkened) {\r\n classes.push(`${root}--darkened`);\r\n }\r\n if (image) {\r\n classes.push(`${root}--${imageSize}`);\r\n }\r\n if (!image) {\r\n classes.push(`${root}--no-image`);\r\n }\r\n if (isLanding) {\r\n classes.push(`${root}--landing`);\r\n }\r\n if (isForPage) {\r\n classes.push(`${root}--for-page`);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n {backLink ? (\r\n \r\n \r\n {backLink?.title}\r\n \r\n ) : }\r\n
\r\n\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n
\r\n\r\n {!isLanding && (\r\n
\r\n {image && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default HeroBanner;\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { Image as ImageType } from '../../../typings';\r\nimport Image from '../Image';\r\n\r\ninterface ImageWithFocalPointProps {\r\n image: ImageType;\r\n aspectRatio: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n widthSizes?: string[];\r\n aspectRatioMobile?: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n mobileImageTriggerWidth?: number;\r\n isLoaded?: Function;\r\n hasTransparentBackground?: boolean;\r\n isDarkened?: boolean;\r\n}\r\n\r\nconst ImageWithFocalPoint = ({\r\n image,\r\n aspectRatio,\r\n aspectRatioMobile,\r\n mobileImageTriggerWidth,\r\n widthSizes,\r\n isLoaded,\r\n hasTransparentBackground = false,\r\n isDarkened = false, // passed as percentage 80 etc.\r\n}: ImageWithFocalPointProps) => {\r\n const [focalPoint, setFocalPoint] = useState(null);\r\n /*\r\n Set crop quadrant area as:\r\n 'center' | 'top' | 'right' | 'left' | 'bottom' | 'top_right' |\r\n 'top_left' | 'bottom_right' | 'bottom_left';\r\n Docs: https://www.contentful.com/developers/docs/references/images-api/#/reference/resizing-&-cropping/specify-focus-area\r\n We get x / y coords in pixels so we calculate percentage and\r\n then which area it falls into from there.\r\n */\r\n const setFocalArea = () => {\r\n if (!image.focalPoint) return 'center';\r\n if (!image.file || !image.file.details) return 'center';\r\n\r\n const xPercentile = (image.focalPoint.x / image.file.details.image.width) * 100;\r\n const yPercentile = (image.focalPoint.y / image.file.details.image.height) * 100;\r\n // eslint-disable-next-line no-nested-ternary\r\n const xQuadrant = xPercentile < 33 ? 'left' : xPercentile > 66 ? 'right' : 'center';\r\n // eslint-disable-next-line no-nested-ternary\r\n const yQuadrant = yPercentile < 33 ? 'top' : xPercentile > 66 ? 'bottom' : 'center';\r\n\r\n if (xQuadrant === 'center') {\r\n return yQuadrant;\r\n }\r\n if (yQuadrant === 'center') {\r\n return xQuadrant;\r\n }\r\n\r\n return `${yQuadrant}_${xQuadrant}`;\r\n };\r\n\r\n useEffect(() => {\r\n if (image.focalPoint && image.file.details) {\r\n const xPercentile = (image.focalPoint.x / image.file.details.image.width) * 100;\r\n const yPercentile = (image.focalPoint.y / image.file.details.image.height) * 100;\r\n setFocalPoint(`${xPercentile}% ${yPercentile}%`);\r\n }\r\n }, [image]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ImageWithFocalPoint;\r\n","import * as React from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport { Link as LinkType } from '../../../typings';\r\nimport './styles.scss';\r\n\r\nconst Link = ({\r\n title,\r\n url,\r\n isExternal = false,\r\n isButton = false,\r\n icon,\r\n iconAfter,\r\n className = '',\r\n ariaLabel,\r\n buttonType = 'text-link',\r\n buttonColour = 'white',\r\n}: LinkType) => {\r\n const isDisabled = () => (\r\n url === null || url === ''\r\n );\r\n\r\n const root = 'link';\r\n const classes = [root, className];\r\n\r\n if (icon || iconAfter) {\r\n classes.push(`${root}--has-icon`);\r\n }\r\n\r\n if (isButton) {\r\n classes.push('button');\r\n }\r\n\r\n if (isDisabled()) {\r\n classes.push(`${root}--disabled`);\r\n }\r\n\r\n if (buttonType) {\r\n classes.push(buttonType);\r\n }\r\n\r\n if (buttonColour) {\r\n classes.push(`${root}--${buttonColour}`);\r\n }\r\n\r\n return (\r\n \r\n {icon && (\r\n
\r\n \r\n
\r\n )}\r\n {title}\r\n {iconAfter && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Link;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport { CSS_CLASSES } from '../../../configs';\r\nimport './styles.scss';\r\n\r\nconst bodyElm = document.body;\r\n\r\ninterface OverlayProps {\r\n children: JSX.Element | JSX.Element[];\r\n handleClose: Function;\r\n style?: string;\r\n id?: string;\r\n hasCloseRedirect?: boolean;\r\n containerLess?: boolean;\r\n}\r\n\r\nconst Overlay = ({\r\n children,\r\n handleClose,\r\n style,\r\n id,\r\n hasCloseRedirect,\r\n containerLess,\r\n}: OverlayProps) => {\r\n const closeOverlay = () => {\r\n bodyElm.classList.remove(CSS_CLASSES.overlayIsShowing);\r\n /* timeout to allow animations to complete. */\r\n if (hasCloseRedirect) {\r\n handleClose();\r\n return;\r\n }\r\n setTimeout(() => {\r\n handleClose();\r\n }, 100);\r\n };\r\n\r\n const handleKeyUp = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === 27) {\r\n closeOverlay();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n bodyElm.classList.add(CSS_CLASSES.overlayIsShowing);\r\n /**\r\n * This needs some rework - note quite sure why it's built this way tbh\r\n */\r\n // @ts-ignore\r\n window.addEventListener('keyup', handleKeyUp);\r\n // @ts-ignore\r\n return () => window.removeEventListener('keyup', handleKeyUp);\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Overlay;\r\n","import * as React from 'react';\r\nimport { Discipline } from '../../../core/typings';\r\nimport './styles.scss';\r\n\r\ntype Stat = {\r\n label: string;\r\n value: string;\r\n};\r\n\r\ninterface StatsProps {\r\n stats: Stat[];\r\n text?: string;\r\n discipline?: Discipline;\r\n}\r\n\r\nconst Stats = ({\r\n stats,\r\n text,\r\n discipline,\r\n}: StatsProps) => {\r\n const head = stats[0];\r\n const body = stats.slice(1);\r\n\r\n return (\r\n
\r\n
\r\n {text && (\r\n
{text}
\r\n )}\r\n\r\n
{head.label}
\r\n
{head.value}
\r\n\r\n {text && (\r\n
{text}
\r\n )}\r\n
\r\n
    \r\n {body.map((stat: Stat) => (\r\n \r\n
  • \r\n
    {stat.label}
    \r\n
    {stat.value}
    \r\n
  • \r\n
    \r\n ))}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Stats;\r\n","import React, { useContext } from 'react';\r\nimport moment from 'moment';\r\nimport LocalizationContext from '../../contexts/Localizations';\r\nimport NewsCardProps from './type';\r\nimport { DateAndCategory, Image, SvgImage } from '../common';\r\nimport './styles.scss';\r\n\r\nconst NewsCard = ({\r\n category,\r\n title,\r\n date,\r\n thumbnail,\r\n type,\r\n url,\r\n viewMoreLink,\r\n}: NewsCardProps) => {\r\n const { locale } = useContext(LocalizationContext);\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {url && (\r\n \r\n {title}\r\n \r\n )}\r\n {!url && (\r\n <>{title}\r\n )}\r\n
\r\n {viewMoreLink && (\r\n \r\n )}\r\n
\r\n {thumbnail && (\r\n
\r\n {Boolean(type && type.toLowerCase() === 'video') && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n )}\r\n {date && (\r\n
\r\n {date && moment(date).locale(locale).format('DD MMM YY')}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default NewsCard;\r\n","import LocalizationsState from '../typings/localization';\r\n\r\ndeclare const Config: AppConfiguration;\r\n\r\ndeclare const webSettings: {\r\n baseUrl: string;\r\n localizations: LocalizationsState;\r\n};\r\nexport interface AppConfiguration {\r\n env: string;\r\n apiUrl: string;\r\n webUrl: string;\r\n storybookApi?: string;\r\n localizations: LocalizationsState;\r\n}\r\n\r\nexport interface SharePlatformDetail {\r\n key: number;\r\n id: string;\r\n shareUrl: string | null;\r\n mobileOnly: boolean;\r\n}\r\n\r\nexport const config: AppConfiguration = {\r\n env: Config.env,\r\n apiUrl: `${webSettings.baseUrl}${Config.apiUrl}`,\r\n webUrl: webSettings.baseUrl,\r\n storybookApi: Config.storybookApi ? Config.storybookApi : undefined,\r\n localizations: webSettings.localizations,\r\n};\r\n\r\nexport interface CookieConfig {\r\n cookiePolicy: string;\r\n cookiePolicyExpirationDays: number;\r\n xsrfRequestToken: string;\r\n}\r\n\r\nexport const shareConfig: SharePlatformDetail[] = [\r\n {\r\n key: 1,\r\n id: 'facebook',\r\n shareUrl: 'https://www.facebook.com/sharer/sharer.php?u=',\r\n mobileOnly: false,\r\n },\r\n {\r\n key: 2,\r\n id: 'twitter',\r\n shareUrl: 'https://twitter.com/intent/tweet?url=',\r\n mobileOnly: false,\r\n },\r\n {\r\n key: 3,\r\n id: 'whatsapp',\r\n shareUrl: 'whatsapp://send?text=',\r\n mobileOnly: true,\r\n },\r\n {\r\n key: 4,\r\n id: 'copylink',\r\n shareUrl: null,\r\n mobileOnly: false,\r\n },\r\n];\r\n\r\nexport const cookieConfig: CookieConfig = {\r\n cookiePolicy: 'c_policy',\r\n cookiePolicyExpirationDays: 60,\r\n xsrfRequestToken: 'XSRF-REQUEST-TOKEN',\r\n};\r\n","import 'moment/locale/fr';\r\nimport { Notation } from 'notation';\r\nimport { createContext } from 'react';\r\nimport { config } from '../../core/config';\r\nimport LocalizationsState from '../../core/typings/localization';\r\nimport defaultLocalizations from './defaultLocalizations';\r\n\r\ninterface LocalizationsContextType {\r\n locale: string;\r\n translations: LocalizationsState;\r\n setTranslations: (TranslationsState: LocalizationsState) => void;\r\n}\r\n\r\n/**\r\n * Create a notation instance in order to use the notation\r\n * exapand method to mutate the translations to a nested\r\n * object rather than using the dot notation in the keys\r\n * set by the backend. Merge config.localizations with\r\n * defaultLocalizations to avoid missing labels\r\n */\r\nconst translationsNotation = new Notation(\r\n Object.assign(defaultLocalizations, config.localizations),\r\n);\r\n\r\nconst LocalizationContext = createContext(\r\n {\r\n locale: document.documentElement.lang,\r\n translations: translationsNotation.expand().value,\r\n } as LocalizationsContextType,\r\n);\r\n\r\nexport default LocalizationContext;\r\n","export default {\r\n 'cookieBanner.title': 'cookieBanner.title',\r\n 'cookieBanner.acceptText': 'cookieBanner.acceptText',\r\n 'header.forLabel': 'header.forLabel',\r\n 'header.usefulLinksLabel': 'header.usefulLinksLabel',\r\n 'footer.partnersLabel': 'footer.partnersLabel',\r\n 'footer.worldCyclingPartnersLabel': 'footer.worldCyclingPartnersLabel',\r\n 'footer.officialSupplierLabel': 'footer.officialSupplierLabel',\r\n 'relatedContent.title': 'relatedContent.title',\r\n 'competition.racesLabel': 'competition.racesLabel',\r\n 'competition.classLabel': 'competition.classLabel',\r\n 'competition.websiteLabel': 'competition.websiteLabel',\r\n 'competition.emailLabel': 'competition.emailLabel',\r\n 'competition.addressLabel': 'competition.addressLabel',\r\n 'competition.assignmentsLabel': 'competition.assignmentsLabel',\r\n 'competition.appointedByLabel': 'competition.appointedByLabel',\r\n 'calendar.latestLabel': 'calendar.latestLabel',\r\n 'calendar.upcomingLabel': 'calendar.upcomingLabel',\r\n 'calendar.pastLabel': 'calendar.pastLabel',\r\n 'calendar.raceHubLinkLabel': 'calendar.raceHubLinkLabel',\r\n 'calendar.raceCategoryLabel': 'calendar.raceCategoryLabel',\r\n 'calendar.raceTypeLabel': 'calendar.raceTypeLabel',\r\n 'calendar.raceClassLabel': 'calendar.raceClassLabel',\r\n 'calendar.eventTypeLabel': 'calendar.eventTypeLabel',\r\n 'calendar.disciplineLabel': 'calendar.disciplineLabel',\r\n 'calendar.raceYearLabel': 'calendar.raceYearLabel',\r\n 'calendar.searchLabel': 'calendar.searchLabel',\r\n 'calendar.searchText': 'calendar.searchText',\r\n 'calendar.noResults': 'calendar.noResults',\r\n 'calendar.viewMoreLabel': 'calendar.viewMoreLabel',\r\n 'calendar.moreFiltersLabel': 'calendar.moreFiltersLabel',\r\n 'calendar.noSearchResults': 'calendar.noSearchResults',\r\n 'calendar.applyFiltersLabel': 'calendar.applyFiltersLabel',\r\n 'calendar.downloadLabel': 'calendar.downloadLabel',\r\n 'calendar.downloadSelectionLabel': 'calendar.downloadSelectionLabel',\r\n 'calendar.downloadSeasonLabel': 'calendar.downloadSeasonLabel',\r\n 'calendar.downloadHelpText': 'calendar.downloadHelpText',\r\n 'competitionDetails.classLabel': 'competitionDetails.classLabel',\r\n 'competitionDetails.websiteLabel': 'competitionDetails.websiteLabel',\r\n 'competitionDetails.emailLabel': 'competitionDetails.emailLabel',\r\n 'competitionDetails.scheduleTitle': 'competitionDetails.scheduleTitle',\r\n 'competitionDetails.commissiaryTitle': 'competitionDetails.commissiaryTitle',\r\n 'competitionDetails.commissiaryAppointedBy': 'competitionDetails.commissiaryAppointedBy',\r\n 'filters.allFilterText': 'filters.allFilterText',\r\n 'filters.allDisciplinesText': 'filters.allDisciplinesText',\r\n 'filters.allSeasonsText': 'filters.allSeasonsText',\r\n 'filters.allCountriesText': 'filters.allCountriesText',\r\n 'filters.countryLabel': 'filters.countryLabel',\r\n 'filters.seasonLabel': 'filters.seasonLabel',\r\n 'filters.disciplineLabel': 'filters.disciplineLabel',\r\n 'discipline.bmx': 'discipline.bmx',\r\n 'discipline.cpt': 'discipline.cpt',\r\n 'discipline.cro': 'discipline.cro',\r\n 'discipline.ind': 'discipline.ind',\r\n 'discipline.mtb': 'discipline.mtb',\r\n 'discipline.par': 'discipline.par',\r\n 'discipline.pis': 'discipline.pis',\r\n 'discipline.roa': 'discipline.roa',\r\n 'discipline.tri': 'discipline.tri',\r\n 'discipline.gra': 'discipline.gra',\r\n 'discipline.bfr': 'discipline.bfr',\r\n 'discipline.ces': 'discipline.ces',\r\n 'event.dayLabel': 'event.dayLabel',\r\n 'event.liveNowLabel': 'event.liveNowLabel',\r\n 'event.fromLabel': 'event.fromLabel',\r\n 'event.upcomingLabel': 'event.upcomingLabel',\r\n 'event.liveStreamLabel': 'event.liveStreamLabel',\r\n 'event.liveScheduleLabel': 'event.liveScheduleLabel',\r\n 'event.todaysEventsLabel': 'event.todaysEventsLabel',\r\n 'event.watchPlaylistTitle': 'event.watchPlaylistTitle',\r\n 'homepage.liveEventLabel': 'homepage.liveEventLabel',\r\n 'riders.teamCategory': 'riders.teamCategory',\r\n 'riders.searchText': 'riders.searchText',\r\n 'riders.resultsLabel': 'riders.resultsLabel',\r\n 'riders.teamsLabel': 'riders.teamsLabel',\r\n 'riders.ridersLabel': 'riders.ridersLabel',\r\n 'riders.dobLabel': 'riders.dobLabel',\r\n 'riders.nationalityLabel': 'riders.nationalityLabel',\r\n 'riders.sanctionsLabel': 'riders.sanctionsLabel',\r\n 'regulations.overviewLabel': 'regulations.overviewLabel',\r\n 'regulations.rulesInForceLabel': 'regulations.rulesInForceLabel',\r\n 'regulations.upcomingAmendmentsLabel': 'regulations.upcomingAmendmentsLabel',\r\n 'regulations.versionOnLabel': 'regulations.versionOnLabel',\r\n 'regulations.inForceFromLabel': 'regulations.inForceFromLabel',\r\n 'news.latest': 'news.latest',\r\n 'news.noResultsText': 'news.noResultsText',\r\n 'raceHub.commentaryViewMore': 'raceHub.commentaryViewMore',\r\n 'search.searchLabel': 'search.searchLabel',\r\n 'contact.title': 'contact.title',\r\n 'contact.addr': 'contact.addr',\r\n 'contact.tel': 'contact.tel',\r\n 'contact.fax': 'contact.fax',\r\n 'contact.email': 'contact.email',\r\n 'contact.website': 'contact.website',\r\n 'contact.twitter': 'contact.twitter',\r\n 'rankingWidget.title': 'rankingWidget.title',\r\n 'rankingWidget.pointsLabel': 'rankingWidget.pointsLabel',\r\n 'rankingWidget.menLabel': 'rankingWidget.menLabel',\r\n 'rankingWidget.womenLabel': 'rankingWidget.womenLabel',\r\n 'rankingWidget.lastUpdatedLabel': 'rankingWidget.lastUpdatedLabel',\r\n 'rankingWidget.noRankingsLabel': 'rankingWidget.noRankingsLabel',\r\n 'technicalRankings.refineResultsLabel': 'technicalRankings.refineResultsLabel',\r\n 'technicalRankings.searchTeamLabel': 'technicalRankings.searchTeamLabel',\r\n 'technicalRankings.notesLabel': 'technicalRankings.notesLabel',\r\n 'technicalRankings.notesMenDisclaimer': 'technicalRankings.notesMenDisclaimer',\r\n 'technicalRankings.notesWomenDisclaimer': 'technicalRankings.notesWomenDisclaimer',\r\n 'technicalRankings.title': 'technicalRankings.title',\r\n 'technicalRankings.tableTotalLabel': 'technicalRankings.tableTotalLabel',\r\n 'technicalRankings.tableTypeLabel': 'technicalRankings.tableTypeLabel',\r\n};\r\n","import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface TagProps {\r\n text: string;\r\n url: string;\r\n}\r\n\r\nconst Tag = ({ text, url }: TagProps) => (\r\n {text}\r\n);\r\n\r\nexport default Tag;\r\n","/*\r\n Responsive image component.\r\n Details in /README.md\r\n */\r\n\r\nimport * as React from 'react';\r\nimport breakpoints from '../../../breakpoints';\r\nimport 'lazysizes';\r\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\r\nimport './styles.scss';\r\n\r\nconst defaultWidth = '1000';\r\nconst defaultLowQualityWidth = '20';\r\nconst defaultAspectRatio = '16x9';\r\nconst mobileImageTriggerWidthDefault = breakpoints.md;\r\nconst imageQuality = 80;\r\n\r\nconst aspectRatioMap = {\r\n '2x1': 0.5,\r\n '16x9': 0.5625,\r\n '3x2': 0.667,\r\n '4x3': 0.75,\r\n '1x1': 1,\r\n '4x5': 1.2,\r\n '2x3': 1.5,\r\n '6x1': 0.59,\r\n '6x7-promo': 1.16,\r\n};\r\n\r\ninterface ImageProps {\r\n url: string;\r\n alt: string;\r\n aspectRatio?: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n focalPoint?: string | null;\r\n cropTo?: string | undefined;\r\n lowQualityWidth?: string;\r\n widthSizes?: string[];\r\n aspectRatioMobile?: '2x1' | '16x9' | '3x2' | '4x3' | '1x1' | '4x5' | '2x3' | '6x1' | '6x7-promo';\r\n mobileImageTriggerWidth?: number;\r\n isLoaded?: Function;\r\n hasTransparentBackground?: boolean;\r\n isDarkened?: boolean;\r\n}\r\n\r\nconst Image = ({\r\n url,\r\n alt,\r\n aspectRatio = defaultAspectRatio,\r\n aspectRatioMobile,\r\n mobileImageTriggerWidth = mobileImageTriggerWidthDefault,\r\n cropTo = undefined,\r\n widthSizes = [defaultWidth],\r\n lowQualityWidth = defaultLowQualityWidth,\r\n isLoaded,\r\n hasTransparentBackground = false,\r\n focalPoint,\r\n isDarkened = false, // passed as percentage 80 etc.\r\n}: ImageProps) => {\r\n const setAspectRatio = () => {\r\n if (!aspectRatioMobile) return aspectRatio;\r\n return window.innerWidth < mobileImageTriggerWidth ? aspectRatioMobile : aspectRatio;\r\n };\r\n\r\n return (\r\n \r\n {aspectRatioMobile && (\r\n (\r\n // @ts-ignore\r\n `${url}?fit=thumb&q=${imageQuality}&f=${cropTo || ''}&fl=progressive&w=${widthSize}&h=${Math.ceil(parseInt(widthSize, 10) * aspectRatioMap[aspectRatioMobile])} ${widthSize}w`\r\n ))\r\n }\r\n />\r\n )}\r\n\r\n {\r\n if (isLoaded) {\r\n isLoaded();\r\n }\r\n }}\r\n data-sizes=\"auto\"\r\n style={{ objectPosition: focalPoint || 'initial' }}\r\n // @ts-ignore\r\n data-src={`${url}?fit=thumb&w=${lowQualityWidth}&f=${cropTo || ''}&h=${Math.ceil(parseInt(lowQualityWidth, 10) * aspectRatioMap[setAspectRatio()])}`}\r\n data-srcset={\r\n widthSizes.map((widthSize) => (\r\n // @ts-ignore\r\n `${url}?fit=thumb&q=${imageQuality}&f=${cropTo || ''}&fl=progressive&w=${widthSize}&h=${Math.ceil(parseInt(widthSize, 10) * aspectRatioMap[aspectRatio])} ${widthSize}w`\r\n ))\r\n }\r\n className={`lazyload blur-up ${isDarkened ? 'has-opacity' : ''}`}\r\n alt={alt || 'image with no description'}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default Image;\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Image as ImageType } from '../../../typings';\r\nimport 'lazysizes';\r\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\r\nimport './styles.scss';\r\n\r\nconst defaultWidths = ['400', '800', '1200', '2400', '4000'];\r\n\r\nconst aspectRatioMap: Record = {\r\n '2x1': 0.5,\r\n '16x9': 0.5625,\r\n '3x2': 0.667,\r\n '4x3': 0.75,\r\n '1x1': 1,\r\n '4x5': 1.2,\r\n '2x3': 1.5,\r\n};\r\n\r\ninterface ImageObjectProps {\r\n image: ImageType;\r\n widthSizes?: string[];\r\n isDarkened?: boolean;\r\n useFocalPoint?: boolean;\r\n fitType?: 'contain' | 'cover'\r\n isLoaded?: () => void;\r\n noAnimate?: boolean;\r\n aspectRatio?: string;\r\n}\r\n\r\ninterface FocalStyle {\r\n objectPosition: string;\r\n}\r\n\r\nconst ImageObject = ({\r\n image,\r\n widthSizes = defaultWidths,\r\n aspectRatio,\r\n isDarkened = false,\r\n useFocalPoint = true,\r\n fitType = 'cover',\r\n isLoaded,\r\n noAnimate,\r\n}: ImageObjectProps) => {\r\n const [focalPoint, setFocalPoint] = useState();\r\n const [srcset, setSrcset] = useState();\r\n\r\n useEffect(() => {\r\n if (image.focalPoint) {\r\n // @ts-ignore\r\n const xPercentile = (image.focalPoint.x / image.file.details?.image?.width) * 100;\r\n // @ts-ignore\r\n const yPercentile = (image.focalPoint.y / image.file.details?.image?.height) * 100;\r\n setFocalPoint({\r\n objectPosition: `${xPercentile}% ${yPercentile}%`,\r\n });\r\n }\r\n\r\n const src = widthSizes\r\n .map((size: string, index: number) => `${image.file.url}?fit=thumb&fl=progressive&w=${size}&h=${aspectRatio ? Math.ceil(Number(widthSizes[index]) * aspectRatioMap[aspectRatio]) : ''} ${size}w`);\r\n\r\n setSrcset(src.join(','));\r\n }, [image]);\r\n\r\n const classes = [\r\n 'image-object',\r\n `image-object--${fitType}`,\r\n 'lazyload',\r\n ];\r\n if (isDarkened) {\r\n classes.push('has-opacity');\r\n }\r\n if (noAnimate) {\r\n classes.push('image-object--no-animate');\r\n }\r\n\r\n return (\r\n isLoaded?.()}\r\n data-sizes=\"auto\"\r\n data-srcset={srcset}\r\n data-src={`${image.file.url}?fit=thumb&fl=progressive&w=${widthSizes[0]}&h=${aspectRatio ? Math.ceil(Number(widthSizes[0]) * aspectRatioMap[aspectRatio]) : ''}`}\r\n className={classes.join(' ')}\r\n alt={image.title ? image.title : 'image with no description'}\r\n style={useFocalPoint ? focalPoint : undefined}\r\n />\r\n );\r\n};\r\n\r\nexport default ImageObject;\r\n","import React, { useContext } from 'react';\r\nimport LocalizationContext from '../../contexts/Localizations';\r\nimport { DISCIPLINE } from '../../configs';\r\nimport Carousel from '../Carousel';\r\nimport { Image } from '../common';\r\nimport GatewayCarouselProps, { Card } from './type';\r\nimport './styles.scss';\r\n\r\nexport const GatewayCard = ({\r\n url,\r\n image,\r\n label,\r\n rider,\r\n discipline,\r\n openInNewTab,\r\n}: Card, index: number) => {\r\n const { translations } = useContext(LocalizationContext);\r\n\r\n const Container: React.ReactType = url ? 'a' : 'div';\r\n\r\n return (\r\n \r\n
\r\n {!label && rider && (\r\n
\r\n {translations.discipline[DISCIPLINE[discipline]]}\r\n
\r\n )}\r\n {image && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {label && (\r\n
\r\n {label}\r\n
\r\n )}\r\n {!label && rider && (\r\n
\r\n
\r\n {rider.firstname}\r\n
\r\n
\r\n {rider.lastname}\r\n
\r\n
\r\n {rider.description}\r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst GatewayCarousel = ({\r\n title,\r\n cards,\r\n themeColor,\r\n}: GatewayCarouselProps) => {\r\n const slickConfig = {\r\n variableWidth: false,\r\n slidesToShow: 3.1,\r\n responsive: [\r\n {\r\n breakpoint: 1400,\r\n settings: {\r\n slidesToShow: 3.1,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 2.1,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 768,\r\n settings: {\r\n slidesToShow: 1.6,\r\n arrows: true,\r\n },\r\n },\r\n {\r\n breakpoint: 480,\r\n settings: {\r\n slidesToShow: 1.1,\r\n arrows: true,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n {cards.map(GatewayCard)}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default GatewayCarousel;\r\n","import * as React from 'react';\r\nimport NewsCard from '../NewsCard';\r\nimport NewsCardProps from '../NewsCard/type';\r\nimport './styles.scss';\r\n\r\nconst FeaturedArticleCard = ({\r\n category,\r\n title,\r\n date,\r\n thumbnail,\r\n type,\r\n url,\r\n viewMoreLink,\r\n}: NewsCardProps) => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport default FeaturedArticleCard;\r\n","import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface UnderlineTitleProps {\r\n title: string;\r\n containerTheme: string;\r\n className?: string;\r\n disableUppercase?: boolean;\r\n}\r\n\r\nconst UnderlineTitle = ({\r\n title,\r\n containerTheme,\r\n className,\r\n disableUppercase,\r\n}: UnderlineTitleProps) => (\r\n

\r\n {title}\r\n

\r\n);\r\n\r\nexport default UnderlineTitle;\r\n","import * as React from 'react';\r\nimport { isEmpty } from 'lodash';\r\nimport useHabitat from '../../../hooks/useHabitat';\r\nimport './styles.scss';\r\nimport SvgImage from '../SvgImage';\r\nimport Contact from '../Contact';\r\nimport RichText from '../RichText';\r\nimport UnderlineTitle from '../UnderlineTitle';\r\nimport { Link, Contacts } from '../../../typings';\r\n\r\ninterface ContentProps {\r\n title?: string;\r\n intro?: string;\r\n contact?: Contacts;\r\n content?: string;\r\n link?: Link;\r\n secondaryLink?: Link;\r\n downloads?: Link[];\r\n containerTheme?: string;\r\n isTitleFloating?: boolean;\r\n disableUppercase?: boolean;\r\n}\r\n\r\nconst Content = ({\r\n title,\r\n intro,\r\n contact,\r\n content,\r\n link,\r\n secondaryLink,\r\n downloads,\r\n containerTheme = 'white',\r\n isTitleFloating,\r\n disableUppercase,\r\n}: ContentProps) => {\r\n useHabitat();\r\n\r\n return (\r\n
\r\n {Boolean(title || contact) && (\r\n
\r\n {title && (\r\n \r\n )}\r\n\r\n {(contact && !isEmpty(contact)) && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {!title && (\r\n <>\r\n {intro && (!contact || isEmpty(contact)) && (!title\r\n ?

{intro}

\r\n :

{intro}

)}\r\n \r\n )}\r\n
\r\n {title && (\r\n <>\r\n {intro && (contact || !isEmpty(contact)) && (title\r\n ?

{intro}

\r\n :

{intro}

)}\r\n \r\n )}\r\n\r\n {content && (\r\n \r\n )}\r\n\r\n {downloads && (\r\n
    \r\n {downloads.map((download) => (\r\n
  • \r\n \r\n {download.title}\r\n \r\n \r\n
  • \r\n ))}\r\n
\r\n )}\r\n\r\n {link && (\r\n /* eslint-disable-next-line react/jsx-no-target-blank */\r\n \r\n {link.title}\r\n \r\n \r\n )}\r\n {secondaryLink && (\r\n /* eslint-disable-next-line react/jsx-no-target-blank */\r\n \r\n {secondaryLink.title}\r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Content;\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport { Contacts } from '../../../typings';\r\nimport LocalizationContext from '../../../contexts/Localizations';\r\nimport './styles.scss';\r\n\r\ninterface ContactProps {\r\n contact: Contacts;\r\n containerTheme: string;\r\n}\r\n\r\nconst Contact = ({\r\n contact,\r\n containerTheme,\r\n}: ContactProps) => {\r\n const { translations } = useContext(LocalizationContext);\r\n // Adds space between every characters apart from (0)\r\n // Required for screen readers to read phone numbers properly and include all character\r\n const toReadable = (phoneNumber: string): string => phoneNumber\r\n .split(' ')\r\n .join('')\r\n .split('')\r\n .join(' ')\r\n .replace('( 0 )', '(0)');\r\n\r\n return (\r\n
\r\n

\r\n {translations.contact.title}\r\n

\r\n\r\n
    \r\n {(contact.addr && contact.addr.length) && (\r\n
  • \r\n \r\n {`${translations.contact.addr}:`}\r\n \r\n {contact.addr}\r\n
  • \r\n )}\r\n {(contact.tel && contact.tel.length) && (\r\n
  • \r\n \r\n {`${translations.contact.tel}:`}\r\n \r\n \r\n {contact.tel}\r\n \r\n
  • \r\n )}\r\n {(contact.fax && contact.fax.length) && (\r\n
  • \r\n \r\n {`${translations.contact.fax}:`}\r\n \r\n \r\n {contact.fax}\r\n \r\n
  • \r\n )}\r\n {(contact.email && contact.email.length) && (\r\n
  • \r\n \r\n {`${translations.contact.email}:`}\r\n \r\n \r\n {contact.email}\r\n \r\n
  • \r\n )}\r\n {(contact.website && contact.website.length) && (\r\n
  • \r\n \r\n {`${translations.contact.website}:`}\r\n \r\n \r\n {contact.website}\r\n \r\n
  • \r\n )}\r\n
  • \r\n
      \r\n {(contact.facebook && contact.facebook.length) && (\r\n
    • \r\n \r\n \r\n \r\n
    • \r\n )}\r\n {(contact.instagram && contact.instagram.length) && (\r\n
    • \r\n \r\n \r\n \r\n
    • \r\n )}\r\n {(contact.twitter && contact.twitter.length) && (\r\n
    • \r\n \r\n \r\n \r\n
    • \r\n )}\r\n
    \r\n
  • \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Contact;\r\n","import * as React from 'react';\r\nimport './styles.scss';\r\n\r\ninterface RichTextProps {\r\n content: string;\r\n containerTheme: string;\r\n}\r\n\r\nconst RichText = ({\r\n content,\r\n containerTheme,\r\n}: RichTextProps) => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport default RichText;\r\n","import { useEffect } from 'react';\r\n\r\nconst useHabitat = (): Function => {\r\n useEffect(() => {\r\n if (window.updateHabitat) {\r\n window.updateHabitat();\r\n }\r\n }, []);\r\n\r\n return window.updateHabitat as Function;\r\n};\r\n\r\nexport default useHabitat;\r\n","import * as React from 'react';\r\nimport { SvgImage } from '../common';\r\nimport RelatedContentProps from './type';\r\nimport { Container } from '../helpers/Grid';\r\nimport NewsCard from '../NewsCard';\r\nimport { GatewayCard } from '../GatewayCarousel';\r\nimport NewsCardProps from '../NewsCard/type';\r\nimport { Card } from '../GatewayCarousel/type';\r\nimport FeatureNewsCard from '../FeaturedNewsCard';\r\nimport './styles.scss';\r\n\r\nconst RelatedContent = ({\r\n title,\r\n relatedItems,\r\n moreNewsLink,\r\n featuredItem,\r\n isPages = false,\r\n}: RelatedContentProps) => (\r\n
\r\n \r\n
\r\n
\r\n

\r\n {title}\r\n

\r\n
\r\n {featuredItem && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n {featuredItem && (\r\n
\r\n \r\n
\r\n )}\r\n {!isPages && (\r\n <>\r\n {relatedItems.map((relatedItem) => (\r\n \r\n ))}\r\n \r\n )}\r\n {isPages && (\r\n <>\r\n {relatedItems.map((relatedItem) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n\r\n
\r\n
\r\n\r\n <>\r\n {moreNewsLink && (\r\n \r\n {moreNewsLink.title}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n);\r\n\r\nexport default RelatedContent;\r\n","import { Image } from '../typings/index';\r\n\r\ndeclare global {\r\n interface Document {\r\n documentMode?: any;\r\n }\r\n}\r\n\r\nconst isIE = () => (\r\n !!window.MSInputMethodContext && !!document.documentMode\r\n);\r\n\r\n// Insert url param\r\nconst insertUrlParam = (key: string, value: string, includeHash?: boolean) => {\r\n // @ts-ignore\r\n if (history.pushState) {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n searchParams.set(key, value);\r\n let newurl = `${window.location.protocol}//${window.location.host}${window.location.pathname}?${searchParams.toString()}`;\r\n if (includeHash && window.location.hash) {\r\n newurl = `${newurl}${window.location.hash}`;\r\n }\r\n window.history.pushState({ path: newurl }, '', newurl);\r\n }\r\n};\r\n\r\n// Removes all query string entires\r\nconst removeAllQueryStrings = () => {\r\n const url = window.location.href.replace(/(\\?.*)|(@.*)/g, '');\r\n window.history.pushState({ path: url }, '', url);\r\n};\r\n\r\n// Get All url params\r\nconst getAllUrlParams = (search: string) => {\r\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\r\n const params: { [key: string]: string } = {};\r\n hashes.map((hash) => {\r\n const [key, val] = hash.split('=');\r\n params[key] = decodeURIComponent(val);\r\n return true;\r\n });\r\n return params;\r\n};\r\n\r\n// Get param value\r\nconst getUrlParamValue = (key: any) => {\r\n const search = Object.entries(getAllUrlParams(window.location.href)).filter((param) => (\r\n param[0] === key\r\n ));\r\n return search[0] ? search[0][1] : null;\r\n};\r\n\r\n// Script exists in head of document.\r\n// Taken from: https://github.com/kaimallea/isMobile\r\nconst isMobile = () => (\r\n /Mobi/.test(navigator.userAgent)\r\n);\r\n\r\nconst scrollIntoView = (elemToScrollTo: HTMLElement, behaviour: ScrollBehavior) => {\r\n if (!isIE()) {\r\n elemToScrollTo.scrollIntoView({\r\n behavior: behaviour,\r\n });\r\n }\r\n};\r\n\r\nconst isPortrait = (image: Image) => (\r\n // @ts-ignore\r\n (image.file.details.image.height > image.file.details.image.width)\r\n);\r\n\r\nconst elementInViewport = (el: any) => {\r\n let top = el.offsetTop;\r\n let left = el.offsetLeft;\r\n const width = el.offsetWidth;\r\n const height = el.offsetHeight;\r\n\r\n while (el.offsetParent) {\r\n // eslint-disable-next-line no-param-reassign\r\n el = el.offsetParent;\r\n top += el.offsetTop;\r\n left += el.offsetLeft;\r\n }\r\n\r\n return (\r\n top >= window.pageYOffset\r\n && left >= window.pageXOffset\r\n && (top + height) <= (window.pageYOffset + window.innerHeight)\r\n && (left + width) <= (window.pageXOffset + window.innerWidth)\r\n );\r\n};\r\n\r\nconst toDataURL = (url: string, callback: Function) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (callback) {\r\n callback(reader.result);\r\n }\r\n };\r\n reader.readAsDataURL(xhr.response);\r\n };\r\n xhr.open('GET', url);\r\n xhr.responseType = 'blob';\r\n xhr.send();\r\n};\r\n\r\nexport {\r\n insertUrlParam,\r\n getAllUrlParams,\r\n getUrlParamValue,\r\n removeAllQueryStrings,\r\n isMobile,\r\n scrollIntoView,\r\n isPortrait,\r\n elementInViewport,\r\n toDataURL,\r\n};\r\n","import * as React from 'react';\r\nimport {\r\n useContext, useState, useEffect, useRef,\r\n} from 'react';\r\nimport moment from 'moment';\r\nimport { fr } from 'date-fns/locale/fr';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport PerfectScrollbar from 'react-perfect-scrollbar';\r\nimport DatePicker, { registerLocale } from 'react-datepicker';\r\nimport useOutsideAlerter from '../../../hooks/UseOutsideAlerter';\r\nimport LocalizationContext from '../../../contexts/Localizations';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\nregisterLocale('fr', fr);\r\n\r\ninterface JumpListOption {\r\n displayText: string;\r\n value: string;\r\n selectedValue?: boolean;\r\n visible?: boolean;\r\n name?: string;\r\n}\r\n\r\ninterface JumpListProps {\r\n items: JumpListOption[];\r\n selectedValue?: string;\r\n action: Function;\r\n icon?: string;\r\n theme?: string;\r\n useScroller?: boolean;\r\n useSearch?: boolean;\r\n name?: string;\r\n disableFirst?: boolean;\r\n withDatePicker?: boolean;\r\n defaultDatePickerValue?: Date;\r\n onDateChange?: Function;\r\n includeDates?: Date[];\r\n datePickerLocale?: string;\r\n}\r\n\r\nconst JumpList = ({\r\n items,\r\n action,\r\n selectedValue,\r\n icon = 'icon-arrow-down',\r\n theme = 'default',\r\n useScroller = false,\r\n useSearch = false,\r\n name,\r\n disableFirst = false,\r\n withDatePicker = false,\r\n defaultDatePickerValue,\r\n onDateChange,\r\n includeDates,\r\n datePickerLocale,\r\n}: JumpListProps) => {\r\n const wrapperRef = useRef>(null);\r\n const [value, setValue] = useState();\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [options, setOptions] = useState();\r\n const [isClosing, setIsClosing] = useState(false);\r\n const [searchValue, setSearchValue] = useState(null);\r\n const { translations } = useContext(LocalizationContext);\r\n\r\n /**\r\n * Closes the open view\r\n */\r\n const close = () => {\r\n setIsClosing(true);\r\n setTimeout(() => {\r\n setIsClosing(false);\r\n setIsOpen(false);\r\n if (useSearch) {\r\n setSearchValue(null);\r\n }\r\n }, useSearch ? 0 : 300);\r\n };\r\n\r\n /**\r\n * This will tigger the close method when the user\r\n * interacts outside wrapperRef\r\n */\r\n useOutsideAlerter(wrapperRef, () => {\r\n close();\r\n });\r\n\r\n /**\r\n * Toggle open/close\r\n * @param event\r\n * @returns\r\n */\r\n const toggle = (event?: React.MouseEvent) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n if (disableFirst) {\r\n return null;\r\n }\r\n\r\n if (isOpen) {\r\n return close();\r\n }\r\n\r\n return setIsOpen(!isOpen);\r\n };\r\n\r\n /**\r\n * This remaps the options base of the items and selectedValue\r\n * props.\r\n * @returns\r\n */\r\n const mapSelection = () => items.map((item, index) => ({\r\n ...item,\r\n name,\r\n selectedValue: item.value === selectedValue,\r\n visible: !(withDatePicker && defaultDatePickerValue && index > 4),\r\n }));\r\n\r\n /**\r\n * This handels the change event on the drop down.\r\n * @param event\r\n * @param optionIndex\r\n */\r\n const handleChange = (event: React.MouseEvent, optionIndex: number) => {\r\n event.preventDefault();\r\n setOptions(mapSelection());\r\n setValue(options ? options[optionIndex] : undefined);\r\n close();\r\n\r\n if (action && typeof action === 'function') {\r\n action(options ? options[optionIndex] : undefined);\r\n }\r\n };\r\n\r\n /**\r\n * Component has mounted hook\r\n */\r\n useEffect(() => {\r\n if (items.length) {\r\n const optionsSelection = mapSelection();\r\n setOptions(optionsSelection);\r\n }\r\n }, []);\r\n\r\n /**\r\n * Observe the options state to determine the selected value.\r\n * If a new value is selected with will trigger and setValue in state.\r\n */\r\n useEffect(() => {\r\n if (options) {\r\n const selected: JumpListOption = options.filter(\r\n (item: JumpListOption) => item.value === selectedValue,\r\n )[0];\r\n\r\n setValue(selected || options[0]);\r\n }\r\n }, [options, selectedValue]);\r\n\r\n /**\r\n * Observe the search value term to filter down the visible\r\n * option in the list. This is only applicable if the user\r\n * has turned on useSearch in props.\r\n */\r\n useEffect(() => {\r\n if (options) {\r\n if (searchValue === null || searchValue === '') {\r\n setOptions(mapSelection());\r\n } else {\r\n const filteredOptions: JumpListOption[] = options?.map((option) => ({\r\n ...option,\r\n visible: option.displayText.toLowerCase().includes(searchValue.toLowerCase()),\r\n }));\r\n\r\n setOptions(filteredOptions);\r\n }\r\n }\r\n }, [searchValue, selectedValue, items]);\r\n\r\n /**\r\n * Creates a list option\r\n * @param option\r\n * @param index\r\n * @returns\r\n */\r\n const createOption = (option: JumpListOption, index: number) => (\r\n
  • \r\n handleChange(event, index)}>\r\n {option.displayText}\r\n \r\n
  • \r\n );\r\n\r\n /**\r\n * Creates the search JSX controls. This is only applicable\r\n * if the user has turned on useSearch in props.\r\n * @returns\r\n */\r\n const createSearch = () => (\r\n
    \r\n (\r\n setSearchValue((event.currentTarget as HTMLInputElement).value)\r\n )}\r\n />\r\n {Boolean(!options?.filter((option) => option.visible).length) && (\r\n
    \r\n {`No selection found for ${searchValue}.`}\r\n {/* Needs Laguage label */}\r\n
    \r\n )}\r\n
    \r\n );\r\n\r\n /**\r\n * Creates the option list.\r\n * @returns\r\n */\r\n const createOptions = () => {\r\n if (useScroller) {\r\n return (\r\n
    \r\n {useSearch && createSearch()}\r\n \r\n <>\r\n {options && (\r\n
      \r\n {options?.map((option, key) => option.visible && createOption(option, key))}\r\n
    \r\n )}\r\n\r\n {withDatePicker && defaultDatePickerValue && (\r\n {\r\n if (onDateChange) {\r\n const dateIndex = options?.findIndex((option) => {\r\n const optionMoment = moment(option.value).format('DD-MM-YYYY');\r\n const selectedMoment = moment(date).format('DD-MM-YYYY');\r\n\r\n return optionMoment === selectedMoment;\r\n });\r\n\r\n if (dateIndex !== undefined && dateIndex >= 0) {\r\n onDateChange(date);\r\n\r\n handleChange(event, dateIndex);\r\n }\r\n }\r\n }}\r\n includeDates={includeDates}\r\n inline\r\n locale={datePickerLocale}\r\n />\r\n )}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n {useSearch && createSearch()}\r\n {options && (\r\n
      \r\n {options?.map((option, key) => option.visible && createOption(option, key))}\r\n
    \r\n )}\r\n\r\n {withDatePicker && defaultDatePickerValue && (\r\n \r\n )}\r\n
    \r\n );\r\n };\r\n\r\n return (\r\n \r\n
    \r\n {value && (\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n {createOptions()}\r\n \r\n );\r\n};\r\n\r\nexport default JumpList;\r\n","export default {\r\n xxs: 375,\r\n xs: 450,\r\n sm: 620,\r\n md: 768,\r\n ml: 870,\r\n lg: 1024,\r\n xl: 1300,\r\n xxl: 1440,\r\n xxxl: 1740,\r\n xxxxl: 1900,\r\n};\r\n","/* eslint-disable react/no-array-index-key */\r\nimport React, { useState, useEffect, Fragment } from 'react';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface ResponsiveTableProps {\r\n headers: {\r\n alwaysVisible: boolean;\r\n key: string;\r\n label: string;\r\n hiddenOnMobile?: boolean;\r\n }[];\r\n rows: {\r\n row: Record;\r\n Table?: JSX.Element;\r\n }[];\r\n stickyCol?: JSX.Element[];\r\n className?: string;\r\n moreClassName?: string;\r\n headerClassName?: string;\r\n rowClassName?: string;\r\n cellClassName?: string;\r\n nested?: boolean;\r\n}\r\n\r\nconst ResponsiveTable = ({\r\n headers,\r\n rows,\r\n stickyCol,\r\n className,\r\n moreClassName,\r\n headerClassName,\r\n rowClassName,\r\n cellClassName,\r\n nested,\r\n}: ResponsiveTableProps) => {\r\n const [isExpanded, setExpanded] = useState(false);\r\n const [rowExpandedStates, setRowExpandedStates] = useState>({});\r\n\r\n const toggleExpandTable = () => {\r\n setExpanded(!isExpanded);\r\n };\r\n\r\n const toggleExpandRow = (rowIndex: number) => {\r\n setRowExpandedStates({\r\n ...rowExpandedStates,\r\n [rowIndex]: !rowExpandedStates[rowIndex],\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (rows.some((row) => row.Table)) {\r\n setRowExpandedStates(Object.fromEntries(Object.entries(rows.map(() => false))));\r\n }\r\n }, []);\r\n\r\n return (\r\n
    \r\n {!nested && (\r\n
    \r\n \r\n Show details\r\n \r\n
    \r\n )}\r\n\r\n
    \r\n \r\n \r\n \r\n {stickyCol && (\r\n \r\n )}\r\n\r\n {headers.map((header) => (\r\n \r\n {header.label}\r\n \r\n ))}\r\n\r\n {rows.some((row) => row.Table) && (\r\n \r\n
    \r\n expand\r\n
    \r\n \r\n )}\r\n \r\n \r\n \r\n {rows.map(({ row, Table }, rowIndex) => (\r\n \r\n \r\n {headers.map((header, colIndex) => (\r\n \r\n {stickyCol && colIndex === 0 && (\r\n {stickyCol[rowIndex]}\r\n )}\r\n \r\n {row[header.key]}\r\n \r\n \r\n ))}\r\n\r\n {Table && (\r\n \r\n toggleExpandRow(rowIndex)}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n {Table && (\r\n \r\n \r\n { Table }\r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default ResponsiveTable;\r\n","import * as React from 'react';\r\nimport moment from 'moment';\r\nimport { Link as LinkType } from '../../../typings';\r\nimport './styles.scss';\r\n\r\ninterface DateAndCategoryProps {\r\n date?: string;\r\n category?: LinkType;\r\n dateFormat?: string;\r\n}\r\n\r\nconst DateAndCategory = ({ date, category, dateFormat }: DateAndCategoryProps) => (\r\n
    \r\n {category && (\r\n \r\n )}\r\n {date && (\r\n \r\n )}\r\n\r\n
    \r\n);\r\n\r\nexport default DateAndCategory;\r\n","import * as React from 'react';\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport useHabitat from '../../../hooks/useHabitat';\r\nimport Content from '../Content';\r\nimport { Discipline } from '../../../core/typings';\r\nimport './styles.scss';\r\n\r\ninterface AccordionPanelProps {\r\n index: number;\r\n activeTab: boolean;\r\n toggleTab: Function;\r\n label: string | JSX.Element;\r\n content: string | JSX.Element | JSX.Element[];\r\n themeColor: string;\r\n discipline?: string;\r\n isAsync?: boolean;\r\n isResults?: boolean;\r\n}\r\n\r\nconst AccordionPanel = ({\r\n index,\r\n activeTab,\r\n toggleTab,\r\n label,\r\n content,\r\n themeColor,\r\n discipline,\r\n isAsync,\r\n isResults,\r\n}: AccordionPanelProps) => {\r\n const [height, setHeight] = useState('0px');\r\n const [asyncContentLoaded, setAsyncContentLoaded] = useState(false);\r\n const wrapper = useRef(null);\r\n\r\n const calculatePanelHeight = () => {\r\n const panelElement = wrapper.current as HTMLDivElement;\r\n\r\n if (activeTab) {\r\n panelElement.ontransitionend = () => {\r\n setHeight('auto');\r\n };\r\n\r\n setHeight(`${panelElement.scrollHeight}px`);\r\n } else {\r\n panelElement.ontransitionend = null;\r\n\r\n setHeight(`${panelElement.scrollHeight}px`);\r\n\r\n requestAnimationFrame(() => {\r\n setHeight('0px');\r\n });\r\n }\r\n };\r\n\r\n const handleLoadedContent = () => {\r\n setAsyncContentLoaded(true);\r\n calculatePanelHeight();\r\n };\r\n\r\n useEffect(() => {\r\n calculatePanelHeight();\r\n }, [activeTab]);\r\n\r\n return (\r\n
    \r\n toggleTab(index)}\r\n >\r\n {label}\r\n \r\n \r\n {typeof content === 'string' && (\r\n
    \r\n \r\n
    \r\n )}\r\n\r\n {!isAsync && React.isValidElement(content) && content}\r\n\r\n {isAsync && (activeTab || asyncContentLoaded) && React.isValidElement(content) && (\r\n \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport interface AccordionPanelType {\r\n label: string | JSX.Element;\r\n content: string | JSX.Element | JSX.Element[];\r\n}\r\n\r\ninterface AccordionProps {\r\n panels: AccordionPanelType[];\r\n themeColor: string;\r\n discipline?: Discipline;\r\n isResults?: boolean;\r\n}\r\n\r\ninterface PanelsState {\r\n label: string | JSX.Element;\r\n content: string | JSX.Element | JSX.Element[];\r\n activeTab: boolean;\r\n}\r\n\r\nconst Accordion = ({\r\n panels,\r\n themeColor,\r\n discipline,\r\n isResults,\r\n}: AccordionProps) => {\r\n const [panelsInState, setPanelsInState] = useState([]);\r\n useHabitat();\r\n\r\n const toggleTab = (index: number) => {\r\n const current: PanelsState[] = [...panelsInState];\r\n\r\n current[index].activeTab = !panelsInState[index].activeTab;\r\n setPanelsInState(current);\r\n };\r\n\r\n useEffect(() => {\r\n if (panels) {\r\n const mappedPanels: PanelsState[] = panels.map((panel) => ({\r\n ...panel,\r\n activeTab: false,\r\n }));\r\n\r\n setPanelsInState(mappedPanels);\r\n }\r\n }, []);\r\n\r\n return (\r\n
    \r\n {panelsInState && (\r\n <>\r\n {panelsInState.map((panel, index) => (\r\n \r\n ))}\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport default Accordion;\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Image as ImageType } from '../../../typings';\r\nimport 'lazysizes';\r\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\r\n\r\nconst defaultWidths = ['400', '800', '1200', '2400', '4000'];\r\n\r\ninterface ImageBasicProps {\r\n image: ImageType;\r\n widthSizes?: string[];\r\n isDarkened?: boolean;\r\n useIntrinsicHeight?: boolean;\r\n}\r\n\r\nconst ImageBasic = ({\r\n image,\r\n widthSizes = defaultWidths,\r\n isDarkened = false,\r\n useIntrinsicHeight,\r\n}: ImageBasicProps) => {\r\n const [isLoaded, setIsLoaded] = useState(false);\r\n const [srcset, setSrcset] = useState();\r\n\r\n useEffect(() => {\r\n const src = widthSizes\r\n .map((size: string) => `${image.file.url}?fit=thumb&fl=progressive&w=${size} ${size}w`);\r\n\r\n setSrcset(src.join(','));\r\n }, [image]);\r\n\r\n return (\r\n setIsLoaded(true)}\r\n />\r\n );\r\n};\r\n\r\nexport default ImageBasic;\r\n","import * as React from 'react';\r\n\r\nimport './styles.scss';\r\n\r\nconst Loader: React.FC = () => (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n);\r\n\r\nexport default Loader;\r\n","import * as React from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface SocialLinksProps {\r\n list: {\r\n name: string;\r\n url: string;\r\n type: string;\r\n }[];\r\n}\r\n\r\nconst SocialLinks = ({ list }: SocialLinksProps) => (\r\n
    \r\n \r\n
    \r\n);\r\n\r\nexport default SocialLinks;\r\n","import * as React from 'react';\r\nimport Tag from '../Tag';\r\nimport './styles.scss';\r\n\r\ninterface TagProps {\r\n tags: {\r\n text: string;\r\n url: string;\r\n }[];\r\n}\r\n\r\nconst TagList = ({ tags }: TagProps) => (\r\n
      \r\n {tags.map((tag) => (\r\n
    • \r\n \r\n
    • \r\n ))}\r\n
    \r\n);\r\n\r\nexport default TagList;\r\n","import * as React from 'react';\r\nimport { insertUrlParam } from '../../../utilities/browser';\r\nimport { isIdenticalObject } from '../../../utilities/objects';\r\nimport SvgImage from '../SvgImage';\r\nimport './styles.scss';\r\n\r\ninterface PaginationProps {\r\n totalItems: number;\r\n currentPage: number;\r\n itemsPerPage: number;\r\n handleClick?: Function;\r\n pageQueryKey?: string;\r\n retainRoute?: boolean;\r\n style?: string;\r\n}\r\n\r\ninterface PaginationState {\r\n pages: number[];\r\n firstPageIndex: number | undefined;\r\n lastPageIndex: number | undefined;\r\n previousPageIndex: number | undefined;\r\n nextPageIndex: number | undefined;\r\n totalItems?: number | undefined;\r\n currentPage: number | undefined;\r\n totalAmountOfPages: number | undefined;\r\n isFirstPageDisabled: boolean | undefined;\r\n isLastPageDisabled: boolean | undefined;\r\n isPreviousDisabled: boolean | undefined;\r\n isNextDisabled: boolean | undefined;\r\n // The below need to move to props with defaults\r\n maxVisiblePagesMobile: number;\r\n maxVisiblePagesDesktop: number;\r\n maxVisiblePages: number;\r\n}\r\n\r\n// move to prop with default value\r\nconst breakpoint = 620;\r\n\r\nconst defaultProps = {\r\n pageQueryKey: 'page',\r\n};\r\nexport default class Pagination extends React.Component {\r\n // eslint-disable-next-line react/static-property-placement\r\n static defaultProps = defaultProps;\r\n\r\n constructor(props: PaginationProps) {\r\n super(props);\r\n this.state = {\r\n pages: [],\r\n firstPageIndex: undefined,\r\n lastPageIndex: undefined,\r\n previousPageIndex: undefined,\r\n nextPageIndex: undefined,\r\n // totalItems: undefined,\r\n currentPage: undefined,\r\n isFirstPageDisabled: undefined,\r\n isLastPageDisabled: undefined,\r\n totalAmountOfPages: undefined,\r\n isPreviousDisabled: undefined,\r\n isNextDisabled: undefined,\r\n maxVisiblePagesMobile: 3,\r\n maxVisiblePagesDesktop: 5,\r\n maxVisiblePages: 5,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n await this.handdleMaxVisiblePages(window.innerWidth);\r\n window.addEventListener('resize', async (event) => {\r\n event.stopPropagation();\r\n await this.handdleMaxVisiblePages(window.innerWidth);\r\n });\r\n\r\n this.getPager();\r\n }\r\n\r\n componentDidUpdate(prevProps: PaginationProps) {\r\n const hasPropsUpdated = isIdenticalObject(prevProps, this.props);\r\n if (!hasPropsUpdated) {\r\n this.getPager();\r\n }\r\n }\r\n\r\n /**\r\n * This handles setting the state of the pager.\r\n * Flags toggle display views on pager elements\r\n * and fetches and sets the visable page list\r\n * from generateVisablePages.\r\n */\r\n getPager() {\r\n const {\r\n totalItems,\r\n currentPage,\r\n itemsPerPage,\r\n } = this.props;\r\n\r\n const {\r\n maxVisiblePages,\r\n } = this.state;\r\n\r\n const totalAmountOfPages = Math.ceil(totalItems / itemsPerPage);\r\n const isFirstPageDisabled = (\r\n (!(currentPage > (Math.ceil(maxVisiblePages / 2)))) || totalAmountOfPages <= maxVisiblePages\r\n );\r\n const isLastPageDisabled = currentPage > totalAmountOfPages - Math.ceil(maxVisiblePages / 2)\r\n || totalAmountOfPages <= maxVisiblePages;\r\n const lastPageIndex = totalAmountOfPages;\r\n const previousPageIndex = (currentPage - 1);\r\n const isPreviousDisabled = !(currentPage - 1);\r\n const isNextDisabled = (currentPage + 1) > lastPageIndex;\r\n\r\n this.setState({\r\n pages: this.generateVisablePages(\r\n totalAmountOfPages,\r\n currentPage,\r\n ),\r\n firstPageIndex: 1,\r\n lastPageIndex,\r\n previousPageIndex,\r\n nextPageIndex: (currentPage + 1),\r\n // totalItems,\r\n currentPage,\r\n totalAmountOfPages,\r\n isFirstPageDisabled,\r\n isLastPageDisabled,\r\n isPreviousDisabled,\r\n isNextDisabled,\r\n });\r\n }\r\n\r\n /**\r\n * Generates and returns the list of visible\r\n * pages based on the current page and the\r\n * maxVisiblePages.\r\n * @param totalAmountOfPages\r\n * @param currentPage\r\n */\r\n generateVisablePages(totalAmountOfPages: number, currentPage: number) {\r\n const { maxVisiblePages } = this.state;\r\n const maxVisibleOffset = (maxVisiblePages % 2 === 0) ? 1 : 0.5;\r\n let startPage = 1;\r\n let endPage = (maxVisiblePages + 1);\r\n\r\n if (currentPage > 2) {\r\n startPage = (currentPage - (maxVisiblePages / 2 - maxVisibleOffset));\r\n endPage = (currentPage + (maxVisiblePages / 2 + maxVisibleOffset));\r\n }\r\n\r\n if (currentPage > (totalAmountOfPages - 2)) {\r\n startPage = (totalAmountOfPages - (maxVisiblePages - 1));\r\n endPage = totalAmountOfPages + 1;\r\n }\r\n\r\n if (totalAmountOfPages <= maxVisiblePages) {\r\n startPage = 1;\r\n endPage = totalAmountOfPages + 1;\r\n }\r\n\r\n return Array.from({\r\n length: (endPage - startPage),\r\n }, (s, l) => l + startPage);\r\n }\r\n\r\n /**\r\n * Checks the viewport width to determine the\r\n * maxVisiblePages based on mobile/desktop\r\n * @param viewportWidth\r\n */\r\n async handdleMaxVisiblePages(viewportWidth: number) {\r\n const {\r\n maxVisiblePagesMobile,\r\n maxVisiblePagesDesktop,\r\n totalAmountOfPages,\r\n currentPage,\r\n } = this.state;\r\n\r\n if (viewportWidth < breakpoint) {\r\n await this.setState({\r\n maxVisiblePages: maxVisiblePagesMobile,\r\n });\r\n } else {\r\n await this.setState({\r\n maxVisiblePages: maxVisiblePagesDesktop,\r\n });\r\n }\r\n\r\n this.setState({\r\n pages: this.generateVisablePages(\r\n totalAmountOfPages as number,\r\n currentPage as number,\r\n ),\r\n });\r\n }\r\n\r\n /**\r\n * Change page state handler\r\n * @param event\r\n * @param page\r\n */\r\n changePage(event: React.MouseEvent, page: number) {\r\n const {\r\n pageQueryKey,\r\n retainRoute,\r\n handleClick,\r\n } = this.props;\r\n\r\n event.preventDefault();\r\n insertUrlParam((pageQueryKey || ''), String(page), retainRoute);\r\n if (handleClick) {\r\n handleClick(page);\r\n }\r\n }\r\n\r\n /**\r\n * Generates the page buttons\r\n * @param page\r\n * @param text\r\n * @param isDisabled\r\n */\r\n generateButton(page: number, text: string, isDisabled: boolean) {\r\n const { retainRoute } = this.props;\r\n const rootLocation = retainRoute ? '' : `${window.location.pathname}?page=${page}`;\r\n return (\r\n (!isDisabled ? this.changePage(event, page) : null)}\r\n href={rootLocation}\r\n role=\"button\"\r\n >\r\n {text}\r\n \r\n );\r\n }\r\n\r\n render() {\r\n const {\r\n style,\r\n } = this.props;\r\n\r\n const {\r\n pages,\r\n firstPageIndex,\r\n lastPageIndex,\r\n previousPageIndex,\r\n nextPageIndex,\r\n currentPage,\r\n isFirstPageDisabled,\r\n isLastPageDisabled,\r\n isPreviousDisabled,\r\n isNextDisabled,\r\n totalAmountOfPages,\r\n } = this.state;\r\n\r\n return (\r\n
    \r\n
      \r\n\r\n {/* First page */}\r\n
    • \r\n {this.generateButton(firstPageIndex as number, '1', isFirstPageDisabled as boolean)}\r\n
    • \r\n\r\n {/* Page list */}\r\n {pages.map((item) => (\r\n
    • \r\n {this.generateButton(item, String(item), false)}\r\n
    • \r\n ))}\r\n\r\n {/* Last page */}\r\n
    • \r\n {this.generateButton(lastPageIndex as number, `${totalAmountOfPages}`, isLastPageDisabled as boolean)}\r\n
    • \r\n
    \r\n\r\n \r\n\r\n
    \r\n\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\n\r\ninterface ContainerProps {\r\n className?: string;\r\n children: JSX.Element | JSX.Element[];\r\n overflowHidden?: boolean;\r\n}\r\n\r\ninterface ColumnProps {\r\n sm?: number;\r\n md?: number;\r\n lg?: number;\r\n xl?: number;\r\n className?: string;\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface GridProps {\r\n isFlush?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Container = ({\r\n children,\r\n className,\r\n overflowHidden = false,\r\n}: ContainerProps) => (\r\n
    \r\n {children}\r\n
    \r\n);\r\n\r\nconst Column = ({\r\n sm = 6,\r\n md = 6,\r\n lg = 12,\r\n xl,\r\n className,\r\n children,\r\n}: ColumnProps) => (\r\n
    \r\n {children}\r\n
    \r\n);\r\n\r\nexport class Grid extends React.Component {\r\n static container = Container;\r\n\r\n static Column = Column;\r\n\r\n render() {\r\n const {\r\n children,\r\n isFlush,\r\n className,\r\n } = this.props;\r\n return (\r\n
    \r\n {children}\r\n
    \r\n );\r\n }\r\n}\r\n","import { useEffect } from 'react';\r\n\r\nconst useOutsideAlerter = (ref: any, handler?: Function) => {\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n if (handler && typeof handler === 'function') {\r\n handler();\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [ref]);\r\n};\r\n\r\nexport default useOutsideAlerter;\r\n"],"sourceRoot":""}