{"version":3,"sources":["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/accordion.js"],"names":["getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","uuid","test","byteToHex","push","toString","substr","arr","offset","arguments","length","undefined","toLowerCase","TypeError","options","buf","rnds","random","i","Module","this","dom","container","el","querySelector","image","items","querySelectorAll","triggers","breakpoint","window","matchMedia","initAccordion","addEventListener","handleKeyDown","forEach","trigger","handleClick","debounce","resizeImage","item","index","buttonGuid","uuidv4","contentGuid","content","setAttribute","getAttribute","classList","add","matches","offsetHeight","style","height","e","button","currentTarget","closeItem","openItem","target","key","which","ctrlModifier","ctrlKey","match","parentNode","contains","indexOf","direction","newIndex","focus","preventDefault","trig","document","getElementById","visibility","remove","open","element","onComplete","close","Component"],"mappings":"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","file":"40.a20c5eafa2ffc7c25456.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 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';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { open, close, debounce } from '../helpers'\r\n\r\nclass Module extends Component {\r\n  setupDefaults() {\r\n    this.dom = {\r\n      container: this.el.querySelector('.accordion__items'),\r\n      image: this.el.querySelector('.accordion__image'),\r\n      items: this.el.querySelectorAll('.accordion__item'),\r\n      triggers: this.el.querySelectorAll('.accordion__item-trigger')\r\n    };\r\n    this.breakpoint = window.matchMedia('(min-width: 768px)');\r\n\r\n    this.initAccordion();\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    if (this.dom.image) {\r\n      debounce(window.addEventListener('resize', this.resizeImage.bind(this)), 300);\r\n    }\r\n  }\r\n\r\n  initAccordion() {\r\n    this.dom.items.forEach((item, index) => {\r\n      const buttonGuid = uuidv4();\r\n      const contentGuid = uuidv4();\r\n\r\n      const trigger = item.querySelector('.accordion__item-trigger');\r\n      const content = item.querySelector('.accordion__item-content');\r\n\r\n      trigger.setAttribute('aria-expanded', false);\r\n      trigger.setAttribute('aria-controls', contentGuid);\r\n      trigger.setAttribute('id', buttonGuid);\r\n      content.setAttribute('aria-labelledby', buttonGuid);\r\n      content.setAttribute('id', contentGuid);\r\n\r\n      content.setAttribute(\r\n        'aria-hidden',\r\n        trigger.getAttribute('aria-expanded') !== 'true'\r\n      );\r\n\r\n      item.classList.add('accordion__item--collapsed');\r\n    });\r\n\r\n    if (this.dom.image && this.breakpoint.matches) {\r\n      const { offsetHeight } = this.dom.container;\r\n      this.dom.image.style.height = `${offsetHeight}px`;\r\n    }\r\n  }\r\n\r\n  resizeImage() {\r\n    if (this.breakpoint.matches) {\r\n      this.dom.image.style.height = '0'\r\n      const { offsetHeight } = this.dom.container\r\n      this.dom.image.style.height = `${offsetHeight}px`\r\n    } else {\r\n      this.dom.image.style = '';\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.target;\r\n    const key = e.which.toString();\r\n\r\n    const ctrlModifier = e.ctrlKey && key.match(/33|34/);\r\n\r\n    if (target.parentNode.classList.contains('accordion__item-trigger')) {\r\n      if (key.match(/38|40/) || ctrlModifier) {\r\n        const index = this.dom.triggers.indexOf(target);\r\n        const direction = key.match(/34|40/) ? 1 : -1;\r\n        const length = this.dom.triggers.length;\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.match(/35|36/)) {\r\n        /* eslint-disable indent */\r\n        switch (key) {\r\n          case '36':\r\n            this.dom.triggers[0].focus();\r\n            break;\r\n          case '35':\r\n            this.dom.triggers[this.dom.triggers.length - 1].focus();\r\n            break;\r\n        }\r\n        /* eslint-enable indent */\r\n        e.preventDefault();\r\n      }\r\n    }\r\n  }\r\n\r\n  openItem(trigger) {\r\n    // close all other accordions\r\n    this.dom.triggers.forEach(trig => {\r\n      if (trig.getAttribute('aria-expanded') === 'true') {\r\n        this.closeItem(trig)\r\n      }\r\n    });\r\n\r\n    const content = document.getElementById(\r\n      trigger.getAttribute('aria-controls')\r\n    );\r\n\r\n    trigger.setAttribute('aria-expanded', true);\r\n    content.style.visibility = 'visible';\r\n    trigger.parentNode.classList.add('accordion__item--expanded');\r\n    trigger.parentNode.classList.remove('accordion__item--collapsed');\r\n\r\n    open({\r\n      element: content,\r\n      onComplete: () => {\r\n        content.setAttribute('aria-hidden', false);\r\n        content.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    trigger.parentNode.classList.remove('accordion__item--expanded');\r\n    trigger.parentNode.classList.add('accordion__item--collapsed');\r\n\r\n    close({\r\n      element: content,\r\n      onComplete: () => {\r\n        content.setAttribute('aria-hidden', true);\r\n        content.style.visibility = 'hidden';\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport default Module;\r\n"],"sourceRoot":""}