{"version":3,"sources":["blogSearchForm.js","carousels.js","filter.js","homepageHeroAnim.js","lazyload.js","navMobile.js","newsletterToggle.js","scrollAnims.js","videoAutoplay.js"],"names":["document","querySelectorAll","forEach","form","reset","input","querySelector","clearBtn","addEventListener","value","length","classList","add","remove","trim","event","preventDefault","focus","Swiper","loop","speed","autoplay","delay","grabCursor","pagination","el","clickable","effect","fadeEffect","crossFade","coverflowEffect","depth","rotate","slideShadows","slidesPerView","swiperInvestors","tcControls","elm","slideNo","dataset","slideto","slideToLoop","on","e","activeClass","realIndex","let","mixer","btnMobile","filterListAccordion","btnAll","filterCats","mixerContainer","mixitup","filter","toggle","Matter","colours","Engine","Render","Runner","Bodies","Body","Events","Composite","Sleeping","engine","create","render","gravity","y","runner","worldUnitDimensions","width","height","pixelsPerUnit","SVGWidth","SVGOffset","objectHeight","ground","triangle","shapes","Array","fill","startTime","activationIntervalMin","activationIntervalRand","RAFActivations","activationInterval","lets_goooooooo","worldHeightUnits","worldWidthUnits","animWindow","calcWorldUnits","element","options","wireframes","background","pixelRatio","window","devicePixelRatio","bounds","min","x","max","createGroundAndTri","shape","index","resetBody","Math","round","random","rectangle","density","friction","restitution","label","fillStyle","collisionFilter","group","circle","world","run","source","bodies","body","position","getSpeed","IntersectionObserver","entries","entry","intersectionRatio","requestAnimationFrame","activations","enabled","cancelAnimationFrame","stop","rootMargin","threshold","observe","SVG","SVGOffsetPx","clientWidth","clientHeight","getBoundingClientRect","innerWidth","isStatic","triangleVertices","fromVertices","set","torqueAmount","shapeDropXOffset","setAngularSpeed","setSpeed","setPosition","currentTime","elapsedTime","q","isSleeping","handleResizeEvent","canvas","setPixelRatio","type","SVGTris","finalTri","once","lazyLoadInstance","LazyLoad","restore_on_error","thresholds","callback_loading","screenX","screenY","innerHeight","evt_resizeX","Event","evt_resizeY","newScreenX","target","newScreenY","this","dispatchEvent","htmlResizeTimeout","classResizeX","documentElement","clearTimeout","setTimeout","toggleNav","toggleNewsletter","animPanels","elms","observerAnim","animScrollEvent","windowScrollpos","scrollY","windowHeight","animOffsetBottom","animOffsetFinalValue","sflIsVisible","animOffsetTop","offsettop","offsetbottom","unit","offsetTop","style","setProperty","entires","classVideoShow","videoObserver","observer","isIntersecting","video","src","createElement","appendChild","load","play","then","catch","img","poster","Image","complete","onload","unobserve"],"mappings":"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","file":"../main.js","sourcesContent":["(function () {\n\n // Select all instances of .js-blogSearchForm\n const searchForms = document.querySelectorAll('.js-blogSearchForm');\n\n // Iterate over each form instance\n searchForms.forEach(form => {\n form.reset();\n\n // Select the input element within the form\n const input = form.querySelector('.js-blogSearchForm__input');\n\n const clearBtn = form.querySelector('.js-blogSearchForm__clearSearch');\n\n if (input) {\n // Attach an input event listener to the input element\n input.addEventListener('input', () => {\n if (input.value.length >= 1) {\n // Add the class if the input value length is at least 1\n form.classList.add('blogControls__searchform--showClearBtn');\n } else {\n // Remove the class if the input value length is less than 1\n form.classList.remove('blogControls__searchform--showClearBtn');\n }\n });\n\n // Attach a submit event listener to the form\n form.addEventListener('submit', (event) => {\n // Trim whitespace from the input value\n input.value = input.value.trim();\n\n // If the input value length is 0 after trimming, prevent form submission\n if (input.value.length === 0) {\n event.preventDefault();\n }\n });\n\n if (clearBtn) {\n // Attach a click event listener to the clear button element\n clearBtn.addEventListener('click', () => {\n // Clear the input value\n input.value = '';\n // Remove the class that shows the clear button\n form.classList.remove('blogControls__searchform--showClearBtn');\n // Set focus back to the input field\n input.focus();\n });\n }\n }\n });\n})();\n","(function () {\n if (typeof Swiper !== 'undefined') {\n 'use strict';\n\n // TODO custom swiper.js build- don't forget to copy into lib folder and enqueue.\n\n const swiperSlide = new Swiper('.swiper-effectSlide', {\n loop: true,\n speed: 400,\n autoplay: {\n delay: 4000,\n },\n grabCursor: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n });\n\n const swiperFade = new Swiper('.swiper-effectFade', {\n loop: true,\n speed: 500,\n autoplay: {\n delay: 4000,\n },\n grabCursor: true,\n effect: 'fade',\n fadeEffect: {\n crossFade: true\n },\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n });\n\n const swiperCoverFlow = new Swiper('.swiper-effectCoverFlow', {\n loop: false,\n speed: 500,\n autoplay: {\n delay: 4000,\n },\n grabCursor: true,\n effect: 'coverflow',\n coverflowEffect: {\n depth: 200,\n rotate: 0,\n slideShadows: false,\n },\n slidesPerView: 'auto',\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n });\n\n const swiperInvestors = new Swiper('.swiper-effectInvestors', {\n loop: true,\n speed: 400,\n autoplay: false,\n grabCursor: true,\n pagination: {\n el: '.swiper-pagination',\n clickable: true,\n },\n });\n\n /**\n * Very quick attempt to make custom controls for team carousel\n *\n * TODO very quick and dirty and won't work if there's more than one carousel- fix asap\n */\n\n\n /** bind controls */\n\n const tcControls = document.querySelectorAll('.js-tc-slideTo');\n\n tcControls.forEach(function (elm) {\n const slideNo = elm.dataset.slideto;\n\n if (slideNo) {\n elm.addEventListener('click', function () {\n swiperInvestors.slideToLoop(slideNo);\n });\n }\n });\n\n\n /** bind swiper event (to sync \"active\" image to slide index) */\n swiperInvestors.on('slideChange', function (e) {\n const activeClass = 'carouselinvestors__imgsDesktop__cont--active';\n\n tcControls.forEach(function (elm) {\n elm.classList.remove(activeClass);\n });\n\n tcControls[e.realIndex].classList.add(activeClass);\n });\n }\n})();","(function () {\n 'use strict';\n\n /**\n * MixItUp\n */\n let mixer = false;\n const btnMobile = document.querySelector('.js-btnAccordionToggle'); // mobile filter list toggle button\n const filterListAccordion = document.querySelector('.js-filtersAccordion'); // ref to filter list for mobile opening/closing - TODO this won't work if there's more than one Portfolio section onpage\n const btnAll = document.querySelector('.js-filterItem_reset');\n const filterCats = document.querySelectorAll('.js-filterItem--cat'); // filter buttons not including \"all\"\n\n function init() {\n const mixerContainer = document.querySelector('.js-filterItems');\n if (mixerContainer) {\n mixer = mixitup(mixerContainer);\n filterButtons_bindEvents();\n }\n\n if (btnMobile && filterListAccordion) {\n filterMobileList_bindEvents();\n }\n }\n\n init();\n\n function filterButtons_bindEvents() {\n btnAll.addEventListener('click', function () {\n mixer.filter('all');\n btnAll.classList.add('mixitup-control-active');\n });\n\n filterCats.forEach(function (elm) {\n elm.addEventListener('click', function () {\n btnAll.classList.remove('mixitup-control-active');\n var btnsActive = document.querySelectorAll('.js-filterItem--cat.mixitup-control-active');\n\n if (btnsActive.length === 0) {\n btnAll.classList.add('mixitup-control-active');\n }\n });\n });\n }\n\n /**\n * Mobile filter list toggle\n */\n function filterMobileList_bindEvents() {\n btnMobile.addEventListener('click', function(e) {\n e.preventDefault();\n filterListAccordion.classList.toggle('open');\n })\n }\n\n})();","/**\n * Alpaca 2023 homepage anim\n *\n * Written quite quickly with no prior experience of matter.js- bit messy!\n *\n * TODO it's feasible to not have to reset all the shapes on resize.\n * TODO rewrite renderer to use DOM (dynamic CSS transforms) instead of canvas- might be more efficient?\n */\n(function () {\n if (typeof Matter !== 'undefined') {\n 'use strict';\n\n // sorry, had to duplicate these colours again...\n // TODO check the block background colour and remove from this list if matches (otherwise you get shapes that cannot be seen on certain backgrounds)\n const colours = [\n '#f00',\n '#0082CA',\n '#00C98E',\n '#FF9E00',\n '#FF777C'\n ];\n\n // module aliases\n var Engine = Matter.Engine,\n Render = Matter.Render,\n Runner = Matter.Runner,\n Bodies = Matter.Bodies,\n Body = Matter.Body,\n Events = Matter.Events,\n Composite = Matter.Composite,\n Sleeping = Matter.Sleeping;\n\n // create an engine\n var engine = Engine.create();\n // Set the world's gravity (e.g., to simulate Earth's gravity)\n engine.gravity.y = 1.3; // Adjust the gravity value as needed\n\n var render = false; // renderer (canvas etc)\n var runner = false; // runs the simulation\n\n const worldUnitDimensions = {\n width: false,\n height: false,\n pixelsPerUnit: false,\n SVGWidth: 300,\n SVGOffset: 0,\n objectHeight: 100\n }\n\n var ground = false;\n var triangle = false;\n\n const maxShapes = 20;\n const shapes = new Array(maxShapes).fill(false); // BUG none of these ever actually get assigned!\n\n let startTime;\n const activationIntervalMin = 120;\n const activationIntervalRand = 600;\n let RAFActivations;\n let activationInterval = 0;\n\n /**\n * Main\n */\n function lets_goooooooo() {\n calcWorldUnits();\n createRenderer(worldUnitDimensions.width, worldUnitDimensions.height);\n createGroundAndTri(worldUnitDimensions.width, worldUnitDimensions.height, worldUnitDimensions.SVGWidth, worldUnitDimensions.SVGOffset);\n createBodies(worldUnitDimensions.width, worldUnitDimensions.objectHeight);\n initSimulation();\n addMatterEvents();\n observer();\n }\n\n\n /**\n *\n */\n function addMatterEvents() {\n Events.on(engine, \"afterUpdate\", function (e) {\n e.source.world.bodies.forEach(function (body) {\n if (body.label === 'faller') {\n // reset any that have fallen off the bottom\n if (body.position.y > worldUnitDimensions.height) {\n resetBody(body, worldUnitDimensions.width, worldUnitDimensions.objectHeight);\n }\n // reset any that have ended up stationary (bit of a corner case)\n if (Body.getSpeed(body) < .01 && body.position.y > 0) {\n resetBody(body, worldUnitDimensions.width, worldUnitDimensions.objectHeight);\n }\n }\n });\n })\n }\n\n /**\n *\n */\n function calcWorldUnits() {\n const SVG = document.querySelector('.js-anim-hero-svg');\n const animWindow = document.querySelector('.homepagehero__animCont');\n\n worldUnitDimensions.pixelsPerUnit = SVG.clientWidth / worldUnitDimensions.SVGWidth;\n worldUnitDimensions.width = animWindow.clientWidth / worldUnitDimensions.pixelsPerUnit;\n worldUnitDimensions.height = animWindow.clientHeight / worldUnitDimensions.pixelsPerUnit;\n\n // calculate the SVG's offset, if present\n let SVGOffsetPx = SVG.getBoundingClientRect().width - (window.innerWidth - SVG.getBoundingClientRect().x);\n worldUnitDimensions.SVGOffset = SVGOffsetPx / worldUnitDimensions.pixelsPerUnit;\n }\n\n\n /**\n *\n * @param {float} worldWidthUnits\n * @param {float} worldHeightUnits\n * @param {float} SVGWidth\n */\n function createGroundAndTri(worldWidthUnits, worldHeightUnits, SVGWidth, SVGOffset) {\n var groundHeight = 10;\n\n ground = Bodies.rectangle(worldWidthUnits / 2,\n worldHeightUnits + (groundHeight / 2),\n worldWidthUnits,\n groundHeight,\n {\n isStatic: true,\n friction: .5,\n restitution: 1,\n render: {\n fillStyle: 'transparent'\n },\n }\n );\n\n // Define the vertices (points) of the triangle\n const triangleVertices = [\n { x: 0, y: SVGWidth }, // Top-left vertex\n { x: SVGWidth, y: 0 }, // Bottom-left vertex\n { x: SVGWidth, y: SVGWidth }, // Bottom-right vertex\n ];\n\n // Create a triangle body\n triangle = Bodies.fromVertices(worldWidthUnits - (SVGWidth / 3) + SVGOffset, worldHeightUnits - (SVGWidth / 3), [triangleVertices], {\n isStatic: true,\n friction: .5,\n restitution: .8,\n render: {\n fillStyle: 'transparent'\n },\n });\n\n // add all of the bodies to the world\n Composite.add(engine.world, [ground, triangle]);\n }\n\n\n /**\n *\n */\n function removeGroundAndTri() {\n Composite.remove(engine.world, ground);\n Composite.remove(engine.world, triangle);\n }\n\n\n /**\n *\n * @param {float} worldWidthUnits\n * @param {float} worldHeightUnits\n */\n function createBodies(worldWidthUnits, objectHeight) {\n\n shapes.forEach(function (shape, index) {\n\n const rndShape = Math.round(Math.random());\n\n if (rndShape === 1) {\n shape = Bodies.rectangle(\n 0,\n 0,\n objectHeight,\n objectHeight,\n {\n density: 10,\n friction: 0,\n restitution: .4 + Math.random() * .25,\n label: 'faller',\n render: {\n fillStyle: colours[index % colours.length]\n },\n collisionFilter: {\n group: -1\n }\n }\n );\n } else {\n shape = Bodies.circle(\n 0,\n 0,\n objectHeight / 2,\n {\n density: Math.random() * 1 + .5,\n friction: 0,\n restitution: Math.random() * .65 + .3,\n label: 'faller',\n render: {\n fillStyle: colours[index % colours.length]\n },\n collisionFilter: {\n group: -1\n }\n }\n );\n }\n\n resetBody(shape, worldWidthUnits, objectHeight);\n\n Composite.add(engine.world, [shape]);\n\n });\n }\n\n\n /**\n *\n */\n function activateBody(body) {\n Sleeping.set(body, false);\n }\n\n\n /**\n *\n */\n function resetBody(body, worldWidthUnits, objectHeight) {\n Sleeping.set(body, true);\n\n const torqueAmount = Math.random() * -0.15 - .2; // Adjust the torque amount as needed\n Body.setAngularSpeed(body, torqueAmount);\n Body.setSpeed(body, .1);\n\n const shapeDropHeight = 300;\n const shapeDropXOffset = 40 + (Math.random() * 60);\n\n Body.setPosition(body, {\n x: worldWidthUnits - (objectHeight / 2) - shapeDropXOffset,\n y: -shapeDropHeight,\n });\n }\n\n\n /**\n *\n */\n function resetBodies() {\n engine.world.bodies.forEach(function (body) {\n if (body.label === \"faller\") {\n resetBody(body, worldUnitDimensions.width, worldUnitDimensions.objectHeight);\n }\n });\n }\n\n\n /**\n * Whether to activate a body on each frame\n * @param {*} currentTime\n */\n function activations(currentTime) {\n if (!startTime) {\n // Initialize the start time\n startTime = currentTime;\n }\n\n // Calculate the elapsed time\n const elapsedTime = currentTime - startTime;\n\n if (elapsedTime < activationInterval) {\n // Continue requesting animation frames until the timeout is reached\n } else {\n // Timeout is reached; perform your action here\n for (let q = 0; q < engine.world.bodies.length; q++) {\n if (engine.world.bodies[q].isSleeping) {\n activateBody(engine.world.bodies[q]);\n break;\n }\n }\n\n // Reset the start time for future use\n startTime = null;\n activationInterval = Math.random() * activationIntervalRand + activationIntervalMin;\n }\n\n RAFActivations = requestAnimationFrame(activations);\n }\n\n\n /**\n *\n * @param {float} worldWidthUnits\n * @param {float} worldHeightUnits\n */\n function createRenderer(worldWidthUnits, worldHeightUnits) {\n // create a renderer\n render = Render.create({\n element: document.querySelector('.homepagehero'),\n engine: engine,\n options: {\n width: worldWidthUnits,\n height: worldHeightUnits,\n wireframes: false,\n background: 'transparent',\n pixelRatio: window.devicePixelRatio\n },\n bounds: {\n min: { x: 0, y: 0 },\n max: { x: worldWidthUnits, y: worldHeightUnits },\n }\n });\n }\n\n\n /**\n *\n */\n function resizeRenderer(worldWidthUnits, worldHeightUnits) {\n if (render) {\n render.canvas.width = worldWidthUnits;\n render.canvas.height = worldHeightUnits;\n render.options.width = worldWidthUnits;\n render.options.height = worldHeightUnits;\n\n // Update the bounds to reflect the new canvas dimensions\n render.bounds.min.x = 0;\n render.bounds.min.y = 0;\n render.bounds.max.x = worldWidthUnits;\n render.bounds.max.y = worldHeightUnits;\n Render.setPixelRatio(render, window.devicePixelRatio);\n\n // Render the scene again to update the view\n Matter.Render.world(render);\n }\n }\n\n\n /**\n * Init simulation\n */\n function initSimulation() {\n Render.run(render); // run the renderer\n runner = Runner.create(); // create runner\n Runner.run(runner, engine); // run the engine\n }\n\n\n /**\n * Pause simulation\n */\n function pauseSimulation() {\n runner.enabled = false;\n Render.stop(render);\n }\n\n /**\n * Resume simulation\n */\n function resumeSimulation() {\n runner.enabled = true;\n Render.run(render);\n }\n\n /**\n * IntersectionObserver- pause/resume simulation when in or out of viewport\n *\n * TODO this will fail if more than one anim onscreen\n */\n function observer() {\n\n const animWindow = document.querySelector('.homepagehero__animCont');\n\n const observerOptions = {\n rootMargin: '0px 0px 0px 0px',\n threshold: 0\n }\n\n var observerAnim = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (entry.intersectionRatio !== 0) {\n RAFActivations = requestAnimationFrame(activations);\n resumeSimulation();\n } else {\n cancelAnimationFrame(RAFActivations);\n pauseSimulation();\n }\n });\n }, observerOptions);\n\n observerAnim.observe(animWindow);\n }\n\n\n /**\n * Resize event\n */\n\n window.addEventListener('resize', handleResizeEvent);\n window.addEventListener('resize_x', handleResizeEvent);\n\n function handleResizeEvent(e) {\n removeGroundAndTri();\n calcWorldUnits();\n resizeRenderer(worldUnitDimensions.width, worldUnitDimensions.height);\n createGroundAndTri(worldUnitDimensions.width, worldUnitDimensions.height, worldUnitDimensions.SVGWidth, worldUnitDimensions.SVGOffset);\n\n if (e.type === 'resize_x') {\n resetBodies();\n }\n }\n\n /**\n * Add a class to start the CSS anim on the triangles.\n *\n * Then, emit an event when the triangle fadein anim (homepage hero) is complete.\n */\n\n const SVGTris = document.querySelector('.js-anim-hero-svg');\n const finalTri = document.querySelector('.js-anim-hero-eventTri');\n\n\n /**\n *\n */\n function animAddClass() {\n if (SVGTris) {\n SVGTris.classList.add('homepagehero__animCont__SVG__SVG--animating');\n handleTriCSSAnimationEnd();\n }\n }\n\n\n /**\n * Add event listener to watch for final CSS triangle (on right) appearing. Afterwards, start the simulation.\n */\n function handleTriCSSAnimationEnd() {\n if (finalTri) {\n finalTri.addEventListener('animationend', function () {\n lets_goooooooo();\n }, { once: true });\n }\n }\n\n animAddClass();\n\n }\n})();","var lazyLoadInstance = (function() {\n return new LazyLoad({\n restore_on_error: true,\n thresholds: \"500px 50%\",\n callback_loading: function() {\n\n }\n });\n})();","(function() {\n 'use strict';\n\n const btnsNavToggle = document.querySelectorAll('.js-navMobileToggle');\n\n btnsNavToggle.forEach((elm) => {\n elm.addEventListener('click', toggleNav);\n });\n\n function toggleNav() {\n document.body.classList.toggle('body--mobNavOpen');\n }\n})();","(function() {\n 'use strict';\n\n const btnsNewsletterToggle = document.querySelectorAll('.js-newsletterToggle');\n\n btnsNewsletterToggle.forEach((elm) => {\n elm.addEventListener('click', toggleNewsletter);\n });\n\n function toggleNewsletter() {\n document.body.classList.toggle('body--newsletterOpen');\n }\n})();","(function () {\n 'use strict';\n\n const animPanels = document.querySelectorAll('.js-animPanel');\n\n addElmObservers(animPanels);\n\n function addElmObservers(elms) {\n var observerOptions = {\n rootMargin: '0px 0px 0px 0px',\n threshold: 0\n }\n\n var observerAnim = new IntersectionObserver(function (entires) {\n entires.forEach(function (entry) {\n if (entry.intersectionRatio !== 0) {\n entry.target.sflIsVisible = true;\n animScrollEvent(); // fire at least once so anims go to correct state if already in view on page load\n } else {\n entry.target.sflIsVisible = false;\n }\n });\n }, observerOptions);\n\n elms.forEach(function (elm) {\n observerAnim.observe(elm);\n });\n }\n\n function animScrollEvent() {\n let windowScrollpos = window.scrollY;\n let windowHeight = window.innerHeight;\n\n animPanels.forEach(function(elm) {\n if (elm.sflIsVisible) {\n let animOffsetTop = elm.dataset.offsettop ? elm.dataset.offsettop / 100 : 0; // entered as a percentage so needs to be divided by 100\n let animOffsetBottom = elm.dataset.offsetbottom ? elm.dataset.offsetbottom / 100 : 0;\n\n let elmDistance = (windowHeight + elm.clientHeight) * (1 - (animOffsetTop + animOffsetBottom));\n let unit = 1 / elmDistance;\n let animOffsetFinalValue;\n\n animOffsetFinalValue = (windowScrollpos + (windowHeight) - elm.offsetTop) * unit;\n animOffsetFinalValue = animOffsetFinalValue - animOffsetBottom;\n\n // normalise to between 0 or 1\n animOffsetFinalValue = animOffsetFinalValue > 1 ? 1 : animOffsetFinalValue;\n animOffsetFinalValue = animOffsetFinalValue < 0 ? 0 : animOffsetFinalValue;\n\n elm.style.setProperty('--animDelay', `${-animOffsetFinalValue}s`);\n }\n });\n }\n window.addEventListener('scroll', animScrollEvent);\n\n}) ();","(function () {\n const classVideoShow = 'video-autoplay--show';\n\n // Function to log poster load status\n function checkPosterLoad(video) {\n if (video.poster) {\n const img = new Image();\n\n // Check if the image is already loaded (potentially from cache)\n if (img.complete) {\n console.log('Poster was already loaded (possibly from cache)');\n video.classList.add(classVideoShow);\n } else {\n img.onload = () => {\n console.log('Poster has just finished loading');\n video.classList.add(classVideoShow);\n };\n }\n\n // This will trigger the load if it's not in cache\n img.src = video.poster;\n } else {\n console.log('No poster specified for this video');\n }\n }\n\n const videoObserver = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const video = entry.target;\n const src = video.dataset.src;\n\n if (src) {\n const source = document.createElement('source');\n source.src = src;\n video.addEventListener('canplay', function () {\n console.log('video playing');\n video.classList.add(classVideoShow);\n });\n video.appendChild(source);\n video.load();\n video.play().then(() => {\n })\n .catch((error) => {\n console.log('error');\n checkPosterLoad(video);\n });\n }\n\n observer.unobserve(video);\n }\n });\n },\n {\n rootMargin: '0px 0px 200px 0px',\n threshold: 0\n }\n );\n\n document.querySelectorAll('.js-videoAutoplay').forEach(video => {\n videoObserver.observe(video);\n });\n})();"]}