{"version":3,"sources":["webpack://loftware/./node_modules/uuid/dist/esm-browser/rng.js","webpack://loftware/./node_modules/uuid/dist/esm-browser/regex.js","webpack://loftware/./node_modules/uuid/dist/esm-browser/validate.js","webpack://loftware/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://loftware/./node_modules/uuid/dist/esm-browser/v4.js","webpack://loftware/./src/js/helpers/index.js","webpack://loftware/./src/js/modules/Accordion.js"],"names":[],"mappings":"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","file":"scripts/393.2b5c239e6fd5480b2f48.js","sourcesContent":["// 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 REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","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 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 anime from 'animejs/lib/anime.es';\r\n\r\n// /**\r\n// * debounce function\r\n// * Delays the processing of the event\r\n// */\r\nexport const debounce = (callback, wait) => {\r\n let timerId;\r\n return (...args) => {\r\n clearTimeout(timerId);\r\n timerId = setTimeout(() => {\r\n callback(...args);\r\n }, wait);\r\n };\r\n};\r\n\r\n// /**\r\n// * Checks if an element is focusable\r\n// *\r\n// * @param {Object} el - HTML element you want to check if it's focusable\r\n// */\r\nexport const isFocusable = el => {\r\n if (\r\n el.tabIndex > 0 ||\r\n (el.tabIndex === 0 && el.getAttribute('tabIndex') !== null)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (el.disabled) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable indent */\r\n switch (el.nodeName) {\r\n case 'A':\r\n return !!el.href && el.rel !== 'ignore';\r\n case 'INPUT':\r\n return el.type !== 'hidden' && el.type !== 'file';\r\n case 'BUTTON':\r\n case 'SELECT':\r\n case 'TEXTAREA':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n /* eslint-enable indent */\r\n};\r\n\r\n/**\r\n * Opens an element\r\n *\r\n * @example\r\n * import {open} from '../helpers';\r\n *\r\n * open({ element: this.el.querySelector('.element)});\r\n *\r\n * @param {Object} element - HTML element you want to target for animation\r\n * @param {Number} duration - Speed of the animation\r\n * @param {String} ease - Ease of the animation\r\n * @param {Function} onComplete - On complete function\r\n */\r\nexport const open = ({ element, duration = 400 }) => {\r\n anime({\r\n targets: element,\r\n height: [0, element.offsetHeight],\r\n easing: 'easeInOutQuad',\r\n duration\r\n });\r\n};\r\n/**\r\n * Closes an element\r\n *\r\n * @example\r\n * import {close} from '../helpers';\r\n *\r\n * close({ element: this.el.querySelector('.element)});\r\n *\r\n * @param {Object} element - HTML element you want to target for animation\r\n * @param {Number} duration - Speed of the animation\r\n * @param {String} ease - Ease of the animation\r\n * @param {Function} onComplete - On complete function\r\n */\r\nexport const close = ({ element, duration = 400 }) => {\r\n anime.set(element, { height: element.offsetHeight });\r\n anime({\r\n targets: element,\r\n height: 0,\r\n easing: 'easeInOutQuad',\r\n duration\r\n });\r\n};\r\n\r\n// /**\r\n// * Key code list object\r\n// */\r\nexport const keyCode = {\r\n TAB: 9,\r\n RETURN: 13,\r\n ESC: 27,\r\n SPACE: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40\r\n};\r\n","import { Component } from '@verndale/core';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport anime from 'animejs/lib/anime.es';\r\nimport { keyCode } from '../helpers';\r\n\r\nclass Accordion extends Component {\r\n constructor(el) {\r\n super(el);\r\n\r\n this.initAccordion();\r\n }\r\n\r\n setupDefaults() {\r\n this.dom = {\r\n container: this.el.querySelector('.accordion__items'),\r\n items: this.el.querySelectorAll('.accordion__item'),\r\n triggers: [...this.el.querySelectorAll('.accordion__item-trigger')],\r\n panels: [...this.el.querySelectorAll('.accordion__item-panel')]\r\n };\r\n }\r\n\r\n addListeners() {\r\n this.dom.container.addEventListener(\r\n 'keydown',\r\n this.handleKeyDown.bind(this)\r\n );\r\n this.dom.triggers.forEach(trigger =>\r\n trigger.addEventListener('click', this.handleClick.bind(this))\r\n );\r\n\r\n this.dom.panels.forEach(el =>\r\n el.addEventListener('transitionend', this.handleTransitionEnd.bind(this))\r\n );\r\n }\r\n\r\n initAccordion() {\r\n this.dom.items.forEach(item => {\r\n const guid = uuidv4();\r\n\r\n const trigger = item.querySelector('.accordion__item-trigger');\r\n const content = item.querySelector('.accordion__item-panel');\r\n\r\n if (trigger.getAttribute('aria-expanded') === 'true') {\r\n this.openPanel(content);\r\n }\r\n\r\n trigger.setAttribute('aria-controls', `tabcontent-${guid}`);\r\n trigger.setAttribute('id', `tab-${guid}`);\r\n content.setAttribute('aria-labelledby', `tab-${guid}`);\r\n content.setAttribute('id', `tabcontent-${guid}`);\r\n\r\n content.setAttribute(\r\n 'aria-hidden',\r\n trigger.getAttribute('aria-expanded') !== 'true'\r\n );\r\n });\r\n }\r\n\r\n handleClick(e) {\r\n const button = e.currentTarget;\r\n\r\n if (button.getAttribute('aria-expanded') === 'true') {\r\n this.closeItem(button);\r\n } else {\r\n this.openItem(button);\r\n }\r\n }\r\n\r\n handleKeyDown(e) {\r\n const { target } = e;\r\n const key = e.which || e.keyCode;\r\n\r\n const ctrlModifier =\r\n e.ctrlKey && (key === keyCode.PAGEUP || key === keyCode.PAGEDOWN);\r\n\r\n if (target.classList.contains('accordion__item-trigger')) {\r\n if (key === keyCode.UP || key === keyCode.DOWN || ctrlModifier) {\r\n const index = this.dom.triggers.indexOf(target);\r\n const direction =\r\n key === keyCode.PAGEDOWN || key === keyCode.DOWN ? 1 : -1;\r\n const { length } = this.dom.triggers;\r\n const newIndex = (index + length + direction) % length;\r\n\r\n this.dom.triggers[newIndex].focus();\r\n\r\n e.preventDefault();\r\n } else if (key === keyCode.END || key === keyCode.HOME) {\r\n switch (key) {\r\n case keyCode.HOME:\r\n this.dom.triggers[0].focus();\r\n break;\r\n case keyCode.END:\r\n this.dom.triggers[this.dom.triggers.length - 1].focus();\r\n break;\r\n default:\r\n break;\r\n }\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n openItem(trigger) {\r\n const content = document.getElementById(\r\n trigger.getAttribute('aria-controls')\r\n );\r\n trigger.setAttribute('aria-expanded', true);\r\n\r\n this.openPanel(content);\r\n }\r\n\r\n openPanel(panel) {\r\n const { offsetHeight } = panel.querySelector('.accordion__item-content');\r\n\r\n panel.style.visibility = 'visible';\r\n panel.setAttribute('aria-hidden', false);\r\n\r\n anime({\r\n targets: panel,\r\n height: offsetHeight,\r\n easing: 'linear',\r\n duration: 200,\r\n complete: () => {\r\n panel.style.height = 'auto';\r\n }\r\n });\r\n }\r\n\r\n closeItem(trigger) {\r\n const content = document.getElementById(\r\n trigger.getAttribute('aria-controls')\r\n );\r\n\r\n trigger.setAttribute('aria-expanded', false);\r\n\r\n this.closePanel(content);\r\n }\r\n\r\n closePanel(panel) {\r\n const { offsetHeight } = panel.querySelector('.accordion__item-content');\r\n panel.style.height = `${offsetHeight}px`;\r\n\r\n anime({\r\n targets: panel,\r\n height: 0,\r\n easing: 'linear',\r\n duration: 200,\r\n complete: () => {\r\n panel.style.height = null;\r\n panel.setAttribute('aria-hidden', true);\r\n }\r\n });\r\n }\r\n\r\n handleTransitionEnd(e) {\r\n const el = e.target;\r\n const { height } = el.style;\r\n if (height !== '0' || height !== 0) {\r\n el.style.height = 'auto';\r\n }\r\n }\r\n}\r\n\r\nexport default Accordion;\r\n"],"sourceRoot":""}