{"version":3,"sources":["jsdelivr-header.js","/npm/navbar@3.0.1/navbar.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,cAAgB,gBACtB,IAAI,iBAAkB,EAEtB,IACE,MAAM,EAAO,OAAO,eAAe,CAAC,EAAG,UAAW,CAChD,IAAG,KACD,iBAAkB,GACX,KAIX,OAAO,iBAAiB,OAAQ,KAAM,EACxC,CAAE,MAAsB,CAExB,SAAS,yBAAyB,EAAS,EAAa,GACtD,MAAM,EAAQ,GAGd,IAAK,MAAM,KAAW,EAAa,CACjC,MAAM,EAAK,EAAgB,GAE3B,EAAQ,YAAY,GAEpB,EAAM,KAAK,CAAE,UAAS,WAAY,GACpC,CAEA,OAAO,CACT,CAEA,SAAS,iBAAiB,EAAO,GAC/B,SAAS,IAEP,IAAI,EAAc,KACd,EAAc,IAElB,IAAK,MAAM,KAAQ,EAAO,CACxB,MAAM,EAAU,KAAK,IAAI,EAAK,QAAQ,wBAAwB,KAG1D,EAAU,EACZ,EAAK,WAAW,UAAU,OAAO,gBAK/B,GACF,EAAY,UAAU,OAAO,eAG/B,EAAc,EAAK,WACnB,EAAc,EAChB,CAIA,EAAY,UAAU,IAAI,cAC5B,CAGA,GAA4B,iBAAjB,GAA6B,MAAM,GAC5C,OAAO,EAGT,IAAI,EAEJ,SAAS,IACP,EAAU,IACZ,CAEA,OAAO,WACD,IAKJ,IAGA,EAAU,WAAW,EAAgB,GACvC,CACF,CAEA,SAAS,kBAAkB,EAAQ,GACjC,SAAS,EAAoB,GACvB,EAAI,SAAW,GACjB,GAEJ,CAEA,GAAI,EAAO,iBACT,EAAO,iBAAiB,SAAU,IAAqB,iBAAkB,CAAE,SAAS,QAC/E,KAAI,EAAO,YAGhB,MAAM,IAAI,MAAM,kEAFhB,EAAO,YAAY,WAAY,EAGjC,CAGA,GACF,gBAEe,SAAS,QAAQ,GAC9B,IAAK,IAAY,EAAQ,cAAgB,EAAQ,gBAC/C,MAAM,IAAI,MAAM,yEAGlB,MAAM,EAAM,SAAS,cAAc,EAAQ,SAAW,OAChD,EAAU,SAAS,cAAc,MAcvC,OAJA,kBAPe,EAAQ,QAAU,SAOP,iBAJZ,yBAAyB,EAAS,EAAQ,YAAa,EAAQ,iBAI3B,EAAQ,eAE1D,EAAI,YAAY,GAET,CACT","file":"/npm/navbar@3.0.1/navbar.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/navbar@3.0.1/navbar.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const selectedClass = 'navbar-active';\nlet supportsPassive = false;\n\ntry {\n  const opts = Object.defineProperty({}, 'passive', {\n    get() {\n      supportsPassive = true;\n      return true;\n    }\n  });\n\n  window.addEventListener('test', null, opts);\n} catch { /* nothing */ }\n\nfunction createAndAppendListItems(navList, elementList, makeNavListItem) {\n  const pairs = [];\n\n  // Create list elements\n  for (const element of elementList) {\n    const li = makeNavListItem(element);\n\n    navList.appendChild(li);\n\n    pairs.push({ element, navElement: li });\n  }\n\n  return pairs;\n}\n\nfunction makeHandleScroll(pairs, debounceTime) {\n  function handleScroll() {\n    /** @type {HTMLElement|null} */\n    let frontRunner = null;\n    let closestDist = Infinity;\n\n    for (const pair of pairs) {\n      const absDist = Math.abs(pair.element.getBoundingClientRect().top);\n\n      // If this element is not the front runner for top, deactivate it.\n      if (absDist > closestDist) {\n        pair.navElement.classList.remove(selectedClass);\n        continue;\n      }\n\n      // If this is a new front runner, deactivate the previous front runner.\n      if (frontRunner) {\n        frontRunner.classList.remove(selectedClass);\n      }\n\n      frontRunner = pair.navElement;\n      closestDist = absDist;\n    }\n\n    // All other elements have been deactivated, and now the top element is known and can be set\n    // as active.\n    frontRunner.classList.add(selectedClass);\n  }\n\n  // The default behaviour is no debounce.\n  if (typeof debounceTime !== 'number' || isNaN(debounceTime)) {\n    return handleScroll;\n  }\n\n  let timeout;\n\n  function nullifyTimeout() {\n    timeout = null;\n  }\n\n  return function debouncedHandleScroll() {\n    if (timeout) {\n      return;\n    }\n\n    // Immediately use handleScroll to calculate.\n    handleScroll();\n\n    // No further calls to handleScroll until debounceTime has elapsed.\n    timeout = setTimeout(nullifyTimeout, debounceTime);\n  };\n}\n\nfunction addScrollListener(target, handleScroll) {\n  function scrollHandleWrapper(evt) {\n    if (evt.target === target) {\n      handleScroll();\n    }\n  }\n\n  if (target.addEventListener) {\n    target.addEventListener('scroll', scrollHandleWrapper, supportsPassive ? { passive: true } : false);\n  } else if (target.attachEvent) {\n    target.attachEvent('onscroll', scrollHandleWrapper);\n  } else {\n    throw new Error('This browser does not support addEventListener or attachEvent.');\n  }\n\n  // To calculate the initial active list element.\n  handleScroll();\n}\n\nexport default function makeNav(options) {\n  if (!options || !options.elementList || !options.makeNavListItem) {\n    throw new Error('Options object with elementList and makeNavListItem must be provided.');\n  }\n\n  const nav = document.createElement(options.tagName || 'nav');\n  const navList = document.createElement('ul');\n\n  // The target defaults to window.\n  const target = options.target || document;\n\n  // Create list elements\n  const pairs = createAndAppendListItems(navList, options.elementList, options.makeNavListItem);\n\n  // Whenever the window is scrolled, recalculate the active list element. Compatible with older\n  // versions of IE.\n  addScrollListener(target, makeHandleScroll(pairs, options.debounceTime));\n\n  nav.appendChild(navList);\n\n  return nav;\n}\n"]}