{"version":3,"file":"StickyScrollSpyNav-df4d381d.js","sources":["../../node_modules/vue-use-active-scroll/dist/index.mjs","../../src/components/global/StickyScrollSpyNav.vue"],"sourcesContent":["import { customRef as e, ref as t, computed as n, onMounted as o, watch as a, unref as i, reactive as l, isRef as u, isReactive as s, onBeforeUnmount as r } from \"vue\";\nconst c = \"undefined\" == typeof window, v = 5;\nfunction d(t2, n2) {\n  return e((e2, o2) => {\n    let a2 = n2;\n    return { get: () => (e2(), a2), set(e3) {\n      a2 = t2.value ? e3 : n2, o2();\n    } };\n  });\n}\nfunction m(e2) {\n  const t2 = e2 === document.documentElement ? window.innerHeight : e2.clientHeight;\n  return { isTop: e2.scrollTop <= 2 * v, isBottom: Math.abs(e2.scrollHeight - t2 - e2.scrollTop) <= 1 };\n}\nconst f = { once: true };\nconst p = { jumpToFirst: true, jumpToLast: true, overlayHeight: 0, minWidth: 0, replaceHash: false, root: null, boundaryOffset: { toTop: 0, toBottom: 0 }, edgeOffset: { first: 100, last: -100 } };\nfunction h(e2, { root: h2 = p.root, jumpToFirst: w = p.jumpToFirst, jumpToLast: g = p.jumpToLast, overlayHeight: E = p.overlayHeight, minWidth: L = p.minWidth, replaceHash: T = p.replaceHash, boundaryOffset: { toTop: y = p.boundaryOffset.toTop, toBottom: O = p.boundaryOffset.toTop } = p.boundaryOffset, edgeOffset: { first: b = p.edgeOffset.first, last: A = p.edgeOffset.last } = p.edgeOffset } = p) {\n  let B, C = true;\n  const H = `(min-width: ${L}px)`, x = t(c || window.matchMedia(H).matches), F = l({ elements: [], top: /* @__PURE__ */ new Map(), bottom: /* @__PURE__ */ new Map() }), M = n(() => c ? null : i(h2) instanceof HTMLElement ? i(h2) : document.documentElement), R = n(() => M.value === document.documentElement), S = n(() => F.elements.map(({ id: e3 }) => e3)), j = d(x, \"\"), I = n(() => S.value.indexOf(j.value));\n  function W() {\n    return M.value.getBoundingClientRect().top - (R.value ? 0 : M.value.scrollTop);\n  }\n  function q() {\n    const t2 = [];\n    i(e2).forEach((e3) => {\n      const n3 = document.getElementById(e3);\n      n3 && t2.push(n3);\n    }), t2.sort((e3, t3) => e3.getBoundingClientRect().top - t3.getBoundingClientRect().top), F.elements = t2;\n    const n2 = W();\n    F.top.clear(), F.bottom.clear(), F.elements.forEach((e3) => {\n      const { top: t3, bottom: o2 } = e3.getBoundingClientRect();\n      F.top.set(e3.id, t3 - n2), F.bottom.set(e3.id, o2 - n2);\n    });\n  }\n  function z() {\n    if (!w && !g)\n      return false;\n    const { isBottom: e3, isTop: t2 } = m(M.value);\n    return w && t2 ? (j.value = S.value[0], true) : g && e3 ? (j.value = S.value[S.value.length - 1], true) : void 0;\n  }\n  function Y() {\n    return R.value ? W() : -M.value.scrollTop;\n  }\n  function $({ isCancel: e3 } = { isCancel: false }) {\n    let t2 = w ? S.value[0] : \"\";\n    const n2 = Y(), o2 = v + E + O;\n    if (Array.from(F.top).some(([e4, a2], i2) => !(n2 + a2 < o2 + (w || 0 !== i2 ? 0 : b)) || (t2 = e4, false)), !g && t2 === S.value[S.value.length - 1]) {\n      const e4 = Array.from(F.bottom.values())[S.value.length - 1];\n      if (n2 + e4 < o2 + A)\n        return j.value = \"\";\n    }\n    if (S.value.indexOf(t2) > S.value.indexOf(j.value) || t2 && !j.value)\n      return j.value = t2;\n    e3 && (j.value = t2);\n  }\n  function U() {\n    x.value = window.matchMedia(H).matches;\n  }\n  function k() {\n    var _a;\n    const e3 = (_a = F.elements.find(({ id: e4 }) => e4 === location.hash.slice(1))) == null ? void 0 : _a.id;\n    if (e3)\n      return j.value = e3, true;\n  }\n  function D(e3) {\n    if (x.value) {\n      if (!e3.newURL.includes(\"#\") && j.value)\n        return j.value = w ? S.value[0] : \"\";\n      k();\n    }\n  }\n  function N() {\n    B = new ResizeObserver(() => {\n      C ? C = false : (q(), requestAnimationFrame(() => {\n        z() || $();\n      }));\n    }), B.observe(M.value);\n  }\n  function P() {\n    B == null ? void 0 : B.disconnect();\n  }\n  function G() {\n    window.addEventListener(\"hashchange\", D);\n  }\n  function J() {\n    window.removeEventListener(\"hashchange\", D);\n  }\n  o(async () => {\n    window.addEventListener(\"resize\", U, { passive: true }), await new Promise((e3) => setTimeout(e3)), x.value && (q(), N(), G(), k() || z() || $());\n  }), a(x, (e3) => {\n    e3 ? (q(), N(), G(), z() || $()) : (j.value = \"\", J(), P());\n  }), a(M, q, { flush: \"post\" }), a(u(e2) || s(e2) ? e2 : () => null, q, { flush: \"post\" }), a(j, (e3) => {\n    if (T) {\n      const t2 = w ? 0 : -1, n2 = `${location.pathname}${I.value > t2 ? `#${e3}` : \"\"}`;\n      history.replaceState(history.state, \"\", n2);\n    }\n  }), r(() => {\n    window.removeEventListener(\"resize\", U), J(), P();\n  });\n  const K = function({ userIds: e3, isWindow: l2, root: u2, matchMedia: s2, onScrollUp: r2, onScrollDown: v2, onEdgeReached: p2 }) {\n    const h3 = d(s2, false), w2 = t(false), g2 = n(() => h3.value ? L2() : 0);\n    let E2 = c ? 0 : L2();\n    function L2() {\n      return l2.value ? window.scrollY : u2.value.scrollTop ?? 0;\n    }\n    function T2(e4 = 20) {\n      let t2, n2 = L2(), o2 = 0;\n      t2 = requestAnimationFrame(function a2() {\n        o2++;\n        const i2 = L2();\n        if (n2 !== i2)\n          return o2 = 0, n2 = i2, requestAnimationFrame(a2);\n        o2 === e4 ? (w2.value = true, h3.value = false, cancelAnimationFrame(t2)) : requestAnimationFrame(a2);\n      });\n    }\n    function y2({ prevY: e4, isCancel: t2 = false }) {\n      const n2 = L2();\n      return n2 < e4 ? r2() : v2({ isCancel: t2 }), n2;\n    }\n    function O2() {\n      h3.value || (E2 = y2({ prevY: E2 }), p2());\n    }\n    function b2() {\n      h3.value = false;\n    }\n    function A2(e4) {\n      \"Space\" === e4.code && b2();\n    }\n    function B2(e4) {\n      const t2 = \"A\" === e4.target.tagName;\n      if (CSS.supports(\"-moz-appearance\", \"none\") && !t2) {\n        const { isBottom: e5, isTop: t3 } = m(u2.value);\n        t3 || e5 || (b2(), y2({ prevY: g2.value, isCancel: true }));\n      }\n    }\n    return o(() => {\n      s2.value && location.hash ? T2(10) : w2.value = true;\n    }), a([w2, s2, u2, e3], ([e4, t2, n2, o2], a2, u3) => {\n      var _a;\n      const s3 = l2.value ? document : n2, r3 = s3 && e4 && t2 && ((_a = i(o2)) == null ? void 0 : _a.length) > 0;\n      r3 && s3.addEventListener(\"scroll\", O2, { passive: true }), u3(() => {\n        r3 && s3.removeEventListener(\"scroll\", O2);\n      });\n    }, { deep: true }), a(h3, (t2, n2, o2) => {\n      var _a;\n      const a2 = l2.value ? document : u2.value, s3 = ((_a = i(e3)) == null ? void 0 : _a.length) > 0;\n      t2 && s3 && (a2.addEventListener(\"wheel\", b2, f), a2.addEventListener(\"touchmove\", b2, f), a2.addEventListener(\"scroll\", T2, f), a2.addEventListener(\"keydown\", A2, f), a2.addEventListener(\"pointerdown\", B2)), o2(() => {\n        t2 && s3 && (a2.removeEventListener(\"wheel\", b2), a2.removeEventListener(\"touchmove\", b2), a2.removeEventListener(\"scroll\", T2), a2.removeEventListener(\"keydown\", A2), a2.removeEventListener(\"pointerdown\", B2));\n      });\n    }, { flush: \"sync\" }), () => h3.value = true;\n  }({ userIds: e2, isWindow: R, root: M, matchMedia: x, onScrollUp: function() {\n    let e3 = g ? S.value[S.value.length - 1] : \"\";\n    const t2 = Y(), n2 = v + E + y;\n    return Array.from(F.bottom).some(([o2, a2], i2) => {\n      const l2 = g || i2 !== S.value.length - 1 ? 0 : A;\n      if (t2 + a2 > n2 + l2)\n        return e3 = o2, true;\n    }), !w && e3 === S.value[0] && t2 + F.top.values().next().value > n2 + b ? j.value = \"\" : S.value.indexOf(e3) < S.value.indexOf(j.value) || e3 && !j.value ? j.value = e3 : void 0;\n  }, onScrollDown: $, onEdgeReached: z });\n  return { isActive: (e3) => e3 === j.value, setActive: (e3) => {\n    j.value = e3, K();\n  }, activeId: j, activeIndex: I };\n}\nexport {\n  h as useActive\n};\n","<template>\r\n  <div class=\"sticky-wrapper\">\r\n    <div class=\"qmove-container\">\r\n      <ul class=\"scrollspy-bar\" ref=\"scrollSpyBarRef\">\r\n        <li v-for=\"navItem in navItems\" :key=\"navItem.id\" :data-id=\"navItem.id\" class=\"scrollspy-nav-item\" @click=\"(e) => scrollTo(navItem.id, navItem.label)\">\r\n          <a :href=\"'#' + navItem.id\" class=\"no-underline scrollspy-nav-item__link\"> {{ navItem.label }}</a>\r\n        </li>\r\n      </ul>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Slot in content for each nav item -->\r\n  <slot>\r\n    <div v-for=\"navData in navItems\" :key=\"navData.id\" :id=\"navData.id\" class=\"scrollspy-section\">\r\n      <h2>{{ navData.label }}</h2>\r\n      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>\r\n    </div>\r\n  </slot>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ref, computed, watch, onMounted, onUnmounted } from 'vue';\r\nimport { useActive } from 'vue-use-active-scroll';\r\nimport animateScrollTo from 'animated-scroll-to';\r\nimport { useAnalytics } from '../../composables/useAnalytics';\r\nimport { useUrlBuilder } from '../../composables/useUrlBuilder';\r\nimport { AnalyticsEvents, AnalyticsEventTypes } from '../../foundation/enums/AnalyticsEvents';\r\n\r\ntype NavItemType = {\r\n  id: string;\r\n  label: string;\r\n};\r\n\r\nconst props = defineProps<{\r\n  navItems: NavItemType[];\r\n  carData: any;\r\n}>();\r\n\r\nconst analytics = useAnalytics();\r\nconst initialOffset = ref(0);\r\nconst targets = computed(() => [...props.navItems].map(({ id }) => id));\r\nconst { setActive, activeId } = useActive(targets, { boundaryOffset: { toBottom: 0 } });\r\nconst scrollSpyBarRef = ref<HTMLElement | null>(null);\r\nconst SCROLLSPY_OFFSET = 200;\r\n\r\n/** Push data to data layer for analytics */\r\nfunction pushToAnalytics(id: string) {\r\n  try {\r\n    analytics.push(AnalyticsEvents.NavigationInPageTabClick, {\r\n      eventInfo: {\r\n        navigation: {\r\n          linkClicks: 1,\r\n          name: id,\r\n          type: AnalyticsEventTypes.Tabs,\r\n          makeName: props.carData.Make,\r\n          modelName: props.carData.Model,\r\n          badgeName: props.carData.Trim,\r\n          year: `${props.carData.Year_low} - ${props.carData.Year_high}`,\r\n          bodyType: props.carData.Body_type,\r\n          engineType: props.carData.Overall_EngineType,\r\n          URL: useUrlBuilder().getCarDetailsUrl(\r\n            props.carData.Vehicle_UID,\r\n            `${props.carData.Year_low} - ${props.carData.Year_high}`,\r\n            props.carData.Make,\r\n            props.carData.Model\r\n          ),\r\n        },\r\n      },\r\n    });\r\n  } catch (error) {\r\n    console.warn('Fail to push data to analytics', error);\r\n  }\r\n}\r\n\r\n/**\r\n * Scroll to the correct element on the page via 'id'\r\n * @param id\r\n */\r\nfunction scrollTo(id: string, label: string) {\r\n  setActive(id);\r\n  const elementToScrollTo = document.getElementById(id);\r\n  pushToAnalytics(label);\r\n\r\n  if (elementToScrollTo) {\r\n    animateScrollTo(elementToScrollTo as HTMLElement, {\r\n      minDuration: 300,\r\n      maxDuration: 600,\r\n      verticalOffset: -100,\r\n    });\r\n  }\r\n}\r\n\r\n// Bit hacky, but the useMonitorElementVisibility hook just wasn't cutting it.\r\n// This allows the sticky header to stick at the correct point on the page.\r\n// watch(activeId, (val) => (isVisible.value = Boolean(val)), { immediate: true });\r\n\r\n// If on mobile, scroll to the active nav element otherwise it is active but out of view.\r\n// For example, if I scroll down the page far enough, the active scroll spy element won't\r\n// be visible because it's too far right in the viewport.\r\nwatch(\r\n  activeId,\r\n  (val) => {\r\n    const activeElement = scrollSpyBarRef.value?.querySelector('.active');\r\n\r\n    if (activeElement) {\r\n      activeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\r\n    }\r\n  },\r\n  { immediate: true, flush: 'post' }\r\n);\r\n\r\nonMounted(() => {\r\n  const stickyEl = document.querySelector('.sticky-wrapper');\r\n\r\n  if (stickyEl !== null) {\r\n    initialOffset.value = (stickyEl as HTMLElement).offsetTop;\r\n  }\r\n\r\n  window.addEventListener('scroll', handleStickyScroll);\r\n});\r\n\r\nonUnmounted(() => {\r\n  window.removeEventListener('scroll', handleStickyScroll);\r\n});\r\n\r\n/**\r\n * Sticky scroll implementation has to be vanilla JS so that\r\n * it works outside the Vue app for SXA components.\r\n */\r\nfunction handleStickyScroll() {\r\n  const navbar = document.querySelector('.sticky-wrapper');\r\n\r\n  if (navbar !== null) {\r\n    if (window.pageYOffset >= initialOffset.value) {\r\n      navbar.classList.add('sticky');\r\n    } else {\r\n      navbar.classList.remove('sticky');\r\n    }\r\n  }\r\n\r\n  handleActiveMenu();\r\n}\r\n\r\nfunction handleActiveMenu() {\r\n  const menuLinks = document.querySelectorAll('.sticky-wrapper .scrollspy-nav-item');\r\n  const sectionsById: any = document.querySelectorAll('[data-scrollspy-id]');\r\n  const menuLinksArray: any[] = Array.from(menuLinks);\r\n\r\n  menuLinksArray.forEach((menu) => {\r\n    menu.classList.remove('active');\r\n  });\r\n\r\n  sectionsById.forEach((item: any) => {\r\n    const offset = SCROLLSPY_OFFSET;\r\n    const scroll = window.pageYOffset;\r\n\r\n    const clamp = (value: number) => Math.max(0, value);\r\n    const isBetween = (value: number, floor: number, ceil: number) => value >= floor && value <= ceil;\r\n\r\n    const sectionPositions = Array.from(sectionsById).map((element: any) => {\r\n      if (!element) return { element, top: -1, bottom: -1 };\r\n\r\n      const rect = element.getBoundingClientRect();\r\n      const top = clamp(rect.top + scroll - offset);\r\n      const bottom = clamp(rect.bottom + scroll - offset);\r\n\r\n      return {\r\n        id: element.id,\r\n        top,\r\n        bottom,\r\n      };\r\n    });\r\n\r\n    const matchingSection = sectionPositions.find(({ top, bottom }) => isBetween(scroll, top, bottom));\r\n\r\n    if (matchingSection?.id) {\r\n      const matchingNavItem = menuLinksArray.find((link) => link.dataset.id === matchingSection.id);\r\n      matchingNavItem.classList.add('active');\r\n    }\r\n  });\r\n}\r\n</script>\r\n<style lang=\"scss\" scoped>\r\n.sticky-wrapper {\r\n  width: 100vw;\r\n  z-index: 1000;\r\n  background: #fff;\r\n  margin-left: calc(-50vw + 50%);\r\n  box-shadow: inset 0 -5px 0 0 $racq-pale-blue-border;\r\n}\r\n\r\n.sticky {\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n}\r\n\r\n.scrollspy-bar {\r\n  background: #ffffff;\r\n  box-shadow: inset 0 -5px 0 0 $racq-pale-blue-border;\r\n  display: flex;\r\n  align-items: center;\r\n  padding: 0;\r\n  margin: 0;\r\n  list-style: none;\r\n  padding: 0 1rem;\r\n  overflow-x: scroll;\r\n\r\n  @media (min-width: $breakpoint-xl) {\r\n    overflow-x: hidden;\r\n  }\r\n\r\n  @media (min-width: $breakpoint-xxl) {\r\n    padding: 0;\r\n  }\r\n\r\n  li:hover {\r\n    background: $racq-pale-blue;\r\n  }\r\n}\r\n\r\n.scrollspy-nav-item {\r\n  padding: 1.6rem;\r\n  text-decoration: none;\r\n  font-weight: bold;\r\n  min-width: fit-content;\r\n  position: relative;\r\n  cursor: pointer;\r\n\r\n  &__link {\r\n    color: $racq-cool-grey;\r\n    text-transform: lowercase;\r\n  }\r\n\r\n  &::first-letter {\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  &.active {\r\n    box-shadow: inset 0 -5px 0 0 $racq-sky-blue;\r\n  }\r\n}\r\n</style>\r\n"],"names":["c","v","d","t2","n2","e","e2","o2","a2","e3","m","f","p","h","h2","w","g","E","L","T","y","O","b","A","B","C","H","x","t","F","l","M","n","i","R","S","j","I","W","q","n3","t3","z","Y","$","e4","i2","U","k","_a","D","N","P","G","J","o","a","u","s","r","K","l2","u2","s2","r2","v2","p2","h3","w2","g2","L2","E2","T2","y2","O2","b2","A2","B2","e5","u3","s3","r3","analytics","useAnalytics","initialOffset","ref","targets","computed","props","id","setActive","activeId","useActive","scrollSpyBarRef","SCROLLSPY_OFFSET","pushToAnalytics","AnalyticsEvents","AnalyticsEventTypes","useUrlBuilder","error","scrollTo","label","elementToScrollTo","animateScrollTo","watch","val","activeElement","onMounted","stickyEl","handleStickyScroll","onUnmounted","navbar","handleActiveMenu","menuLinks","sectionsById","menuLinksArray","menu","item","offset","scroll","clamp","value","isBetween","floor","ceil","matchingSection","element","rect","top","bottom","link"],"mappings":"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"}