{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/modules/ucblinksContainer.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":["UcblinksContainer","Component","el","__publicField","e","id","y","introlinks","section","title","uuidv4","segmentslinks","activeIndex","introLinksSections","currentScroll","scrollDirection","index","verticalBreakpoint","link","segmentsLinksSections","getRandomValues","rnds8","rng","byteToHex","i","unsafeStringify","arr","offset","stringify","uuid","v4","options","buf","rnds"],"mappings":"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","file":"scripts/5027.5b6e80b6b8658720c941.js","sourcesContent":["import { Component } from '@verndale/core';\nimport { v4 as uuidv4 } from 'uuid';\n\nclass UcblinksContainer 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.generateIntrolinks();\n    this.generateSegmentslinks();\n    this.handleBreakpoint();\n    this.addEventListeners();\n  }\n\n  setupDefaults() {\n    this.dom = {\n      introLinksContainer: this.el.querySelector<HTMLElement>(\n        '.intro-links-menu__list'\n      ),\n      introLinksSections: this.el.querySelectorAll('.intro-section [data-anchor]'),\n      segmentsLinksContainer: this.el.querySelector<HTMLElement>(\n        '.segments-links-menu__list'\n      ),\n      segmentsLinksSections: this.el.querySelectorAll('.scroll-content [data-anchor-segments]')\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.introLinksContainer as HTMLElement).addEventListener(\n      'click',\n      this.handleIntroLinksClick.bind(this)\n    );\n    (this.dom.segmentsLinksContainer as HTMLElement).addEventListener(\n      'click',\n      this.handleSegmentsLinksClick.bind(this)\n    );\n  }\n\n  handleBreakpoint() {\n    this.offsetTop = this.breakpoint.matches ? 160 : 0;\n  }\n\n  handleScroll() {\n    this.updateActiveIntroLink();\n    //this.updateActiveSegmentsLink();\n  }\n\n  handleIntroLinksClick(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  handleSegmentsLinksClick(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  generateIntrolinks() {\n    let introlinks = '';\n    const introLinksSections = this.dom\n      .introLinksSections as NodeListOf<HTMLElement>;\n\n    introLinksSections.forEach(section => {\n      const title = section.getAttribute('data-anchor');\n      const id = uuidv4();\n      section.setAttribute('id', id);\n\n      introlinks += `<li><a href=\"#${id}\">${title}</a></li>`;\n    });\n\n    (this.dom.introLinksContainer as HTMLElement).innerHTML = introlinks;\n  }\n\n  generateSegmentslinks() {\n    let segmentslinks = '';\n    const segmentsLinksSections = this.dom\n      .segmentsLinksSections as NodeListOf<HTMLElement>;\n\n    segmentsLinksSections.forEach(section => {\n      const title = section.getAttribute('data-anchor-segments');\n      const id = uuidv4();\n      section.setAttribute('id', id);\n\n      segmentslinks += `<li><a href=\"#${id}\">${title}</a></li>`;\n    });\n\n    (this.dom.segmentsLinksContainer as HTMLElement).innerHTML = segmentslinks;\n  }\n\n  updateActiveIntroLink() {\n    let activeIndex = 0;\n    const introLinksSections = this.dom\n      .introLinksSections as NodeListOf<HTMLElement>;\n\n    const introlinks = (\n      this.dom.introLinksContainer 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    introLinksSections.forEach((section, index) => {\n      const { y } = section.getBoundingClientRect();\n      const verticalBreakpoint = Math.round(window.innerHeight / 2 - 60);\n      //(verticalBreakpoint, 'JLBreakpoint');\n      //console.log(introLinksSections, '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    introlinks.forEach((link, index) => {\n      if (index === activeIndex) {\n        link.classList.add('active');\n      } else {\n        link.classList.remove('active');\n      }\n      //console.log('links',introlinks)\n    });\n  }\n\n  updateActiveSegmentsLink() {\n    let activeIndex = 0;\n    const segmentsLinksSections = this.dom\n      .segmentsLinksSections as NodeListOf<HTMLElement>;\n\n    const segmentslinks = (\n      this.dom.segmentsLinksContainer 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    segmentsLinksSections.forEach((section, index) => {\n      const { y } = section.getBoundingClientRect();\n      const verticalBreakpoint = Math.round(window.innerHeight / 2 - 60);\n      //(verticalBreakpoint, 'JLBreakpoint');\n      //console.log(introLinksSections, '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    segmentslinks.forEach((link, index) => {\n      if (index === activeIndex) {\n        link.classList.add('active');\n      } else {\n        link.classList.remove('active');\n      }\n      //console.log('links',introlinks)\n    });\n  }\n}\n\nexport default UcblinksContainer;\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":""}