{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/modules/jumplinksContainer.ts","webpack://@verndale/toolkit/./node_modules/uuid/dist/esm-browser/native.js","webpack://@verndale/toolkit/./node_modules/uuid/dist/esm-browser/rng.js","webpack://@verndale/toolkit/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://@verndale/toolkit/./node_modules/uuid/dist/esm-browser/v4.js"],"names":["JumplinksContainer","Component","el","__publicField","e","id","y","jumplinks","section","title","uuidv4","activeIndex","jumpLinksSections","currentScroll","scrollDirection","index","verticalBreakpoint","link","getRandomValues","rnds8","rng","byteToHex","i","unsafeStringify","arr","offset","stringify","uuid","v4","options","buf","rnds"],"mappings":"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","file":"scripts/8500.8959173b5b26697dc264.js","sourcesContent":["import { Component } from '@verndale/core';\nimport { v4 as uuidv4 } from 'uuid';\n\nclass JumplinksContainer extends Component {\n  breakpoint = window.matchMedia('(min-width: 1280px)');\n  offsetTop = 0;\n  lastScrollTop = 0;\n\n  constructor(el: HTMLElement) {\n    super(el);\n\n    this.generateJumplinks();\n    this.handleBreakpoint();\n    this.addEventListeners();\n  }\n\n  setupDefaults() {\n    this.dom = {\n      jumpLinksContainer: this.el.querySelector<HTMLElement>(\n        '.jump-links-menu__list'\n      ),\n      jumpLinksSections: this.el.querySelectorAll('[data-anchor]')\n    };\n  }\n\n  addEventListeners() {\n    document.addEventListener('scroll', this.handleScroll.bind(this));\n    this.breakpoint.addEventListener(\n      'change',\n      this.handleBreakpoint.bind(this)\n    );\n    (this.dom.jumpLinksContainer as HTMLElement).addEventListener(\n      'click',\n      this.handleJumpLinksClick.bind(this)\n    );\n  }\n\n  handleBreakpoint() {\n    this.offsetTop = this.breakpoint.matches ? 160 : 0;\n  }\n\n  handleScroll() {\n    this.updateActiveJumpLink();\n  }\n\n  handleJumpLinksClick(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLAnchorElement;\n    const id = target.getAttribute('href');\n\n    if (id) {\n      const el = document.getElementById(id.replace('#', ''));\n\n      if (el) {\n        //scroll to that element + offset\n        const y = el.getBoundingClientRect().top + window.scrollY - 150;\n\n        window.scrollTo({\n          top: y,\n          behavior: 'smooth'\n        });\n      }\n    }\n  }\n\n  handleActionsScrollClick(e: Event) {\n    e.preventDefault();\n\n    const target = e.currentTarget as HTMLButtonElement;\n    const id = target.dataset.scrollTo;\n\n    if (id) {\n      const el = document.getElementById(id.replace('#', ''));\n\n      if (el) {\n        //scroll to that element + offset\n        const y = el.getBoundingClientRect().top + window.scrollY - 150;\n\n        window.scrollTo({\n          top: y,\n          behavior: 'smooth'\n        });\n      }\n    }\n  }\n\n  generateJumplinks() {\n    let jumplinks = '';\n    const jumpLinksSections = this.dom\n      .jumpLinksSections as NodeListOf<HTMLElement>;\n\n    jumpLinksSections.forEach(section => {\n      const title = section.getAttribute('data-anchor');\n      const id = uuidv4();\n      section.setAttribute('id', id);\n\n      jumplinks += `<li><a href=\"#${id}\">${title}</a></li>`;\n    });\n\n    (this.dom.jumpLinksContainer as HTMLElement).innerHTML = jumplinks;\n  }\n\n  updateActiveJumpLink() {\n    let activeIndex = 0;\n    const jumpLinksSections = this.dom\n      .jumpLinksSections as NodeListOf<HTMLElement>;\n\n    const jumplinks = (\n      this.dom.jumpLinksContainer as HTMLElement\n    ).querySelectorAll('a');\n    const currentScroll = window.scrollY || document.documentElement.scrollTop;\n    const scrollDirection = currentScroll > this.lastScrollTop ? 'down' : 'up';\n    this.lastScrollTop = currentScroll <= 0 ? 0 : currentScroll;\n\n    jumpLinksSections.forEach((section, index) => {\n      const { y } = section.getBoundingClientRect();\n      const verticalBreakpoint = Math.round(window.innerHeight / 2 - 60);\n      //(verticalBreakpoint, 'JLBreakpoint');\n      //console.log(jumpLinksSections, 'section');\n\n      if (scrollDirection === 'up' && y - this.offsetTop < 0) {\n        activeIndex = index;\n      } else if (scrollDirection === 'down' && y < verticalBreakpoint) {\n        activeIndex = index;\n      }\n    });\n\n    jumplinks.forEach((link, index) => {\n      if (index === activeIndex) {\n        link.classList.add('active');\n      } else {\n        link.classList.remove('active');\n      }\n      //console.log('links',jumplinks)\n    });\n  }\n}\n\nexport default JumplinksContainer;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\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()).\nlet getRandomValues;\nconst 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.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\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}","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\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 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  return (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();\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // 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 native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const 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 (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;"],"sourceRoot":""}