{"version":3,"sources":["webpack:///./src/js/modules/breakToLines.js","webpack:///./node_modules/splitting/dist/splitting.js"],"names":["Module","this","dom","overlay","el","querySelector","text","link","svg","image","lineSplit","target","by","handleResize","addEventListener","handleHover","bind","handleMouseOut","window","isMobile","matchMedia","matches","visible","timeOverlay","offsetWidth","showTime","style","visibility","showSequence","lines","reduce","sequence","line","index","lineSequence","opacity","transform","at","duration","delay","push","lineSplitEnd","length","svgSequence","animate","timeline","dissappearTime","hideSequence","finished","then","Component","module","exports","root","document","createText","createTextNode","setProperty","varName","value","appendChild","child","createElement","parent","key","whitespace","className","setAttribute","textContent","getData","getAttribute","$","e","nodeName","slice","call","querySelectorAll","Array2D","len","a","each","items","fn","some","selectFrom","obj","plugins","createPlugin","depends","split","resolve","resolvePlugins","deps","indexOf","unshift","p","indexOfParent","splice","map","add","opts","splitText","splitOn","includePrevious","preserveWhitespace","normalize","elements","F","createDocumentFragment","previousSibling","allElements","childNodes","next","tagName","hasChildNodes","apply","wholeText","contents","trim","i","splitEl","innerHTML","wordPlugin","charPlugin","options","ctx","results","word","Splitting","force","opts2","dest","src","k","copy","plugin","pluginBy","key2","element","prefix","cssVar","Array","isArray","item","classList","detectGrid","side","matching","children","c","w","val","Math","round","Object","keys","Number","sort","byNumber","b","html","content","outerHTML","linePlugin","itemPlugin","rowPlugin","columnPlugin","gridPlugin","layoutPlugin","rows","columns","currentSrc","img","totalCells","container","cell","cellRowPlugin","rowCount","result","floor","cellColumnPlugin","columnCount","cellPlugin","opt","factory"],"mappings":"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","file":"37.c12bc9a9763b178d2fb5.js","sourcesContent":["import { animate, timeline } from 'motion';\n\nimport { Component } from '@verndale/core';\nimport Splitting from 'splitting';\n\nclass Module extends Component {\n setupDefaults() {\n this.dom = {\n overlay: this.el.querySelector('.card__overlay'),\n text: this.el.querySelector('.card__text'),\n link: this.el.querySelector('a'),\n svg: this.el.querySelector('svg'),\n image: this.el.querySelector('img')\n };\n\n this.dom.text.lineSplit = Splitting({\n target: this.dom.text,\n by: 'lines'\n });\n this.handleResize();\n }\n\n addListeners() {\n this.dom.link.addEventListener('mouseover', this.handleHover.bind(this));\n this.dom.link.addEventListener('mouseout', this.handleMouseOut.bind(this));\n window.addEventListener('resize', this.handleResize.bind(this));\n }\n\n handleResize() {\n this.isMobile = window.matchMedia('(max-width: 1025px)').matches;\n if (this.visible && this.isMobile) {\n this.handleMouseOut();\n }\n }\n\n handleHover() {\n if (!this.isMobile) {\n this.timeOverlay = 0.35 + this.el.offsetWidth * 0.0003;\n\n this.showTime = this.timeOverlay * 0.12;\n this.dom.text.style.visibility = 'visible';\n\n const showSequence = this.dom.text.lineSplit[0].lines.reduce(\n (sequence, line, index) => {\n const lineSequence = [\n line,\n {\n opacity: [0, 1],\n transform: ['translate(-50px, 0)', 'translate(0, 0)']\n },\n { at: this.showTime * index },\n { duration: this.showTime, delay: this.timeOverlay * 0.6 }\n ];\n sequence.push(lineSequence);\n return sequence;\n },\n []\n );\n\n const lineSplitEnd = this.dom.text.lineSplit[0].lines.length;\n\n const svgSequence = [\n this.dom.svg,\n {\n opacity: [0, 1],\n transform: ['translate(-50px, 0)', 'translate(0, 0)']\n },\n { at: this.showTime * lineSplitEnd },\n { duration: this.showTime, delay: this.timeOverlay * 0.6 }\n ];\n showSequence.push(svgSequence);\n\n animate(\n this.dom.overlay,\n { transform: 'skew(-30deg) scale(2.1, 1)' },\n { duration: this.timeOverlay }\n );\n\n timeline(showSequence);\n\n if (this.dom.image)\n animate(this.dom.image, { transform: 'scale(1.25)' }, { duration: 1 });\n }\n this.visible = true;\n }\n\n handleMouseOut() {\n this.visible = false;\n this.dissappearTime = this.showTime * 0.85;\n const hideSequence = this.dom.text.lineSplit[0].lines.reduce(\n (sequence, line, index) => {\n const lineSequence = [\n line,\n {\n opacity: 0,\n transform: ['translate(0, 0)', 'translate(-50px, 0)']\n },\n { at: this.dissappearTime * index },\n { duration: this.dissappearTime }\n ];\n sequence.push(lineSequence);\n return sequence;\n },\n []\n );\n\n const lineSplitEnd = this.dom.text.lineSplit[0].lines.length;\n\n const lineSequence = [\n this.dom.svg,\n {\n opacity: 0,\n transform: ['translate(0, 0)', 'translate(-50px, 0)']\n },\n { at: this.dissappearTime * lineSplitEnd },\n { duration: this.dissappearTime }\n ];\n\n hideSequence.push(lineSequence);\n\n timeline(hideSequence).finished.then(() => {\n if (!this.visible) {\n this.dom.text.style.visibility = 'hidden';\n }\n });\n\n animate(\n this.dom.overlay,\n { transform: 'skew(-30deg) scale(0, 1)' },\n { duration: this.timeOverlay, delay: lineSplitEnd * this.dissappearTime }\n );\n\n if (this.dom.image)\n animate(\n this.dom.image,\n { transform: 'scale(1)' },\n { duration: this.timeOverlay * 2.6, delay: this.timeOverlay * 0.3 }\n );\n }\n}\n\nexport default Module;\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Splitting = factory());\n}(this, (function () { 'use strict';\n\nvar root = document;\nvar createText = root.createTextNode.bind(root);\n\n/**\n * # setProperty\n * Apply a CSS var\n * @param el{HTMLElement} \n * @param varName {string} \n * @param value {string|number} \n */\nfunction setProperty(el, varName, value) {\n el.style.setProperty(varName, value);\n} \n\n/**\n * \n * @param {Node} el \n * @param {Node} child \n */\nfunction appendChild(el, child) {\n return el.appendChild(child);\n}\n\nfunction createElement(parent, key, text, whitespace) {\n var el = root.createElement('span');\n key && (el.className = key); \n if (text) { \n !whitespace && el.setAttribute(\"data-\" + key, text);\n el.textContent = text; \n }\n return (parent && appendChild(parent, el)) || el;\n}\n\nfunction getData(el, key) {\n return el.getAttribute(\"data-\" + key)\n}\n\n/**\n * \n * @param e {import('../types').Target} \n * @param parent {HTMLElement}\n * @returns {HTMLElement[]}\n */\nfunction $(e, parent) {\n return !e || e.length == 0\n ? // null or empty string returns empty array\n []\n : e.nodeName\n ? // a single element is wrapped in an array\n [e]\n : // selector and NodeList are converted to Element[]\n [].slice.call(e[0].nodeName ? e : (parent || root).querySelectorAll(e));\n}\n\n/**\n * Creates and fills an array with the value provided\n * @template {T}\n * @param {number} len\n * @param {() => T} valueProvider\n * @return {T}\n */\nfunction Array2D(len) {\n var a = [];\n for (; len--; ) {\n a[len] = [];\n }\n return a;\n}\n\nfunction each(items, fn) {\n items && items.some(fn);\n}\n\nfunction selectFrom(obj) {\n return function (key) {\n return obj[key];\n }\n}\n\n/**\n * # Splitting.index\n * Index split elements and add them to a Splitting instance.\n *\n * @param element {HTMLElement}\n * @param key {string}\n * @param items {HTMLElement[] | HTMLElement[][]}\n */\nfunction index(element, key, items) {\n var prefix = '--' + key;\n var cssVar = prefix + \"-index\";\n\n each(items, function (items, i) {\n if (Array.isArray(items)) {\n each(items, function(item) {\n setProperty(item, cssVar, i);\n });\n } else {\n setProperty(items, cssVar, i);\n }\n });\n\n setProperty(element, prefix + \"-total\", items.length);\n}\n\n/**\n * @type {Record}\n */\nvar plugins = {};\n\n/**\n * @param by {string}\n * @param parent {string}\n * @param deps {string[]}\n * @return {string[]}\n */\nfunction resolvePlugins(by, parent, deps) {\n // skip if already visited this dependency\n var index = deps.indexOf(by);\n if (index == -1) {\n // if new to dependency array, add to the beginning\n deps.unshift(by);\n\n // recursively call this function for all dependencies\n each(plugins[by].depends, function(p) {\n resolvePlugins(p, by, deps);\n });\n } else {\n // if this dependency was added already move to the left of\n // the parent dependency so it gets loaded in order\n var indexOfParent = deps.indexOf(parent);\n deps.splice(index, 1);\n deps.splice(indexOfParent, 0, by);\n }\n return deps;\n}\n\n/**\n * Internal utility for creating plugins... essentially to reduce\n * the size of the library\n * @param {string} by \n * @param {string} key \n * @param {string[]} depends \n * @param {Function} split \n * @returns {import('./types').ISplittingPlugin}\n */\nfunction createPlugin(by, depends, key, split) {\n return {\n by: by,\n depends: depends,\n key: key,\n split: split\n }\n}\n\n/**\n *\n * @param by {string}\n * @returns {import('./types').ISplittingPlugin[]}\n */\nfunction resolve(by) {\n return resolvePlugins(by, 0, []).map(selectFrom(plugins));\n}\n\n/**\n * Adds a new plugin to splitting\n * @param opts {import('./types').ISplittingPlugin}\n */\nfunction add(opts) {\n plugins[opts.by] = opts;\n}\n\n/**\n * # Splitting.split\n * Split an element's textContent into individual elements\n * @param el {Node} Element to split\n * @param key {string}\n * @param splitOn {string}\n * @param includeSpace {boolean}\n * @returns {HTMLElement[]}\n */\nfunction splitText(el, key, splitOn, includePrevious, preserveWhitespace) {\n // Combine any strange text nodes or empty whitespace.\n el.normalize();\n\n // Use fragment to prevent unnecessary DOM thrashing.\n var elements = [];\n var F = document.createDocumentFragment();\n\n if (includePrevious) {\n elements.push(el.previousSibling);\n }\n\n var allElements = [];\n $(el.childNodes).some(function(next) {\n if (next.tagName && !next.hasChildNodes()) {\n // keep elements without child nodes (no text and no children)\n allElements.push(next);\n return;\n }\n // Recursively run through child nodes\n if (next.childNodes && next.childNodes.length) {\n allElements.push(next);\n elements.push.apply(elements, splitText(next, key, splitOn, includePrevious, preserveWhitespace));\n return;\n }\n\n // Get the text to split, trimming out the whitespace\n /** @type {string} */\n var wholeText = next.wholeText || '';\n var contents = wholeText.trim();\n\n // If there's no text left after trimming whitespace, continue the loop\n if (contents.length) {\n // insert leading space if there was one\n if (wholeText[0] === ' ') {\n allElements.push(createText(' '));\n }\n // Concatenate the split text children back into the full array\n each(contents.split(splitOn), function(splitText, i) {\n if (i && preserveWhitespace) {\n allElements.push(createElement(F, \"whitespace\", \" \", preserveWhitespace));\n }\n var splitEl = createElement(F, key, splitText);\n elements.push(splitEl);\n allElements.push(splitEl);\n }); \n // insert trailing space if there was one\n if (wholeText[wholeText.length - 1] === ' ') {\n allElements.push(createText(' '));\n }\n }\n });\n\n each(allElements, function(el) {\n appendChild(F, el);\n });\n\n // Clear out the existing element\n el.innerHTML = \"\";\n appendChild(el, F);\n return elements;\n}\n\n/** an empty value */\nvar _ = 0;\n\nfunction copy(dest, src) {\n for (var k in src) {\n dest[k] = src[k];\n }\n return dest;\n}\n\nvar WORDS = 'words';\n\nvar wordPlugin = createPlugin(\n /*by: */ WORDS,\n /*depends: */ _,\n /*key: */ 'word', \n /*split: */ function(el) {\n return splitText(el, 'word', /\\s+/, 0, 1)\n }\n);\n\nvar CHARS = \"chars\";\n\nvar charPlugin = createPlugin(\n /*by: */ CHARS,\n /*depends: */ [WORDS],\n /*key: */ \"char\", \n /*split: */ function(el, options, ctx) {\n var results = [];\n\n each(ctx[WORDS], function(word, i) {\n results.push.apply(results, splitText(word, \"char\", \"\", options.whitespace && i));\n });\n\n return results;\n }\n);\n\n/**\n * # Splitting\n * \n * @param opts {import('./types').ISplittingOptions} \n */\nfunction Splitting (opts) {\n opts = opts || {};\n var key = opts.key;\n\n return $(opts.target || '[data-splitting]').map(function(el) {\n var ctx = el['🍌']; \n if (!opts.force && ctx) {\n return ctx;\n }\n\n ctx = el['🍌'] = { el: el };\n var items = resolve(opts.by || getData(el, 'splitting') || CHARS);\n var opts2 = copy({}, opts);\n each(items, function(plugin) {\n if (plugin.split) {\n var pluginBy = plugin.by;\n var key2 = (key ? '-' + key : '') + plugin.key;\n var results = plugin.split(el, opts2, ctx);\n key2 && index(el, key2, results);\n ctx[pluginBy] = results;\n el.classList.add(pluginBy);\n } \n });\n\n el.classList.add('splitting');\n return ctx;\n })\n}\n\n/**\n * # Splitting.html\n * \n * @param opts {import('./types').ISplittingOptions}\n */\nfunction html(opts) {\n opts = opts || {};\n var parent = opts.target = createElement();\n parent.innerHTML = opts.content;\n Splitting(opts);\n return parent.outerHTML\n}\n\nSplitting.html = html;\nSplitting.add = add;\n\nfunction detectGrid(el, options, side) {\n var items = $(options.matching || el.children, el);\n var c = {};\n\n each(items, function(w) {\n var val = Math.round(w[side]);\n (c[val] || (c[val] = [])).push(w);\n });\n\n return Object.keys(c).map(Number).sort(byNumber).map(selectFrom(c));\n}\n\nfunction byNumber(a, b) {\n return a - b;\n}\n\nvar linePlugin = createPlugin(\n /*by: */ 'lines',\n /*depends: */ [WORDS],\n /*key: */ 'line',\n /*split: */ function(el, options, ctx) {\n return detectGrid(el, { matching: ctx[WORDS] }, 'offsetTop')\n }\n);\n\nvar itemPlugin = createPlugin(\n /*by: */ 'items',\n /*depends: */ _,\n /*key: */ 'item', \n /*split: */ function(el, options) {\n return $(options.matching || el.children, el)\n }\n);\n\nvar rowPlugin = createPlugin(\n /*by: */ 'rows',\n /*depends: */ _,\n /*key: */ 'row', \n /*split: */ function(el, options) {\n return detectGrid(el, options, \"offsetTop\");\n }\n);\n\nvar columnPlugin = createPlugin(\n /*by: */ 'cols',\n /*depends: */ _,\n /*key: */ \"col\", \n /*split: */ function(el, options) {\n return detectGrid(el, options, \"offsetLeft\");\n }\n);\n\nvar gridPlugin = createPlugin(\n /*by: */ 'grid',\n /*depends: */ ['rows', 'cols']\n);\n\nvar LAYOUT = \"layout\";\n\nvar layoutPlugin = createPlugin(\n /*by: */ LAYOUT,\n /*depends: */ _,\n /*key: */ _,\n /*split: */ function(el, opts) {\n // detect and set options\n var rows = opts.rows = +(opts.rows || getData(el, 'rows') || 1);\n var columns = opts.columns = +(opts.columns || getData(el, 'columns') || 1);\n\n // Seek out the first if the value is true \n opts.image = opts.image || getData(el, 'image') || el.currentSrc || el.src;\n if (opts.image) {\n var img = $(\"img\", el)[0];\n opts.image = img && (img.currentSrc || img.src);\n }\n\n // add optional image to background\n if (opts.image) {\n setProperty(el, \"background-image\", \"url(\" + opts.image + \")\");\n }\n\n var totalCells = rows * columns;\n var elements = [];\n\n var container = createElement(_, \"cell-grid\");\n while (totalCells--) {\n // Create a span\n var cell = createElement(container, \"cell\");\n createElement(cell, \"cell-inner\");\n elements.push(cell);\n }\n\n // Append elements back into the parent\n appendChild(el, container);\n\n return elements;\n }\n);\n\nvar cellRowPlugin = createPlugin(\n /*by: */ \"cellRows\",\n /*depends: */ [LAYOUT],\n /*key: */ \"row\",\n /*split: */ function(el, opts, ctx) {\n var rowCount = opts.rows;\n var result = Array2D(rowCount);\n\n each(ctx[LAYOUT], function(cell, i, src) {\n result[Math.floor(i / (src.length / rowCount))].push(cell);\n });\n\n return result;\n }\n);\n\nvar cellColumnPlugin = createPlugin(\n /*by: */ \"cellColumns\",\n /*depends: */ [LAYOUT],\n /*key: */ \"col\",\n /*split: */ function(el, opts, ctx) {\n var columnCount = opts.columns;\n var result = Array2D(columnCount);\n\n each(ctx[LAYOUT], function(cell, i) {\n result[i % columnCount].push(cell);\n });\n\n return result;\n }\n);\n\nvar cellPlugin = createPlugin(\n /*by: */ \"cells\",\n /*depends: */ ['cellRows', 'cellColumns'],\n /*key: */ \"cell\", \n /*split: */ function(el, opt, ctx) { \n // re-index the layout as the cells\n return ctx[LAYOUT];\n }\n);\n\n// install plugins\n// word/char plugins\nadd(wordPlugin);\nadd(charPlugin);\nadd(linePlugin);\n// grid plugins\nadd(itemPlugin);\nadd(rowPlugin);\nadd(columnPlugin);\nadd(gridPlugin);\n// cell-layout plugins\nadd(layoutPlugin);\nadd(cellRowPlugin);\nadd(cellColumnPlugin);\nadd(cellPlugin);\n\nreturn Splitting;\n\n})));\n"],"sourceRoot":""}