{"version":3,"sources":["webpack:///./src/js/helpers/index.js","webpack:///./node_modules/uuid/dist/esm-browser/rng.js","webpack:///./node_modules/uuid/dist/esm-browser/regex.js","webpack:///./node_modules/uuid/dist/esm-browser/stringify.js","webpack:///./node_modules/uuid/dist/esm-browser/validate.js","webpack:///./node_modules/uuid/dist/esm-browser/v4.js","webpack:///./src/js/modules/visualStoryRow.js"],"names":["gsap","registerPlugin","CSSPlugin","open","element","duration","ease","onComplete","set","height","from","Expo","close","offsetHeight","to","addUniqueIdsToArrayItems","arr","map","item","id","uuidv4","getQueryStringValues","values","queryString","document","location","search","replace","queryParameters","split","parameter","splitParameter","key","value","parameters","filter","includes","forEach","isFocusable","el","tabIndex","getAttribute","disabled","nodeName","href","rel","type","keyCode","TAB","RETURN","ESC","SPACE","PAGEUP","PAGEDOWN","END","HOME","LEFT","UP","RIGHT","DOWN","isDevice","userAgent","navigator","vendor","window","opera","test","MSStream","formDataToJson","formElement","formData","FormData","object","hasOwnProperty","Array","isArray","push","debounce","callback","wait","timerId","args","clearTimeout","setTimeout","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","uuid","byteToHex","toString","substr","offset","arguments","length","undefined","toLowerCase","TypeError","options","buf","rnds","random","i","ScrollTrigger","VisualStoryRow","this","dom","line","querySelector","triggerCont","innerContainer","img","picture","imgCont","copy","title","breakpoint","matchMedia","breakpoints","tablet","initImageScroll","initLineScroll","watchMainElement","addEventListener","refresh","update","style","animateLine","ResizeObserver","entries","observe","animateImage","innerHeight","containerTop","offsetTop","containerHeight","triggerContainerHeight","titleHeight","matches","lineStart","lineEnd","scrollTrigger","trigger","start","end","endTrigger","pin","pinSpacing","scrub","scale","transformOrigin","pageYOffset","transform","Component"],"mappings":"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","file":"37.4c6d4db033ecc6531148.js","sourcesContent":["import { gsap, Expo, CSSPlugin } from 'gsap';\nimport { v4 as uuidv4 } from 'uuid';\n\ngsap.registerPlugin(CSSPlugin);\n\n/**\n * Opens an element\n *\n * @example\n * import {open} from '../helpers';\n *\n * open({ element: this.el.querySelector('.element)});\n *\n * @param {Object} element - HTML element you want to target for animation\n * @param {Number} duration - Speed of the animation\n * @param {String} ease - Ease of the animation\n * @param {Function} onComplete - On complete function\n */\nexport const open = ({\n element,\n duration = 0.4,\n ease = 'easeOut',\n onComplete\n}) => {\n gsap.set(element, { height: 'auto' });\n gsap.from(element, {\n height: 0,\n ease: Expo[ease],\n duration,\n onComplete: () => {\n onComplete && onComplete();\n }\n });\n};\n\n/**\n * Closes an element\n *\n * @example\n * import {close} from '../helpers';\n *\n * close({ element: this.el.querySelector('.element)});\n *\n * @param {Object} element - HTML element you want to target for animation\n * @param {Number} duration - Speed of the animation\n * @param {String} ease - Ease of the animation\n * @param {Function} onComplete - On complete function\n */\nexport const close = ({\n element,\n duration = 0.4,\n ease = 'easeOut',\n onComplete\n}) => {\n gsap.set(element, { height: element.offsetHeight });\n gsap.to(element, {\n height: 0,\n ease: Expo[ease],\n duration,\n onComplete: () => {\n onComplete && onComplete();\n }\n });\n};\n\n/**\n * Adds unique id to each element in the array\n * @param {Array} arr\n * @example\n * import {addUniqueIdsToArrayItems} from '../helpers';\n *\n * addUniqueIdsToArrayItems([{any: any}]);\n *\n */\nexport const addUniqueIdsToArrayItems = arr =>\n arr.map(item => ({ ...item, id: uuidv4() }));\n\nexport const getQueryStringValues = (...values) => {\n const queryString = document.location.search.replace('?', '');\n const queryParameters = queryString.split('&').map(parameter => {\n const splitParameter = parameter.split('=');\n return {\n key: splitParameter[0],\n value: splitParameter[1]\n };\n });\n if (!values) return queryParameters;\n const parameters = {};\n queryParameters\n .filter(({ key }) => values.includes(key))\n .forEach(parameter => {\n parameters[parameter.key] = parameter.value;\n });\n return parameters;\n};\n\n// /**\n// * Checks if an element is focusable\n// *\n// * @param {Object} el - HTML element you want to check if it's focusable\n// */\nexport const isFocusable = el => {\n if (\n el.tabIndex > 0 ||\n (el.tabIndex === 0 && el.getAttribute('tabIndex') !== null)\n ) {\n return true;\n }\n\n if (el.disabled) {\n return false;\n }\n\n switch (el.nodeName) {\n case 'A':\n return !!el.href && el.rel !== 'ignore';\n case 'INPUT':\n return el.type !== 'hidden' && el.type !== 'file';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Key code list object\n */\nexport const keyCode = {\n TAB: 9,\n RETURN: 13,\n ESC: 27,\n SPACE: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n};\n\n// /**\n// * Checks browser is running on a native mobile device\n// */\nexport const isDevice = () => {\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\n if (\n /windows phone/i.test(userAgent) ||\n /android/i.test(userAgent) ||\n (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream)\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Convers form data into a JSON object\n *\n * @param {Object} element - The form HTML element\n */\nexport const formDataToJson = formElement => {\n const formData = new FormData(formElement);\n const object = {};\n\n formData.forEach((value, key) => {\n if (!object.hasOwnProperty(key)) {\n object[key] = value;\n return;\n }\n if (!Array.isArray(object[key])) {\n object[key] = [object[key]];\n }\n object[key].push(value);\n });\n\n return object;\n};\n\n// /**\n// * Debounce function\n// * Delays the processing of the event\n// */\nexport const debounce = (callback, wait) => {\n let timerId;\n return (...args) => {\n clearTimeout(timerId);\n timerId = setTimeout(() => {\n callback(...args);\n }, wait);\n };\n};\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import { Component } from '@verndale/core';\nimport { gsap } from 'gsap';\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\nimport { breakpoints } from '../helpers/constants';\nimport { debounce } from '../helpers';\n\ngsap.registerPlugin(ScrollTrigger);\nclass VisualStoryRow extends Component {\n setupDefaults() {\n this.dom = {\n line: this.el.querySelector('.visual-story-row__line'),\n triggerCont: this.el.querySelector(\n '.visual-story-row__trigger-container'\n ),\n innerContainer: this.el.querySelector('.visual-story-row__inner'),\n img: this.el.querySelector('img'),\n picture: this.el.querySelector('.visual-story-row-img-container'),\n imgCont: this.el.querySelector('.visual-story-row__image'),\n copy: this.el.querySelector('.visual-story-content-row__copy'),\n title: this.el.querySelector('.visual-story-row__title')\n };\n\n this.breakpoint = window.matchMedia(`(min-width: ${breakpoints.tablet}px)`);\n\n this.initImageScroll();\n this.initLineScroll();\n this.watchMainElement();\n }\n\n addListeners() {\n const { triggerCont, line } = this.dom;\n window.addEventListener(\n 'resize',\n debounce(() => {\n ScrollTrigger.refresh();\n ScrollTrigger.update();\n\n triggerCont.style = null;\n line.style = null;\n\n this.initLineScroll(this);\n }, 200)\n );\n\n window.addEventListener('scroll', this.animateLine.bind(this));\n }\n\n watchMainElement() {\n const resizeObserver = new ResizeObserver(entries => {\n ScrollTrigger.refresh();\n ScrollTrigger.update();\n });\n\n resizeObserver.observe(document.querySelector('main'));\n }\n\n initImageScroll() {\n ScrollTrigger.matchMedia({\n [`(max-width: ${breakpoints.tablet - 1}px)`]: () => {\n this.animateImage();\n }\n });\n }\n\n initLineScroll() {\n const { innerHeight } = window;\n const { offsetTop: containerTop, offsetHeight: containerHeight } = this.el;\n const { offsetHeight: triggerContainerHeight } = this.dom.triggerCont;\n const { offsetHeight: titleHeight } = this.dom.title;\n\n if (this.breakpoint.matches) {\n this.lineStart = containerTop - innerHeight * 0.5;\n this.lineEnd = containerHeight + this.lineStart;\n } else {\n this.lineStart = containerTop - innerHeight * 0.7;\n this.lineEnd = this.lineStart + triggerContainerHeight - titleHeight - 55;\n }\n\n this.animateLine();\n }\n\n animateImage() {\n const { triggerCont, img, imgCont, innerContainer } = this.dom;\n\n triggerCont.style.height = `${innerContainer.offsetHeight * 2}px`;\n\n gsap.to(img, {\n scrollTrigger: {\n trigger: triggerCont,\n start: 'top top',\n end: 'bottom top',\n endTrigger: imgCont,\n pin: imgCont,\n pinSpacing: false,\n scrub: true\n },\n scale: 1.5,\n transformOrigin: 'center',\n scrub: 3\n });\n }\n\n animateLine() {\n const { pageYOffset } = window;\n\n if (pageYOffset >= this.lineStart && pageYOffset <= this.lineEnd) {\n this.dom.line.style.transform = `translateY(${\n pageYOffset - this.lineStart\n }px)`;\n } else if (pageYOffset > this.lineEnd) {\n this.dom.line.style.transform = `translateY(${\n this.lineEnd - this.lineStart\n }px)`;\n }\n }\n}\n\nexport default VisualStoryRow;\n"],"sourceRoot":""}