{"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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"}