{"version":3,"file":"buying-online.b88d466eaf15162862c4.bundle.js","mappings":"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","sources":["webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/faq-content-service-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/myaccount-cookie-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/rvc-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/search-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/small-batch-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/Dialog/Dialog.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/Dialog/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/ErrorBoundary.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/focusOnActiveCta.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/TouchController.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/leaveSlider.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/getKeyPressHandler.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/helpers/getFocusHandler.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/carousel/index.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/Carousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/ReturnVisitorCarousel.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/carousels/home-base-hero-carousel/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/instant-offers/utils/format.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/components/snack-bar/SnackBar.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/context/FBSContext.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/context/localCarsStore.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/events/EventChannel.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/events/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/MiniHomebaseSlideCTA.tsx","webpack://CarMax.Online.Home.Micro.Site/./node_modules/gsap/ScrollTrigger.js","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/utils/utils.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/PageHeader.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/Hero.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/vendor/gsap/DrawSVGPlugin.js","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/Steps.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/LoveItOrReturnIt.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/faq/faq/components/QuestionLink/QuestionLink.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/FAQ.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/MiniHomebase.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/MiniHomebasePusher.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/components/MiniHomebaseContainer.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/utils/savedVehicles.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/utils/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/index.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/buying-online/utils/svgs.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/utils/allPriorUses.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/utils/additionalVehicleInfoHelper.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/VehicleDetailsDialog.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/CarTileWrapper.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/getCarImages.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/car-tile/carTileUtils.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/hero/tile-kebab-menu/TileKebabMenuItemSnackbar.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/constants.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/helpers.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/savedVehicles.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/svg.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/pages/home/utilities/viewedVehiclesTileBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/analytics.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/cookieHelper.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/icons.tsx","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/onDomContentLoaded.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/vehicleTileBuilder.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/api/vehicle-recommendations-api.ts","webpack://CarMax.Online.Home.Micro.Site/./Client/ts/utilities/visitor-cookie.ts"],"sourcesContent":["import { FaqSection } from './types/faq-content-api';\r\n\r\nconst emptySections: FaqSection[] | PromiseLike<FaqSection[]> = [];\r\n\r\nexport async function getFaqSections(): Promise<FaqSection[]> {\r\n    try {\r\n        const url = `/home/api/content/faq-section`;\r\n        const res = await fetch(url);\r\n        return await res.json();\r\n    } catch (error) {\r\n        return Promise.resolve(emptySections);\r\n    }\r\n}\r\n","import { CookieValidateResponse } from './types/myaccount-cookie';\r\n\r\ndeclare global {\r\n    interface Window {\r\n        kmxDevTools: {\r\n            ciamId: string;\r\n            expireTime: string;\r\n        };\r\n    }\r\n}\r\n\r\nexport async function getCiamId(): Promise<string | null> {\r\n    if (window?.kmxDevTools?.ciamId) {\r\n        return Promise.resolve(window.kmxDevTools.ciamId);\r\n    }\r\n\r\n        return await fetch('/myaccount/token/svc/cookie/validate/low', {\r\n            credentials: 'include'\r\n        })\r\n            .then(response => response.json())\r\n            .then((data: CookieValidateResponse) => {\r\n                if (data.ciamId !== null && data.expireTime !== null) {\r\n                    const expireTime = new Date(data.expireTime);\r\n                    const currentDate = new Date();\r\n                    if (expireTime.getTime() > currentDate.getTime()) {\r\n                        return data.ciamId;\r\n                    }\r\n                }\r\n                return null;\r\n            })\r\n            .catch(() => null);\r\n}\r\n","import { Vehicle } from './types';\r\n\r\ninterface RequestParams {\r\n    stockNumberList?: number[];\r\n}\r\n\r\nexport async function getVehiclesFromRVC(params: RequestParams): Promise<Vehicle[]> {\r\n    try {\r\n        const urlsToFetch: string[] = [];\r\n        if (params.stockNumberList && params.stockNumberList.length > 0) {\r\n            params.stockNumberList.forEach((stockNumber) => {\r\n                urlsToFetch.push(`home/api/vehicles/catalog?StockNumber=${stockNumber}`);\r\n            });\r\n        }\r\n        const fetchPromises = urlsToFetch.map((url) => fetch(url).then((response) => response.json()));\r\n        const response = await Promise.all(fetchPromises);\r\n        if (response.length > 0) {\r\n            return response;\r\n        } else {\r\n            return [];\r\n        }\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n","import axios from 'axios';\r\nimport { SearchApiResponse, Vehicle } from './types';\r\n\r\nexport function getVehicles(params: {\r\n    stockNumberList?: number[];\r\n    take?: number;\r\n    scoringProfile?: string;\r\n    transferDestinationStoreId?: string;\r\n    zipCode?: string;\r\n    radiusInMiles?: number;\r\n    storeId?: string;\r\n}): Promise<Vehicle[]> {\r\n    try {\r\n        let url = '/home/api/search';\r\n        const queryParamsArray = [];\r\n\r\n        queryParamsArray.push('isSaleable=true');\r\n\r\n        if (params.stockNumberList && params.stockNumberList.length > 0) {\r\n            params.stockNumberList.map((val) => {\r\n                queryParamsArray.push(`stockNumbers=${val}`);\r\n            });\r\n        }\r\n\r\n        if (params.take) {\r\n            queryParamsArray.push(`take=${params.take}`);\r\n        }\r\n\r\n        if (params.scoringProfile) {\r\n            queryParamsArray.push(`scoringProfile=${params.scoringProfile}`);\r\n        }\r\n\r\n        if (params.transferDestinationStoreId) {\r\n            queryParamsArray.push(`transferDestinationStoreId=${params.transferDestinationStoreId}`);\r\n        }\r\n\r\n        if (params.storeId) {\r\n            queryParamsArray.push(`storeId=${params.storeId}`);\r\n        }\r\n\r\n        if (params.zipCode) {\r\n            queryParamsArray.push(`zipcode=${params.zipCode}`);\r\n        }\r\n\r\n        if (params.radiusInMiles) {\r\n            queryParamsArray.push(`radiusInMiles=${params.radiusInMiles}`);\r\n        }\r\n\r\n        if (queryParamsArray.length) {\r\n            url += `?${queryParamsArray.join('&')}`;\r\n        }\r\n\r\n        return axios\r\n            .get<SearchApiResponse>(url)\r\n            .then((response) => {\r\n                if (response && response.data && response.data.items && response.data.items.length > 0) {\r\n                    return response.data.items;\r\n                }\r\n                return [];\r\n            })\r\n            .catch(() => []);\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n\r\ninterface getVehiclesTotalCountParams {\r\n    zipCode?: string;\r\n    radiusInMiles?: number;\r\n    storeId?: string;\r\n    isInStoreOnly?: boolean;\r\n    hasPriceDrop?: boolean;\r\n    hasFreeShipping?: boolean;\r\n}\r\n\r\nexport async function getVehiclesTotalCount({\r\n    zipCode,\r\n    radiusInMiles,\r\n    storeId,\r\n    isInStoreOnly,\r\n    hasPriceDrop,\r\n    hasFreeShipping,\r\n}: getVehiclesTotalCountParams): Promise<number> {\r\n    try {\r\n        const baseUrl = '/home/api/search';\r\n\r\n        const params = new URLSearchParams();\r\n\r\n        Object.entries({\r\n            isSaleable: true,\r\n            resultsOnly: true,\r\n            take: 0,\r\n            zipCode,\r\n            radiusInMiles,\r\n            storeId,\r\n            isInStoreOnly,\r\n            hasPriceDrop,\r\n            hasFreeShipping,\r\n        }).forEach(([field, value]) => {\r\n            if (value !== undefined && value !== null) {\r\n                params.append(field, value.toString());\r\n            }\r\n        });\r\n\r\n        const response = await fetch(`${baseUrl}?${params}`);\r\n\r\n        if (!response.ok) {\r\n            return 0;\r\n        }\r\n\r\n        const data: SearchApiResponse = await response.json();\r\n        return data?.totalCount;\r\n    } catch {\r\n        return Promise.resolve(0);\r\n    }\r\n}\r\n","import { KmxVisitorObject } from '../utilities/cookieHelper';\r\nimport { IFBSDecision } from './types/finance';\r\n\r\nexport const emptyFBSResponse: IFBSDecision[] = [\r\n    {\r\n        fbsDecision: {\r\n            expirationDateFormatted: '',\r\n            downPayment: 0,\r\n            isSoftPull: true,\r\n            decision: '',\r\n            terms: [],\r\n            conditionAmount: 0,\r\n            conditionAmountRounded: 0,\r\n            lenderName: '',\r\n            totalFinanceAmount: 0,\r\n            stateAbbreviation: '',\r\n            taxesAndFeesRounded: 0,\r\n        },\r\n        stockNumber: 0,\r\n        taxesAndFeesRounded: 0,\r\n        applicationUrl: '',\r\n    },\r\n];\r\n\r\nexport async function getSmallBatchDecisions(\r\n    ciamId: string,\r\n    stockNumbers: number[],\r\n    storeId?: string\r\n): Promise<IFBSDecision[]> {\r\n    const stockNumbersString = stockNumbers.toString().replace(/,/g, '&stockNumbers=');\r\n    let storeIdToRequest = storeId;\r\n\r\n    if (!storeId) {\r\n        const { StoreId } = KmxVisitorObject();\r\n        storeIdToRequest = StoreId;\r\n    }\r\n\r\n    if (ciamId.length > 0 && stockNumbers.length > 0) {\r\n        return await fetch(\r\n            `/home/api/finance/smallbatch?ciamId=${ciamId}&stockNumbers=${stockNumbersString}&storeId=${storeIdToRequest}`,\r\n            {\r\n                credentials: 'include',\r\n            }\r\n        )\r\n            .then((response) => response.json())\r\n            .then((data: IFBSDecision[]) => {\r\n                return data;\r\n            })\r\n            .catch((err) => {\r\n                console.log(err);\r\n                return emptyFBSResponse;\r\n            });\r\n    } else {\r\n        return Promise.resolve(emptyFBSResponse);\r\n    }\r\n}\r\n","import { useEffect, useRef } from 'react';\r\nimport Icons from '../../utilities/icons';\r\nimport './dialog.scss';\r\n\r\nexport interface IDialogProps {\r\n    children: React.ReactChild;\r\n    isVisible: boolean;\r\n    onClose: () => void;\r\n}\r\n\r\nconst Dialog = (props: IDialogProps) => {\r\n    const dialogRef = useRef<HTMLDialogElement>(null);\r\n    const { children, isVisible, onClose } = props;\r\n\r\n    // animates-out the dialog before the native dialog api removes it from the DOM\r\n    const handleClose = (dialog: HTMLDialogElement) => {\r\n        const fadeOutCSSClass = `hp-dialog--fade-out`;\r\n        dialog.classList.add(fadeOutCSSClass);\r\n        dialog.addEventListener('transitionend', () => {\r\n            dialog.close();\r\n            dialog.classList.remove(fadeOutCSSClass);\r\n        });\r\n    };\r\n\r\n    useEffect(() => {\r\n        const dialog = dialogRef.current;\r\n\r\n        // watch for change in visibility from parent.\r\n        const closeIfBackgroundClicked = (e: MouseEvent, dialog: HTMLDialogElement) => {\r\n            const rect = dialog.getBoundingClientRect();\r\n            const isInDialog =\r\n                rect.top <= e.clientY &&\r\n                e.clientY <= rect.top + rect.height &&\r\n                rect.left <= e.clientX &&\r\n                e.clientX <= rect.left + rect.width;\r\n            if (!isInDialog) {\r\n                handleClose(dialog);\r\n            }\r\n        };\r\n\r\n        dialog?.querySelector('.hp-dialog__btn-close')?.addEventListener('click', () => {\r\n            handleClose(dialog);\r\n        });\r\n\r\n        // catch native dialog close event and update parent's state\r\n        dialog?.addEventListener('close', () => {\r\n            onClose();\r\n        });\r\n\r\n        // catch user click on backdrop\r\n        dialog?.addEventListener('click', (e: MouseEvent) => {\r\n            closeIfBackgroundClicked(e, dialog);\r\n        });\r\n\r\n        // parent state governs visibility\r\n        if (isVisible) {\r\n            dialog?.showModal();\r\n        }\r\n\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [isVisible]);\r\n\r\n    if (!isVisible) return <></>;\r\n\r\n    return (\r\n        isVisible && (\r\n            <dialog data-testid=\"dialog\" className=\"hp-dialog\" ref={dialogRef}>\r\n                <button\r\n                    data-testid=\"dialog__btn-close\"\r\n                    type=\"button\"\r\n                    className=\"hp-dialog__btn-close\"\r\n                    aria-label=\"Close Popover\"\r\n                >\r\n                    {Icons.close}\r\n                </button>\r\n                <div className=\"hp-dialog__content\">{children}</div>\r\n            </dialog>\r\n        )\r\n    );\r\n};\r\n\r\nexport default Dialog;\r\n","import Dialog from './Dialog';\r\nexport default Dialog;\r\n","import * as React from 'react';\r\n\r\ninterface IErrorBoundaryProps {}\r\n\r\ninterface IErrorBoundaryState {\r\n    hasError: boolean;\r\n}\r\n\r\nexport default class ErrorBoundary extends React.Component<IErrorBoundaryProps, IErrorBoundaryState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.state = { hasError: false };\r\n    }\r\n\r\n    static getDerivedStateFromError(error: any) {\r\n        return { hasError: true };\r\n    }\r\n\r\n    render() {\r\n        return this.state.hasError || React.Children.count(this.props.children) === 0 ? null : this.props.children;\r\n    }\r\n}\r\n","export const autoHeight = true;\r\nexport const autoplayButton = false;\r\nexport const autoplayButtonOutput = false;\r\nexport const autoplayHoverPause = true;\r\nexport const autoplayTimeout = 5000;\r\nexport const mouseDrag = true;\r\nexport const slideBy = 'page';\r\nexport const speed = 750;\r\nexport const swipeAngle = 40;\r\n","import { TinySliderInstance } from 'tiny-slider/src/tiny-slider';\r\n\r\nconst focusOnActiveCta = (tinySlider: TinySliderInstance) => {\r\n    const activeEl = document.activeElement as HTMLElement | null;\r\n    if (activeEl) {\r\n        activeEl.focus();\r\n    }\r\n};\r\n\r\nexport default focusOnActiveCta;\r\n","import { swipeAngle } from '../constants';\r\n\r\nclass TouchController {\r\n    private startPosition: { x: number; y: number };\r\n    constructor() {\r\n        this.startPosition = { x: 0, y: 0 };\r\n    }\r\n\r\n    public start = (event: TouchEvent) => {\r\n        const { clientX, clientY } = event.touches[0];\r\n        this.startPosition.x = clientX;\r\n        this.startPosition.y = clientY;\r\n    };\r\n\r\n    public move = (event: TouchEvent) => {\r\n        const { clientX, clientY } = event.touches[0];\r\n        const currentX = clientX;\r\n        const currentY = clientY;\r\n        const degree = this.toDegree(currentY - this.startPosition.y, currentX - this.startPosition.x);\r\n        const direction = this.getTouchDirection(degree);\r\n        if (direction === 'horizontal' && event.cancelable) {\r\n            event.preventDefault();\r\n        }\r\n    };\r\n\r\n    private toDegree(y: number, x: number): number {\r\n        return Math.atan2(y, x) * (180 / Math.PI);\r\n    }\r\n\r\n    private getTouchDirection(angle: number): string {\r\n        const gap = Math.abs(90 - Math.abs(angle));\r\n\r\n        if (gap <= swipeAngle) {\r\n            return 'vertical';\r\n        }\r\n\r\n        return 'horizontal';\r\n    }\r\n}\r\n\r\nexport default TouchController;\r\n","import getFocusHandler from './getFocusHandler';\r\nimport getKeyPressHandler from './getKeyPressHandler';\r\nimport leaveSlider from './leaveSlider';\r\nimport TouchController from './TouchController';\r\nimport { AddEventHandlers } from './types';\r\n\r\nconst addEventHandlers = ({ tinySlider, nextFocus, prevFocus }: AddEventHandlers) => {\r\n    const leaveCarousel = leaveSlider({ tinySlider, nextFocus, prevFocus });\r\n    const keyHandler: (event: Event) => void = getKeyPressHandler({ tinySlider, leaveCarousel });\r\n    const focusHandler: (event: Event) => void = getFocusHandler(tinySlider);\r\n    if (!tinySlider || !tinySlider.getInfo) {\r\n        return () => null;\r\n    }\r\n    const { container } = tinySlider.getInfo();\r\n    const carousel = container.offsetParent;\r\n    if (!carousel) {\r\n        return () => null;\r\n    }\r\n\r\n    const touch = new TouchController();\r\n\r\n    carousel.addEventListener('keydown', keyHandler);\r\n    carousel.addEventListener('focusin', focusHandler);\r\n    container.addEventListener('touchstart', touch.start, { passive: false });\r\n    container.addEventListener('touchmove', touch.move, { passive: false });\r\n    const removeEventHandlers = () => {\r\n        carousel.removeEventListener('keydown', keyHandler);\r\n        carousel.removeEventListener('focusin', focusHandler);\r\n        container.removeEventListener('touchstart', touch.start);\r\n        container.removeEventListener('touchmove', touch.move);\r\n    };\r\n    return removeEventHandlers;\r\n};\r\n\r\nexport default addEventHandlers;\r\n","import { AddEventHandlers } from './types';\r\n\r\nconst leaveSlider = ({\r\n    tinySlider,\r\n    nextFocus,\r\n    prevFocus,\r\n}: AddEventHandlers): ((direction: string) => void) => direction => {\r\n    const preCarousel = document.querySelector(prevFocus) as HTMLElement | null;\r\n    const postCarousel = document.querySelector(nextFocus) as HTMLElement | null;\r\n    if (direction === 'back' && preCarousel) {\r\n        preCarousel.focus();\r\n        tinySlider.play();\r\n    } else if (direction === 'forward' && postCarousel) {\r\n        postCarousel.focus();\r\n        tinySlider.play();\r\n    }\r\n};\r\n\r\nexport default leaveSlider;\r\n","import focusOnActiveCta from './focusOnActiveCta';\r\nimport { KeyPressHandler } from './types';\r\n\r\nconst getFocusedSlideIndex = (element: HTMLElement, id: string): number => {\r\n    let parent = element.parentNode as HTMLElement;\r\n    while (parent && !parent.id?.includes(id)) {\r\n        parent = parent.parentNode as HTMLElement;\r\n    }\r\n\r\n    // Extract index from the parent's id\r\n    const index = parent?.id.match(/(\\d+)$/)?.[1] || '0';\r\n\r\n    return parseInt(index);\r\n};\r\n\r\nconst getKeyPressHandler = ({ tinySlider, leaveCarousel }: KeyPressHandler): ((event: Event) => void) => (\r\n    event: Event\r\n): void => {\r\n    tinySlider.pause();\r\n    const { key, shiftKey } = event as KeyboardEvent;\r\n    const activeEl = document.activeElement as HTMLElement | null;\r\n\r\n    const ignoreSlideInteractiveContent = (): boolean => {\r\n        if (\r\n            activeEl &&\r\n            activeEl.classList &&\r\n            activeEl.classList.length > 0 &&\r\n            activeEl.classList.contains('carousel-slide-interactive-content')\r\n        ) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    switch (key) {\r\n        case 'Enter':\r\n        case ' ':\r\n        case 'Spacebar':\r\n            if (ignoreSlideInteractiveContent()) break;\r\n            if (activeEl) activeEl.click();\r\n            event.preventDefault();\r\n            break;\r\n        case 'Escape':\r\n        case 'Esc':\r\n            leaveCarousel('forward');\r\n            break;\r\n        case 'ArrowLeft':\r\n        case 'Left':\r\n            tinySlider.goTo('prev');\r\n            focusOnActiveCta(tinySlider);\r\n            break;\r\n        case 'ArrowRight':\r\n        case 'Right':\r\n            tinySlider.goTo('next');\r\n            focusOnActiveCta(tinySlider);\r\n            break;\r\n        case 'ArrowUp':\r\n        case 'Up':\r\n            if (ignoreSlideInteractiveContent()) break;\r\n            leaveCarousel('back');\r\n            break;\r\n        case 'ArrowDown':\r\n        case 'Down':\r\n            if (ignoreSlideInteractiveContent()) break;\r\n            leaveCarousel('forward');\r\n            break;\r\n        case 'Tab':\r\n            if (activeEl) {\r\n                // Get the closest parent that contains the slide index in its element's id\r\n                const indexString = getFocusedSlideIndex(activeEl, '-carousel-slides-item');\r\n\r\n                if (indexString !== null) {\r\n                    const currentIndex = indexString;\r\n                    if (shiftKey) {\r\n                        tinySlider.goTo(currentIndex - 1);\r\n                    } else {\r\n                        tinySlider.goTo(currentIndex);\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        default:\r\n    }\r\n};\r\n\r\nexport default getKeyPressHandler;\r\n","import focusOnActiveCta from './focusOnActiveCta';\r\nimport { TinySliderInstance } from 'tiny-slider/src/tiny-slider';\r\n\r\nconst getFocusHandler = (tinySlider: TinySliderInstance) => (event: Event) => {\r\n    event.preventDefault();\r\n    focusOnActiveCta(tinySlider);\r\n};\r\n\r\nexport default getFocusHandler;\r\n","import { tns, TinySliderInstance, TinySliderSettings } from 'tiny-slider/src/tiny-slider';\r\nimport * as constants from './constants';\r\nimport addEventHandlers from './helpers';\r\n// no type support for tiny-slider, so use as js module for now\r\n\r\ninterface ICarousel extends TinySliderSettings {\r\n    nextFocus: string;\r\n    prevFocus: string;\r\n}\r\n\r\nexport default function initCarousel({\r\n    autoplay = false,\r\n    container,\r\n    fixedWidth = false,\r\n    autoWidth,\r\n    autoHeight,\r\n    items = 1,\r\n    loop = false,\r\n    gutter = 0,\r\n    navContainer,\r\n    nextButton = false,\r\n    nextFocus = '',\r\n    prevButton = false,\r\n    prevFocus = '',\r\n    responsive = false,\r\n    center = false,\r\n}: ICarousel): { tinySlider: TinySliderInstance; removeEventHandlers: () => void } {\r\n    const tinySlider = tns({\r\n        autoplay,\r\n        container, // '.carousel__slides'\r\n        fixedWidth,\r\n        autoWidth,\r\n        items,\r\n        loop,\r\n        navContainer, // '.carousel__nav'\r\n        nextButton,\r\n        prevButton,\r\n        controls: !!nextButton,\r\n        edgePadding: fixedWidth ? 8 : 0,\r\n        nav: !!navContainer,\r\n        responsive,\r\n        gutter: gutter,\r\n        center,\r\n        preventScrollOnTouch: 'auto',\r\n        ...constants,\r\n    });\r\n    const removeEventHandlers = addEventHandlers({ tinySlider, nextFocus, prevFocus });\r\n    return { tinySlider, removeEventHandlers };\r\n}\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\nimport initCarousel from '../carousel/index';\r\nimport { TinySliderInstance, TinySliderInfo } from 'tiny-slider/src/tiny-slider';\r\nimport { largeBreakpoint, mediumBreakpoint } from './constants';\r\n\r\ninterface ICarouselProps {\r\n    children: any; //React.ReactElement[];\r\n    name: string;\r\n    nextFocus: string;\r\n    ariaLabel?: string;\r\n    leftAligned?: boolean;\r\n}\r\n\r\ninterface ICarouselState {\r\n    index: number;\r\n    slideBy: number;\r\n    slideCount: number;\r\n    showNextButton: boolean;\r\n    showPrevButton: boolean;\r\n}\r\n\r\ninterface INextPrevHoverData {\r\n    slideIsHovered: boolean;\r\n    nextButtonIsHovered: boolean;\r\n    prevButtonIsHovered: boolean;\r\n    slideIndex: number;\r\n    el: any;\r\n}\r\n\r\nconst ACTIVE_SLIDE_COUNT = 4;\r\nconst SLIDE_GUTTER_WIDTH = 8;\r\n\r\nexport default class Carousel extends React.Component<ICarouselProps, ICarouselState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            index: 0,\r\n            slideBy: 0,\r\n            slideCount: 0,\r\n            showNextButton: false,\r\n            showPrevButton: false,\r\n        };\r\n\r\n        this.handleIndexChanged = this.handleIndexChanged.bind(this);\r\n        this.initTinySlider = this.initTinySlider.bind(this);\r\n    }\r\n\r\n    private _tinySlider?: TinySliderInstance;\r\n    private _removeEventHandlers?: () => void;\r\n\r\n    public componentDidMount(): void {\r\n        this.initTinySlider(this.props.name, this.props.nextFocus);\r\n        if (this._tinySlider) {\r\n            const sliderInfo = this._tinySlider.getInfo();\r\n            this.setState({\r\n                index: sliderInfo.index,\r\n                slideBy: sliderInfo.slideBy,\r\n                slideCount: sliderInfo.slideCount,\r\n            });\r\n        }\r\n    }\r\n\r\n    public componentWillUnmount(): void {\r\n        if (this._tinySlider) this._tinySlider.destroy();\r\n        if (this._removeEventHandlers) this._removeEventHandlers();\r\n    }\r\n\r\n    private initTinySlider(name: string, nextFocus: string): void {\r\n        const { children } = this.props;\r\n        const { tinySlider, removeEventHandlers } = initCarousel({\r\n            nextFocus: nextFocus,\r\n            container: `#${name}-carousel-slides`,\r\n            autoWidth: true,\r\n            nextButton: `#${name}-carousel__next`,\r\n            prevButton: `#${name}-carousel__prev`,\r\n            prevFocus: `#pre-${name}-carousel`,\r\n            gutter: SLIDE_GUTTER_WIDTH,\r\n            slideBy: 'page',\r\n            items: ACTIVE_SLIDE_COUNT,\r\n            responsive: {\r\n                [largeBreakpoint]: {},\r\n                [mediumBreakpoint]: {\r\n                    center: false,\r\n                    gutter: 24,\r\n                },\r\n                0: {\r\n                    center: children.length > 1 && !this.props.leftAligned ? true : false,\r\n                },\r\n            },\r\n        });\r\n\r\n        this._tinySlider = tinySlider;\r\n        this._removeEventHandlers = removeEventHandlers;\r\n        if (this._tinySlider) {\r\n            this._tinySlider.events.on('indexChanged', this.handleIndexChanged);\r\n        }\r\n    }\r\n\r\n    private handleIndexChanged(info: TinySliderInfo) {\r\n        this.setState({ index: info.index, slideBy: info.slideBy, slideCount: info.slideCount });\r\n    }\r\n\r\n    private showSlideNavButton(hoverEvent: INextPrevHoverData): void {\r\n        const firstVisibleTileIndex = this.state.index - 1;\r\n        const targetClientRects = hoverEvent.el.getBoundingClientRect();\r\n\r\n        function firstSlideIsHovered() {\r\n            return hoverEvent.slideIsHovered && hoverEvent.slideIndex <= firstVisibleTileIndex;\r\n        }\r\n\r\n        function lastSlideIsHovered() {\r\n            const EXTRA_THRESHOLD = 80;\r\n            const vehicleTileLocationPlusExtraThreshold =\r\n                targetClientRects.x + targetClientRects.width + (SLIDE_GUTTER_WIDTH + EXTRA_THRESHOLD);\r\n            return targetClientRects.x < window.innerWidth && vehicleTileLocationPlusExtraThreshold > window.innerWidth;\r\n        }\r\n\r\n        this.setState({\r\n            showNextButton: lastSlideIsHovered() || hoverEvent.nextButtonIsHovered ? true : false,\r\n            showPrevButton: firstSlideIsHovered() || hoverEvent.prevButtonIsHovered ? true : false,\r\n        });\r\n    }\r\n\r\n    private hideSlideNavButton(): void {\r\n        if (this.state.showNextButton === true || this.state.showPrevButton === true) {\r\n            this.setState({\r\n                showNextButton: false,\r\n                showPrevButton: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    componentDidUpdate(prevProps: ICarouselProps) {\r\n        if (this._tinySlider && this.props.children.length !== prevProps.children.length) {\r\n            this._tinySlider.rebuild();\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        const { children, name, nextFocus } = this.props;\r\n        const { showNextButton, showPrevButton } = this.state;\r\n\r\n        return (\r\n            <>\r\n                <a id={`pre-${name}-carousel`} className=\"skip-link\" href={nextFocus}>\r\n                    {`Skip ${this.props.ariaLabel ? this.props.ariaLabel : name.replace(/-/g, ' ')} Carousel`}\r\n                </a>\r\n                <div\r\n                    className={classNames('carousel max-width--xl', {\r\n                        ['scrollable']: showPrevButton && showNextButton,\r\n                    })}\r\n                >\r\n                    <div\r\n                        id={`${name}-carousel-slides`}\r\n                        data-carousel-length={React.Children.count(children)}\r\n                        className={classNames('carousel__slides', {\r\n                            ['carousel-slides__centered']: children.length < 5,\r\n                        })}\r\n                    >\r\n                        {React.Children.map(children, (child: React.ReactChild, index: number) => (\r\n                            <div\r\n                                className=\"carousel__slide\"\r\n                                data-is-current-slide={this.state.index === index ? true : false}\r\n                                key={`${index}-slide`}\r\n                                onMouseEnter={(event: any) =>\r\n                                    this.showSlideNavButton({\r\n                                        slideIsHovered: true,\r\n                                        nextButtonIsHovered: false,\r\n                                        prevButtonIsHovered: false,\r\n                                        slideIndex: index,\r\n                                        el: event.target,\r\n                                    })\r\n                                }\r\n                                onMouseLeave={() => this.hideSlideNavButton()}\r\n                            >\r\n                                {child}\r\n                            </div>\r\n                        ))}\r\n                    </div>\r\n                </div>\r\n\r\n                <button\r\n                    id={`${name}-carousel__prev`}\r\n                    className={classNames('carousel__prev', {\r\n                        'carousel-prev-button__hidden': !showPrevButton,\r\n                    })}\r\n                    onMouseEnter={(event: any) =>\r\n                        this.showSlideNavButton({\r\n                            slideIsHovered: false,\r\n                            nextButtonIsHovered: false,\r\n                            prevButtonIsHovered: true,\r\n                            slideIndex: this.state.index,\r\n                            el: event.target,\r\n                        })\r\n                    }\r\n                    onMouseLeave={() => this.hideSlideNavButton()}\r\n                    tabIndex={-1}\r\n                >\r\n                    <span className=\"visually-hidden\">Previous Slide</span>\r\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                        <path d=\"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\" />\r\n                        <path d=\"M0-.5h24v24H0z\" fill=\"none\" />\r\n                    </svg>\r\n                </button>\r\n                <button\r\n                    id={`${name}-carousel__next`}\r\n                    className={classNames('carousel__next', {\r\n                        'carousel-next-button__hidden': !showNextButton,\r\n                    })}\r\n                    onMouseEnter={(event: any) =>\r\n                        this.showSlideNavButton({\r\n                            slideIsHovered: false,\r\n                            nextButtonIsHovered: true,\r\n                            prevButtonIsHovered: false,\r\n                            slideIndex: this.state.index,\r\n                            el: event.target,\r\n                        })\r\n                    }\r\n                    onMouseLeave={() => this.hideSlideNavButton()}\r\n                    tabIndex={-1}\r\n                >\r\n                    <span className=\"visually-hidden\">Next Slide</span>\r\n                    <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                        <path d=\"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\" />\r\n                        <path d=\"M0-.25h24v24H0z\" fill=\"none\" />\r\n                    </svg>\r\n                </button>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { gsap } from 'gsap';\r\nimport Carousel from './Carousel';\r\nimport { FBSContext } from '../../../context';\r\nimport { IFBSDecision } from '../../../api/types/finance';\r\nimport { shiftUnavailableVehiclesToEnd } from '../../../pages/home/utilities/helpers';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { CarTileWrapper } from '../../../pages/home/hero/car-tile/CarTileWrapper';\r\nimport { MiniHomebaseSlideCTA } from '../../../pages/buying-online/components/MiniHomebaseSlideCTA';\r\n\r\ndeclare global {\r\n    const featureFlags: any;\r\n}\r\n\r\ninterface IReturnVisitorCarouselProps {\r\n    id: string;\r\n    isVisible: boolean;\r\n    vehicleTileList: IVehicleTile[];\r\n    vehicleTileLinkAttrs?: { [key: string]: any };\r\n    analyticsName: string;\r\n    carouselName: string;\r\n    favoritedStockNumberList: number[];\r\n    stockNumbersPendingFavoritesUpdate: number[];\r\n    ariaLabel?: string;\r\n    updatedViewedTiles?: (tileToRemove: IVehicleTile) => any;\r\n    enableRemove: boolean;\r\n    fbsData?: IFBSDecision[];\r\n    isMiniHomebase?: boolean;\r\n    onOpenSnackBar: (text: string) => void;\r\n    sectionName?: string;\r\n}\r\n\r\ninterface IReturnVisitorCarouselState {\r\n    carouselItems: React.ReactElement[];\r\n    vehicleTileRefs: HTMLElement[];\r\n}\r\n\r\nexport default class ReturnVisitorCarousel extends React.Component<\r\n    IReturnVisitorCarouselProps,\r\n    IReturnVisitorCarouselState\r\n> {\r\n    static contextType?: React.Context<any> | undefined = FBSContext;\r\n    context!: React.ContextType<typeof FBSContext>;\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.state = {\r\n            carouselItems: this.buildCarouselItems(),\r\n            vehicleTileRefs: [],\r\n        };\r\n\r\n        this.buildCarouselItems = this.buildCarouselItems.bind(this);\r\n        this.addToRefsList = this.addToRefsList.bind(this);\r\n    }\r\n\r\n    private addToRefsList(tileRef: HTMLElement) {\r\n        this.setState((currState) => ({ vehicleTileRefs: [...currState.vehicleTileRefs, tileRef] }));\r\n    }\r\n\r\n    private buildCarouselItems(): React.ReactElement[] {\r\n        if (!this.props.vehicleTileList?.length) {\r\n            return [];\r\n        }\r\n\r\n        const sortedVehicleList: IVehicleTile[] = shiftUnavailableVehiclesToEnd(\r\n            this.props.vehicleTileList as IVehicleTile[]\r\n        );\r\n\r\n        const carouselItems = sortedVehicleList\r\n            .filter((item: any) => item !== null)\r\n            .map((vehicle: IVehicleTile, index: number) => {\r\n                const { stockNumber }: IVehicleTile = vehicle;\r\n\r\n                return (\r\n                    <div\r\n                        className=\"carousel__slide\"\r\n                        key={`${stockNumber}-slide-${index}`}\r\n                        data-ymm={`${vehicle.year || ''} ${vehicle.make} ${vehicle.model} ${vehicle.trim}`}\r\n                        data-stocknumber={`${vehicle.stockNumber}`}\r\n                    >\r\n                        <div className=\"carousel-slide-item\">\r\n                            <CarTileWrapper\r\n                                vehicle={vehicle as IVehicleTile}\r\n                                updatedViewedTiles={this.props.updatedViewedTiles}\r\n                                enableRemove={this.props.enableRemove}\r\n                                isWaitingForFavoritesResponse={\r\n                                    this.props.stockNumbersPendingFavoritesUpdate.indexOf(stockNumber) > -1\r\n                                }\r\n                                sectionName={this.props.sectionName}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                );\r\n            });\r\n\r\n        if (this.props.isMiniHomebase) {\r\n            const headline = carouselItems.length > 1 ? 'None of these quite right?' : 'Not quite right?';\r\n            const hasFbsData = this.props.fbsData && this.props.fbsData.length > 0;\r\n            carouselItems.push(\r\n                <MiniHomebaseSlideCTA key={'pusher-slide'} headline={headline} hasFbsData={hasFbsData} />\r\n            );\r\n        }\r\n\r\n        return carouselItems;\r\n    }\r\n\r\n    public componentDidUpdate(prevProps: IReturnVisitorCarouselProps, prevState: IReturnVisitorCarouselState) {\r\n        const favoritedStockNumberListHasChanged =\r\n            JSON.stringify(this.props.favoritedStockNumberList) !== JSON.stringify(prevProps.favoritedStockNumberList);\r\n        const vehicleTileListHasChanged =\r\n            JSON.stringify(this.props.vehicleTileList) !== JSON.stringify(prevProps.vehicleTileList);\r\n        const pendingFavoritesUpdates =\r\n            JSON.stringify(this.props.stockNumbersPendingFavoritesUpdate) !==\r\n            JSON.stringify(prevProps.stockNumbersPendingFavoritesUpdate);\r\n        const isVisibleHasChanged = prevProps.isVisible !== this.props.isVisible;\r\n        const fbsTermsHaveChanged = JSON.stringify(this.props.fbsData) !== JSON.stringify(prevProps.fbsData);\r\n        if (\r\n            vehicleTileListHasChanged ||\r\n            favoritedStockNumberListHasChanged ||\r\n            pendingFavoritesUpdates ||\r\n            fbsTermsHaveChanged\r\n        ) {\r\n            this.setState(\r\n                {\r\n                    carouselItems: this.buildCarouselItems(),\r\n                },\r\n                () => {\r\n                    if (this.props.fbsData && this.props.fbsData.length && this.props.fbsData[0].stockNumber > 0) {\r\n                        setTimeout(() => {\r\n                            const carouselElement = document.getElementById('viewed-return-visitor-carousel-slides-mw');\r\n                            const homeBaseHeroElement = document.getElementById('home-base-hero');\r\n                            const tileTermElements = this.state.vehicleTileRefs.map((tile) =>\r\n                                tile.querySelector('.sc--fbs-terms')\r\n                            );\r\n                            const tabElements = homeBaseHeroElement?.querySelectorAll<HTMLElement>('.hp-tab-content');\r\n                            const firstTabElement = tabElements && tabElements[0];\r\n                            const fbsStylesAreSet =\r\n                                firstTabElement && firstTabElement?.getAttribute('style')?.includes('min-height:');\r\n                            const animFbsIntro = gsap\r\n                                .timeline({ paused: true })\r\n                                .add(() => homeBaseHeroElement?.classList.add('home-base-hero-fbs-height'))\r\n                                .to(\r\n                                    carouselElement,\r\n                                    { duration: 0.15, height: 415, ease: 'expo.inOut' },\r\n                                    fbsStylesAreSet ? 1.2 : 0.3\r\n                                )\r\n                                .to(\r\n                                    this.state.vehicleTileRefs,\r\n                                    { duration: fbsStylesAreSet ? 0.35 : 0.15, translateY: -12, ease: 'ease.inOut' },\r\n                                    '<'\r\n                                )\r\n                                .to(\r\n                                    this.state.vehicleTileRefs,\r\n                                    { duration: 0.025, translateY: 0, stagger: 0.05, ease: 'expo.inOut' },\r\n                                    '>0.3'\r\n                                )\r\n                                .to(\r\n                                    this.state.vehicleTileRefs,\r\n                                    { duration: 0.01, height: 415, stagger: 0.05, ease: 'expo.inOut' },\r\n                                    '<'\r\n                                )\r\n                                .to(\r\n                                    tileTermElements,\r\n                                    { duration: 0.5, autoAlpha: 1, stagger: 0.05, ease: 'expo.inOut' },\r\n                                    '-=0.25'\r\n                                )\r\n                                .add(() => {\r\n                                    if (!fbsStylesAreSet) {\r\n                                        const tabHeight = firstTabElement?.clientHeight ?? 0;\r\n                                        tabElements?.forEach((t) => (t.style.minHeight = `${tabHeight}px`));\r\n                                    }\r\n                                });\r\n                            gsap.timeline({ delay: 0 }).fromTo(\r\n                                animFbsIntro,\r\n                                { progress: 0 },\r\n                                { duration: 2, progress: 1, ease: 'none' }\r\n                            );\r\n                        }, 0);\r\n                    }\r\n                }\r\n            );\r\n        } else {\r\n            if (isVisibleHasChanged) {\r\n                this.setState({\r\n                    carouselItems: this.buildCarouselItems(),\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    public render(): React.ReactNode {\r\n        return (\r\n            <div\r\n                id={this.props.id}\r\n                className=\"carousel-container\"\r\n                data-vehicle-count={this.state.carouselItems.length}\r\n                data-saleable-vehicle-count={this.props.vehicleTileList.filter((item) => item.isSaleable).length}\r\n            >\r\n                <div className=\"home-base-hero--grid-container\">\r\n                    <Carousel\r\n                        name={`${this.props.carouselName}-return-visitor`}\r\n                        nextFocus=\"#budget-calculator-section\"\r\n                        ariaLabel={this.props.ariaLabel}\r\n                    >\r\n                        {this.state.carouselItems}\r\n                    </Carousel>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n","export const largeBreakpoint = 900;\r\nexport const mediumBreakpoint = 500;\r\nexport const ymmtCharacterLimit = {\r\n    mobile: 52,\r\n    desktop: 32\r\n};","export const formatSeperatedInteger = (value: any) => {\r\n    if (value == null) {\r\n        return null;\r\n    } else if (typeof value === 'number') {\r\n        return value ? value.toFixed(0).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : '';\r\n    } else {\r\n        return value ? value.replace(/[^0-9]*/g, '').replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : '';\r\n    }\r\n};\r\n\r\nexport const formatVin = (input: any) => {\r\n    if (input == null || input == '') return input;\r\n    else\r\n        return input\r\n            .toUpperCase()\r\n            .replace(/I/g, '1')\r\n            .replace(/O/g, '0')\r\n            .replace(/Q/g, '0');\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport classNames from 'classnames';\r\nimport './snack-bar.scss';\r\n\r\ninterface ISnackBarProps {\r\n    cancelAction: () => void;\r\n    className: string;\r\n    icon?: JSX.Element;\r\n    textLabel: string;\r\n}\r\n\r\nexport const SnackBar = (props: ISnackBarProps) => {\r\n    const { cancelAction, className, icon, textLabel } = props;\r\n    const CLOSE_TIMEOUT = 3000;\r\n    const SNACKBAR_ANIMATION_DURATION = CLOSE_TIMEOUT + 750;\r\n    const SNACKBAR_ACTIVE_CLASS = 'hp-snackbar--active';\r\n    const snackBarRef = React.useRef<HTMLDivElement | null>(null);\r\n    const bodyRef = React.useRef<HTMLElement>(document.body);\r\n\r\n    const openSnackbar = () => {\r\n        const sbRef = snackBarRef.current;\r\n        sbRef && !sbRef.classList.contains(SNACKBAR_ACTIVE_CLASS) && sbRef.classList.add(SNACKBAR_ACTIVE_CLASS);\r\n    };\r\n\r\n    const closeSnackbar = () => {\r\n        const sbRef = snackBarRef.current;\r\n        sbRef && sbRef.classList.contains(SNACKBAR_ACTIVE_CLASS) && sbRef.classList.remove(SNACKBAR_ACTIVE_CLASS);\r\n        sbRef && sbRef.getAttribute('aria-live') && sbRef.setAttribute('aria-live', 'off');\r\n    };\r\n\r\n    const keydownHandler = React.useCallback(\r\n        (event) => {\r\n            const { key } = event as KeyboardEvent;\r\n            if (['Escape', 'Esc'].includes(key)) {\r\n                cancelAction();\r\n            }\r\n        },\r\n        [cancelAction]\r\n    );\r\n\r\n    React.useEffect(() => {\r\n        setTimeout(() => {\r\n            openSnackbar();\r\n        }, 250);\r\n        document.addEventListener('keydown', keydownHandler);\r\n        return () => document.removeEventListener('keydown', keydownHandler);\r\n    }, []);\r\n\r\n    React.useEffect(() => {\r\n        const id = setTimeout(() => {\r\n            closeSnackbar();\r\n        }, CLOSE_TIMEOUT);\r\n        return () => {\r\n            clearTimeout(id);\r\n        };\r\n    }, [CLOSE_TIMEOUT]);\r\n\r\n    React.useEffect(() => {\r\n        const id = setTimeout(() => {\r\n            cancelAction();\r\n        }, SNACKBAR_ANIMATION_DURATION);\r\n        return () => {\r\n            clearTimeout(id);\r\n        };\r\n    }, [SNACKBAR_ANIMATION_DURATION, cancelAction]);\r\n\r\n    const snackbar = (\r\n        <div\r\n            test-id=\"snackbar\"\r\n            className={classNames(className, 'hp-snackbar')}\r\n            aria-live=\"polite\"\r\n            aria-atomic=\"true\"\r\n            ref={snackBarRef}\r\n        >\r\n            {icon && <div className=\"icon\">{icon}</div>}\r\n            <div className=\"label\">{textLabel}</div>\r\n        </div>\r\n    );\r\n\r\n    return ReactDOM.createPortal(snackbar, bodyRef.current);\r\n};\r\n","import { createContext, ReactNode, useState, useEffect } from 'react';\r\nimport { getSmallBatchDecisions } from '../api/small-batch-api';\r\nimport { getCiamId } from '../api/myaccount-cookie-api';\r\nimport { IVehicleTile } from '../types/vehicleTile';\r\nimport { IFBSDecision } from '../api/types/finance';\r\n\r\ninterface IFBSProviderProps {\r\n    children: ReactNode;\r\n}\r\n\r\nexport const emptyFbsTermsData = {\r\n    fbsApplication: {\r\n        downPayment: 0,\r\n        expirationDateFormatted: '',\r\n        stateAbbreviation: '',\r\n        stationUrl: '',\r\n    },\r\n    fbsDecision: {\r\n        downPayment: 0,\r\n        isSoftPull: true,\r\n        decision: '',\r\n        lenderName: '',\r\n        totalFinanceAmount: 0,\r\n        terms: [\r\n            {\r\n                length: 0,\r\n                maxTermRate: {\r\n                    monthlyPayment: 0,\r\n                    apr: 0,\r\n                },\r\n                minTermRate: {\r\n                    monthlyPayment: 0,\r\n                    apr: 0,\r\n                },\r\n            },\r\n        ],\r\n        conditionAmount: 0,\r\n        conditionAmountRounded: 0,\r\n        stateAbbreviation: '',\r\n        taxesAndFeesRounded: 0,\r\n    },\r\n    stockNumber: 0,\r\n    vehicleData: {\r\n        basePrice: 0,\r\n        stockNumber: 0,\r\n        year: 0,\r\n        make: '',\r\n        model: '',\r\n        trim: '',\r\n        stateCode: '',\r\n        taxesAndFeesRounded: 0,\r\n    },\r\n    downPayment: 0,\r\n};\r\n\r\nconst defaultFbsData: IFBSDecision[] = [];\r\nconst defaultSetVehicleList = () => {\r\n    // will be replaced by useState\r\n};\r\n\r\ninterface IFBSContext {\r\n    stationUrl: string;\r\n    downPayment: number;\r\n    enableFBS: boolean;\r\n    fbsData: IFBSDecision[];\r\n    setVehicleList: (vehicleTileList: IVehicleTile[]) => void;\r\n}\r\nconst defaultContext: IFBSContext = {\r\n    stationUrl: '',\r\n    downPayment: 0,\r\n    enableFBS: false,\r\n    fbsData: defaultFbsData,\r\n    setVehicleList: defaultSetVehicleList,\r\n};\r\n\r\nexport const FBSContext = createContext<IFBSContext>(defaultContext);\r\n\r\nexport const FBSProvider = (props: IFBSProviderProps) => {\r\n    const [enableFBS, setEnableFBS] = useState(false);\r\n    const [vehicleList, setVehicleList] = useState<IVehicleTile[]>([]);\r\n    const [fbsData, setFbsData] = useState<IFBSDecision[]>([]);\r\n    const [downPayment, setDownPayment] = useState<number>(0);\r\n    const [stationUrl, setStationUrl] = useState<string>('');\r\n\r\n    useEffect(() => {\r\n        const tryEnablingFBS = async () => {\r\n            const vehicleStockNumbers = vehicleList.reduce((stockNumbers: number[], vehicle: IVehicleTile) => {\r\n                if (vehicle) {\r\n                    return [...stockNumbers, vehicle.stockNumber];\r\n                }\r\n                return stockNumbers;\r\n            }, []);\r\n\r\n            const ciamId = await getCiamId();\r\n            if (ciamId) {\r\n                const smallBatchDecisions = await getSmallBatchDecisions(ciamId, vehicleStockNumbers);\r\n                setFbsData((prevFbsData) => [...prevFbsData, ...smallBatchDecisions]);\r\n                if (\r\n                    smallBatchDecisions.length > 0 &&\r\n                    smallBatchDecisions[0].fbsDecision !== null &&\r\n                    smallBatchDecisions[0].stockNumber !== 0 &&\r\n                    smallBatchDecisions[0].fbsDecision.terms !== null\r\n                ) {\r\n                    setDownPayment(smallBatchDecisions[0].fbsDecision.downPayment);\r\n                    setStationUrl(smallBatchDecisions[0].applicationUrl);\r\n                    setEnableFBS(true);\r\n                }\r\n            }\r\n        };\r\n\r\n        if (vehicleList.length > 0) {\r\n            tryEnablingFBS();\r\n        }\r\n    }, [vehicleList]);\r\n\r\n    return (\r\n        <FBSContext.Provider value={{ ...defaultContext, stationUrl, downPayment, enableFBS, fbsData, setVehicleList }}>\r\n            {props.children}\r\n        </FBSContext.Provider>\r\n    );\r\n};\r\n","import { create } from 'zustand';\r\nimport { getCiamId } from '../api/myaccount-cookie-api';\r\nimport { IVehicleTile } from '../types/vehicleTile';\r\nimport { IFBSDecision } from '../api/types/finance';\r\nimport { getStoreZipCode, getStoreId, hasPreviouslySignedIn } from '../utilities/cookieHelper';\r\nimport { getLocalVehiclesData, getRecentlyViewedVehicleTiles } from '../utilities/vehicleTileBuilder';\r\nimport { getSmallBatchDecisions } from '../api/small-batch-api';\r\nimport { IGetCarImagesResponse } from '../types/api/getCarImagesResponse';\r\nimport { MAX_RECENTLY_VIEWED_VEHICLE_TILES } from '../pages/home/utilities/constants';\r\nimport { hideSnackBarFromExternalScript } from '../pages/home/hero/car-tile/carTileUtils';\r\nimport * as savedVehicles from '../pages/home/utilities/savedVehicles';\r\nimport { ITrackingPayload } from '../types/analytics';\r\nimport { ANALYTICS_CONSTANTS } from '../utilities/analytics';\r\nimport * as analytics from '../utilities/analytics';\r\n\r\nexport interface ILocalCarsState {\r\n    favoriteVehicles: number[];\r\n    fbsData: IFBSDecision[];\r\n    ciamId: string;\r\n    zipCode?: string;\r\n    storeId?: string;\r\n    radiusInMiles: number; // !TODO: Do we need this or should this be a constant in our end? \"The Select your store\" modal doesn't give the user an option to specify radius\r\n    localVehicles: IVehicleTile[];\r\n    recentlyViewedVehicles: IVehicleTile[];\r\n    isLocalVehiclesLoading: boolean;\r\n    isRecentlyVehiclesLoading: boolean;\r\n}\r\n\r\nexport interface ILocalCarsActions {\r\n    setCiam: () => Promise<void>;\r\n    setZipCode: () => void;\r\n    setStoreId: () => void;\r\n    setFbsData: (stockNumbers: number[]) => Promise<void>;\r\n    setLocalVehicles: (includeFbsData?: boolean) => Promise<void>;\r\n    toggleFavoritesResponse: (isSuccess: boolean, componentCallback?: () => void) => void;\r\n    addVehicleToFavorites: (stockNumber: number) => Promise<void>;\r\n    removeVehicleFromFavorites: (stockNumber: number, hideSnackbar?: boolean) => Promise<void>;\r\n    setRecentlyViewedVehicleTiles: (localData?: any, includeFbsData?: boolean) => Promise<void>;\r\n    setFavoriteVehicles: () => Promise<void>;\r\n    getCarImages: (\r\n        stockNumber: number,\r\n        successCallback: (response: IGetCarImagesResponse) => void,\r\n        errorCallback: (error: unknown) => void\r\n    ) => Promise<void>;\r\n}\r\n\r\nexport interface ILocalCarsStore extends ILocalCarsState, ILocalCarsActions {}\r\n\r\nexport const useLocalCarsStore = create<ILocalCarsStore>((set, get) => ({\r\n    favoriteVehicles: [],\r\n    recentlyViewedVehicles: [],\r\n    localVehicles: [],\r\n    isLocalVehiclesLoading: false,\r\n    isRecentlyVehiclesLoading: false,\r\n    fbsData: [],\r\n    ciamId: '',\r\n    zipCode: undefined,\r\n    storeId: undefined,\r\n    radiusInMiles: 25,\r\n    setCiam: async () => {\r\n        const ciamId = await getCiamId();\r\n        if (ciamId) {\r\n            set({ ciamId });\r\n        }\r\n    },\r\n    setZipCode: () => {\r\n        const zipCode = getStoreZipCode();\r\n        set({ zipCode });\r\n    },\r\n    setStoreId: () => {\r\n        const storeId = getStoreId();\r\n        set({ storeId });\r\n    },\r\n    setFbsData: async (stockNumbers: number[]) => {\r\n        // Merge existing stock numbers from current fbsData with the new ones\r\n        const mergedStockNumbers = [...stockNumbers, ...(get().fbsData || []).map((fbs) => fbs.stockNumber)];\r\n        const uniqueStockNumbers = Array.from(new Set(mergedStockNumbers));\r\n\r\n        if (uniqueStockNumbers.length > 0) {\r\n            const fbsData = await getSmallBatchDecisions(get().ciamId, uniqueStockNumbers, getStoreId());\r\n            set({ fbsData });\r\n        }\r\n    },\r\n    setRecentlyViewedVehicleTiles: async (localData?: any, includeFbsData = true) => {\r\n        if (localData) {\r\n            set({ recentlyViewedVehicles: localData });\r\n            return;\r\n        }\r\n\r\n        set({ isRecentlyVehiclesLoading: true });\r\n\r\n        await get().setStoreId();\r\n        const recentlyViewedVehicles = await getRecentlyViewedVehicleTiles(\r\n            MAX_RECENTLY_VIEWED_VEHICLE_TILES,\r\n            get().storeId\r\n        );\r\n\r\n        // Include FBS data\r\n        if (includeFbsData && recentlyViewedVehicles?.length > 0) {\r\n            await get().setFbsData(recentlyViewedVehicles.map(({ stockNumber }) => stockNumber));\r\n\r\n            recentlyViewedVehicles.forEach((vehicle: IVehicleTile) => {\r\n                const decision = get().fbsData?.find((fbs) => fbs.stockNumber === vehicle.stockNumber);\r\n\r\n                if (decision) {\r\n                    vehicle.fbsData = decision;\r\n                }\r\n            });\r\n        }\r\n\r\n        set({ recentlyViewedVehicles });\r\n        set({ isRecentlyVehiclesLoading: false });\r\n    },\r\n    setLocalVehicles: async (includeFbsData = true) => {\r\n        set({ isLocalVehiclesLoading: true });\r\n        // Update zipCode\r\n        await get().setZipCode();\r\n\r\n        // Update storeId\r\n        await get().setStoreId();\r\n\r\n        // Get local vehicles\r\n        const localVehicles = await getLocalVehiclesData({\r\n            take: 10, // TODO: what should be the value?\r\n            zipCode: get().zipCode || '', // TODO: what happens if we send an empty string?\r\n            radiusInMiles: get().radiusInMiles, // TODO: what should be the value?\r\n            storeId: get().storeId || '',\r\n        });\r\n\r\n        // Include FBS data\r\n        if (includeFbsData && localVehicles?.length > 0) {\r\n            await get().setFbsData(localVehicles.map(({ stockNumber }) => stockNumber));\r\n\r\n            localVehicles.forEach((vehicle: IVehicleTile) => {\r\n                const decision = get().fbsData?.find((fbs) => fbs.stockNumber === vehicle.stockNumber);\r\n\r\n                if (decision) {\r\n                    vehicle.fbsData = decision;\r\n                }\r\n            });\r\n        }\r\n\r\n        // Update store\r\n        set({ localVehicles });\r\n        set({ isLocalVehiclesLoading: false });\r\n    },\r\n    toggleFavoritesResponse: (isSuccess: boolean, componentCallback?: () => void) => {\r\n        isSuccess && componentCallback && componentCallback();\r\n    },\r\n    addVehicleToFavorites: async (stockNumber: number) => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.SAVE_RECOMMENDED_CAR,\r\n            linkDetails: {\r\n                name: 'save car',\r\n                position: stockNumber.toString(),\r\n            },\r\n        };\r\n        analytics.trackEDDL(payload);\r\n        const event = new CustomEvent('kmxAddSavedCar', {\r\n            bubbles: true,\r\n            detail: {\r\n                stockNumber,\r\n                callback: async (result: Promise<boolean>) => {\r\n                    const isSuccess = await result;\r\n                    get().toggleFavoritesResponse(isSuccess, () => {\r\n                        set((state) => ({ favoriteVehicles: [...state.favoriteVehicles, stockNumber] }));\r\n                    });\r\n                },\r\n            },\r\n        });\r\n        document.documentElement.dispatchEvent(event);\r\n    },\r\n    removeVehicleFromFavorites: async (stockNumber: number, hideSnackbar?: boolean) => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: 'remove from favorites',\r\n                position: stockNumber.toString(),\r\n            },\r\n        };\r\n        analytics.trackEDDL(payload);\r\n        const event = new CustomEvent('kmxRemoveSavedCar', {\r\n            bubbles: true,\r\n            detail: {\r\n                stockNumber,\r\n                callback: async (result: Promise<boolean>) => {\r\n                    const isSuccess = await result;\r\n                    get().toggleFavoritesResponse(isSuccess, () =>\r\n                        set((state) => ({\r\n                            favoriteVehicles: state.favoriteVehicles.filter(\r\n                                (favoriteStockNumber) => favoriteStockNumber !== stockNumber\r\n                            ),\r\n                        }))\r\n                    );\r\n                },\r\n            },\r\n        });\r\n\r\n        hideSnackbar && hideSnackBarFromExternalScript();\r\n\r\n        document.documentElement.dispatchEvent(event);\r\n    },\r\n    setFavoriteVehicles: async () => {\r\n        savedVehicles.getSavedVehicles((favoriteVehicles: number[]) => {\r\n            set({ favoriteVehicles });\r\n        });\r\n    },\r\n    getCarImages: async (\r\n        stockNumber: number,\r\n        successCallback: (response: IGetCarImagesResponse) => void,\r\n        errorCallback: (error: unknown) => void\r\n    ) => {\r\n        try {\r\n            const url = `https://img2.carmax.com/api/subject/${stockNumber}`;\r\n            const response = await fetch(url, { mode: 'cors' });\r\n            if (response.ok) {\r\n                const data = await response.json();\r\n                successCallback(data);\r\n            } else if (response.status === 404) {\r\n                throw new Error('Not Found');\r\n            } else {\r\n                throw new Error('Failed to fetch images');\r\n            }\r\n        } catch (error) {\r\n            errorCallback(error);\r\n        }\r\n    },\r\n}));\r\n\r\n// Access localCarsStore in browser console. Might want to put behind a flag.\r\nObject.assign(window, { _useLocalCarsStore: useLocalCarsStore });\r\n","export interface IEventChannelData {\r\n    [key: string]: any;\r\n}\r\n\r\nexport interface IEventChannelListener {\r\n    (data: IEventChannelData | any): any;\r\n}\r\n\r\nexport interface IEventChannelRemoveListenerObj {\r\n    remove: () => any;\r\n}\r\n\r\ninterface IEventChannelTopics {\r\n    [key: string]: IEventChannelListener[];\r\n}\r\n\r\nexport interface IEventChannel {\r\n    topics: IEventChannelTopics;\r\n    subscribe: (topic: string, listener: IEventChannelListener) => IEventChannelRemoveListenerObj;\r\n    publish: (topic: string, data: {}) => any;\r\n}\r\n\r\nexport default class EventChannel implements IEventChannel {\r\n    private _topics: IEventChannelTopics;\r\n\r\n    constructor() {\r\n        this._topics = {};\r\n    }\r\n\r\n    private hasTopic(topic: string): boolean {\r\n        return this._topics.hasOwnProperty.call(this._topics, topic);\r\n    }\r\n\r\n    get topics(): IEventChannelTopics {\r\n        return this._topics;\r\n    }\r\n\r\n    subscribe(topic: string, listener: IEventChannelListener): IEventChannelRemoveListenerObj {\r\n        if (!this.hasTopic(topic)) {\r\n            this._topics[topic] = [];\r\n        }\r\n\r\n        const index = this._topics[topic].push(listener) - 1;\r\n\r\n        return {\r\n            remove: () => {\r\n                delete this._topics[topic][index];\r\n            },\r\n        };\r\n    }\r\n\r\n    publish(topic: string, data = {}) {\r\n        if (!this.hasTopic(topic)) {\r\n            return;\r\n        }\r\n\r\n        this._topics[topic].forEach((listener: IEventChannelListener) => {\r\n            listener(data);\r\n        });\r\n    }\r\n}\r\n","export const TOPICS = {\r\n    MY_STORE_MODULE_UPDATES: 'myStoreModuleUpdates',\r\n};\r\n\r\nexport const CUSTOM_EVENTS = {\r\n    MY_STORE_MODULE_UPDATES: 'kmxSubscribeToMyStoreModuleUpdates',\r\n};\r\n","import { FC } from 'react';\r\n\r\ninterface IMiniHomebaseSlideCTAProps {\r\n    headline: string;\r\n    hasFbsData?: boolean;\r\n}\r\n\r\nexport const MiniHomebaseSlideCTA: FC<IMiniHomebaseSlideCTAProps> = ({ headline, hasFbsData }) => {\r\n    return (\r\n        <div className=\"carousel__slide\" key=\"pusher-slide\">\r\n            <div className=\"carousel-slide-item\">\r\n                <div className={`mini-homebase-slide-pusher ${hasFbsData && 'has-fbs'}`}>\r\n                    <div className=\"mini-homebase-slide-pusher--flex-container\">\r\n                        <h2 className=\"mini-homebase-slide-pusher--heading\">{headline}</h2>\r\n                        <a id=\"mini-homebase-cta\" href=\"/cars/all\" className=\"mini-homebase-slide-pusher--cta\">\r\n                            Start a Search\r\n                        </a>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","/*!\n * ScrollTrigger 3.6.0\n * https://greensock.com\n *\n * @license Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar gsap,\n    _coreInitted,\n    _win,\n    _doc,\n    _docEl,\n    _body,\n    _root,\n    _resizeDelay,\n    _raf,\n    _request,\n    _toArray,\n    _clamp,\n    _time2,\n    _syncInterval,\n    _refreshing,\n    _pointerIsDown,\n    _transformProp,\n    _i,\n    _prevWidth,\n    _prevHeight,\n    _autoRefresh,\n    _sort,\n    _suppressOverwrites,\n    _ignoreResize,\n    _limitCallbacks,\n    // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.\n_startup = 1,\n    _proxies = [],\n    _scrollers = [],\n    _getTime = Date.now,\n    _time1 = _getTime(),\n    _lastScrollTime = 0,\n    _enabled = 1,\n    _passThrough = function _passThrough(v) {\n  return v;\n},\n    _windowExists = function _windowExists() {\n  return typeof window !== \"undefined\";\n},\n    _getGSAP = function _getGSAP() {\n  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\n},\n    _isViewport = function _isViewport(e) {\n  return !!~_root.indexOf(e);\n},\n    _getProxyProp = function _getProxyProp(element, property) {\n  return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];\n},\n    _getScrollFunc = function _getScrollFunc(element, _ref) {\n  var s = _ref.s,\n      sc = _ref.sc;\n\n  var i = _scrollers.indexOf(element),\n      offset = sc === _vertical.sc ? 1 : 2;\n\n  !~i && (i = _scrollers.push(element) - 1);\n  return _scrollers[i + offset] || (_scrollers[i + offset] = _getProxyProp(element, s) || (_isViewport(element) ? sc : function (value) {\n    return arguments.length ? element[s] = value : element[s];\n  }));\n},\n    _getBoundsFunc = function _getBoundsFunc(element) {\n  return _getProxyProp(element, \"getBoundingClientRect\") || (_isViewport(element) ? function () {\n    _winOffsets.width = _win.innerWidth;\n    _winOffsets.height = _win.innerHeight;\n    return _winOffsets;\n  } : function () {\n    return _getBounds(element);\n  });\n},\n    _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref2) {\n  var d = _ref2.d,\n      d2 = _ref2.d2,\n      a = _ref2.a;\n  return (a = _getProxyProp(scroller, \"getBoundingClientRect\")) ? function () {\n    return a()[d];\n  } : function () {\n    return (isViewport ? _win[\"inner\" + d2] : scroller[\"client\" + d2]) || 0;\n  };\n},\n    _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {\n  return !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : function () {\n    return _winOffsets;\n  };\n},\n    _maxScroll = function _maxScroll(element, _ref3) {\n  var s = _ref3.s,\n      d2 = _ref3.d2,\n      d = _ref3.d,\n      a = _ref3.a;\n  return (s = \"scroll\" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? Math.max(_docEl[s], _body[s]) - (_win[\"inner\" + d2] || _docEl[\"client\" + d2] || _body[\"client\" + d2]) : element[s] - element[\"offset\" + d2];\n},\n    _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {\n  for (var i = 0; i < _autoRefresh.length; i += 3) {\n    (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);\n  }\n},\n    _isString = function _isString(value) {\n  return typeof value === \"string\";\n},\n    _isFunction = function _isFunction(value) {\n  return typeof value === \"function\";\n},\n    _isNumber = function _isNumber(value) {\n  return typeof value === \"number\";\n},\n    _isObject = function _isObject(value) {\n  return typeof value === \"object\";\n},\n    _callIfFunc = function _callIfFunc(value) {\n  return _isFunction(value) && value();\n},\n    _combineFunc = function _combineFunc(f1, f2) {\n  return function () {\n    var result1 = _callIfFunc(f1),\n        result2 = _callIfFunc(f2);\n\n    return function () {\n      _callIfFunc(result1);\n\n      _callIfFunc(result2);\n    };\n  };\n},\n    _abs = Math.abs,\n    _scrollLeft = \"scrollLeft\",\n    _scrollTop = \"scrollTop\",\n    _left = \"left\",\n    _top = \"top\",\n    _right = \"right\",\n    _bottom = \"bottom\",\n    _width = \"width\",\n    _height = \"height\",\n    _Right = \"Right\",\n    _Left = \"Left\",\n    _Top = \"Top\",\n    _Bottom = \"Bottom\",\n    _padding = \"padding\",\n    _margin = \"margin\",\n    _Width = \"Width\",\n    _Height = \"Height\",\n    _px = \"px\",\n    _horizontal = {\n  s: _scrollLeft,\n  p: _left,\n  p2: _Left,\n  os: _right,\n  os2: _Right,\n  d: _width,\n  d2: _Width,\n  a: \"x\",\n  sc: function sc(value) {\n    return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0;\n  }\n},\n    _vertical = {\n  s: _scrollTop,\n  p: _top,\n  p2: _Top,\n  os: _bottom,\n  os2: _Bottom,\n  d: _height,\n  d2: _Height,\n  a: \"y\",\n  op: _horizontal,\n  sc: function sc(value) {\n    return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0;\n  }\n},\n    _getComputedStyle = function _getComputedStyle(element) {\n  return _win.getComputedStyle(element);\n},\n    _makePositionable = function _makePositionable(element) {\n  return element.style.position = _getComputedStyle(element).position === \"absolute\" ? \"absolute\" : \"relative\";\n},\n    // if the element already has position: absolute, leave that, otherwise make it position: relative\n_setDefaults = function _setDefaults(obj, defaults) {\n  for (var p in defaults) {\n    p in obj || (obj[p] = defaults[p]);\n  }\n\n  return obj;\n},\n    //_isInViewport = element => (element = _getBounds(element)) && !(element.top > (_win.innerHeight || _docEl.clientHeight) || element.bottom < 0 || element.left > (_win.innerWidth || _docEl.clientWidth) || element.right < 0) && element,\n_getBounds = function _getBounds(element, withoutTransforms) {\n  var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== \"matrix(1, 0, 0, 1, 0, 0)\" && gsap.to(element, {\n    x: 0,\n    y: 0,\n    xPercent: 0,\n    yPercent: 0,\n    rotation: 0,\n    rotationX: 0,\n    rotationY: 0,\n    scale: 1,\n    skewX: 0,\n    skewY: 0\n  }).progress(1),\n      bounds = element.getBoundingClientRect();\n  tween && tween.progress(0).kill();\n  return bounds;\n},\n    _getSize = function _getSize(element, _ref4) {\n  var d2 = _ref4.d2;\n  return element[\"offset\" + d2] || element[\"client\" + d2] || 0;\n},\n    _getLabelRatioArray = function _getLabelRatioArray(timeline) {\n  var a = [],\n      labels = timeline.labels,\n      duration = timeline.duration(),\n      p;\n\n  for (p in labels) {\n    a.push(labels[p] / duration);\n  }\n\n  return a;\n},\n    _getClosestLabel = function _getClosestLabel(animation) {\n  return function (value) {\n    return gsap.utils.snap(_getLabelRatioArray(animation), value);\n  };\n},\n    _getLabelAtDirection = function _getLabelAtDirection(timeline) {\n  return function (value, st) {\n    var a = _getLabelRatioArray(timeline),\n        i;\n\n    a.sort(function (a, b) {\n      return a - b;\n    });\n\n    if (st.direction > 0) {\n      for (i = 0; i < a.length; i++) {\n        if (a[i] >= value) {\n          return a[i];\n        }\n      }\n\n      return a.pop();\n    } else {\n      i = a.length;\n\n      while (i--) {\n        if (a[i] <= value) {\n          return a[i];\n        }\n      }\n    }\n\n    return a[0];\n  };\n},\n    _multiListener = function _multiListener(func, element, types, callback) {\n  return types.split(\",\").forEach(function (type) {\n    return func(element, type, callback);\n  });\n},\n    _addListener = function _addListener(element, type, func) {\n  return element.addEventListener(type, func, {\n    passive: true\n  });\n},\n    _removeListener = function _removeListener(element, type, func) {\n  return element.removeEventListener(type, func);\n},\n    _markerDefaults = {\n  startColor: \"green\",\n  endColor: \"red\",\n  indent: 0,\n  fontSize: \"16px\",\n  fontWeight: \"normal\"\n},\n    _defaults = {\n  toggleActions: \"play\",\n  anticipatePin: 0\n},\n    _keywords = {\n  top: 0,\n  left: 0,\n  center: 0.5,\n  bottom: 1,\n  right: 1\n},\n    _offsetToPx = function _offsetToPx(value, size) {\n  if (_isString(value)) {\n    var eqIndex = value.indexOf(\"=\"),\n        relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;\n\n    if (~eqIndex) {\n      value.indexOf(\"%\") > eqIndex && (relative *= size / 100);\n      value = value.substr(0, eqIndex - 1);\n    }\n\n    value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf(\"%\") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);\n  }\n\n  return value;\n},\n    _createMarker = function _createMarker(type, name, container, direction, _ref5, offset, matchWidthEl) {\n  var startColor = _ref5.startColor,\n      endColor = _ref5.endColor,\n      fontSize = _ref5.fontSize,\n      indent = _ref5.indent,\n      fontWeight = _ref5.fontWeight;\n\n  var e = _doc.createElement(\"div\"),\n      useFixedPosition = _isViewport(container) || _getProxyProp(container, \"pinType\") === \"fixed\",\n      isScroller = type.indexOf(\"scroller\") !== -1,\n      parent = useFixedPosition ? _body : container,\n      isStart = type.indexOf(\"start\") !== -1,\n      color = isStart ? startColor : endColor,\n      css = \"border-color:\" + color + \";font-size:\" + fontSize + \";color:\" + color + \";font-weight:\" + fontWeight + \";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;\";\n\n  css += \"position:\" + (isScroller && useFixedPosition ? \"fixed;\" : \"absolute;\");\n  (isScroller || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + \":\" + (offset + parseFloat(indent)) + \"px;\");\n  matchWidthEl && (css += \"box-sizing:border-box;text-align:left;width:\" + matchWidthEl.offsetWidth + \"px;\");\n  e._isStart = isStart;\n  e.setAttribute(\"class\", \"gsap-marker-\" + type);\n  e.style.cssText = css;\n  e.innerText = name || name === 0 ? type + \"-\" + name : type;\n  parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);\n  e._offset = e[\"offset\" + direction.op.d2];\n\n  _positionMarker(e, 0, direction, isStart);\n\n  return e;\n},\n    _positionMarker = function _positionMarker(marker, start, direction, flipped) {\n  var vars = {\n    display: \"block\"\n  },\n      side = direction[flipped ? \"os2\" : \"p2\"],\n      oppositeSide = direction[flipped ? \"p2\" : \"os2\"];\n  marker._isFlipped = flipped;\n  vars[direction.a + \"Percent\"] = flipped ? -100 : 0;\n  vars[direction.a] = flipped ? \"1px\" : 0;\n  vars[\"border\" + side + _Width] = 1;\n  vars[\"border\" + oppositeSide + _Width] = 0;\n  vars[direction.p] = start + \"px\";\n  gsap.set(marker, vars);\n},\n    _triggers = [],\n    _ids = {},\n    _sync = function _sync() {\n  return _request || (_request = _raf(_updateAll));\n},\n    _onScroll = function _onScroll() {\n  if (!_request) {\n    _request = _raf(_updateAll);\n    _lastScrollTime || _dispatch(\"scrollStart\");\n    _lastScrollTime = _getTime();\n  }\n},\n    _onResize = function _onResize() {\n  return !_refreshing && !_ignoreResize && !_doc.fullscreenElement && _resizeDelay.restart(true);\n},\n    // ignore resizes triggered by refresh()\n_listeners = {},\n    _emptyArray = [],\n    _media = [],\n    _creatingMedia,\n    // when ScrollTrigger.matchMedia() is called, we record the current media key here (like \"(min-width: 800px)\") so that we can assign it to everything that's created during that call. Then we can revert just those when necessary. In the ScrollTrigger's init() call, the _creatingMedia is recorded as a \"media\" property on the instance.\n_lastMediaTick,\n    _onMediaChange = function _onMediaChange(e) {\n  var tick = gsap.ticker.frame,\n      matches = [],\n      i = 0,\n      index;\n\n  if (_lastMediaTick !== tick || _startup) {\n    _revertAll();\n\n    for (; i < _media.length; i += 4) {\n      index = _win.matchMedia(_media[i]).matches;\n\n      if (index !== _media[i + 3]) {\n        // note: some browsers fire the matchMedia event multiple times, like when going full screen, so we shouldn't call the function multiple times. Check to see if it's already matched.\n        _media[i + 3] = index;\n        index ? matches.push(i) : _revertAll(1, _media[i]) || _isFunction(_media[i + 2]) && _media[i + 2](); // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\n      }\n    }\n\n    _revertRecorded(); // in case killing/reverting any of the animations actually added inline styles back.\n\n\n    for (i = 0; i < matches.length; i++) {\n      index = matches[i];\n      _creatingMedia = _media[index];\n      _media[index + 2] = _media[index + 1](e);\n    }\n\n    _creatingMedia = 0;\n    _coreInitted && _refreshAll(0, 1);\n    _lastMediaTick = tick;\n\n    _dispatch(\"matchMedia\");\n  }\n},\n    _softRefresh = function _softRefresh() {\n  return _removeListener(ScrollTrigger, \"scrollEnd\", _softRefresh) || _refreshAll(true);\n},\n    _dispatch = function _dispatch(type) {\n  return _listeners[type] && _listeners[type].map(function (f) {\n    return f();\n  }) || _emptyArray;\n},\n    _savedStyles = [],\n    // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.\n_revertRecorded = function _revertRecorded(media) {\n  for (var i = 0; i < _savedStyles.length; i += 4) {\n    if (!media || _savedStyles[i + 3] === media) {\n      _savedStyles[i].style.cssText = _savedStyles[i + 1];\n      _savedStyles[i + 2].uncache = 1;\n    }\n  }\n},\n    _revertAll = function _revertAll(kill, media) {\n  var trigger;\n\n  for (_i = 0; _i < _triggers.length; _i++) {\n    trigger = _triggers[_i];\n\n    if (!media || trigger.media === media) {\n      if (kill) {\n        trigger.kill(1);\n      } else {\n        trigger.scroll.rec || (trigger.scroll.rec = trigger.scroll()); // record the scroll positions so that in each refresh() we can ensure that it doesn't shift. Remember, pinning can make things change around, especially if the same element is pinned multiple times. If one was already recorded, don't re-record because unpinning may have occurred and made it shorter.\n\n        trigger.revert();\n      }\n    }\n  }\n\n  _revertRecorded(media);\n\n  media || _dispatch(\"revert\");\n},\n    _refreshAll = function _refreshAll(force, skipRevert) {\n  if (_lastScrollTime && !force) {\n    _addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\n    return;\n  }\n\n  var refreshInits = _dispatch(\"refreshInit\");\n\n  _sort && ScrollTrigger.sort();\n  skipRevert || _revertAll();\n\n  for (_i = 0; _i < _triggers.length; _i++) {\n    _triggers[_i].refresh();\n  }\n\n  refreshInits.forEach(function (result) {\n    return result && result.render && result.render(-1);\n  }); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.\n\n  _i = _triggers.length;\n\n  while (_i--) {\n    _triggers[_i].scroll.rec = 0;\n  }\n\n  _resizeDelay.pause();\n\n  _dispatch(\"refresh\");\n},\n    _lastScroll = 0,\n    _direction = 1,\n    _updateAll = function _updateAll() {\n  var l = _triggers.length,\n      time = _getTime(),\n      recordVelocity = time - _time1 >= 50,\n      scroll = l && _triggers[0].scroll();\n\n  _direction = _lastScroll > scroll ? -1 : 1;\n  _lastScroll = scroll;\n\n  if (recordVelocity) {\n    if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {\n      _lastScrollTime = 0;\n\n      _dispatch(\"scrollEnd\");\n    }\n\n    _time2 = _time1;\n    _time1 = time;\n  }\n\n  if (_direction < 0) {\n    _i = l;\n\n    while (_i--) {\n      _triggers[_i] && _triggers[_i].update(0, recordVelocity);\n    }\n\n    _direction = 1;\n  } else {\n    for (_i = 0; _i < l; _i++) {\n      _triggers[_i] && _triggers[_i].update(0, recordVelocity);\n    }\n  }\n\n  _request = 0;\n},\n    _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, \"display\", \"flexShrink\", \"float\", \"zIndex\"],\n    _stateProps = _propNamesToCopy.concat([_width, _height, \"boxSizing\", \"max\" + _Width, \"max\" + _Height, \"position\", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),\n    _swapPinOut = function _swapPinOut(pin, spacer, state) {\n  _setState(state);\n\n  if (pin.parentNode === spacer) {\n    var parent = spacer.parentNode;\n\n    if (parent) {\n      parent.insertBefore(pin, spacer);\n      parent.removeChild(spacer);\n    }\n  }\n},\n    _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {\n  if (pin.parentNode !== spacer) {\n    var i = _propNamesToCopy.length,\n        spacerStyle = spacer.style,\n        pinStyle = pin.style,\n        p;\n\n    while (i--) {\n      p = _propNamesToCopy[i];\n      spacerStyle[p] = cs[p];\n    }\n\n    spacerStyle.position = cs.position === \"absolute\" ? \"absolute\" : \"relative\";\n    cs.display === \"inline\" && (spacerStyle.display = \"inline-block\");\n    pinStyle[_bottom] = pinStyle[_right] = \"auto\";\n    spacerStyle.overflow = \"visible\";\n    spacerStyle.boxSizing = \"border-box\";\n    spacerStyle[_width] = _getSize(pin, _horizontal) + _px;\n    spacerStyle[_height] = _getSize(pin, _vertical) + _px;\n    spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = \"0\";\n\n    _setState(spacerState);\n\n    pinStyle[_width] = pinStyle[\"max\" + _Width] = cs[_width];\n    pinStyle[_height] = pinStyle[\"max\" + _Height] = cs[_height];\n    pinStyle[_padding] = cs[_padding];\n    pin.parentNode.insertBefore(spacer, pin);\n    spacer.appendChild(pin);\n  }\n},\n    _capsExp = /([A-Z])/g,\n    _setState = function _setState(state) {\n  if (state) {\n    var style = state.t.style,\n        l = state.length,\n        i = 0,\n        p,\n        value;\n    (state.t._gsap || gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off\n\n    for (; i < l; i += 2) {\n      value = state[i + 1];\n      p = state[i];\n\n      if (value) {\n        style[p] = value;\n      } else if (style[p]) {\n        style.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n      }\n    }\n  }\n},\n    _getState = function _getState(element) {\n  // returns an Array with alternating values like [property, value, property, value] and a \"t\" property pointing to the target (element). Makes it fast and cheap.\n  var l = _stateProps.length,\n      style = element.style,\n      state = [],\n      i = 0;\n\n  for (; i < l; i++) {\n    state.push(_stateProps[i], style[_stateProps[i]]);\n  }\n\n  state.t = element;\n  return state;\n},\n    _copyState = function _copyState(state, override, omitOffsets) {\n  var result = [],\n      l = state.length,\n      i = omitOffsets ? 8 : 0,\n      // skip top, left, right, bottom if omitOffsets is true\n  p;\n\n  for (; i < l; i += 2) {\n    p = state[i];\n    result.push(p, p in override ? override[p] : state[i + 1]);\n  }\n\n  result.t = state.t;\n  return result;\n},\n    _winOffsets = {\n  left: 0,\n  top: 0\n},\n    _parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax) {\n  _isFunction(value) && (value = value(self));\n\n  if (_isString(value) && value.substr(0, 3) === \"max\") {\n    value = scrollerMax + (value.charAt(4) === \"=\" ? _offsetToPx(\"0\" + value.substr(3), scrollerSize) : 0);\n  }\n\n  if (!_isNumber(value)) {\n    _isFunction(trigger) && (trigger = trigger(self));\n\n    var element = _toArray(trigger)[0] || _body,\n        bounds = _getBounds(element) || {},\n        offsets = value.split(\" \"),\n        localOffset,\n        globalOffset,\n        display;\n\n    if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === \"none\") {\n      // if display is \"none\", it won't report getBoundingClientRect() properly\n      display = element.style.display;\n      element.style.display = \"block\";\n      bounds = _getBounds(element);\n      display ? element.style.display = display : element.style.removeProperty(\"display\");\n    }\n\n    localOffset = _offsetToPx(offsets[0], bounds[direction.d]);\n    globalOffset = _offsetToPx(offsets[1] || \"0\", scrollerSize);\n    value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;\n    markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);\n    scrollerSize -= scrollerSize - globalOffset; // adjust for the marker\n  } else if (markerScroller) {\n    _positionMarker(markerScroller, scrollerSize, direction, true);\n  }\n\n  if (marker) {\n    var position = value + scrollerSize,\n        isStart = marker._isStart;\n    scrollerMax = \"scroll\" + direction.d2;\n\n    _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[scrollerMax], _docEl[scrollerMax]) : marker.parentNode[scrollerMax]) <= position + 1);\n\n    if (useFixedPosition) {\n      scrollerBounds = _getBounds(markerScroller);\n      useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);\n    }\n  }\n\n  return Math.round(value);\n},\n    _prefixExp = /(?:webkit|moz|length|cssText|inset)/i,\n    _reparent = function _reparent(element, parent, top, left) {\n  if (element.parentNode !== parent) {\n    var style = element.style,\n        p,\n        cs;\n\n    if (parent === _body) {\n      element._stOrig = style.cssText; // record original inline styles so we can revert them later\n\n      cs = _getComputedStyle(element);\n\n      for (p in cs) {\n        // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones.\n        if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === \"string\" && p !== \"0\") {\n          style[p] = cs[p];\n        }\n      }\n\n      style.top = top;\n      style.left = left;\n    } else {\n      style.cssText = element._stOrig;\n    }\n\n    gsap.core.getCache(element).uncache = 1;\n    parent.appendChild(element);\n  }\n},\n    // returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)\n_getTweenCreator = function _getTweenCreator(scroller, direction) {\n  var getScroll = _getScrollFunc(scroller, direction),\n      prop = \"_scroll\" + direction.p2,\n      // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.\n  lastScroll1,\n      lastScroll2,\n      getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {\n    var tween = getTween.tween,\n        onComplete = vars.onComplete,\n        modifiers = {};\n    tween && tween.kill();\n    lastScroll1 = Math.round(initialValue);\n    vars[prop] = scrollTo;\n    vars.modifiers = modifiers;\n\n    modifiers[prop] = function (value) {\n      value = Math.round(getScroll()); // round because in some [very uncommon] Windows environments, it can get reported with decimals even though it was set without.\n\n      if (value !== lastScroll1 && value !== lastScroll2 && Math.abs(value - lastScroll1) > 2) {\n        // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124.\n        tween.kill();\n        getTween.tween = 0;\n      } else {\n        value = initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio;\n      }\n\n      lastScroll2 = lastScroll1;\n      return lastScroll1 = Math.round(value);\n    };\n\n    vars.onComplete = function () {\n      getTween.tween = 0;\n      onComplete && onComplete.call(tween);\n    };\n\n    tween = getTween.tween = gsap.to(scroller, vars);\n    return tween;\n  };\n\n  scroller[prop] = getScroll;\n  scroller.addEventListener(\"mousewheel\", function () {\n    return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);\n  }); // Windows machines handle mousewheel scrolling in chunks (like \"3 lines per scroll\") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a mousewheel event.\n\n  return getTween;\n};\n\n_horizontal.op = _vertical;\nexport var ScrollTrigger = /*#__PURE__*/function () {\n  function ScrollTrigger(vars, animation) {\n    _coreInitted || ScrollTrigger.register(gsap) || console.warn(\"Please gsap.registerPlugin(ScrollTrigger)\");\n    this.init(vars, animation);\n  }\n\n  var _proto = ScrollTrigger.prototype;\n\n  _proto.init = function init(vars, animation) {\n    this.progress = this.start = 0;\n    this.vars && this.kill(1); // in case it's being initted again\n\n    if (!_enabled) {\n      this.update = this.refresh = this.kill = _passThrough;\n      return;\n    }\n\n    vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {\n      trigger: vars\n    } : vars, _defaults);\n\n    var direction = vars.horizontal ? _horizontal : _vertical,\n        _vars = vars,\n        onUpdate = _vars.onUpdate,\n        toggleClass = _vars.toggleClass,\n        id = _vars.id,\n        onToggle = _vars.onToggle,\n        onRefresh = _vars.onRefresh,\n        scrub = _vars.scrub,\n        trigger = _vars.trigger,\n        pin = _vars.pin,\n        pinSpacing = _vars.pinSpacing,\n        invalidateOnRefresh = _vars.invalidateOnRefresh,\n        anticipatePin = _vars.anticipatePin,\n        onScrubComplete = _vars.onScrubComplete,\n        onSnapComplete = _vars.onSnapComplete,\n        once = _vars.once,\n        snap = _vars.snap,\n        pinReparent = _vars.pinReparent,\n        isToggle = !scrub && scrub !== 0,\n        scroller = _toArray(vars.scroller || _win)[0],\n        scrollerCache = gsap.core.getCache(scroller),\n        isViewport = _isViewport(scroller),\n        useFixedPosition = \"pinType\" in vars ? vars.pinType === \"fixed\" : isViewport || _getProxyProp(scroller, \"pinType\") === \"fixed\",\n        callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],\n        toggleActions = isToggle && vars.toggleActions.split(\" \"),\n        markers = \"markers\" in vars ? vars.markers : _defaults.markers,\n        borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\"border\" + direction.p2 + _Width]) || 0,\n        self = this,\n        onRefreshInit = vars.onRefreshInit && function () {\n      return vars.onRefreshInit(self);\n    },\n        getScrollerSize = _getSizeFunc(scroller, isViewport, direction),\n        getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),\n        tweenTo,\n        pinCache,\n        snapFunc,\n        isReverted,\n        scroll1,\n        scroll2,\n        start,\n        end,\n        markerStart,\n        markerEnd,\n        markerStartTrigger,\n        markerEndTrigger,\n        markerVars,\n        change,\n        pinOriginalState,\n        pinActiveState,\n        pinState,\n        spacer,\n        offset,\n        pinGetter,\n        pinSetter,\n        pinStart,\n        pinChange,\n        spacingStart,\n        spacerState,\n        markerStartSetter,\n        markerEndSetter,\n        cs,\n        snap1,\n        snap2,\n        scrubTween,\n        scrubSmooth,\n        snapDurClamp,\n        snapDelayedCall,\n        prevProgress,\n        prevScroll,\n        prevAnimProgress;\n\n    self.media = _creatingMedia;\n    anticipatePin *= 45;\n\n    _triggers.push(self);\n\n    self.scroller = scroller;\n    self.scroll = _getScrollFunc(scroller, direction);\n    scroll1 = self.scroll();\n    self.vars = vars;\n    animation = animation || vars.animation;\n    \"refreshPriority\" in vars && (_sort = 1);\n    scrollerCache.tweenScroll = scrollerCache.tweenScroll || {\n      top: _getTweenCreator(scroller, _vertical),\n      left: _getTweenCreator(scroller, _horizontal)\n    };\n    self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];\n\n    if (animation) {\n      animation.vars.lazy = false;\n      animation._initted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.render(0, true, true);\n      self.animation = animation.pause();\n      animation.scrollTrigger = self;\n      scrubSmooth = _isNumber(scrub) && scrub;\n      scrubSmooth && (scrubTween = gsap.to(animation, {\n        ease: \"power3\",\n        duration: scrubSmooth,\n        onComplete: function onComplete() {\n          return onScrubComplete && onScrubComplete(self);\n        }\n      }));\n      snap1 = 0;\n      id || (id = animation.vars.id);\n    }\n\n    if (snap) {\n      _isObject(snap) || (snap = {\n        snapTo: snap\n      });\n      \"scrollBehavior\" in _body.style && gsap.set(isViewport ? [_body, _docEl] : scroller, {\n        scrollBehavior: \"auto\"\n      }); // smooth scrolling doesn't work with snap.\n\n      snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === \"labels\" ? _getClosestLabel(animation) : snap.snapTo === \"labelsDirectional\" ? _getLabelAtDirection(animation) : gsap.utils.snap(snap.snapTo);\n      snapDurClamp = snap.duration || {\n        min: 0.1,\n        max: 2\n      };\n      snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);\n      snapDelayedCall = gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {\n        if (Math.abs(self.getVelocity()) < 10 && !_pointerIsDown) {\n          var totalProgress = animation && !isToggle ? animation.totalProgress() : self.progress,\n              velocity = (totalProgress - snap2) / (_getTime() - _time2) * 1000 || 0,\n              change1 = _abs(velocity / 2) * velocity / 0.185,\n              naturalEnd = totalProgress + change1,\n              endValue = _clamp(0, 1, snapFunc(naturalEnd, self)),\n              scroll = self.scroll(),\n              endScroll = Math.round(start + endValue * change),\n              tween = tweenTo.tween;\n\n          if (scroll <= end && scroll >= start && endScroll !== scroll) {\n            if (tween && !tween._initted && tween.data <= Math.abs(endScroll - scroll)) {\n              // there's an overlapping snap! So we must figure out which one is closer and let that tween live.\n              return;\n            }\n\n            tweenTo(endScroll, {\n              duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),\n              ease: snap.ease || \"power3\",\n              data: Math.abs(endScroll - scroll),\n              // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.\n              onComplete: function onComplete() {\n                snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;\n                onSnapComplete && onSnapComplete(self);\n              }\n            }, scroll, change1 * change, endScroll - scroll - change1 * change);\n          }\n        } else if (self.isActive) {\n          snapDelayedCall.restart(true);\n        }\n      }).pause();\n    }\n\n    id && (_ids[id] = self);\n    trigger = self.trigger = _toArray(trigger || pin)[0];\n    pin = pin === true ? trigger : _toArray(pin)[0];\n    _isString(toggleClass) && (toggleClass = {\n      targets: trigger,\n      className: toggleClass\n    });\n\n    if (pin) {\n      pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && _getComputedStyle(pin.parentNode).display === \"flex\" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default.\n\n      self.pin = pin;\n      vars.force3D !== false && gsap.set(pin, {\n        force3D: true\n      });\n      pinCache = gsap.core.getCache(pin);\n\n      if (!pinCache.spacer) {\n        // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the \"original\" pin state after it has already been affected by another ScrollTrigger.\n        pinCache.spacer = spacer = _doc.createElement(\"div\");\n        spacer.setAttribute(\"class\", \"pin-spacer\" + (id ? \" pin-spacer-\" + id : \"\"));\n        pinCache.pinState = pinOriginalState = _getState(pin);\n      } else {\n        pinOriginalState = pinCache.pinState;\n      }\n\n      self.spacer = spacer = pinCache.spacer;\n      cs = _getComputedStyle(pin);\n      spacingStart = cs[pinSpacing + direction.os2];\n      pinGetter = gsap.getProperty(pin);\n      pinSetter = gsap.quickSetter(pin, direction.a, _px); // pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = \"hidden\"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).\n\n      _swapPinIn(pin, spacer, cs);\n\n      pinState = _getState(pin);\n    }\n\n    if (markers) {\n      markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;\n      markerStartTrigger = _createMarker(\"scroller-start\", id, scroller, direction, markerVars, 0);\n      markerEndTrigger = _createMarker(\"scroller-end\", id, scroller, direction, markerVars, 0, markerStartTrigger);\n      offset = markerStartTrigger[\"offset\" + direction.op.d2];\n      markerStart = _createMarker(\"start\", id, scroller, direction, markerVars, offset);\n      markerEnd = _createMarker(\"end\", id, scroller, direction, markerVars, offset);\n\n      if (!useFixedPosition) {\n        _makePositionable(isViewport ? _body : scroller);\n\n        gsap.set([markerStartTrigger, markerEndTrigger], {\n          force3D: true\n        });\n        markerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);\n        markerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);\n      }\n    }\n\n    self.revert = function (revert) {\n      var r = revert !== false || !self.enabled,\n          prevRefreshing = _refreshing;\n\n      if (r !== isReverted) {\n        if (r) {\n          prevScroll = Math.max(self.scroll(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.\n\n          prevProgress = self.progress;\n          prevAnimProgress = animation && animation.progress();\n        }\n\n        markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\n          return m.style.display = r ? \"none\" : \"block\";\n        });\n        r && (_refreshing = 1);\n        self.update(r); // make sure the pin is back in its original position so that all the measurements are correct.\n\n        _refreshing = prevRefreshing;\n        pin && (r ? _swapPinOut(pin, spacer, pinOriginalState) : (!pinReparent || !self.isActive) && _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState));\n        isReverted = r;\n      }\n    };\n\n    self.refresh = function (soft) {\n      if (_refreshing || !self.enabled) {\n        return;\n      }\n\n      if (pin && soft && _lastScrollTime) {\n        _addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\n        return;\n      }\n\n      _refreshing = 1;\n      scrubTween && scrubTween.pause();\n      invalidateOnRefresh && animation && animation.progress(0).invalidate();\n      isReverted || self.revert();\n\n      var size = getScrollerSize(),\n          scrollerBounds = getScrollerOffsets(),\n          max = _maxScroll(scroller, direction),\n          offset = 0,\n          otherPinOffset = 0,\n          parsedEnd = vars.end,\n          parsedEndTrigger = vars.endTrigger || trigger,\n          parsedStart = vars.start || (vars.start === 0 || !trigger ? 0 : pin ? \"0 0\" : \"0 100%\"),\n          triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,\n          i = triggerIndex,\n          cs,\n          bounds,\n          scroll,\n          isVertical,\n          override,\n          curTrigger,\n          curPin,\n          oppositeScroll,\n          initted;\n\n      while (i--) {\n        // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things \"rewind\" properly.\n        curPin = _triggers[i].pin;\n        curPin && (curPin === trigger || curPin === pin) && _triggers[i].revert();\n      }\n\n      start = _parsePosition(parsedStart, trigger, size, direction, self.scroll(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max) || (pin ? -0.001 : 0);\n      _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));\n\n      if (_isString(parsedEnd) && !parsedEnd.indexOf(\"+=\")) {\n        if (~parsedEnd.indexOf(\" \")) {\n          parsedEnd = (_isString(parsedStart) ? parsedStart.split(\" \")[0] : \"\") + parsedEnd;\n        } else {\n          offset = _offsetToPx(parsedEnd.substr(2), size);\n          parsedEnd = _isString(parsedStart) ? parsedStart : start + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.\n\n          parsedEndTrigger = trigger;\n        }\n      }\n\n      end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? \"100% 0\" : max), parsedEndTrigger, size, direction, self.scroll() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max)) || -0.001;\n      change = end - start || (start -= 0.01) && 0.001;\n      offset = 0;\n      i = triggerIndex;\n\n      while (i--) {\n        curTrigger = _triggers[i];\n        curPin = curTrigger.pin;\n\n        if (curPin && curTrigger.start - curTrigger._pinPush < start) {\n          cs = curTrigger.end - curTrigger.start;\n          curPin === trigger && (offset += cs);\n          curPin === pin && (otherPinOffset += cs);\n        }\n      }\n\n      start += offset;\n      end += offset;\n      self._pinPush = otherPinOffset;\n\n      if (markerStart && offset) {\n        // offset the markers if necessary\n        cs = {};\n        cs[direction.a] = \"+=\" + offset;\n        gsap.set([markerStart, markerEnd], cs);\n      }\n\n      if (pin) {\n        cs = _getComputedStyle(pin);\n        isVertical = direction === _vertical;\n        scroll = self.scroll(); // recalculate because the triggers can affect the scroll\n\n        pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;\n        !max && end > 1 && ((isViewport ? _body : scroller).style[\"overflow-\" + direction.a] = \"scroll\"); // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://greensock.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/\n\n        _swapPinIn(pin, spacer, cs);\n\n        pinState = _getState(pin); // transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.\n\n        bounds = _getBounds(pin, true);\n        oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();\n\n        if (pinSpacing) {\n          spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];\n          spacerState.t = spacer;\n          i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;\n          i && spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).\n\n          _setState(spacerState);\n\n          useFixedPosition && self.scroll(prevScroll);\n        }\n\n        if (useFixedPosition) {\n          override = {\n            top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,\n            left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,\n            boxSizing: \"border-box\",\n            position: \"fixed\"\n          };\n          override[_width] = override[\"max\" + _Width] = Math.ceil(bounds.width) + _px;\n          override[_height] = override[\"max\" + _Height] = Math.ceil(bounds.height) + _px;\n          override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = \"0\";\n          override[_padding] = cs[_padding];\n          override[_padding + _Top] = cs[_padding + _Top];\n          override[_padding + _Right] = cs[_padding + _Right];\n          override[_padding + _Bottom] = cs[_padding + _Bottom];\n          override[_padding + _Left] = cs[_padding + _Left];\n          pinActiveState = _copyState(pinOriginalState, override, pinReparent);\n        }\n\n        if (animation) {\n          // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.\n          initted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely.\n\n          _suppressOverwrites(1);\n\n          animation.progress(1, true);\n          pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;\n          change !== pinChange && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.\n\n          animation.progress(0, true);\n          initted || animation.invalidate();\n\n          _suppressOverwrites(0);\n        } else {\n          pinChange = change;\n        }\n      } else if (trigger && self.scroll()) {\n        // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()\n        bounds = trigger.parentNode;\n\n        while (bounds && bounds !== _body) {\n          if (bounds._pinOffset) {\n            start -= bounds._pinOffset;\n            end -= bounds._pinOffset;\n          }\n\n          bounds = bounds.parentNode;\n        }\n      }\n\n      for (i = 0; i < triggerIndex; i++) {\n        // make sure we revert from first to last to make sure things reach their end state properly\n        curTrigger = _triggers[i].pin;\n        curTrigger && (curTrigger === trigger || curTrigger === pin) && _triggers[i].revert(false);\n      }\n\n      self.start = start;\n      self.end = end;\n      scroll1 = scroll2 = self.scroll(); // reset velocity\n\n      scroll1 < prevScroll && self.scroll(prevScroll);\n      self.revert(false);\n      _refreshing = 0;\n      animation && isToggle && animation._initted && animation.progress(prevAnimProgress, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh().\n\n      if (prevProgress !== self.progress) {\n        // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.\n        scrubTween && animation.totalProgress(prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.\n\n        self.progress = prevProgress;\n        self.update();\n      }\n\n      pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));\n      onRefresh && onRefresh(self);\n    };\n\n    self.getVelocity = function () {\n      return (self.scroll() - scroll2) / (_getTime() - _time2) * 1000 || 0;\n    };\n\n    self.update = function (reset, recordVelocity) {\n      var scroll = self.scroll(),\n          p = reset ? 0 : (scroll - start) / change,\n          clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,\n          prevProgress = self.progress,\n          isActive,\n          wasActive,\n          toggleState,\n          action,\n          stateChanged,\n          toggled;\n\n      if (recordVelocity) {\n        scroll2 = scroll1;\n        scroll1 = scroll;\n\n        if (snap) {\n          snap2 = snap1;\n          snap1 = animation && !isToggle ? animation.totalProgress() : clipped;\n        }\n      } // anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).\n\n\n      anticipatePin && !clipped && pin && !_refreshing && !_startup && _lastScrollTime && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin && (clipped = 0.0001);\n\n      if (clipped !== prevProgress && self.enabled) {\n        isActive = self.isActive = !!clipped && clipped < 1;\n        wasActive = !!prevProgress && prevProgress < 1;\n        toggled = isActive !== wasActive;\n        stateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)\n\n        self.direction = clipped > prevProgress ? 1 : -1;\n        self.progress = clipped;\n\n        if (!isToggle) {\n          if (scrubTween && !_refreshing && !_startup) {\n            scrubTween.vars.totalProgress = clipped;\n            scrubTween.invalidate().restart();\n          } else if (animation) {\n            animation.totalProgress(clipped, !!_refreshing);\n          }\n        }\n\n        if (pin) {\n          reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);\n\n          if (!useFixedPosition) {\n            pinSetter(pinStart + pinChange * clipped);\n          } else if (stateChanged) {\n            action = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)\n\n            if (pinReparent) {\n              if (!reset && (isActive || action)) {\n                var bounds = _getBounds(pin, true),\n                    _offset = scroll - start;\n\n                _reparent(pin, _body, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);\n              } else {\n                _reparent(pin, spacer);\n              }\n            }\n\n            _setState(isActive || action ? pinActiveState : pinState);\n\n            pinChange !== change && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !action ? pinChange : 0));\n          }\n        }\n\n        snap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);\n        toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) {\n          return el.classList[isActive || once ? \"add\" : \"remove\"](toggleClass.className);\n        }); // classes could affect positioning, so do it even if reset or refreshing is true.\n\n        onUpdate && !isToggle && !reset && onUpdate(self);\n\n        if (stateChanged && !_refreshing) {\n          toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.\n\n          if (isToggle) {\n            action = !toggled && toggleActions[toggleState + 1] !== \"none\" && toggleActions[toggleState + 1] || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the \"enter\" action, we should switch to the \"leave\" in this case (but only if one is defined)\n\n            if (animation && (action === \"complete\" || action === \"reset\" || action in animation)) {\n              if (action === \"complete\") {\n                animation.pause().totalProgress(1);\n              } else if (action === \"reset\") {\n                animation.restart(true).pause();\n              } else {\n                animation[action]();\n              }\n            }\n\n            onUpdate && onUpdate(self);\n          }\n\n          if (toggled || !_limitCallbacks) {\n            // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.\n            onToggle && toggled && onToggle(self);\n            callbacks[toggleState] && callbacks[toggleState](self);\n            once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0); // a callback shouldn't be called again if once is true.\n\n            if (!toggled) {\n              // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order\n              toggleState = clipped === 1 ? 1 : 3;\n              callbacks[toggleState] && callbacks[toggleState](self);\n            }\n          }\n        } else if (isToggle && onUpdate && !_refreshing) {\n          onUpdate(self);\n        }\n      } // update absolutely-positioned markers (only if the scroller isn't the viewport)\n\n\n      if (markerEndSetter) {\n        markerStartSetter(scroll + (markerStartTrigger._isFlipped ? 1 : 0));\n        markerEndSetter(scroll);\n      }\n    };\n\n    self.enable = function () {\n      if (!self.enabled) {\n        self.enabled = true;\n\n        _addListener(scroller, \"resize\", _onResize);\n\n        _addListener(scroller, \"scroll\", _onScroll);\n\n        onRefreshInit && _addListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n        !animation || !animation.add ? self.refresh() : gsap.delayedCall(0.01, function () {\n          return start || end || self.refresh();\n        }) && (change = 0.01) && (start = end = 0); // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick.\n      }\n    };\n\n    self.disable = function (reset, allowAnimation) {\n      if (self.enabled) {\n        reset !== false && self.revert();\n        self.enabled = self.isActive = false;\n        allowAnimation || scrubTween && scrubTween.pause();\n        prevScroll = 0;\n        pinCache && (pinCache.uncache = 1);\n        onRefreshInit && _removeListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\n        if (snapDelayedCall) {\n          snapDelayedCall.pause();\n          tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);\n        }\n\n        if (!isViewport) {\n          var i = _triggers.length;\n\n          while (i--) {\n            if (_triggers[i].scroller === scroller && _triggers[i] !== self) {\n              return; //don't remove the listeners if there are still other triggers referencing it.\n            }\n          }\n\n          _removeListener(scroller, \"resize\", _onResize);\n\n          _removeListener(scroller, \"scroll\", _onScroll);\n        }\n      }\n    };\n\n    self.kill = function (revert, allowAnimation) {\n      self.disable(revert, allowAnimation);\n      id && delete _ids[id];\n\n      var i = _triggers.indexOf(self);\n\n      _triggers.splice(i, 1);\n\n      i === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...\n\n      if (animation) {\n        animation.scrollTrigger = null;\n        revert && animation.render(-1);\n        allowAnimation || animation.kill();\n      }\n\n      markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\n        return m.parentNode.removeChild(m);\n      });\n\n      if (pin) {\n        pinCache && (pinCache.uncache = 1);\n        i = 0;\n\n        _triggers.forEach(function (t) {\n          return t.pin === pin && i++;\n        });\n\n        i || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element.\n      }\n    };\n\n    self.enable();\n  };\n\n  ScrollTrigger.register = function register(core) {\n    if (!_coreInitted) {\n      gsap = core || _getGSAP();\n\n      if (_windowExists() && window.document) {\n        _win = window;\n        _doc = document;\n        _docEl = _doc.documentElement;\n        _body = _doc.body;\n      }\n\n      if (gsap) {\n        _toArray = gsap.utils.toArray;\n        _clamp = gsap.utils.clamp;\n        _suppressOverwrites = gsap.core.suppressOverwrites || _passThrough;\n        gsap.core.globals(\"ScrollTrigger\", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a \"name\" property.\n\n        if (_body) {\n          _raf = _win.requestAnimationFrame || function (f) {\n            return setTimeout(f, 16);\n          };\n\n          _addListener(_win, \"mousewheel\", _onScroll);\n\n          _root = [_win, _doc, _docEl, _body];\n\n          _addListener(_doc, \"scroll\", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!\n\n\n          var bodyStyle = _body.style,\n              border = bodyStyle.borderTop,\n              bounds;\n          bodyStyle.borderTop = \"1px solid #000\"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.\n\n          bounds = _getBounds(_body);\n          _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding\n\n          _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;\n          border ? bodyStyle.borderTop = border : bodyStyle.removeProperty(\"border-top\");\n          _syncInterval = setInterval(_sync, 200);\n          gsap.delayedCall(0.5, function () {\n            return _startup = 0;\n          });\n\n          _addListener(_doc, \"touchcancel\", _passThrough); // some older Android devices intermittently stop dispatching \"touchmove\" events if we don't listen for \"touchcancel\" on the document.\n\n\n          _addListener(_body, \"touchstart\", _passThrough); //works around Safari bug: https://greensock.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/\n\n\n          _multiListener(_addListener, _doc, \"pointerdown,touchstart,mousedown\", function () {\n            return _pointerIsDown = 1;\n          });\n\n          _multiListener(_addListener, _doc, \"pointerup,touchend,mouseup\", function () {\n            return _pointerIsDown = 0;\n          });\n\n          _transformProp = gsap.utils.checkPrefix(\"transform\");\n\n          _stateProps.push(_transformProp);\n\n          _coreInitted = _getTime();\n          _resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();\n          _autoRefresh = [_doc, \"visibilitychange\", function () {\n            var w = _win.innerWidth,\n                h = _win.innerHeight;\n\n            if (_doc.hidden) {\n              _prevWidth = w;\n              _prevHeight = h;\n            } else if (_prevWidth !== w || _prevHeight !== h) {\n              _onResize();\n            }\n          }, _doc, \"DOMContentLoaded\", _refreshAll, _win, \"load\", function () {\n            return _lastScrollTime || _refreshAll();\n          }, _win, \"resize\", _onResize];\n\n          _iterateAutoRefresh(_addListener);\n        }\n      }\n    }\n\n    return _coreInitted;\n  };\n\n  ScrollTrigger.defaults = function defaults(config) {\n    for (var p in config) {\n      _defaults[p] = config[p];\n    }\n  };\n\n  ScrollTrigger.kill = function kill() {\n    _enabled = 0;\n\n    _triggers.slice(0).forEach(function (trigger) {\n      return trigger.kill(1);\n    });\n  };\n\n  ScrollTrigger.config = function config(vars) {\n    \"limitCallbacks\" in vars && (_limitCallbacks = !!vars.limitCallbacks);\n    var ms = vars.syncInterval;\n    ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);\n\n    if (\"autoRefreshEvents\" in vars) {\n      _iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || \"none\");\n      _ignoreResize = (vars.autoRefreshEvents + \"\").indexOf(\"resize\") === -1;\n    }\n  };\n\n  ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {\n    var t = _toArray(target)[0],\n        i = _scrollers.indexOf(t),\n        isViewport = _isViewport(t);\n\n    if (~i) {\n      _scrollers.splice(i, isViewport ? 6 : 2);\n    }\n\n    isViewport ? _proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _proxies.unshift(t, vars);\n  };\n\n  ScrollTrigger.matchMedia = function matchMedia(vars) {\n    // _media is populated in the following order: mediaQueryString, onMatch, onUnmatch, isMatched. So if there are two media queries, the Array would have a length of 8\n    var mq, p, i, func, result;\n\n    for (p in vars) {\n      i = _media.indexOf(p);\n      func = vars[p];\n      _creatingMedia = p;\n\n      if (p === \"all\") {\n        func();\n      } else {\n        mq = _win.matchMedia(p);\n\n        if (mq) {\n          mq.matches && (result = func());\n\n          if (~i) {\n            _media[i + 1] = _combineFunc(_media[i + 1], func);\n            _media[i + 2] = _combineFunc(_media[i + 2], result);\n          } else {\n            i = _media.length;\n\n            _media.push(p, func, result);\n\n            mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\n          }\n\n          _media[i + 3] = mq.matches;\n        }\n      }\n\n      _creatingMedia = 0;\n    }\n\n    return _media;\n  };\n\n  ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {\n    query || (_media.length = 0);\n    query = _media.indexOf(query);\n    query >= 0 && _media.splice(query, 4);\n  };\n\n  return ScrollTrigger;\n}();\nScrollTrigger.version = \"3.6.0\";\n\nScrollTrigger.saveStyles = function (targets) {\n  return targets ? _toArray(targets).forEach(function (target) {\n    if (target && target.style) {\n      var i = _savedStyles.indexOf(target);\n\n      i >= 0 && _savedStyles.splice(i, 4);\n\n      _savedStyles.push(target, target.style.cssText, gsap.core.getCache(target), _creatingMedia);\n    }\n  }) : _savedStyles;\n};\n\nScrollTrigger.revert = function (soft, media) {\n  return _revertAll(!soft, media);\n};\n\nScrollTrigger.create = function (vars, animation) {\n  return new ScrollTrigger(vars, animation);\n};\n\nScrollTrigger.refresh = function (safe) {\n  return safe ? _onResize() : _refreshAll(true);\n};\n\nScrollTrigger.update = _updateAll;\n\nScrollTrigger.maxScroll = function (element, horizontal) {\n  return _maxScroll(element, horizontal ? _horizontal : _vertical);\n};\n\nScrollTrigger.getScrollFunc = function (element, horizontal) {\n  return _getScrollFunc(_toArray(element)[0], horizontal ? _horizontal : _vertical);\n};\n\nScrollTrigger.getById = function (id) {\n  return _ids[id];\n};\n\nScrollTrigger.getAll = function () {\n  return _triggers.slice(0);\n};\n\nScrollTrigger.isScrolling = function () {\n  return !!_lastScrollTime;\n};\n\nScrollTrigger.addEventListener = function (type, callback) {\n  var a = _listeners[type] || (_listeners[type] = []);\n  ~a.indexOf(callback) || a.push(callback);\n};\n\nScrollTrigger.removeEventListener = function (type, callback) {\n  var a = _listeners[type],\n      i = a && a.indexOf(callback);\n  i >= 0 && a.splice(i, 1);\n};\n\nScrollTrigger.batch = function (targets, vars) {\n  var result = [],\n      varsCopy = {},\n      interval = vars.interval || 0.016,\n      batchMax = vars.batchMax || 1e9,\n      proxyCallback = function proxyCallback(type, callback) {\n    var elements = [],\n        triggers = [],\n        delay = gsap.delayedCall(interval, function () {\n      callback(elements, triggers);\n      elements = [];\n      triggers = [];\n    }).pause();\n    return function (self) {\n      elements.length || delay.restart(true);\n      elements.push(self.trigger);\n      triggers.push(self);\n      batchMax <= elements.length && delay.progress(1);\n    };\n  },\n      p;\n\n  for (p in vars) {\n    varsCopy[p] = p.substr(0, 2) === \"on\" && _isFunction(vars[p]) && p !== \"onRefreshInit\" ? proxyCallback(p, vars[p]) : vars[p];\n  }\n\n  if (_isFunction(batchMax)) {\n    batchMax = batchMax();\n\n    _addListener(ScrollTrigger, \"refresh\", function () {\n      return batchMax = vars.batchMax();\n    });\n  }\n\n  _toArray(targets).forEach(function (target) {\n    var config = {};\n\n    for (p in varsCopy) {\n      config[p] = varsCopy[p];\n    }\n\n    config.trigger = target;\n    result.push(ScrollTrigger.create(config));\n  });\n\n  return result;\n};\n\nScrollTrigger.sort = function (func) {\n  return _triggers.sort(func || function (a, b) {\n    return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6);\n  });\n};\n\n_getGSAP() && gsap.registerPlugin(ScrollTrigger);\nexport { ScrollTrigger as default };","import { getVehicles } from '../../../api/search-api';\r\nimport { Vehicle } from '../../../api/types';\r\n\r\nexport const getStockNumberFromCarDetailsReferrer = () => {\r\n    if(document.referrer) {\r\n        const urlParts = document.referrer.split('/');\r\n        const indexOfStockNumber = urlParts.indexOf('car') > -1 ? (urlParts.indexOf('car') + 1) : -1;\r\n        if(indexOfStockNumber > -1) {\r\n            const sanitizedStockNumber = urlParts[indexOfStockNumber].indexOf('?') > -1 ? urlParts[indexOfStockNumber].split('?')[0] : urlParts[indexOfStockNumber];\r\n            return [parseInt(sanitizedStockNumber)];\r\n        } else {\r\n            return null;\r\n        }\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const getVehicleInfoFromCarDetailsReferrer = () => {\r\n    const referrerStockNumber = getStockNumberFromCarDetailsReferrer();\r\n    if(referrerStockNumber) {\r\n        return getVehicles({\r\n            stockNumberList: referrerStockNumber,\r\n        }).then(function(vehiclesList: Vehicle[]) {\r\n            if (vehiclesList.length > 0) {\r\n                return vehiclesList;\r\n            } else {\r\n                return []\r\n            }\r\n        } as any);\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n\r\nexport const buildVehicleLabel = (vehicleInfo: any, vehiclePropertiesToExtract: Array<string>) => {\r\n    let finalizedLabel = '';\r\n    for (let i = 0; i < vehiclePropertiesToExtract.length; i++) {\r\n        const singleVehicleProperty = vehiclePropertiesToExtract[i];\r\n        if(vehicleInfo[singleVehicleProperty]) {\r\n            finalizedLabel += ` ${vehicleInfo[vehiclePropertiesToExtract[i]]}`;\r\n        }\r\n    }\r\n    return finalizedLabel;\r\n}","import { useEffect, useState } from 'react';\r\nimport { gsap } from 'gsap';\r\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\r\nimport SVGs from '../utils/svgs';\r\nimport { getVehicleInfoFromCarDetailsReferrer, buildVehicleLabel } from '../utils/utils';\r\nimport { Vehicle } from '../../../api/types';\r\n\r\nconst PageHeader = () => {\r\n    const VEHICLE_ATTRIBUTES = ['make', 'model', 'trim'];\r\n\r\n    const [vehicleInfo, setVehicleInfo] = useState<Vehicle[]>([]);\r\n    const [vehicleLabel, setVehicleLabel] = useState<string>('');\r\n\r\n    useEffect(() => {\r\n        gsap.registerPlugin(ScrollTrigger as any);\r\n        setVehicleInfoFromPageReferrer();\r\n        initFixedHeaderOnScroll();\r\n    }, []);\r\n\r\n    const setVehicleInfoFromPageReferrer = () => {\r\n        getVehicleInfoFromCarDetailsReferrer().then((vehicleInfo: Vehicle[]) => {\r\n            setVehicleInfo(vehicleInfo);\r\n            setVehicleLabel(vehicleInfo.length ? buildVehicleLabel(vehicleInfo[0], VEHICLE_ATTRIBUTES) : '');\r\n        });\r\n    };\r\n\r\n    const initFixedHeaderOnScroll = () => {\r\n        function toggleHeaderVisibility(visible: boolean) {\r\n            gsap.set('.buying-online-page-header--container', { y: visible ? 64 : 0 });\r\n        }\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '#main',\r\n            start: 'top top',\r\n            endTrigger: '#footer',\r\n            end: 'bottom top',\r\n            onEnter: () => {\r\n                toggleHeaderVisibility(true);\r\n            },\r\n            onLeaveBack: () => {\r\n                toggleHeaderVisibility(false);\r\n            },\r\n            invalidateOnRefresh: true,\r\n        });\r\n    };\r\n\r\n    return (\r\n        <div className=\"buying-online-page-header\">\r\n            {vehicleLabel.length ? (\r\n                <div className=\"buying-online-page-header--back\">\r\n                    <a\r\n                        href=\"#\"\r\n                        onClick={(e) => {\r\n                            e.preventDefault();\r\n                            window.history.back();\r\n                        }}\r\n                        className=\"buying-online-page-header--back-button\"\r\n                    >\r\n                        <span className=\"buying-online-page-header--back-arrow\">{SVGs.arrowIcon}</span>\r\n                        <span className=\"buying-online-page-header--back-label\">\r\n                            Back{' '}\r\n                            <span className=\"buying-online-page-header--back-label__desktop\">to {vehicleLabel}</span>\r\n                        </span>\r\n                    </a>\r\n                </div>\r\n            ) : (\r\n                <h1 className=\"buying-online-page-header--heading\">Buying Online</h1>\r\n            )}\r\n            <div className=\"buying-online-page-header--cta\">\r\n                <a\r\n                    id=\"page-header-cta\"\r\n                    href=\"/cars/all\"\r\n                    className=\"buying-online-page-header--cta-button\"\r\n                >\r\n                    Find a Car\r\n                </a>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default PageHeader;\r\n","import { useEffect } from 'react';\r\nimport { gsap, TimelineMax } from 'gsap';\r\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\r\n\r\nconst Hero = () => {\r\n    useEffect(() => {\r\n        gsap.registerPlugin(ScrollTrigger as any);\r\n        initCarAnimation();\r\n        initFixedHeading();\r\n    }, []);\r\n\r\n    const initCarAnimation = () => {\r\n        const carLeaveScene = new TimelineMax({ paused: true });\r\n        carLeaveScene.from('.buying-online-hero--car-image', { x: '350px', duration: 0 });\r\n        carLeaveScene.to('.buying-online-hero--car-image', {\r\n            x: `-${window.innerWidth}px`,\r\n            ease: 'Power3.in',\r\n            duration: 4,\r\n        });\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '.buying-online-hero--car-image',\r\n            start: 'top top',\r\n            animation: carLeaveScene,\r\n            invalidateOnRefresh: true,\r\n        });\r\n\r\n        let xPos = 280;\r\n        if (window.innerWidth < 700) {\r\n            xPos = 280;\r\n        } else if (window.innerWidth < 900) {\r\n            xPos = 220;\r\n        }\r\n        gsap.to('.buying-online-hero--car-image', { x: `${xPos}px`, duration: 2, ease: 'Power3.out', delay: 0.25 });\r\n    };\r\n\r\n    const initFixedHeading = () => {\r\n        function setPosition(val: string) {\r\n            const topVal = val === 'absolute' ? '100vh' : 'unset';\r\n            gsap.set('.buying-online-hero--heading-fixed-container', { position: val, top: topVal });\r\n        }\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '.buying-online-hero--container',\r\n            start: 'bottom-=300 top',\r\n            onEnter: () => {\r\n                setPosition('absolute');\r\n            },\r\n            onLeaveBack: () => {\r\n                setPosition('fixed');\r\n            },\r\n        });\r\n    };\r\n\r\n    return (\r\n        <div className=\"buying-online-hero\">\r\n            <div className=\"buying-online-hero--desktop-flex-container\">\r\n                <div className=\"buying-online-hero--heading-container\">\r\n                    <div className=\"buying-online-hero--heading-fixed-container\">\r\n                        <h1 id=\"main-content-heading\" className=\"buying-online-hero--heading-copy\">\r\n                            Find the one, buy it online\r\n                        </h1>\r\n                    </div>\r\n                </div>\r\n                <div className=\"buying-online-hero--image-container\">\r\n                    <div className=\"buying-online-hero--image-flex-container\">\r\n                        <img\r\n                            className=\"buying-online-hero--phone-image\"\r\n                            src=\"/home/images/buying-online/hero/buyonline-hero-phone.png\"\r\n                            alt=\"\"\r\n                        />\r\n                        <div className=\"buying-online-hero--clipping-mask-container\">\r\n                            <img\r\n                                className=\"buying-online-hero--car-image\"\r\n                                src=\"/home/images/buying-online/hero/buyonline-hero-car.png\"\r\n                                alt=\"\"\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Hero;\r\n","/*!\r\n * DrawSVGPlugin 3.6.0\r\n * https://greensock.com\r\n *\r\n * @license Copyright 2008-2021, GreenSock. All rights reserved.\r\n * Subject to the terms at https://greensock.com/standard-license or for\r\n * Club GreenSock members, the agreement issued with that membership.\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\nvar gsap,\r\n    _toArray,\r\n    _doc,\r\n    _win,\r\n    _isEdge,\r\n    _coreInitted,\r\n    _windowExists = function _windowExists() {\r\n  return typeof window !== \"undefined\";\r\n},\r\n    _getGSAP = function _getGSAP() {\r\n  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\r\n},\r\n    _numExp = /[-+=\\.]*\\d+[\\.e\\-\\+]*\\d*[e\\-\\+]*\\d*/gi,\r\n    //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\r\n_types = {\r\n  rect: [\"width\", \"height\"],\r\n  circle: [\"r\", \"r\"],\r\n  ellipse: [\"rx\", \"ry\"],\r\n  line: [\"x2\", \"y2\"]\r\n},\r\n    _round = function _round(value) {\r\n  return Math.round(value * 10000) / 10000;\r\n},\r\n    _parseNum = function _parseNum(value) {\r\n  return parseFloat(value) || 0;\r\n},\r\n    _parseSingleVal = function _parseSingleVal(value, length) {\r\n  var num = _parseNum(value);\r\n\r\n  return ~value.indexOf(\"%\") ? num / 100 * length : num;\r\n},\r\n    _getAttributeAsNumber = function _getAttributeAsNumber(target, attr) {\r\n  return _parseNum(target.getAttribute(attr));\r\n},\r\n    _sqrt = Math.sqrt,\r\n    _getDistance = function _getDistance(x1, y1, x2, y2, scaleX, scaleY) {\r\n  return _sqrt(Math.pow((_parseNum(x2) - _parseNum(x1)) * scaleX, 2) + Math.pow((_parseNum(y2) - _parseNum(y1)) * scaleY, 2));\r\n},\r\n    _warn = function _warn(message) {\r\n  return console.warn(message);\r\n},\r\n    _hasNonScalingStroke = function _hasNonScalingStroke(target) {\r\n  return target.getAttribute(\"vector-effect\") === \"non-scaling-stroke\";\r\n},\r\n    _bonusValidated = 1,\r\n    //<name>DrawSVGPlugin</name>\r\n//accepts values like \"100%\" or \"20% 80%\" or \"20 50\" and parses it into an absolute start and end position on the line/stroke based on its length. Returns an an array with the start and end values, like [0, 243]\r\n_parse = function _parse(value, length, defaultStart) {\r\n  var i = value.indexOf(\" \"),\r\n      s,\r\n      e;\r\n\r\n  if (i < 0) {\r\n    s = defaultStart !== undefined ? defaultStart + \"\" : value;\r\n    e = value;\r\n  } else {\r\n    s = value.substr(0, i);\r\n    e = value.substr(i + 1);\r\n  }\r\n\r\n  s = _parseSingleVal(s, length);\r\n  e = _parseSingleVal(e, length);\r\n  return s > e ? [e, s] : [s, e];\r\n},\r\n    _getLength = function _getLength(target) {\r\n  target = _toArray(target)[0];\r\n\r\n  if (!target) {\r\n    return 0;\r\n  }\r\n\r\n  var type = target.tagName.toLowerCase(),\r\n      style = target.style,\r\n      scaleX = 1,\r\n      scaleY = 1,\r\n      length,\r\n      bbox,\r\n      points,\r\n      prevPoint,\r\n      i,\r\n      rx,\r\n      ry;\r\n\r\n  if (_hasNonScalingStroke(target)) {\r\n    //non-scaling-stroke basically scales the shape and then strokes it at the screen-level (after transforms), thus we need to adjust the length accordingly.\r\n    scaleY = target.getScreenCTM();\r\n    scaleX = _sqrt(scaleY.a * scaleY.a + scaleY.b * scaleY.b);\r\n    scaleY = _sqrt(scaleY.d * scaleY.d + scaleY.c * scaleY.c);\r\n  }\r\n\r\n  try {\r\n    //IE bug: calling <path>.getTotalLength() locks the repaint area of the stroke to whatever its current dimensions are on that frame/tick. To work around that, we must call getBBox() to force IE to recalculate things.\r\n    bbox = target.getBBox(); //solely for fixing bug in IE - we don't actually use the bbox.\r\n  } catch (e) {\r\n    //firefox has a bug that throws an error if the element isn't visible.\r\n    _warn(\"Some browsers won't measure invisible elements (like display:none or masks inside defs).\");\r\n  }\r\n\r\n  var _ref = bbox || {\r\n    x: 0,\r\n    y: 0,\r\n    width: 0,\r\n    height: 0\r\n  },\r\n      x = _ref.x,\r\n      y = _ref.y,\r\n      width = _ref.width,\r\n      height = _ref.height;\r\n\r\n  if ((!bbox || !width && !height) && _types[type]) {\r\n    //if the element isn't visible, try to discern width/height using its attributes.\r\n    width = _getAttributeAsNumber(target, _types[type][0]);\r\n    height = _getAttributeAsNumber(target, _types[type][1]);\r\n\r\n    if (type !== \"rect\" && type !== \"line\") {\r\n      //double the radius for circles and ellipses\r\n      width *= 2;\r\n      height *= 2;\r\n    }\r\n\r\n    if (type === \"line\") {\r\n      x = _getAttributeAsNumber(target, \"x1\");\r\n      y = _getAttributeAsNumber(target, \"y1\");\r\n      width = Math.abs(width - x);\r\n      height = Math.abs(height - y);\r\n    }\r\n  }\r\n\r\n  if (type === \"path\") {\r\n    prevPoint = style.strokeDasharray;\r\n    style.strokeDasharray = \"none\";\r\n    length = target.getTotalLength() || 0;\r\n    scaleX !== scaleY && _warn(\"Warning: <path> length cannot be measured when vector-effect is non-scaling-stroke and the element isn't proportionally scaled.\");\r\n    length *= (scaleX + scaleY) / 2;\r\n    style.strokeDasharray = prevPoint;\r\n  } else if (type === \"rect\") {\r\n    length = width * 2 * scaleX + height * 2 * scaleY;\r\n  } else if (type === \"line\") {\r\n    length = _getDistance(x, y, x + width, y + height, scaleX, scaleY);\r\n  } else if (type === \"polyline\" || type === \"polygon\") {\r\n    points = target.getAttribute(\"points\").match(_numExp) || [];\r\n    type === \"polygon\" && points.push(points[0], points[1]);\r\n    length = 0;\r\n\r\n    for (i = 2; i < points.length; i += 2) {\r\n      length += _getDistance(points[i - 2], points[i - 1], points[i], points[i + 1], scaleX, scaleY) || 0;\r\n    }\r\n  } else if (type === \"circle\" || type === \"ellipse\") {\r\n    rx = width / 2 * scaleX;\r\n    ry = height / 2 * scaleY;\r\n    length = Math.PI * (3 * (rx + ry) - _sqrt((3 * rx + ry) * (rx + 3 * ry)));\r\n  }\r\n\r\n  return length || 0;\r\n},\r\n    _getPosition = function _getPosition(target, length) {\r\n  target = _toArray(target)[0];\r\n\r\n  if (!target) {\r\n    return [0, 0];\r\n  }\r\n\r\n  length || (length = _getLength(target) + 1);\r\n\r\n  var cs = _win.getComputedStyle(target),\r\n      dash = cs.strokeDasharray || \"\",\r\n      offset = _parseNum(cs.strokeDashoffset),\r\n      i = dash.indexOf(\",\");\r\n\r\n  i < 0 && (i = dash.indexOf(\" \"));\r\n  dash = i < 0 ? length : _parseNum(dash.substr(0, i));\r\n  dash > length && (dash = length);\r\n  return [-offset || 0, dash - offset || 0];\r\n},\r\n    _initCore = function _initCore() {\r\n  if (_windowExists()) {\r\n    _doc = document;\r\n    _win = window;\r\n    _coreInitted = gsap = _getGSAP();\r\n    _toArray = gsap.utils.toArray;\r\n    _isEdge = ((_win.navigator || {}).userAgent || \"\").indexOf(\"Edge\") !== -1; //Microsoft Edge has a bug that causes it not to redraw the path correctly if the stroke-linecap is anything other than \"butt\" (like \"round\") and it doesn't match the stroke-linejoin. A way to trigger it is to change the stroke-miterlimit, so we'll only do that if/when we have to (to maximize performance)\r\n  }\r\n};\r\n\r\nexport var DrawSVGPlugin = {\r\n  version: \"3.6.0\",\r\n  name: \"drawSVG\",\r\n  register: function register(core) {\r\n    gsap = core;\r\n\r\n    _initCore();\r\n  },\r\n  init: function init(target, value, tween, index, targets) {\r\n    if (!target.getBBox) {\r\n      return false;\r\n    }\r\n\r\n    _coreInitted || _initCore();\r\n\r\n    var length = _getLength(target),\r\n        start,\r\n        end,\r\n        cs;\r\n\r\n    this._style = target.style;\r\n    this._target = target;\r\n\r\n    if (value + \"\" === \"true\") {\r\n      value = \"0 100%\";\r\n    } else if (!value) {\r\n      value = \"0 0\";\r\n    } else if ((value + \"\").indexOf(\" \") === -1) {\r\n      value = \"0 \" + value;\r\n    }\r\n\r\n    start = _getPosition(target, length);\r\n    end = _parse(value, length, start[0]);\r\n    this._length = _round(length);\r\n    this._dash = _round(start[1] - start[0]); //some browsers render artifacts if dash is 0, so we use a very small number in that case.\r\n\r\n    this._offset = _round(-start[0]);\r\n    this._dashPT = this.add(this, \"_dash\", this._dash, _round(end[1] - end[0]));\r\n    this._offsetPT = this.add(this, \"_offset\", this._offset, _round(-end[0]));\r\n\r\n    if (_isEdge) {\r\n      //to work around a bug in Microsoft Edge, animate the stroke-miterlimit by 0.0001 just to trigger the repaint (unnecessary if it's \"round\" and stroke-linejoin is also \"round\"). Imperceptible, relatively high-performance, and effective. Another option was to set the \"d\" <path> attribute to its current value on every tick, but that seems like it'd be much less performant.\r\n      cs = _win.getComputedStyle(target);\r\n\r\n      if (cs.strokeLinecap !== cs.strokeLinejoin) {\r\n        end = _parseNum(cs.strokeMiterlimit);\r\n        this.add(target.style, \"strokeMiterlimit\", end, end + 0.01);\r\n      }\r\n    }\r\n\r\n    this._live = _hasNonScalingStroke(target) || ~(value + \"\").indexOf(\"live\");\r\n\r\n    this._props.push(\"drawSVG\");\r\n\r\n    return _bonusValidated;\r\n  },\r\n  render: function render(ratio, data) {\r\n    var pt = data._pt,\r\n        style = data._style,\r\n        length,\r\n        lengthRatio,\r\n        dash,\r\n        offset;\r\n\r\n    if (pt) {\r\n      //when the element has vector-effect=\"non-scaling-stroke\" and the SVG is resized (like on a window resize), it actually changes the length of the stroke! So we must sense that and make the proper adjustments.\r\n      if (data._live) {\r\n        length = _getLength(data._target);\r\n\r\n        if (length !== data._length) {\r\n          lengthRatio = length / data._length;\r\n          data._length = length;\r\n          data._offsetPT.s *= lengthRatio;\r\n          data._offsetPT.c *= lengthRatio;\r\n\r\n          if (data._dashPT) {\r\n            data._dashPT.s *= lengthRatio;\r\n            data._dashPT.c *= lengthRatio;\r\n          } else {\r\n            data._dash *= lengthRatio;\r\n          }\r\n        }\r\n      }\r\n\r\n      while (pt) {\r\n        pt.r(ratio, pt.d);\r\n        pt = pt._next;\r\n      }\r\n\r\n      dash = data._dash || ratio && ratio !== 1 && 0.0001 || 0; // only let it be zero if it's at the start or end of the tween.\r\n\r\n      length = data._length - dash + 0.1;\r\n      offset = data._offset;\r\n      dash && offset && dash + Math.abs(offset % data._length) > data._length - 0.2 && (offset += offset < 0 ? 0.1 : -0.1) && (length += 0.1);\r\n      style.strokeDashoffset = dash ? offset : offset + 0.001;\r\n      style.strokeDasharray = length < 0.2 ? \"none\" : dash ? dash + \"px,\" + length + \"px\" : \"0px, 999999px\";\r\n    }\r\n  },\r\n  getLength: _getLength,\r\n  getPosition: _getPosition\r\n};\r\n_getGSAP() && gsap.registerPlugin(DrawSVGPlugin);\r\nexport { DrawSVGPlugin as default };","import { useEffect } from 'react';\r\nimport { gsap, TimelineMax } from 'gsap';\r\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\r\nimport { DrawSVGPlugin } from '../vendor/gsap/DrawSVGPlugin';\r\nimport SVGs from '../utils/svgs';\r\n\r\nconst Steps = () => {\r\n    useEffect(() => {\r\n        gsap.registerPlugin(ScrollTrigger as any, DrawSVGPlugin as any);\r\n        registerAnimations();\r\n    }, []);\r\n\r\n    const step1Transition = () => {\r\n        const pillTransition = new TimelineMax();\r\n        pillTransition.fromTo(\r\n            '.buying-online-steps--step-pill-outer-label',\r\n            { y: 120 },\r\n            { y: 0, ease: 'back.out(.75)', duration: 0.75 }\r\n        );\r\n        pillTransition.fromTo(\r\n            '.buying-online-steps--step-pill',\r\n            { y: 120 },\r\n            { y: 0, ease: 'back.out(.75)', duration: 0.75 },\r\n            '-=.625'\r\n        );\r\n        pillTransition.from(\r\n            '.buying-online-steps--step-pill-animated-content',\r\n            { opacity: 0, duration: 0.75 },\r\n            '-=.75'\r\n        );\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '.buying-online-steps--step-1',\r\n            start: 'top center',\r\n            animation: pillTransition,\r\n            toggleActions: 'play reverse play reverse',\r\n        });\r\n    };\r\n\r\n    const step2Transition = () => {\r\n        const textCommuncation = new TimelineMax();\r\n        textCommuncation.fromTo(\r\n            '.buying-online-steps--communication-bubble-1',\r\n            { y: 80 },\r\n            { y: 0, ease: 'back.out(.75)', duration: 0.75 }\r\n        );\r\n        textCommuncation.from('.buying-online-steps--communication-bubble-1', { opacity: 0, duration: 0.75 }, '-=.75');\r\n        textCommuncation.fromTo(\r\n            '.buying-online-steps--communication-bubble-2',\r\n            { y: 80 },\r\n            { y: 0, ease: 'back.out(.75)', duration: 0.75 }\r\n        );\r\n        textCommuncation.from('.buying-online-steps--communication-bubble-2', { opacity: 0, duration: 0.75 }, '-=.75');\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '.buying-online-steps--step-2',\r\n            start: 'top-=150 center',\r\n            animation: textCommuncation,\r\n            toggleActions: 'play reverse play reverse',\r\n        });\r\n    };\r\n\r\n    const step3Transition = () => {\r\n        const signatureModal = new TimelineMax();\r\n        signatureModal.from('.buying-online-steps--signature-container', {\r\n            scale: 0.5,\r\n            opacity: 0,\r\n            ease: 'back.out(2.25)',\r\n            duration: 0.625,\r\n        });\r\n        signatureModal.from(\r\n            '.buying-online-steps--signature-underline',\r\n            { width: 0, ease: 'Power3.easeOut', duration: 0.5 },\r\n            '-=.125'\r\n        );\r\n        signatureModal.from(\r\n            '.buying-online-steps--signature-sign-flag',\r\n            { opacity: 0, y: -45, ease: 'back.out(1.7)', duration: 0.5 },\r\n            '-=.3625'\r\n        );\r\n        signatureModal.from('#buying-online-steps--signature-svg path', { drawSVG: false, duration: 1.5 });\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '.buying-online-steps--step-3',\r\n            start: 'top center',\r\n            animation: signatureModal,\r\n            toggleActions: 'play reverse play reverse',\r\n        });\r\n    };\r\n\r\n    const registerAnimations = () => {\r\n        step1Transition();\r\n        step2Transition();\r\n        step3Transition();\r\n    };\r\n\r\n    return (\r\n        <div className=\"buying-online-steps\">\r\n            {/* STEP 1 */}\r\n            <section className=\"buying-online-steps--step-container buying-online-steps--step-1\">\r\n                <div className=\"buying-online-steps--copy-container\">\r\n                    <h2 className=\"buying-online-steps--step-heading\">1. Choose</h2>\r\n                    <p className=\"buying-online-steps--step-subheading\">\r\n                        Once you find a car to buy, decide how you want it. We'll call to talk next steps.\r\n                    </p>\r\n                </div>\r\n                <div className=\"buying-online-steps--step-image-flex-container\">\r\n                    <div className=\"buying-online-steps--square-img-container\">\r\n                        <img\r\n                            src=\"/home/images/buying-online/steps/buyonline-delivery.jpg\"\r\n                            alt=\"blue vehicle delivered to customer's house\"\r\n                        />\r\n                        <div className=\"buying-online-steps--step-pill-animated-content\">\r\n                            <h3 className=\"buying-online-steps--step-pill-outer-label\">Delivery to</h3>\r\n                            <div className=\"buying-online-steps--step-pill\">\r\n                                <span className=\"buying-online-steps--step-pill-icon\">{SVGs.homeIcon}</span>\r\n                                <span className=\"buying-online-steps--step-pill-label\">Home or work</span>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"buying-online-steps--square-img-container\">\r\n                        <img\r\n                            src=\"/home/images/buying-online/steps/buyonline-epu.jpg\"\r\n                            alt=\"blue vehicle sitting in parking spot at CarMax location\"\r\n                        />\r\n                        <div className=\"buying-online-steps--step-pill-animated-content\">\r\n                            <h3 className=\"buying-online-steps--step-pill-outer-label\">Express pickup at</h3>\r\n                            <div className=\"buying-online-steps--step-pill\">\r\n                                <span className=\"buying-online-steps--step-pill-icon\">{SVGs.locationIcon}</span>\r\n                                <span className=\"buying-online-steps--step-pill-label\">CarMax store</span>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </section>\r\n\r\n            {/* STEP 2 */}\r\n            <section className=\"buying-online-steps--step-container buying-online-steps--step-2\">\r\n                <div className=\"buying-online-steps--copy-container\">\r\n                    <h2 className=\"buying-online-steps--step-heading\">2. Buy</h2>\r\n                    <p className=\"buying-online-steps--step-subheading\">\r\n                        Fill in your details from home. We provide remote support along the way.\r\n                    </p>\r\n                </div>\r\n                <div className=\"buying-online-steps--image-container\">\r\n                    <div className=\"buying-online-steps--wide-img-container\">\r\n                        <picture>\r\n                            <source\r\n                                media=\"(max-width: 599px)\"\r\n                                srcSet=\"/home/images/buying-online/steps/buyonline-buy-sm.jpg\"\r\n                            />\r\n                            <source\r\n                                media=\"(min-width: 600px)\"\r\n                                srcSet=\"/home/images/buying-online/steps/buyonline-buy.jpg\"\r\n                            />\r\n                            <img\r\n                                src=\"/home/images/buying-online/steps/buyonline-buy-sm.jpg\"\r\n                                alt=\"couple in kitchen looking at the CarMax website on a tablet\"\r\n                            />\r\n                        </picture>\r\n                    </div>\r\n                    <ul className=\"buying-online-steps--communication-container\">\r\n                        <li className=\"buying-online-steps--communication-bubble buying-online-steps--communication-bubble-1\">\r\n                            <div className=\"buying-online-steps--communication-avatar\">\r\n                                <img\r\n                                    src=\"/home/images/buying-online/steps/buy-jordan.png\"\r\n                                    alt=\"profile picture of CarMax representative, Jordan\"\r\n                                />\r\n                            </div>\r\n                            <div className=\"buying-online-steps--communication-copy-container\">\r\n                                <div>\r\n                                    <span className=\"buying-online-steps--communication-name\">Jordan</span>\r\n                                    <span className=\"buying-online-steps--communication-time\">2:30pm</span>\r\n                                </div>\r\n                                <div className=\"buying-online-steps--communication-sentence\">\r\n                                    Your financing is all set and is ready for your review\r\n                                </div>\r\n                            </div>\r\n                        </li>\r\n                        <li className=\"buying-online-steps--communication-bubble buying-online-steps--communication-bubble-2\">\r\n                            <div className=\"buying-online-steps--communication-avatar\">\r\n                                <img\r\n                                    src=\"/home/images/buying-online/steps/buy-monique.png\"\r\n                                    alt=\"profile picture of CarMax customer, Monique\"\r\n                                />\r\n                            </div>\r\n                            <div className=\"buying-online-steps--communication-copy-container\">\r\n                                <div>\r\n                                    <span className=\"buying-online-steps--communication-name\">Monique</span>\r\n                                    <span className=\"buying-online-steps--communication-time\">2:35pm</span>\r\n                                </div>\r\n                                <div className=\"buying-online-steps--communication-sentence\">\r\n                                    Great! Can you also help me get a trade-in offer?\r\n                                </div>\r\n                            </div>\r\n                        </li>\r\n                    </ul>\r\n                </div>\r\n            </section>\r\n\r\n            {/* STEP 3 */}\r\n            <section className=\"buying-online-steps--step-container buying-online-steps--step-3\">\r\n                <div className=\"buying-online-steps--copy-container\">\r\n                    <h2 className=\"buying-online-steps--step-heading\">3. eSign</h2>\r\n                    <p className=\"buying-online-steps--step-subheading\">\r\n                        Once your order is all set, we schedule your delivery or express pickup{' '}\r\n                        <span className=\"dagger\">&dagger;</span>.\r\n                    </p>\r\n                </div>\r\n                <div className=\"buying-online-steps--image-container\">\r\n                    <div className=\"buying-online-steps--overflow-img-container\">\r\n                        <img\r\n                            src=\"/home/images/buying-online/steps/buyonline-esign.png\"\r\n                            alt=\"digital signature written on phone in landscape orientation\"\r\n                        />\r\n                    </div>\r\n                    <div className=\"buying-online-steps--signature-container\">\r\n                        <div className=\"buying-online-steps--signature-underline\" />\r\n                        <div className=\"buying-online-steps--signature-sign-flag\">\r\n                            <div className=\"buying-online-steps--signature-sign-label\">Sign</div>\r\n                        </div>\r\n                        <div className=\"buying-online-steps--signature\">{SVGs.signaturePath}</div>\r\n                    </div>\r\n                </div>\r\n            </section>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default Steps;\r\n","import { useEffect } from 'react';\r\nimport { gsap, TimelineMax } from 'gsap';\r\nimport { ScrollTrigger } from 'gsap/ScrollTrigger';\r\n\r\nconst LoveItOrReturnIt = () => {\r\n    useEffect(() => {\r\n        gsap.registerPlugin(ScrollTrigger as any);\r\n        initScrollAnimations();\r\n    }, []);\r\n\r\n    const initScrollAnimations = () => {\r\n        const tl = new TimelineMax();\r\n        tl.to(\r\n            '.buying-online-love-it--bordered-overlay',\r\n            {\r\n                'border-left-width': 0,\r\n                'border-right-width': 0,\r\n                'border-top-width': 0,\r\n                'border-bottom-width': 0,\r\n                ease: 'Power3.easeOut',\r\n                duration: 3,\r\n            },\r\n            '-=3'\r\n        );\r\n        tl.from(\r\n            '.buying-online-love-it--darkened-overlay',\r\n            { autoAlpha: 0, ease: 'Power3.easeOut', duration: 3 },\r\n            '-=3'\r\n        );\r\n        tl.from(\r\n            '.buying-online-love-it--content-container',\r\n            { opacity: 0, y: 250, ease: 'Power3.easeOut', duration: 3 },\r\n            '-=2'\r\n        );\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '#buying-online-love-it--container',\r\n            start: 'top-=64 top',\r\n            end: `bottom-=128 top`,\r\n            pin: true,\r\n            invalidateOnRefresh: true,\r\n        });\r\n\r\n        (ScrollTrigger as any).create({\r\n            trigger: '#buying-online-love-it--container',\r\n            start: 'top-=244 top',\r\n            scrub: true,\r\n            animation: tl,\r\n        });\r\n    };\r\n\r\n    return (\r\n        <div className=\"buying-online-love-it\">\r\n            <div className=\"buying-online-love-it--darkened-overlay\" />\r\n            <div className=\"buying-online-love-it--bordered-overlay\" />\r\n            <div className=\"buying-online-love-it--max-width-container\">\r\n                <div className=\"buying-online-love-it--content-container\">\r\n                    <h2 className=\"buying-online-love-it--heading\">\r\n                        The way <br /> car buying <br /> should be\r\n                    </h2>\r\n                    <p className=\"buying-online-love-it--copy\">Upfront prices. CarMax Certified quality.</p>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default LoveItOrReturnIt;\r\n","import Icons from '../../../../../utilities/icons';\r\nimport './QuestionLink.scss';\r\n\r\ninterface IQuestionLinkProps {\r\n    url: string;\r\n    text: string;\r\n}\r\nexport const QuestionLink = (props: IQuestionLinkProps) => {\r\n    return (\r\n        <a className=\"faq-question-link\" href={props.url}>\r\n            {props.text}\r\n            <span>\r\n                {Icons.rightArrowIcon}\r\n            </span>\r\n        </a>\r\n    );\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport EventChannel from '../../../events/EventChannel';\r\nimport { CUSTOM_EVENTS, TOPICS } from '../../../events/constants';\r\nimport { Store } from '../../../types/store';\r\nimport { getFaqSections } from '../../../api/faq-content-service-api';\r\nimport { FaqSection, FaqItem } from '../../../api/types/faq-content-api';\r\nimport { QuestionLink } from '../../faq/faq/components/QuestionLink/QuestionLink';\r\n\r\nconst FAQ = () => {\r\n    const [nearestStoreId, setNearestStoreId] = useState<string>();\r\n    const [buyOnlineFaqContent, setBuyOnlineFaqContent] = useState<FaqSection>();\r\n\r\n    const faqSectionTitle = 'Buying a Car';\r\n\r\n    const attachNearestStoreChangeEventHandlers = () => {\r\n        const eventChannel = new EventChannel();\r\n        const myStoreModuleUpdatesEvent = new CustomEvent(CUSTOM_EVENTS.MY_STORE_MODULE_UPDATES, {\r\n            detail: {\r\n                done: (store: Store) => eventChannel.publish(TOPICS.MY_STORE_MODULE_UPDATES, store),\r\n            },\r\n        });\r\n\r\n        const handleEvent = (store: Store) => {\r\n            if (store && store.Id && store.Id !== nearestStoreId) {\r\n                setNearestStoreId(store.Id);\r\n            }\r\n        };\r\n\r\n        eventChannel.subscribe(TOPICS.MY_STORE_MODULE_UPDATES, handleEvent);\r\n\r\n        document.documentElement.dispatchEvent(myStoreModuleUpdatesEvent);\r\n    };\r\n    attachNearestStoreChangeEventHandlers();\r\n\r\n    useEffect(() => {\r\n        getFaqSections().then((res) => {\r\n            const faqSections = res.filter((item) => {\r\n                return item.sectionTitle === faqSectionTitle;\r\n            });\r\n            setBuyOnlineFaqContent(faqSections[0]);\r\n        });\r\n    }, []);\r\n\r\n    return buyOnlineFaqContent ? (\r\n        <div className=\"buying-online-faq\">\r\n            <div className=\"buying-online-faq--heading-container\">\r\n                <h2 className=\"buying-online-faq--heading\">Frequently Asked Questions</h2>\r\n                <div className=\"buying-online-faq--desktop-button-container\">\r\n                    <a\r\n                        href=\"/help-center#contact-us\"\r\n                        className=\"buying-online-faq--transparent-button buying-online-faq--desktop-button\"\r\n                    >\r\n                        Need more help?\r\n                    </a>\r\n                </div>\r\n            </div>\r\n            <div className=\"buying-online-faq--content-container\">\r\n                {buyOnlineFaqContent.faqs.map((faq: FaqItem, index: number) => {\r\n                    return <QuestionLink key={index} text={faq.question} url={faq.url} />;\r\n                })}\r\n                <div className=\"buying-online-faq--mobile-button-container\">\r\n                    <a\r\n                        href=\"/help-center#contact-us\"\r\n                        className=\"buying-online-faq--transparent-button buying-online-faq--mobile-button\"\r\n                    >\r\n                        Need more help?\r\n                    </a>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    ) : (\r\n        <></>\r\n    );\r\n};\r\n\r\nexport default FAQ;\r\n","import { FC, useState, useEffect, useContext } from 'react';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { FBSContext } from '../../../context';\r\nimport ReturnVisitorCarousel from '../../../components/carousels/home-base-hero-carousel/ReturnVisitorCarousel';\r\nimport { useLocalCarsStore } from '../../../context/localCarsStore';\r\nimport { useShallow } from 'zustand/react/shallow';\r\n\r\ninterface IMiniHomebaseProps {\r\n    viewedVehicleTileList: IVehicleTile[];\r\n    updatedViewedTiles: (vehicleTile: IVehicleTile) => void;\r\n    onOpenSnackBar: any;\r\n}\r\n\r\nexport const MiniHomebase: FC<IMiniHomebaseProps> = ({ viewedVehicleTileList, updatedViewedTiles, onOpenSnackBar }) => {\r\n    const [favoritedStockNumberList, setFavoritedStockNumberList] = useState<number[]>([]);\r\n    const [stockNumbersPendingFavoritesUpdate, setStockNumbersPendingFavoritesUpdate] = useState<number[]>([]);\r\n\r\n    const fbs = useContext(FBSContext);\r\n\r\n    const { favoriteVehicles } = useLocalCarsStore(\r\n        useShallow((state) => ({\r\n            favoriteVehicles: state.favoriteVehicles,\r\n        }))\r\n    );\r\n\r\n    useEffect(() => {\r\n        setFavoritedStockNumberList(favoriteVehicles);\r\n    }, [favoriteVehicles]);\r\n\r\n    return (\r\n        <div className=\"buying-online-mini-homebase\">\r\n            <h2 className=\"buying-online-mini-homebase--heading\">Pick up where you left off</h2>\r\n            <ReturnVisitorCarousel\r\n                id=\"kmx-viewed-carousel\"\r\n                isMiniHomebase={true}\r\n                carouselName=\"mini-homebase\"\r\n                analyticsName=\"MiniHomebase\"\r\n                isVisible={true}\r\n                vehicleTileList={viewedVehicleTileList}\r\n                favoritedStockNumberList={favoritedStockNumberList}\r\n                stockNumbersPendingFavoritesUpdate={stockNumbersPendingFavoritesUpdate}\r\n                updatedViewedTiles={updatedViewedTiles}\r\n                enableRemove={true}\r\n                fbsData={fbs.fbsData}\r\n                onOpenSnackBar={onOpenSnackBar}\r\n            />\r\n        </div>\r\n    );\r\n};\r\n","export const MiniHomebasePusher = () => {\r\n    return (\r\n        <div className=\"buying-online-mini-homebase-pusher\">\r\n            <div className=\"buying-online-mini-homebase-pusher--flex-container\">\r\n                <h2 className=\"buying-online-mini-homebase-pusher--heading\">Ready to find the one?</h2>\r\n                <a id=\"mini-homebase-cta\" href=\"/cars/all\" className=\"buying-online-mini-homebase-pusher--cta\">\r\n                    Start a Search\r\n                </a>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","import { useContext, useEffect, useState } from 'react';\r\nimport { getRecentlyViewedVehicleTiles } from '../../../utilities/vehicleTileBuilder';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { MAX_RECENTLY_VIEWED_VEHICLE_TILES } from '../utils/constants';\r\nimport * as savedVehicles from '../utils/savedVehicles';\r\nimport { getStoreId } from '../../../utilities/visitor-cookie';\r\nimport { MiniHomebase } from './MiniHomebase';\r\nimport { MiniHomebasePusher } from './MiniHomebasePusher';\r\nimport { removeViewedVehicleItemLocalStorage } from '../../home/utilities/viewedVehiclesTileBuilder';\r\nimport TileKebabMenuItemSnackbar from '../../home/hero/tile-kebab-menu/TileKebabMenuItemSnackbar';\r\nimport { FBSContext } from '../../../context';\r\n\r\ninterface ISnackBar {\r\n    isOpen: boolean;\r\n    text: string;\r\n}\r\n\r\nexport const MiniHomebaseContainer = () => {\r\n    const [hasLoadedSavedVehiclesAssets, setHasLoadedSavedVehiclesAssets] = useState(false);\r\n    const [viewedVehicleTileList, setViewedVehicleTileList] = useState<IVehicleTile[]>([]);\r\n    const [snackbar, setSnackbar] = useState<ISnackBar>({ isOpen: false, text: '' });\r\n    const context = useContext(FBSContext);\r\n\r\n    useEffect(() => {\r\n        loadSavedVehiclesAssets();\r\n        loadRecentlyViewedVehicleTiles();\r\n    }, []);\r\n\r\n    const loadSavedVehiclesAssets = () => {\r\n        savedVehicles.loadSavedVehiclesAssets(() => {\r\n            setHasLoadedSavedVehiclesAssets(true);\r\n        });\r\n    };\r\n\r\n    const loadRecentlyViewedVehicleTiles = (): void => {\r\n        getRecentlyViewedVehicleTiles(MAX_RECENTLY_VIEWED_VEHICLE_TILES, getStoreId()).then(\r\n            (vehicleTileList: IVehicleTile[]) => {\r\n                setViewedVehicleTileList(vehicleTileList);\r\n                context.setVehicleList(vehicleTileList);\r\n            }\r\n        );\r\n    };\r\n\r\n    const updatedViewedTiles = (tileToRemove: IVehicleTile) => {\r\n        const newViewedTileList: IVehicleTile[] = viewedVehicleTileList.filter(\r\n            (tileData) => tileData.stockNumber !== tileToRemove.stockNumber\r\n        );\r\n\r\n        removeViewedVehicleItemLocalStorage(tileToRemove);\r\n        setViewedVehicleTileList(newViewedTileList);\r\n        setSnackbar({ isOpen: true, text: 'Removed from your recently viewed' });\r\n    };\r\n\r\n    const closeSnackbar = () => {\r\n        setSnackbar({ isOpen: false, text: '' });\r\n    };\r\n\r\n    return hasLoadedSavedVehiclesAssets && viewedVehicleTileList.length > 0 ? (\r\n        <>\r\n            <MiniHomebase\r\n                onOpenSnackBar={setSnackbar}\r\n                viewedVehicleTileList={viewedVehicleTileList}\r\n                updatedViewedTiles={updatedViewedTiles}\r\n            />\r\n            <TileKebabMenuItemSnackbar\r\n                icon={undefined}\r\n                isOpen={snackbar.isOpen}\r\n                textLabel={snackbar.text}\r\n                cancelAction={closeSnackbar}\r\n            />\r\n        </>\r\n    ) : (\r\n        <MiniHomebasePusher />\r\n    );\r\n};\r\n","export const getSavedVehicles = (componentCallback: (stockNumberList: number[]) => any) => {\r\n    const event = new CustomEvent('kmxGetSavedCars', {\r\n        bubbles: true,\r\n        detail: {\r\n            callback: (result: Promise<any>) => {\r\n                result.then((stockNumberList: number[]) => {\r\n                    componentCallback(stockNumberList);\r\n                });\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nexport const setSavedVehicle = (sn: number, componentCallback?: (success: boolean) => any) => {\r\n    const event = new CustomEvent('kmxAddSavedCar', {\r\n        bubbles: true,\r\n        detail: {\r\n            stockNumber: sn,\r\n            callback: (result: Promise<any>) => {\r\n                toggleFavoritesResponse(result, componentCallback);\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nexport const removeSavedVehicle = (sn: number, componentCallback?: (success: boolean) => any) => {\r\n    const event = new CustomEvent('kmxRemoveSavedCar', {\r\n        bubbles: true,\r\n        detail: {\r\n            stockNumber: sn,\r\n            callback: (result: Promise<any>) => {\r\n                toggleFavoritesResponse(result, componentCallback);\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nconst toggleFavoritesResponse = (response: Promise<any>, componentCallback?: (success: boolean) => any) => {\r\n    response.then((success: boolean) => {\r\n        success && componentCallback && componentCallback(success);\r\n    });\r\n};\r\n\r\nexport const loadSavedVehiclesAssets = (done: () => any) => {\r\n    const savedVehiclesCSSDataEl = document.querySelector('[data-saved-vehicles-css-src]') as any;\r\n    const savedVehiclesJSDataEl = document.querySelector('[data-saved-vehicles-js-src]') as any;\r\n    const savedVehiclesCSSSrc = savedVehiclesCSSDataEl.getAttribute('data-saved-vehicles-css-src');\r\n    const savedVehiclesJSSrc = savedVehiclesJSDataEl.getAttribute('data-saved-vehicles-js-src');\r\n\r\n    const linkEl = document.createElement('link');\r\n    linkEl.setAttribute('rel', 'stylesheet');\r\n    linkEl.setAttribute('type', 'text/css');\r\n    linkEl.setAttribute('href', savedVehiclesCSSSrc);\r\n\r\n    const scriptEl = document.createElement('script');\r\n    scriptEl.setAttribute('type', 'text/javascript');\r\n    scriptEl.setAttribute('src', savedVehiclesJSSrc);\r\n\r\n    scriptEl.onload = () => {\r\n        linkEl.onload = () => done();\r\n        document.getElementsByTagName('head')[0].appendChild(linkEl);\r\n    };\r\n\r\n    document.getElementsByTagName('head')[0].appendChild(scriptEl);\r\n};\r\n","export const MAX_RECENTLY_VIEWED_VEHICLE_TILES = 10;\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport onDomContentLoaded from '../../utilities/onDomContentLoaded';\r\nimport ErrorBoundary from '../../components/ErrorBoundary';\r\nimport PageHeader from './components/PageHeader';\r\nimport Hero from './components/Hero';\r\nimport Steps from './components/Steps';\r\nimport LoveItOrReturnIt from './components/LoveItOrReturnIt';\r\nimport FAQ from './components/FAQ';\r\nimport { MiniHomebaseContainer } from './components/MiniHomebaseContainer';\r\nimport '../../../scss/pages/buying-online/main.scss';\r\nimport { FBSProvider } from '../../context';\r\n\r\nfunction startup() {\r\n    const stickyHeaderContainer = document.getElementById('buying-online-page-header--container');\r\n    if (stickyHeaderContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <PageHeader />\r\n            </ErrorBoundary>,\r\n            stickyHeaderContainer\r\n        );\r\n    }\r\n\r\n    const heroContainer = document.getElementById('buying-online-hero--container');\r\n    if (heroContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <Hero />\r\n            </ErrorBoundary>,\r\n            heroContainer\r\n        );\r\n    }\r\n\r\n    const stepsContainer = document.getElementById('buying-online-steps--container');\r\n    if (stepsContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <Steps />\r\n            </ErrorBoundary>,\r\n            stepsContainer\r\n        );\r\n    }\r\n\r\n    const loveItContainer = document.getElementById('buying-online-love-it--container');\r\n    if (loveItContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <LoveItOrReturnIt />\r\n            </ErrorBoundary>,\r\n            loveItContainer\r\n        );\r\n    }\r\n\r\n    const FAQContainer = document.getElementById('buying-online-faq--container');\r\n    if (FAQContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <FAQ />\r\n            </ErrorBoundary>,\r\n            FAQContainer\r\n        );\r\n    }\r\n\r\n    const miniHomebaseContainer = document.getElementById('buying-online-mini-homebase--container');\r\n    if (miniHomebaseContainer) {\r\n        ReactDOM.render(\r\n            <ErrorBoundary>\r\n                <FBSProvider>\r\n                    <MiniHomebaseContainer />\r\n                </FBSProvider>\r\n            </ErrorBoundary>,\r\n            miniHomebaseContainer\r\n        );\r\n    }\r\n}\r\n\r\nonDomContentLoaded(() => {\r\n    startup();\r\n});\r\n","import * as React from 'react';\r\n\r\nclass SVGs {\r\n    static get arrowIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\r\n                <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get homeIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get locationIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M12 2a7 7 0 00-7 7c0 5.25 7 13 7 13s7-7.75 7-13a7 7 0 00-7-7zm0 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get locationMUIIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\r\n                <path\r\n                    fillRule=\"evenodd\"\r\n                    clipRule=\"evenodd\"\r\n                    d=\"M2.10156 10.0805C2.10156 5.17635 6.09823 1.17969 11.0024 1.17969C15.9066 1.17969 19.9032 4.95635 19.9032 10.0805C19.9032 15.1853 14.2629 18.8526 12.3804 20.0767L12.3591 20.0905C11.9466 20.3564 11.4699 20.4939 11.0024 20.4939C10.5349 20.4939 10.0582 20.3564 9.64573 20.0905C7.77573 18.8805 2.10156 14.9847 2.10156 10.0805ZM10.3249 18.9823L10.3516 18.9997C10.7457 19.2564 11.2591 19.2564 11.6532 18.9997C13.3674 17.8905 18.6016 14.4989 18.6016 10.0805C18.6016 5.89135 15.1916 2.48135 11.0024 2.48135C6.81323 2.48135 3.40323 5.67135 3.40323 10.0805C3.40323 14.467 8.58373 17.8465 10.3249 18.9823ZM7.60156 10.0805C7.60156 8.20135 9.12323 6.67969 11.0024 6.67969C12.8816 6.67969 14.4032 8.20135 14.4032 10.0805C14.4032 11.9597 12.8816 13.4814 11.0024 13.4814C9.12323 13.4814 7.60156 11.9597 7.60156 10.0805ZM8.90323 10.0805C8.90323 11.2355 9.8474 12.1797 11.0024 12.1797C12.1574 12.1797 13.1016 11.2355 13.1016 10.0805C13.1016 8.92552 12.1574 7.98135 11.0024 7.98135C9.8474 7.98135 8.90323 8.92552 8.90323 10.0805Z\"\r\n                    fill=\"currentColor\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get signaturePath() {\r\n        return (\r\n            <svg\r\n                id=\"buying-online-steps--signature-svg\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"166.72\"\r\n                height=\"86.45\"\r\n                viewBox=\"0 0 166.72 86.45\"\r\n                aria-hidden=\"true\"\r\n                focusable=\"false\"\r\n            >\r\n                <path\r\n                    id=\"buying-online-steps--signature-path\"\r\n                    d=\"M62.73,59.39C77.26,54.76,78,26.35,78.6,10.76c0,0-.46,73.95-8.17,73.95S60.77,59,50.18,45.07C16.49.93-28.78,67.7,31,62.69c21-1.76,39-10.57,55-21.63,51.58-35.73,18.33-66.06.17-4.3C73.16,81,94.65,60.05,99,50.58c3.18-7,.33,21.91,12.83-.82,0,0-1.38,20.43,11.28,11.06,7.21-5.34,1.72-22.31-4-15.08-5.28,6.71,12.77,25.91,20.48,5.5,17.07-45.14-16.93-28.64-5.5,1.21,8.8,23,14.64,10.68,21.79,4.07,5.2-4.79-4.91,9.94,9.69,5.4\"\r\n                    transform=\"translate(-0.34 0.25)\"\r\n                    fill=\"none\"\r\n                    stroke=\"#000\"\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                    strokeWidth=\"3\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get calendarIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"32\" viewBox=\"0 0 30 32\" aria-hidden=\"true\">\r\n                <path\r\n                    d=\"M14.45,17a2.39,2.39,0,0,0,1.07-2.07c0-1.49-1.32-2.52-3.13-2.52A3.47,3.47,0,0,0,9,14.3l1.52.75a1.78,1.78,0,0,1,1.85-1.13c.93,0,1.42.54,1.42,1.07a1.18,1.18,0,0,1-1.12,1.24H11.29v1.62H12.5c.95,0,1.37.46,1.37,1.14a1.38,1.38,0,0,1-1.49,1.26,2.13,2.13,0,0,1-2-1.2l-1.52,1.1a3.91,3.91,0,0,0,3.48,1.7c2.06,0,3.26-1.23,3.26-2.81A2.18,2.18,0,0,0,14.45,17Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#fff\"\r\n                />\r\n                <path\r\n                    d=\"M22.84,18.84V15.46A3,3,0,0,0,19.9,12.4h-.2a3,3,0,0,0-3.13,2.86h0v3.57a2.83,2.83,0,0,0,2.65,3h0a1.85,1.85,0,0,0,.47,0,2.86,2.86,0,0,0,3.13-2.56A3.23,3.23,0,0,0,22.84,18.84Zm-4.52-.08V15.53a1.31,1.31,0,0,1,1.22-1.41h.17a1.29,1.29,0,0,1,1.38,1.19v0a.67.67,0,0,1,0,.2v3.24a1.29,1.29,0,0,1-1.24,1.33h-.16A1.26,1.26,0,0,1,18.32,19Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#fff\"\r\n                />\r\n                <path\r\n                    d=\"M28.5,2.07H25.72V0H24.14V2.07H7.86V0H6.28V2.07H3.5A2.58,2.58,0,0,0,.93,4.64v4H29.5V26.4c0,.84-.39,1.39-1,1.39H18l1.52-1.53-1.11-1.11L15,28.58,18.39,32l1.11-1.11L18,29.36H28.5a2.71,2.71,0,0,0,2.59-2.79V4.25A2.51,2.51,0,0,0,28.5,2.07Zm1,5H2.5V4.64a1,1,0,0,1,1-1H6.28V5.72H7.86V3.64H24.14V5.72h1.58V3.64H28.5a1.11,1.11,0,0,1,1,.61Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#fff\"\r\n                />\r\n                <rect y=\"16.25\" width=\"1.57\" height=\"4.72\" fill=\"#ffd900\" />\r\n                <rect y=\"9.97\" width=\"1.57\" height=\"4.72\" fill=\"#ffd900\" />\r\n                <rect x=\"8.09\" y=\"27.79\" width=\"4.72\" height=\"1.57\" fill=\"#ffd900\" />\r\n                <path\r\n                    d=\"M3.08,27.7l-.65,1.43a2.64,2.64,0,0,0,1.07.23h4V27.79h-4A1,1,0,0,1,3.08,27.7Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M2.5,26.79V22.54H.93v4.25a2.51,2.51,0,0,0,.08.67l1.52-.41A1.15,1.15,0,0,1,2.5,26.79Z\"\r\n                    transform=\"translate(-0.93)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n}\r\n\r\nexport default SVGs;\r\n","export const allPriorUses = [\r\n    {\r\n        id: 10,\r\n        displayName: 'Fleet',\r\n    },\r\n    {\r\n        id: 20,\r\n        displayName: 'Leased Vehicle',\r\n    },\r\n    {\r\n        id: 30,\r\n        displayName: 'Rental',\r\n    },\r\n    {\r\n        id: 50,\r\n        displayName: 'Taxi',\r\n    },\r\n    {\r\n        id: 60,\r\n        displayName: 'Police',\r\n    },\r\n    {\r\n        id: 70,\r\n        displayName: 'Government Use',\r\n    },\r\n    {\r\n        id: 100,\r\n        displayName: 'Driver Education',\r\n    },\r\n    {\r\n        id: 140,\r\n        displayName: 'Canadian Renewal',\r\n    },\r\n    {\r\n        id: 440,\r\n        displayName: 'Miles Exempt',\r\n    },\r\n    {\r\n        id: 580,\r\n        displayName: 'Court Ordered Title',\r\n    },\r\n    {\r\n        id: 620,\r\n        displayName: 'Livery',\r\n    },\r\n    {\r\n        id: 630,\r\n        displayName: 'Prior Theft History',\r\n    },\r\n    {\r\n        id: 680,\r\n        displayName: 'Kit',\r\n    },\r\n    {\r\n        id: 681,\r\n        displayName: 'Police (Nmvtis)',\r\n    },\r\n    {\r\n        id: 683,\r\n        displayName: 'Possible Aftermarket Mods',\r\n    },\r\n    {\r\n        id: 684,\r\n        displayName: 'Rental (Nmvtis)',\r\n    },\r\n    {\r\n        id: 685,\r\n        displayName: 'Miles Exempt (Nmvtis)',\r\n    },\r\n    {\r\n        id: 686,\r\n        displayName: 'Canadian Odometer Reading',\r\n    },\r\n    {\r\n        id: 687,\r\n        displayName: 'Canadian Import',\r\n    },\r\n    {\r\n        id: 697,\r\n        displayName: 'Prior Theft History',\r\n    },\r\n];\r\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-nocheck\r\nimport { formatSeperatedInteger } from '../../../../../components/instant-offers/utils/format';\r\nimport { allPriorUses } from './allPriorUses';\r\n\r\n/**\r\n * Conditionally adds a string value to the provided line items collection.\r\n * @param {string} label - the label of the item to add.\r\n * @param {string} value - the value to add.\r\n * @param {array} lineItems - array of line items to augment.\r\n */\r\nconst addStringLineItem = (label, value, lineItems) => {\r\n    if (value && typeof value === 'string') {\r\n        lineItems.push({\r\n            label,\r\n            value,\r\n        });\r\n    }\r\n};\r\n\r\n/**\r\n * Conditionally adds a number value to the provided line items collection.\r\n * @param {string} label - the label of the item to add.\r\n * @param {number} value - the value to add.\r\n * @param {boolean} addCommas - indicates whether the value should be formatted with commas.\r\n * @param {array} lineItems - array of line items to augment.\r\n */\r\nconst addNumberLineItem = (label, value, addCommas, lineItems) => {\r\n    if (typeof value === 'number') {\r\n        const numberValue = Number(value);\r\n\r\n        lineItems.push({\r\n            label,\r\n            value: addCommas ? formatSeperatedInteger(numberValue) : numberValue.toString(),\r\n        });\r\n    }\r\n};\r\n\r\n/**\r\n * Conditionally adds an array of string values to the provided line items collection.\r\n * @param {string} label - the label of the item to add.\r\n * @param {array} value - the array of values to add.\r\n * @param {array} lineItems - array of line items to augment.\r\n */\r\nconst addStringArrayLineItem = (label, value, lineItems) => {\r\n    if (Array.isArray(value) && value.length > 0 && value.every((v) => typeof v === 'string')) {\r\n        lineItems.push({\r\n            label,\r\n            value: value.join(', '),\r\n        });\r\n    }\r\n};\r\n\r\nconst excludedHighlights = ['warranty'];\r\nconst highlightValuesToDescriptions = {\r\n    singleowner: 'Single Owner',\r\n    allnewtires: 'All New Tires',\r\n    newpairtires: 'New Pair of Tires',\r\n    lowmiles: 'Low Miles',\r\n    lowmilesperyear: 'Low Miles Per Year',\r\n    fuelefficient: 'Fuel Efficient',\r\n    advancedfeatures: 'Advanced Features',\r\n    premiumaudio: 'Premium Audio',\r\n};\r\n\r\nexport const extractBaseSpecificationsLineItems = (car) => {\r\n    const {\r\n        body,\r\n        vehicleSize,\r\n        series,\r\n        types,\r\n        mileage,\r\n        storeCity,\r\n        state,\r\n        packages,\r\n        priorUses,\r\n        mpgCity,\r\n        mpgHighway,\r\n    } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    addStringLineItem('Body', body, lineItems);\r\n    addStringLineItem('Vehicle Size', vehicleSize, lineItems);\r\n    addStringLineItem('Series', series, lineItems);\r\n    addStringArrayLineItem('Type', types, lineItems);\r\n    addNumberLineItem('Mileage', mileage, true, lineItems);\r\n\r\n    if (storeCity || state) {\r\n        let cityState = storeCity || '';\r\n        if (state) {\r\n            cityState = `${cityState}${cityState.length ? ', ' : ''}${state}`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'City, State',\r\n            value: cityState,\r\n        });\r\n    }\r\n    addStringArrayLineItem('Package', packages, lineItems);\r\n\r\n    if (!priorUses?.length) {\r\n        lineItems.push({\r\n            label: 'Prior Use',\r\n            value: 'None',\r\n        });\r\n    } else {\r\n        const displayNames = priorUses\r\n            .map((pu) => {\r\n                const priorUseWithDisplayName = allPriorUses.find((apu) => apu.id === +pu);\r\n                if (!priorUseWithDisplayName) {\r\n                    return null;\r\n                }\r\n\r\n                return priorUseWithDisplayName.displayName;\r\n            })\r\n            .filter((pu) => !!pu);\r\n\r\n        addStringArrayLineItem('Prior Use', displayNames, lineItems);\r\n    }\r\n\r\n    if (mpgCity || mpgHighway) {\r\n        let mpg = mpgCity ? mpgCity.toString() : '';\r\n        if (mpgHighway) {\r\n            mpg = `${mpg}${mpg ? '/' : ''}${mpgHighway.toString()}`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'City/Highway MPG',\r\n            value: mpg,\r\n        });\r\n    }\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractColorsLineItems = (car) => {\r\n    const { exteriorColor, interiorColor } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    addStringLineItem('Exterior', exteriorColor, lineItems);\r\n    addStringLineItem('Interior', interiorColor, lineItems);\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractEngineLineItems = (car) => {\r\n    const {\r\n        engineSize,\r\n        engineType,\r\n        engineTorque,\r\n        engineTorqueRpm,\r\n        horsepower,\r\n        horsepowerRpm,\r\n        cylinders,\r\n        fuelType,\r\n        driveTrain,\r\n        transmission,\r\n    } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    // if engine size is not null and the engine size string contains a positive float\r\n    if (engineSize && Number(engineSize.replace(/[^0-9]+/g, '')) > 0) {\r\n        addStringLineItem('Engine Size', engineSize, lineItems);\r\n    }\r\n\r\n    addStringLineItem('Engine Type', engineType, lineItems);\r\n\r\n    if (engineTorque || engineTorqueRpm) {\r\n        let torqueValue = engineTorque ? engineTorque.toString() : '';\r\n        if (engineTorqueRpm) {\r\n            torqueValue = `${torqueValue}${torqueValue ? '/' : ''}${engineTorqueRpm.toString()} RPM`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'Engine Torque',\r\n            value: torqueValue,\r\n        });\r\n    }\r\n\r\n    if (horsepower || horsepowerRpm) {\r\n        let horsepowerValue = horsepower ? horsepower.toString() : '';\r\n        if (horsepowerRpm) {\r\n            horsepowerValue = `${horsepowerValue}${horsepowerValue ? '/' : ''}${horsepowerRpm.toString()} RPM`;\r\n        }\r\n\r\n        lineItems.push({\r\n            label: 'Horsepower',\r\n            value: horsepowerValue,\r\n        });\r\n    }\r\n\r\n    if (cylinders && cylinders !== '0') {\r\n        addNumberLineItem('Cylinders', cylinders, false, lineItems);\r\n    }\r\n\r\n    addStringLineItem('Fuel Type', fuelType, lineItems);\r\n    addStringLineItem('Drive Train', driveTrain, lineItems);\r\n    addStringLineItem('Transmission', transmission, lineItems);\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractKeyFeatureLineItems = (car) => {\r\n    const { highlightedFeatures } = car;\r\n\r\n    if (!highlightedFeatures || highlightedFeatures.length === 0) {\r\n        return [];\r\n    }\r\n\r\n    return highlightedFeatures.map((f) => ({\r\n        label: null,\r\n        value: f.trim(),\r\n    }));\r\n};\r\n\r\nexport const extractHighlightsLineItems = (car) => {\r\n    const { highlights } = car;\r\n\r\n    if (!highlights) {\r\n        return [];\r\n    }\r\n\r\n    // Highlights come over as merged strings in camel case.\r\n    const readableHighlights = highlights\r\n        .filter((h) => !excludedHighlights.includes(h?.toLowerCase()))\r\n        .map((h) => highlightValuesToDescriptions[h?.toLowerCase()] || h);\r\n\r\n    return readableHighlights.map((h) => ({\r\n        label: null,\r\n        value: h,\r\n    }));\r\n};\r\n\r\nexport const extractFeaturesLineItems = (car) => {\r\n    const { featureScore, features } = car;\r\n\r\n    let lineItems = [];\r\n    if (features) {\r\n        lineItems = features.map((f) => ({\r\n            label: null,\r\n            value: f,\r\n        }));\r\n    }\r\n\r\n    if (typeof featureScore === 'number') {\r\n        let featureScoreCategory = 'Basic';\r\n        if (featureScore > 3 && featureScore < 8) {\r\n            featureScoreCategory = 'Well-Equipped';\r\n        } else if (featureScore >= 8) {\r\n            featureScoreCategory = 'Loaded';\r\n        }\r\n\r\n        lineItems.unshift({\r\n            label: 'Feature Summary',\r\n            value: `${featureScoreCategory} (${featureScore})`,\r\n        });\r\n    }\r\n\r\n    return lineItems;\r\n};\r\n\r\nexport const extractRatingsAndReviewsLineItems = (car) => {\r\n    const { averageRating, numberOfReviews } = car;\r\n\r\n    const lineItems = [];\r\n\r\n    if (typeof averageRating === 'number' && averageRating !== 0) {\r\n        addStringLineItem('Average Rating', `${Number(averageRating).toFixed(2)}/5`, lineItems);\r\n    }\r\n\r\n    if (numberOfReviews) {\r\n        addNumberLineItem('Number of Reviews', numberOfReviews, true, lineItems);\r\n    }\r\n\r\n    return lineItems;\r\n};\r\n","import { Dispatch, SetStateAction, useMemo } from 'react';\r\nimport Dialog from '../../../../components/Dialog';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport {\r\n    extractBaseSpecificationsLineItems,\r\n    extractColorsLineItems,\r\n    extractEngineLineItems,\r\n    extractFeaturesLineItems,\r\n    extractHighlightsLineItems,\r\n    extractKeyFeatureLineItems,\r\n    extractRatingsAndReviewsLineItems,\r\n} from './utils/additionalVehicleInfoHelper';\r\nimport './VehicleDetailsDialog.scss';\r\n\r\ninterface VehicleDetailsDialogProps {\r\n    isVisible: boolean;\r\n    vehicle: IVehicleTile;\r\n    setIsDialogVisible: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nconst Section = ({ title, items }: { title: string; items: { label: string; value: string }[] }) => {\r\n    const withLabels = useMemo(() => items.filter((li) => !!li.label), [items]);\r\n    const withoutLabels = useMemo(() => items.filter((li) => !li.label), [items]);\r\n\r\n    if (items.length > 0) <></>;\r\n\r\n    if (withLabels.length === 0 && withoutLabels.length === 0) {\r\n        return null;\r\n    }\r\n\r\n    // Display Features section\r\n    if (title === 'All features') {\r\n        return (\r\n            <section>\r\n                <h2>{title}</h2>\r\n                <div className=\"label-value-list\">\r\n                    <div>{items[0].label}</div>\r\n                    <div>{items[0].value}</div>\r\n                </div>\r\n                <div className=\"values-only-list\">\r\n                    {items.slice(1).map((item, i) => (\r\n                        <div key={i}>{item.value}</div>\r\n                    ))}\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n\r\n    // Display values only\r\n    if (withoutLabels.length === items.length) {\r\n        return (\r\n            <section>\r\n                <h2>{title}</h2>\r\n                <div className=\"values-only-list\">\r\n                    {items.map((item, i) => (\r\n                        <div key={i}>{item.value}</div>\r\n                    ))}\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n\r\n    // Display label and value pairs\r\n    return (\r\n        <section>\r\n            <h2>{title}</h2>\r\n            {items.map((item, i) => (\r\n                <div key={i} className=\"label-value-list\">\r\n                    <div>{item.label}</div>\r\n                    <div>{item.value}</div>\r\n                </div>\r\n            ))}\r\n        </section>\r\n    );\r\n};\r\n\r\nexport const VehicleDetailsDialog = ({ isVisible, vehicle, setIsDialogVisible }: VehicleDetailsDialogProps) => {\r\n    return (\r\n        <Dialog isVisible={isVisible} onClose={() => setIsDialogVisible(false)}>\r\n            <div className=\"vehicle-details-modal\">\r\n                <h3>About this car</h3>\r\n                <div className=\"vehicle-info\">\r\n                    <div>\r\n                        <hzn-copy-button value={vehicle.stockNumber?.toString()}></hzn-copy-button>\r\n                        Stock {vehicle.stockNumber}\r\n                    </div>\r\n                    <div>\r\n                        <hzn-copy-button value={vehicle.vin}></hzn-copy-button>\r\n                        VIN {vehicle.vin}\r\n                    </div>\r\n                </div>\r\n                <div className=\"vehicle-info-list\">\r\n                    <Section title=\"Base specifications\" items={extractBaseSpecificationsLineItems(vehicle)} />\r\n                    <Section title=\"Colors\" items={extractColorsLineItems(vehicle)} />\r\n                    <Section title=\"Engine\" items={extractEngineLineItems(vehicle)} />\r\n                    <Section title=\"Key features\" items={extractKeyFeatureLineItems(vehicle)} />\r\n                    <Section title=\"Highlights\" items={extractHighlightsLineItems(vehicle)} />\r\n                    <Section title=\"All features\" items={extractFeaturesLineItems(vehicle)} />\r\n                    <Section title=\"Ratings &amp; reviews\" items={extractRatingsAndReviewsLineItems(vehicle)} />\r\n                </div>\r\n            </div>\r\n        </Dialog>\r\n    );\r\n};\r\n","import { CarTile, ModalHandler } from '@kmx/car-tile';\r\nimport { IVehicleTile } from '../../../../types/vehicleTile';\r\nimport { vehicleIsUnavailable, buildStatusText } from '../../../../utilities/vehicleTileBuilder';\r\nimport { mapVehicleTileToCar } from './carTileUtils';\r\nimport { useEffect, useState, useContext, useRef } from 'react';\r\nimport Icons from '../../../../utilities/icons';\r\nimport { getCarImages } from '../../../../api/getCarImages';\r\nimport { FBSContext } from './../../../../context/';\r\nimport { IFBSDecision } from '../../../../api/types/finance';\r\nimport * as analytics from '../../../../utilities/analytics';\r\nimport TileKebabMenuItemSnackbar from '../tile-kebab-menu/TileKebabMenuItemSnackbar';\r\nimport { useLocalCarsStore } from '../../../../context/localCarsStore';\r\nimport { useShallow } from 'zustand/react/shallow';\r\nimport { ANALYTICS_CONSTANTS, trackEDDL } from '../../../../utilities/analytics';\r\nimport { ITrackingPayload } from '../../../../types/analytics';\r\nimport { VehicleDetailsDialog } from './VehicleDetailsDialog';\r\n\r\ninterface ICarTileWrapperProps {\r\n    vehicle: IVehicleTile;\r\n    updatedViewedTiles?: (VehicleTile: IVehicleTile) => any;\r\n    enableRemove: boolean;\r\n    isWaitingForFavoritesResponse: boolean;\r\n    isCompact?: boolean;\r\n    sectionName?: string;\r\n}\r\n\r\nexport const CarTileWrapper = ({\r\n    vehicle,\r\n    updatedViewedTiles,\r\n    enableRemove,\r\n    isCompact = true,\r\n    sectionName,\r\n}: ICarTileWrapperProps) => {\r\n    const ref = useRef(null);\r\n    const car = mapVehicleTileToCar(vehicle);\r\n    const [isFavoriteInUI, setIsFavoriteInUI] = useState<boolean>(false);\r\n    const [snackbar, setSnackBar] = useState<{ icon: any; text: string; isOpen: boolean }>({\r\n        icon: undefined,\r\n        text: '',\r\n        isOpen: false,\r\n    });\r\n    const [isDialogVisible, setIsDialogVisible] = useState(false);\r\n    const ribbonText = buildStatusText(vehicle);\r\n    const fbsContext = useContext(FBSContext);\r\n\r\n    const mapDecisionToFbsApplication = (decision: IFBSDecision) => {\r\n        const {\r\n            applicationUrl,\r\n            fbsDecision: { downPayment, expirationDateFormatted, stateAbbreviation, isSoftPull, tradeInBreakdown },\r\n        } = decision;\r\n        return {\r\n            downPayment: downPayment,\r\n            stateAbbreviation: stateAbbreviation,\r\n            stationUrl: applicationUrl,\r\n            expirationDateFormatted: expirationDateFormatted,\r\n            isSoftPull: isSoftPull,\r\n            tradeInBreakdown,\r\n        };\r\n    };\r\n\r\n    const { favoriteVehicles, addVehicleToFavorites, removeVehicleFromFavorites } = useLocalCarsStore(\r\n        useShallow((state) => ({\r\n            favoriteVehicles: state.favoriteVehicles,\r\n            addVehicleToFavorites: state.addVehicleToFavorites,\r\n            removeVehicleFromFavorites: state.removeVehicleFromFavorites,\r\n        }))\r\n    );\r\n\r\n    const decision = fbsContext.fbsData.find((d) => d.stockNumber === vehicle.stockNumber);\r\n    let fbsApplication: object | undefined;\r\n    if (decision) {\r\n        fbsApplication = mapDecisionToFbsApplication(decision);\r\n    }\r\n\r\n    const getMenuItems = (vehicle: IVehicleTile) => {\r\n        const menuItems = [\r\n            {\r\n                text: `${isFavoriteInUI ? 'Remove from' : 'Add to'} favorites`,\r\n                icon: Icons.favoriteHeart,\r\n                onClick: () => {\r\n                    handleHeartClick();\r\n                },\r\n                className: `tile-menu-item--favorite ${isFavoriteInUI ? 'saved' : ''}`,\r\n            },\r\n            {\r\n                text: 'Share',\r\n                icon: Icons.share,\r\n                onClick: () => {\r\n                    handleShareClick();\r\n                    const payload: ITrackingPayload = {\r\n                        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                        linkDetails: {\r\n                            name: 'share',\r\n                            position: vehicle.stockNumber.toString(),\r\n                        },\r\n                    };\r\n                    analytics.trackEDDL(payload);\r\n                },\r\n                className: 'tile-menu-item--share',\r\n            },\r\n        ];\r\n\r\n        if (vehicle.state) {\r\n            menuItems.push({\r\n                text: 'Features & specs',\r\n                icon: Icons.AdvancedFeaturesIcon,\r\n                onClick: () => {\r\n                    const payload: ITrackingPayload = {\r\n                        event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n                        linkDetails: {\r\n                            name: 'Features & specs',\r\n                            position: vehicle.stockNumber.toString(),\r\n                        },\r\n                    };\r\n                    analytics.trackEDDL(payload);\r\n\r\n                    setIsDialogVisible(true);\r\n                },\r\n                className: 'tile-menu-item--features',\r\n            });\r\n        }\r\n\r\n        return menuItems;\r\n    };\r\n\r\n    const CRITICAL_MENU_ITEM = {\r\n        text: 'Remove',\r\n        icon: Icons.remove,\r\n        onClick: () => {\r\n            handleRemoveVehicleTile();\r\n            const name = 'remove';\r\n            const event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n            const payload: ITrackingPayload = {\r\n                event: event,\r\n                linkDetails: {\r\n                    name: name,\r\n                    position: vehicle.stockNumber.toString(),\r\n                },\r\n            };\r\n            analytics.trackEDDL(payload);\r\n        },\r\n        className: 'tile-menu-item--remove',\r\n    };\r\n\r\n    useEffect(() => {\r\n        setIsFavoriteInUI(favoriteVehicles.includes(vehicle.stockNumber));\r\n    }, [favoriteVehicles, vehicle.stockNumber]);\r\n\r\n    const handleHeartClick = () => {\r\n        setIsFavoriteInUI(isFavoriteInUI);\r\n\r\n        if (isFavoriteInUI) {\r\n            removeVehicleFromFavorites(vehicle.stockNumber);\r\n        } else {\r\n            addVehicleToFavorites(vehicle.stockNumber);\r\n        }\r\n    };\r\n\r\n    // Wrap the get request so we can indirectly provide the built in image carousel with our context env.\r\n    const getImagesWithContext = (\r\n        stockNumber: any,\r\n        successCallback: (response: any) => void,\r\n        errorCallback: (error: any) => void\r\n    ) => {\r\n        return getCarImages(stockNumber, successCallback, errorCallback);\r\n    };\r\n\r\n    const handleRemoveVehicleTile = async () => {\r\n        if (updatedViewedTiles) {\r\n            updatedViewedTiles(vehicle);\r\n        }\r\n        removeVehicleFromFavorites(vehicle.stockNumber, true);\r\n    };\r\n\r\n    const handleShareClick = async () => {\r\n        if (navigator.share) {\r\n            navigator\r\n                .share({\r\n                    title: `${document.title}.`,\r\n                    text: `Check out ${document.title}.`,\r\n                    url: `${window.location.origin}/car/${vehicle.stockNumber}`,\r\n                })\r\n                .then(() => console.log('Successful Car Tile Share'))\r\n                .catch((error) => console.log('Error Sharing Car Tile', error));\r\n        } else {\r\n            await navigator.clipboard.writeText(`${window.location.origin}/car/${vehicle.stockNumber}`);\r\n            setSnackBar({ icon: Icons.share, isOpen: true, text: 'Link copied to your clipboard' });\r\n        }\r\n    };\r\n\r\n    const handleOnMenuOpen = () => {\r\n        const payload: ITrackingPayload = {\r\n            event: ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA,\r\n            linkDetails: {\r\n                name: 'three dots',\r\n                position: String(vehicle.stockNumber),\r\n            },\r\n        };\r\n        analytics.trackEDDL(payload);\r\n    };\r\n\r\n    useEffect(() => {\r\n        const onCarTileClick = (e: Event) => {\r\n            // Get closest <a> element\r\n            const closestAElement = (e.target as HTMLElement)?.closest('a')?.classList;\r\n\r\n            // Check if user clicked either the title or car image\r\n            if (\r\n                closestAElement?.contains('scct--make-model-info-link') ||\r\n                closestAElement?.contains('scct--image-gallery__image-link')\r\n            ) {\r\n                // Prevent default\r\n                e.preventDefault();\r\n\r\n                const closestSection = (e.target as HTMLElement)?.closest('section')?.id;\r\n                const isRecommendedCarTile = closestSection ? ['local-cars', 'kmx-recommended-carousel'].includes(closestSection) : false;\r\n                const event = isRecommendedCarTile ? ANALYTICS_CONSTANTS.EVENTS.CLICK.RECOMMENDED_CARTILE : ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n\r\n                // Analytics\r\n                trackEDDL({\r\n                    event,\r\n                    linkDetails: {\r\n                        name: [car.year, car.make, car.model, car.trim].filter((item) => item).join(' '),\r\n                        position: sectionName,\r\n                    },\r\n                    // recommendations key is only read when the event is a \"recommended\" car tile click\r\n                    // both rec keys below should be set to stock number while DDS discusses. Ignore snippet in Github for now.\r\n                    recommendations: {\r\n                        recommendedCarClicked: `${car.stockNumber}`,\r\n                        stockNumber: `${car.stockNumber}`,\r\n                    },\r\n                    // similar to above, recommendations key is only read when the event is a recommended car tile click\r\n                    module: {\r\n                        moduleExperience: `VR|Homepage|${sectionName}`,\r\n                    },\r\n                });\r\n\r\n                // Redirect\r\n                setTimeout(() => {\r\n                    window.location.href = `/car/${car.stockNumber}`;\r\n                }, ANALYTICS_CONSTANTS.TRACKING_DELAY);\r\n            }\r\n        };\r\n\r\n        // Add event listener to CarTile\r\n        const tile = ref.current as HTMLElement | null;\r\n\r\n        if (tile) {\r\n            tile.addEventListener('click', onCarTileClick);\r\n            return () => {\r\n                tile.removeEventListener('click', onCarTileClick);\r\n            };\r\n        }\r\n    }, [sectionName, car.stockNumber, car.year, car.make, car.model, car.trim]);\r\n\r\n    return (\r\n        <div ref={ref}>\r\n            <ModalHandler>\r\n                <CarTile\r\n                    car={car}\r\n                    disableScrollNav={false}\r\n                    imageUrl={vehicle.imageLink}\r\n                    showFavorites={true}\r\n                    isDisabled={vehicleIsUnavailable(vehicle.statusCode, vehicle.isSaleable)}\r\n                    ribbonStyle=\"standard\"\r\n                    ribbonText={ribbonText}\r\n                    isFavorite={isFavoriteInUI}\r\n                    menuItems={getMenuItems(vehicle)}\r\n                    criticalMenuItem={enableRemove ? CRITICAL_MENU_ITEM : undefined}\r\n                    onFavorite={handleHeartClick}\r\n                    onUnfavorite={handleHeartClick}\r\n                    getCarImages={getImagesWithContext}\r\n                    fbsApplication={fbsApplication}\r\n                    fbsDecision={decision?.fbsDecision}\r\n                    downPayment={decision?.fbsDecision.downPayment}\r\n                    recommendationType={vehicle.recommendationType}\r\n                    onMenuOpen={handleOnMenuOpen}\r\n                    isCompact={isCompact}\r\n                    hasPriceDrop={vehicle.hasPriceDrop}\r\n                    originalPrice={vehicle.originalPrice}\r\n                    showElectricVehicleInfo\r\n                />\r\n            </ModalHandler>\r\n\r\n            <VehicleDetailsDialog\r\n                isVisible={isDialogVisible}\r\n                vehicle={vehicle}\r\n                setIsDialogVisible={setIsDialogVisible}\r\n            />\r\n\r\n            <TileKebabMenuItemSnackbar\r\n                icon={snackbar.icon}\r\n                isOpen={snackbar.isOpen}\r\n                textLabel={snackbar.text}\r\n                cancelAction={() => setSnackBar({ icon: undefined, isOpen: false, text: '' })}\r\n            />\r\n        </div>\r\n    );\r\n};\r\n","export async function getCarImages(\r\n    stockNumber: any,\r\n    successCallback: (response: any) => void,\r\n    errorCallback: (error: any) => void\r\n) {\r\n    try {\r\n        const url = `https://img2.carmax.com/api/subject/${stockNumber}`;\r\n        const res = await fetch(url, { mode: 'cors' });\r\n        const carImages = await res.json();\r\n        successCallback(carImages);\r\n        return carImages;\r\n    } catch (error) {\r\n        errorCallback(error);\r\n    }\r\n}\r\n","import { IVehicleTile } from '../../../../types/vehicleTile';\r\n\r\nexport const mapVehicleTileToCar = (vehicleTile: IVehicleTile) => {\r\n    return {\r\n        ...vehicleTile,\r\n        imageCount: 1, // TODO\r\n        highlights: [], // TODO\r\n        transferText: vehicleTile.shippingText,\r\n    };\r\n};\r\n\r\nexport const hideSnackBarFromExternalScript = () => {\r\n    const externalSnackbar = document.getElementById('parking-lot-snackbar');\r\n    if (externalSnackbar) {\r\n        externalSnackbar.style.display = 'none';\r\n        setTimeout(() => {\r\n            externalSnackbar.style.display = 'block';\r\n        }, 2900);\r\n    }\r\n};\r\n","import { SnackBar } from '../../../../components/snack-bar/SnackBar';\r\n\r\ninterface ITileKebabMenuItemSnackbarProps {\r\n    icon?: JSX.Element;\r\n    isOpen: boolean;\r\n    textLabel: string;\r\n    cancelAction: () => void;\r\n}\r\n\r\nconst TileKebabMenuItemSnackbar = ({ isOpen, textLabel, icon, cancelAction }: ITileKebabMenuItemSnackbarProps) => {\r\n    if (!isOpen) return null;\r\n\r\n    return <SnackBar icon={icon} className={'tile-snackbar'} textLabel={textLabel} cancelAction={cancelAction} />;\r\n};\r\n\r\nexport default TileKebabMenuItemSnackbar;\r\n","import { viewedVehiclesHeaderIcon, recommendedIcon, recentSearchesHeaderIcon } from './svg';\r\n\r\nexport const returnVisitorLocalStorage = {\r\n    key: 'kmxHP:returnVisitor',\r\n};\r\nexport type IReturnVisitorLocalStorage = boolean;\r\n\r\nexport const viewedVehiclesLocalStorage = {\r\n    key: 'viewedVehicles',\r\n};\r\nexport enum HeroTheme {\r\n    Dark = 'dark',\r\n    Light = 'light',\r\n}\r\n\r\nexport enum VehicleStatuses {\r\n    Sold = 'Sold',\r\n    OnTestDrive = 'On Test Drive',\r\n    Reserved = 'Reserved',\r\n    Shipping = 'Shipping',\r\n    ComingSoon = 'Coming Soon',\r\n    OffSite = 'Off Site',\r\n    NotAvailable = 'Not Available',\r\n}\r\nexport const soldVehicleStatusCodes = [360, 370, 760];\r\nexport const onTestDriveStatusCodes = [340, 345, 740];\r\nexport const reservedStatusCodes = [347, 350, 747, 750];\r\nexport const reservedConditionalStatusCodes = [330, 730];\r\nexport const shippingStatusCodes = [640, 650];\r\nexport const shippingConditionalStatusCodes = [100];\r\nexport const otherUnavailableStatusCodes = [250, 270, 300, 320, 325, 700, 720, 735];\r\nexport const statusCodesForUnavailableVehicles = [\r\n    ...soldVehicleStatusCodes,\r\n    ...onTestDriveStatusCodes,\r\n    ...reservedStatusCodes,\r\n    ...reservedConditionalStatusCodes,\r\n    ...shippingStatusCodes,\r\n    ...shippingConditionalStatusCodes,\r\n    ...otherUnavailableStatusCodes,\r\n];\r\n\r\nexport enum ProgressionActivities {\r\n    ReservationRequested = 'ReservationRequested',\r\n    ReservationCreated = 'ReservationCreated',\r\n    ReservationUpdated = 'ReservationUpdated',\r\n    ReservationCancelled = 'ReservationCancelled',\r\n    ReservationRemoved = 'ReservationRemoved',\r\n    ReservationFailed = 'ReservationFailed',\r\n    VehicleOrderCreated = 'VehicleOrderCreated',\r\n    VehicleOrderSubmitted = 'VehicleOrderSubmitted',\r\n    VehicleOrderDeleted = 'VehicleOrderDeleted',\r\n    MaxCareSelected = 'MaxCareSelected',\r\n    MaxCareRemoved = 'MaxCareRemoved',\r\n    PreQualificationsSubmitted = 'Pre-QualificationsSubmitted',\r\n    PreQualificationsReceivingDone = 'Pre-QualificationsReceivingDone',\r\n    PreQualificationsExpired = 'Pre-QualificationsExpired',\r\n    CreditApplicationSubmitted = 'CreditApplicationSubmitted',\r\n    CreditApplicationDecisionReceived = 'CreditApplicationDecisionReceived',\r\n    CreditApplicationExpired = 'CreditApplicationExpired',\r\n    CreditApplicationViewed = 'CreditApplicationViewed',\r\n    CreditApplicationSaved = 'CreditApplicationSaved',\r\n    InstantOfferCompleted = 'InstantOfferCompleted',\r\n    TransferCheckoutCreated = 'TransferCheckoutCreated',\r\n    TransferCheckoutCompleted = 'TransferCheckoutCompleted',\r\n    TransferCheckoutAbandoned = 'TransferCheckoutAbandoned',\r\n    TransferOrderRequestSubmitted = 'TransferOrderRequestSubmitted',\r\n    TransferOrderAwaitingApproval = 'TransferOrderAwaitingApproval',\r\n    TransferOrderApproved = 'TransferOrderApproved',\r\n    TransferOrderDenied = 'TransferOrderDenied',\r\n    TransferOrderCancelled = 'TransferOrderCancelled',\r\n    TransferOrderTendered = 'TransferOrderTendered',\r\n    TransferOrderCompleted = 'TransferOrderCompleted',\r\n    PayoffAmountVerified = 'PayoffAmountVerified',\r\n    PayoffCreated = 'PayoffCreated',\r\n    VehicleAcquisitionOrderCreated = 'VehicleAcquisitionOrderCreated',\r\n    DocumentRequested = 'DocumentRequested',\r\n    DocumentUploaded = 'DocumentUploaded',\r\n    DocumentTransactionCompleted = 'DocumentTransactionCompleted',\r\n    SavedSearchCreated = 'SavedSearchCreated',\r\n    SavedSearchUpdated = 'SavedSearchUpdated',\r\n    SavedSearchRemoved = 'SavedSearchRemoved',\r\n    AppointmentScheduled = 'AppointmentScheduled',\r\n    AppointmentConfirmed = 'AppointmentConfirmed',\r\n    AppointmentRescheduled = 'AppointmentRescheduled',\r\n    AppointmentCanceled = 'AppointmentCanceled',\r\n}\r\n\r\nexport const LOADING_SPINNER_CLASS = 'loading-spinner';\r\nexport const MOBILE_TABLET_BREAKPOINT = 900;\r\nexport const FULL_STORY_HOME_PAGE_ID = 'HP';\r\nexport const MAX_RECENTLY_VIEWED_VEHICLE_TILES = 10;\r\nexport const MAX_BEST_MATCH_VEHICLE_TILES = 10;\r\nexport const BEST_MATCH_VERSION = 'BestMatchV4';\r\nexport const ENABLE_HOMEBASE_OPTIMIZATION_EVENT = 'kmxHomebaseEnableOptimization';\r\nexport const DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES = 30;\r\n\r\nexport enum HomebaseTab {\r\n    RecentlyViewed = 0,\r\n    Recommended = 1,\r\n    Searched = 2,\r\n}\r\n\r\nexport const TAB_LIST_ARIA_LABEL = 'Personalized vehicle shopping tools';\r\nconst TAB_ARIA_ID_PREFIX = 'kmx-hb-tab-';\r\nconst TAB_PANEL_ARIA_ID_PREFIX = 'kmx-hb-tab-panel-';\r\n\r\nexport const HOMEBASE_CAROUSELS: {\r\n    defaultCarouselOrder: HomebaseTab[];\r\n    byId: {\r\n        [key: number]: {\r\n            label: string;\r\n            ariaLabel: string;\r\n            carouselName: string;\r\n            carouselAnalyticsName: string;\r\n            tabButtonId: string;\r\n            tabPanelElementId: string;\r\n            initiationAnalyticsLabel: string;\r\n            dataAnalyticsAttr?: string;\r\n            tabButtonIcon: JSX.Element;\r\n        };\r\n    };\r\n} = {\r\n    defaultCarouselOrder: [HomebaseTab.RecentlyViewed, HomebaseTab.Searched, HomebaseTab.Recommended],\r\n    byId: {\r\n        [HomebaseTab.RecentlyViewed]: {\r\n            label: ' Viewed',\r\n            ariaLabel: 'Recently Viewed Vehicles',\r\n            carouselName: 'viewed',\r\n            carouselAnalyticsName: 'Recently Viewed',\r\n            tabButtonId: `${TAB_ARIA_ID_PREFIX}${HomebaseTab.RecentlyViewed}`,\r\n            tabPanelElementId: `${TAB_PANEL_ARIA_ID_PREFIX}${HomebaseTab.RecentlyViewed}`,\r\n            initiationAnalyticsLabel: 'HP Home Base Viewed Vehicles Init',\r\n            tabButtonIcon: viewedVehiclesHeaderIcon,\r\n        },\r\n        [HomebaseTab.Recommended]: {\r\n            label: ' You might like',\r\n            ariaLabel: 'Recommended Vehicles',\r\n            carouselName: 'recommended',\r\n            carouselAnalyticsName: 'Recommended',\r\n            tabButtonId: `${TAB_ARIA_ID_PREFIX}${HomebaseTab.Recommended}`,\r\n            tabPanelElementId: `${TAB_PANEL_ARIA_ID_PREFIX}${HomebaseTab.Recommended}`,\r\n            initiationAnalyticsLabel: 'HP Home Base Vehicle Recs Init',\r\n            tabButtonIcon: recommendedIcon,\r\n        },\r\n        [HomebaseTab.Searched]: {\r\n            label: ' Searched',\r\n            ariaLabel: 'Recent Vehicle Searches',\r\n            carouselName: 'searched',\r\n            carouselAnalyticsName: 'Searched',\r\n            tabButtonId: `${TAB_ARIA_ID_PREFIX}${HomebaseTab.Searched}`,\r\n            tabPanelElementId: `${TAB_PANEL_ARIA_ID_PREFIX}${HomebaseTab.Searched}`,\r\n            initiationAnalyticsLabel: 'HP Home Base Recent Searches Init',\r\n            tabButtonIcon: recentSearchesHeaderIcon,\r\n        },\r\n    },\r\n};\r\n","import {\r\n    returnVisitorLocalStorage,\r\n    viewedVehiclesLocalStorage,\r\n    IReturnVisitorLocalStorage,\r\n    VehicleStatuses,\r\n    soldVehicleStatusCodes,\r\n    onTestDriveStatusCodes,\r\n    reservedStatusCodes,\r\n    shippingStatusCodes,\r\n    otherUnavailableStatusCodes,\r\n    reservedConditionalStatusCodes,\r\n    shippingConditionalStatusCodes,\r\n    DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES,\r\n} from './constants';\r\nimport { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { IRecentSearchLocalStorage, IViewedVehicleLocalStorage } from './types';\r\n\r\nexport const deviceIsApple = (): boolean => {\r\n    if (\r\n        window.navigator.userAgent &&\r\n        (window.navigator.userAgent.indexOf('Mac OS') != -1 ||\r\n            window.navigator.userAgent.toLowerCase().indexOf('iPhone OS') != -1)\r\n    ) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\nexport const deviceIsAndroid = (): boolean => {\r\n    if (window.navigator.userAgent && window.navigator.userAgent.toLowerCase().indexOf('android') != -1) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\nexport const deviceIsWindows = (): boolean => {\r\n    if (window.navigator.userAgent && window.navigator.userAgent.toLowerCase().indexOf('windows') != -1) {\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\nexport const isReturnHomePageVisitor = (): boolean => {\r\n    let isFirstVisit = true;\r\n\r\n    try {\r\n        const serializedReturnVisitor = localStorage.getItem(returnVisitorLocalStorage.key) as string;\r\n        const returnVisitor = JSON.parse(serializedReturnVisitor) as IReturnVisitorLocalStorage | null;\r\n\r\n        if (returnVisitor && typeof returnVisitor === 'boolean') {\r\n            isFirstVisit = false;\r\n        }\r\n    } catch (e) {}\r\n\r\n    return !isFirstVisit && hasViewedVehicles();\r\n};\r\n\r\nexport const trackFirstTimeHomePageVisitor = () => {\r\n    try {\r\n        localStorage.setItem(returnVisitorLocalStorage.key, 'true');\r\n    } catch (e) {}\r\n};\r\n\r\nexport const getExpirationDate = (): number => {\r\n    const currentDate: Date = new Date();\r\n    return currentDate.setDate(currentDate.getDate() - DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES);\r\n};\r\n\r\nexport const getLocalStorageItem = <T>(key: string): T | null => {\r\n    const value: string | null = localStorage.getItem(key);\r\n    return value !== null ? JSON.parse(value) : null;\r\n};\r\n\r\nexport const filterOutExpiredVehicles = <T extends IViewedVehicleLocalStorage | IRecentSearchLocalStorage>(\r\n    vehicles: T[],\r\n    expirationDate: number\r\n): T[] => {\r\n    return vehicles?.filter(({ timestamp }: T) => timestamp > expirationDate) || [];\r\n};\r\n\r\nexport const hasViewedVehicles = (): boolean => {\r\n    try {\r\n        // Get viewed vehicles from localStorage\r\n        const viewedVehicles: IViewedVehicleLocalStorage[] = getLocalStorageItem(viewedVehiclesLocalStorage.key) || [];\r\n\r\n        // Keep only vehicles seen in the past {DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES}\r\n        const expirationDate = getExpirationDate();\r\n        const filteredVehicles = filterOutExpiredVehicles(viewedVehicles, expirationDate);\r\n\r\n        return filteredVehicles.length > 0;\r\n    } catch (error) {\r\n        console.error('Error retrieving viewed vehicles:', error);\r\n        return false;\r\n    }\r\n};\r\n\r\nexport const shiftUnavailableVehiclesToEnd = (vehicleTileList: IVehicleTile[]) => {\r\n    const availableVehicles: IVehicleTile[] = [];\r\n    const comingSoonVehicles: IVehicleTile[] = [];\r\n    const onRemoteLotVehicles: IVehicleTile[] = [];\r\n    const beingTransferredVehicles: IVehicleTile[] = [];\r\n    const onTestDriveVehicles: IVehicleTile[] = [];\r\n    const holdVehicles: IVehicleTile[] = [];\r\n    const soldVehicles: IVehicleTile[] = [];\r\n    const otherUnavailableVehicles: IVehicleTile[] = [];\r\n    let sortedVehicleTileList: IVehicleTile[] = [];\r\n\r\n    vehicleTileList.forEach((tile, index) => {\r\n        // use the below commented conditions to coerce DevTools recently viewed vehicles to have desired properties and test sorting\r\n\r\n        // // 0. make coming soon , doesn't comeback true when created\r\n        // if (index === 0) {\r\n        //     tile.isComingSoon = true;\r\n        // }\r\n\r\n        // // 1. make onRemoteLot\r\n        // if (index === 1) {\r\n        //     tile.isOnRemoteLot = true;\r\n        // }\r\n\r\n        // // 2. make being transferred\r\n        // if (index === 2) {\r\n        //     tile.statusCode = 100;\r\n        //     tile.isComingSoon = false;\r\n        // }\r\n\r\n        // // 3. make on test drive\r\n        // if (index === 3) tile.statusCode = 345;\r\n\r\n        // // 4. make on test drive\r\n        // if (index === 4) {\r\n        //     tile.statusCode = 330;\r\n        //     tile.isAvailableToTransact = false;\r\n        // }\r\n\r\n        // // 5. make sold\r\n        // if (index === 1) tile.statusCode = 360;\r\n\r\n        // 6. make other unavailable\r\n        // if (index === 1) {\r\n        //     tile.statusCode = 720;\r\n        //     tile.isSaleable = false;\r\n        // }\r\n\r\n        const status = translateVehicleStatus(tile);\r\n\r\n        // 0 - Coming soon\r\n        if (status === VehicleStatuses.ComingSoon) {\r\n            comingSoonVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 1 Appointment Only\r\n        if (status === VehicleStatuses.OffSite) {\r\n            onRemoteLotVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 2 On Test Drive\r\n        if (status === VehicleStatuses.OnTestDrive) {\r\n            onTestDriveVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 3 Shipping\r\n        if (status === VehicleStatuses.Shipping) {\r\n            beingTransferredVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 4 Reserved\r\n        if (status === VehicleStatuses.Reserved) {\r\n            holdVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // 5 sold\r\n        if (status === VehicleStatuses.Sold) {\r\n            soldVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        // other\r\n        if (status === VehicleStatuses.NotAvailable) {\r\n            otherUnavailableVehicles.push(tile);\r\n            return;\r\n        }\r\n\r\n        availableVehicles.push(tile);\r\n    });\r\n\r\n    sortedVehicleTileList = [\r\n        ...availableVehicles,\r\n        ...comingSoonVehicles,\r\n        ...onRemoteLotVehicles,\r\n        ...onTestDriveVehicles,\r\n        ...beingTransferredVehicles,\r\n        ...holdVehicles,\r\n        ...soldVehicles,\r\n        ...otherUnavailableVehicles,\r\n    ];\r\n\r\n    return sortedVehicleTileList;\r\n};\r\n\r\nexport const translateVehicleStatus = (vehicle: IVehicleTile): string => {\r\n    const { isAvailableToTransact, isComingSoon, isOnRemoteLot, statusCode } = vehicle;\r\n    let status = '';\r\n\r\n    if (soldVehicleStatusCodes.includes(statusCode)) {\r\n        status = VehicleStatuses.Sold;\r\n    }\r\n\r\n    if (onTestDriveStatusCodes.includes(statusCode)) {\r\n        status = VehicleStatuses.OnTestDrive;\r\n    }\r\n\r\n    if (\r\n        reservedStatusCodes.includes(statusCode) ||\r\n        (reservedConditionalStatusCodes.includes(statusCode) && !isAvailableToTransact)\r\n    ) {\r\n        status = VehicleStatuses.Reserved;\r\n    }\r\n\r\n    if (\r\n        shippingStatusCodes.includes(statusCode) ||\r\n        (shippingConditionalStatusCodes.includes(statusCode) && !isComingSoon)\r\n    ) {\r\n        status = VehicleStatuses.Shipping;\r\n    }\r\n\r\n    if (isComingSoon) {\r\n        status = VehicleStatuses.ComingSoon;\r\n    }\r\n\r\n    if (isOnRemoteLot) {\r\n        status = VehicleStatuses.OffSite;\r\n    }\r\n\r\n    if (otherUnavailableStatusCodes.includes(statusCode)) {\r\n        status = VehicleStatuses.NotAvailable;\r\n    }\r\n\r\n    return status;\r\n};\r\n","export const getSavedVehicles = (componentCallback: (stockNumberList: number[]) => any) => {\r\n    const event = new CustomEvent('kmxGetSavedCars', {\r\n        bubbles: true,\r\n        detail: {\r\n            callback: (result: Promise<any>) => {\r\n                result.then((stockNumberList: number[]) => {\r\n                    componentCallback(stockNumberList);\r\n                });\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nexport const setSavedVehicle = (sn: number, componentCallback?: (success: boolean) => any) => {\r\n    const event = new CustomEvent('kmxAddSavedCar', {\r\n        bubbles: true,\r\n        detail: {\r\n            stockNumber: sn,\r\n            callback: (result: Promise<any>) => {\r\n                toggleFavoritesResponse(result, componentCallback);\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nexport const removeSavedVehicle = (sn: number, componentCallback?: (success: boolean) => any) => {\r\n    const event = new CustomEvent('kmxRemoveSavedCar', {\r\n        bubbles: true,\r\n        detail: {\r\n            stockNumber: sn,\r\n            callback: (result: Promise<any>) => {\r\n                toggleFavoritesResponse(result, componentCallback);\r\n            },\r\n        },\r\n    });\r\n    document.documentElement.dispatchEvent(event);\r\n};\r\n\r\nconst toggleFavoritesResponse = (response: Promise<any>, componentCallback?: (success: boolean) => any) => {\r\n    response.then((success: boolean) => {\r\n        success && componentCallback && componentCallback(success);\r\n    });\r\n};\r\n\r\nexport const loadSavedVehiclesAssets = (done: () => any) => {\r\n    const savedVehiclesCSSDataEl = document.querySelector('[data-saved-vehicles-css-src]') as any;\r\n    const savedVehiclesJSDataEl = document.querySelector('[data-saved-vehicles-js-src]') as any;\r\n    const savedVehiclesCSSSrc = savedVehiclesCSSDataEl.getAttribute('data-saved-vehicles-css-src');\r\n    const savedVehiclesJSSrc = savedVehiclesJSDataEl.getAttribute('data-saved-vehicles-js-src');\r\n\r\n    const linkEl = document.createElement('link');\r\n    linkEl.setAttribute('rel', 'stylesheet');\r\n    linkEl.setAttribute('type', 'text/css');\r\n    linkEl.setAttribute('href', savedVehiclesCSSSrc);\r\n\r\n    const scriptEl = document.createElement('script');\r\n    scriptEl.setAttribute('type', 'text/javascript');\r\n    scriptEl.setAttribute('src', savedVehiclesJSSrc);\r\n\r\n    scriptEl.onload = () => {\r\n        linkEl.onload = () => done();\r\n        document.getElementsByTagName('head')[0].appendChild(linkEl);\r\n    };\r\n\r\n    document.getElementsByTagName('head')[0].appendChild(scriptEl);\r\n};\r\n","import * as React from 'react';\r\n\r\nexport const searchIcon = (\r\n    <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n        <path\r\n            className=\"filled-path\"\r\n            d=\"M15.5 14h-.79l-.28-.27a6.5 6.5 0 10-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0a4.5 4.5 0 11-.01-8.99A4.5 4.5 0 019.5 14z\"\r\n        />\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n    </svg>\r\n);\r\n\r\nexport const recommendedIcon = (\r\n    <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\">\r\n        <path d=\"M0,0H24V24H0Z\" fill=\"none\" />\r\n        <path className=\"filled-path\" d=\"M3,11h8V3H3ZM5,5H9V9H5Z\" />\r\n        <path className=\"filled-path\" d=\"M13,3v8h8V3Zm6,6H15V5h4Z\" />\r\n        <path className=\"filled-path\" d=\"M3,21h8V13H3Zm2-6H9v4H5Z\" />\r\n        <polygon\r\n            className=\"filled-path\"\r\n            points=\"18 13 16 13 16 16 13 16 13 18 16 18 16 21 18 21 18 18 21 18 21 16 18 16 18 13\"\r\n        />\r\n    </svg>\r\n);\r\n\r\nexport const borderedHeartIcon = (\r\n    <svg viewBox=\"0 0 24 24\" width=\"32\" height=\"32\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n        <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n        <path\r\n            className=\"filled-path\"\r\n            d=\"M16.5 3A6 6 0 0012 5a6 6 0 00-4.5-2A5.5 5.5 0 002 8.5c0 3.8 3.4 6.9 8.6 11.5l1.4 1.4 1.4-1.4c5.2-4.6 8.6-7.7 8.6-11.5A5.5 5.5 0 0016.5 3zm.1 2A3.3 3.3 0 0120 8.4c0 2.8-3.2 5.8-8 10.2-4.8-4.4-8-7.4-8-10.2A3.3 3.3 0 017.4 5a3.9 3.9 0 012.9 1.4l1.7 2 1.7-2a3.9 3.9 0 013-1.4\"\r\n        />\r\n    </svg>\r\n);\r\n\r\nexport const lycgHeart = (\r\n    <svg width=\"53.91\" height=\"40\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 53.91 40\" aria-hidden=\"true\">\r\n        <path\r\n            d=\"M7.41,8.42A27.13,27.13,0,0,0,2.81,15l2.3,1.14a24.9,24.9,0,0,1,4.17-6Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M17.19,4.61l-1-2.35a26.69,26.69,0,0,0-6.8,4.3l1.67,1.93A24.55,24.55,0,0,1,17.19,4.61Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M23,2.9a22.43,22.43,0,0,1,3.66-.33V0a27.18,27.18,0,0,0-7.95,1.31l.79,2.44A23.19,23.19,0,0,1,23,2.9Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M46.05,7.92a27.35,27.35,0,0,0-6.47-4.79L38.38,5.4A24.41,24.41,0,0,1,44,9.54L46,8Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M29.1,2.65a24.63,24.63,0,0,1,7.07,1.72l1-2.37A26.91,26.91,0,0,0,29.32.1Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#ffc000\"\r\n        />\r\n        <path\r\n            d=\"M51,39.06a27,27,0,0,0-.37-25l-2,1.62A23.88,23.88,0,0,1,51,23a24.17,24.17,0,0,1-2.28,15Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#053361\"\r\n        />\r\n        <path\r\n            d=\"M49.36,11.86l-1.59-2L37.33,18.1a7.46,7.46,0,0,0-5.23-2.19,7.14,7.14,0,0,0-5.23,2.64,7.12,7.12,0,0,0-5.23-2.64,7.39,7.39,0,0,0-7.37,7.39c0,3.74,2,7.61,5.93,11.5a39.4,39.4,0,0,0,6,4.77l.68.43.69-.43a39.4,39.4,0,0,0,6-4.77c3.94-3.89,5.94-7.76,5.94-11.5V23a7.22,7.22,0,0,0-.67-2.74ZM36.91,23.3c0,3-1.74,6.28-5.17,9.67a36,36,0,0,1-4.87,4A37.3,37.3,0,0,1,22,33c-3.42-3.39-5.16-6.64-5.16-9.67a4.81,4.81,0,0,1,4.8-4.82h0c1.78,0,3,1.37,4,2.58l1.19,1.35L28,21.09c1.06-1.21,2.26-2.58,4-2.58a4.82,4.82,0,0,1,4.92,4.72h0Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#053361\"\r\n        />\r\n        <path\r\n            d=\"M4.17,18.33l-2.4-.91a27.66,27.66,0,0,0-1,3.08,27.09,27.09,0,0,0,2.1,18.56l2.29-1.15a24.41,24.41,0,0,1-2-16.14,2.88,2.88,0,0,1,.13-.65A22.58,22.58,0,0,1,4.17,18.33Z\"\r\n            transform=\"translate(0 0)\"\r\n            fill=\"#053361\"\r\n        />\r\n    </svg>\r\n);\r\n\r\nexport const coloredHeartIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"57.1\" height=\"64\" viewBox=\"0 0 57.1 64\">\r\n        <path\r\n            d=\"M40,50.67l-2.48-2.22c-8.81-7.83-14.62-13-14.62-19.34a9.23,9.23,0,0,1,9.4-9.23A10.31,10.31,0,0,1,40,23.39a10.31,10.31,0,0,1,7.7-3.51,9.23,9.23,0,0,1,9.4,9.23c0,6.34-5.81,11.51-14.62,19.36Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fa8e92\"\r\n        />\r\n        <path\r\n            d=\"M59.28,18.23a6.62,6.62,0,0,1,2.93,2.92.33.33,0,0,0,.31.2.34.34,0,0,0,.31-.2,6.6,6.6,0,0,1,2.92-2.92.34.34,0,0,0,.2-.32.33.33,0,0,0-.2-.31,6.65,6.65,0,0,1-2.92-2.92.33.33,0,0,0-.31-.2.32.32,0,0,0-.31.2,6.67,6.67,0,0,1-2.93,2.92.34.34,0,0,0-.2.31A.36.36,0,0,0,59.28,18.23Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fff\"\r\n        />\r\n        <path\r\n            d=\"M68.48,6.47a11.47,11.47,0,0,1,5,5.05.58.58,0,0,0,.54.35.61.61,0,0,0,.54-.35,11.5,11.5,0,0,1,5-5A.58.58,0,0,0,80,5.93a.61.61,0,0,0-.35-.54,11.47,11.47,0,0,1-5-5A.61.61,0,0,0,74.07,0a.58.58,0,0,0-.54.35,11.45,11.45,0,0,1-5,5,.61.61,0,0,0-.35.54A.58.58,0,0,0,68.48,6.47Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fff\"\r\n        />\r\n        <path\r\n            d=\"M71.13,23.77a1.25,1.25,0,1,1-1.25-1.25A1.25,1.25,0,0,1,71.13,23.77Z\"\r\n            transform=\"translate(-22.9)\"\r\n            fill=\"#fff\"\r\n        />\r\n        <ellipse cx=\"17.1\" cy=\"61.7\" rx=\"16.9\" ry=\"2.3\" fill=\"#053361\" opacity=\"0.4\" />\r\n    </svg>\r\n);\r\n\r\nexport const recentSearchesHeaderIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\">\r\n        <path\r\n            className=\"filled-path\"\r\n            d=\"M22.7,19.1H21.6l-.4-.4a9.16,9.16,0,0,0,2.1-5.8A8.81,8.81,0,0,0,14.6,4,8.79,8.79,0,0,0,6,12.9H2.7l5.1,5.5,5.5-5.5H8.6a6.13,6.13,0,0,1,6-6.2,6.13,6.13,0,0,1,6,6.2,6.13,6.13,0,0,1-6,6.2,6,6,0,0,1-2.4-.5l-2,2a8.31,8.31,0,0,0,4.4,1.2,8.21,8.21,0,0,0,5.6-2.2l.4.4v1.1L27.3,28l2-2Z\"\r\n        />\r\n        <g>\r\n            <rect id=\"bad44000-0b53-4c86-a131-794ad20f5488\" width=\"32\" height=\"32\" fill=\"none\" />\r\n        </g>\r\n    </svg>\r\n);\r\n\r\nexport const placeholderTileIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"77.01\" height=\"63.86\" viewBox=\"0 0 77.01 63.86\">\r\n        <g>\r\n            <g>\r\n                <g>\r\n                    <g>\r\n                        <rect width=\"76.96\" height=\"58.33\" fill=\"none\" />\r\n                        <ellipse cx=\"38.01\" cy=\"61.43\" rx=\"17.01\" ry=\"2.43\" fill=\"#053361\" fillOpacity=\"0.4\" />\r\n                        <g>\r\n                            <path\r\n                                d=\"M43.58,37.64H42l-.58-.55a13.39,13.39,0,1,0-1.44,1.44l.55.57v1.63L50.79,51l3.06-3.07Zm-12.35,0a9.26,9.26,0,1,1,9.26-9.26A9.25,9.25,0,0,1,31.23,37.64Z\"\r\n                                fill=\"#fff\"\r\n                            />\r\n                        </g>\r\n                        <path\r\n                            d=\"M53.71,18.12a6.2,6.2,0,0,1,2.75,2.75.33.33,0,0,0,.3.19.3.3,0,0,0,.29-.19,6.27,6.27,0,0,1,2.76-2.75.32.32,0,0,0,.19-.3.31.31,0,0,0-.19-.29,6.29,6.29,0,0,1-2.76-2.76.32.32,0,0,0-.29-.19.35.35,0,0,0-.3.19,6.22,6.22,0,0,1-2.75,2.76.31.31,0,0,0-.19.29A.32.32,0,0,0,53.71,18.12Z\"\r\n                            fill=\"#fff\"\r\n                        />\r\n                        <path\r\n                            d=\"M65.22,6.63a11.78,11.78,0,0,1,5.16,5.17.62.62,0,0,0,1.11,0,11.75,11.75,0,0,1,5.17-5.17.62.62,0,0,0,0-1.11A11.75,11.75,0,0,1,71.49.35a.62.62,0,0,0-1.11,0,11.78,11.78,0,0,1-5.16,5.17.61.61,0,0,0,0,1.11Z\"\r\n                            fill=\"#fff\"\r\n                        />\r\n                        <path d=\"M65.67,23.9a1.22,1.22,0,1,1-1.21-1.22A1.21,1.21,0,0,1,65.67,23.9Z\" fill=\"#fff\" />\r\n                    </g>\r\n                </g>\r\n            </g>\r\n        </g>\r\n    </svg>\r\n);\r\n\r\nexport const viewedVehiclesHeaderIcon = (\r\n    <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\">\r\n        <rect width=\"32\" height=\"32\" fill=\"none\" />\r\n        <g>\r\n            <g>\r\n                <g>\r\n                    <g>\r\n                        <path\r\n                            className=\"filled-path\"\r\n                            d=\"M16.5,4a12,12,0,0,0-12,12H.5l5.19,5.19.09.18L11.17,16h-4a9.36,9.36,0,1,1,2.74,6.59L8,24.48A12,12,0,1,0,16.5,4Zm-1.33,6.67v6.66l5.7,3.39,1-1.61-4.66-2.78V10.67Z\"\r\n                        />\r\n                    </g>\r\n                </g>\r\n            </g>\r\n        </g>\r\n    </svg>\r\n);\r\n","import { IVehicleTile } from '../../../types/vehicleTile';\r\nimport { viewedVehiclesLocalStorage } from './constants';\r\nimport { IViewedVehicleLocalStorage } from './types';\r\n\r\nconst transformStockNumberTypeForLocalStorage = (stockNumber: number): string => {\r\n    return stockNumber.toString();\r\n};\r\n\r\nexport const removeViewedVehicleItemLocalStorage = (tileToRemove: IVehicleTile): void => {\r\n    const serializedViewedVehicles = localStorage.getItem(viewedVehiclesLocalStorage.key) as string;\r\n\r\n    const newLocalStorage: IViewedVehicleLocalStorage[] = [];\r\n\r\n    if (serializedViewedVehicles?.length) {\r\n        JSON.parse(serializedViewedVehicles).forEach((tileData: IViewedVehicleLocalStorage) => {\r\n            const tileDataString = transformStockNumberTypeForLocalStorage(tileData.stockNumber);\r\n            const tileToRemoveString = transformStockNumberTypeForLocalStorage(tileToRemove.stockNumber);\r\n\r\n            if (tileDataString === tileToRemoveString) {\r\n                return;\r\n            } else {\r\n                newLocalStorage.push(tileData);\r\n            }\r\n        });\r\n    } else {\r\n        console.log(\r\n            `Vehicle ${tileToRemove.stockNumber} was not found in the user's viewed vehicles. It may be a vehicle that was only saved/favorited.`\r\n        );\r\n    }\r\n\r\n    window.localStorage.setItem(viewedVehiclesLocalStorage.key, JSON.stringify(newLocalStorage));\r\n};\r\n","import { ITrackingPayload, ITrackAnchorClick } from '../types/analytics';\r\n\r\ndeclare global {\r\n    interface Window {\r\n        _satellite: any;\r\n    }\r\n}\r\n\r\ndeclare global {\r\n    interface Window {\r\n        adobeDataLayer: any;\r\n        digitalData: any;\r\n    }\r\n}\r\n\r\nexport const ANALYTICS_CONSTANTS = {\r\n    EVENTS: {\r\n        CLICK: {\r\n            CTA: 'ctaClick',\r\n            SAVE_RECOMMENDED_CAR: 'recommendedSaveCarClick',\r\n            SEARCH_INITIATED: 'searchInitiated',\r\n            RECOMMENDED_CARTILE: 'recommendedCarClicked',\r\n        },\r\n        PAGE: {\r\n            LOAD: 'pageLoad',\r\n            STATE: 'pageState',\r\n        },\r\n    },\r\n    PAGE_STATE_LOAD_TIME: 2000,\r\n    TRACKING_DELAY: 250,\r\n};\r\n\r\nexport const trackEDDL = (payload: ITrackingPayload): void => {\r\n    if (payload.event == null) {\r\n        payload.event = ANALYTICS_CONSTANTS.EVENTS.CLICK.CTA;\r\n    }\r\n    // \"adobeDataLayer\" will appear in the console if the site in questions is using \"EDDL\"\r\n    // Note: adobeDataLayer is created by Adobe, not us. Thus, we don't create it if it doesn't exist.\r\n    if (window.adobeDataLayer) {\r\n        window.adobeDataLayer.push(payload);\r\n    } else {\r\n        console.log('Home Microsite : adobeDataLayer is undefined. Data did not track.');\r\n    }\r\n};\r\n\r\nexport const trackAnchorClick = ({ clickEvent, taggingEvent, title, position, href, page }: ITrackAnchorClick) => {\r\n    clickEvent.preventDefault();\r\n    const payload: ITrackingPayload = {\r\n        event: taggingEvent,\r\n        linkDetails: {\r\n            name: title,\r\n            position: position,\r\n        },\r\n        search: {\r\n            initiationMethod: `${page}|${title}|${location}`,\r\n        },\r\n    };\r\n    trackEDDL(payload);\r\n    setTimeout(() => {\r\n        window.location.href = href;\r\n    }, ANALYTICS_CONSTANTS.TRACKING_DELAY);\r\n};\r\n","import { Store } from '../types/store';\r\n\r\nexport const COOKIES = {\r\n    myKmx: 'KmxMyKmx_0',\r\n    visitor: 'KmxVisitor_0',\r\n    authSession: 'KmxAuthSession',\r\n    mxMyKmxInfo: 'KmxMyKmxInfo',\r\n};\r\n\r\nexport const isAuthenticated = (): boolean => {\r\n    try {\r\n        return !!document.cookie.match(COOKIES.myKmx);\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\nexport const getMyKmxUserId = (): string => {\r\n    try {\r\n        if (isAuthenticated()) {\r\n            return document.cookie.split(`${COOKIES.myKmx}=`)[1].split(';')[0].split('userid=')[1];\r\n        }\r\n        return '';\r\n    } catch (e) {\r\n        return '';\r\n    }\r\n};\r\nexport const hasSignedIn = (): boolean => {\r\n    try {\r\n        const myKmxUserId = document.cookie.split(`${COOKIES.visitor}=`)[1].split(';')[0].split('MyKmxUser=')[1];\r\n        return myKmxUserId !== '' && myKmxUserId.length > 0;\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\nexport const hasAuthSession = (): boolean => {\r\n    try {\r\n        const authSession = document.cookie.split(`${COOKIES.authSession}=`)[1].split(';')[0].split('tk=')[1];\r\n\r\n        return authSession !== '' && authSession.length > 0;\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\nexport const hasPreviouslySignedIn = (): boolean => {\r\n    try {\r\n        return hasSignedIn() && !hasAuthSession();\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n};\r\n\r\nexport const mxMyKmxInfoObject = (): any => createObjectFromCookie(COOKIES.mxMyKmxInfo);\r\n\r\nconst createObjectFromCookie = (cookieName: string) => {\r\n    try {\r\n        const cookieInfo = document.cookie.split(`${cookieName}=`)[1].split(';')[0];\r\n        return splitCookieData(cookieInfo.split('&'));\r\n    } catch (e) {\r\n        return null;\r\n    }\r\n};\r\n\r\nexport const KmxVisitorObject = (): any => createObjectFromCookie(COOKIES.visitor);\r\n\r\nfunction splitCookieData(data: any): any {\r\n    if (data !== null) {\r\n        let dataArray = new Map();\r\n        dataArray = data.map((item: any) => [\r\n            item.substring(0, item.indexOf('=')),\r\n            item.substring(item.indexOf('=') + 1),\r\n        ]);\r\n        const cookieData = Object.fromEntries(dataArray);\r\n        return cookieData;\r\n    } else {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const getStoreId = (): string | undefined => {\r\n    return getCookieValue(COOKIES.visitor, 'StoreId');\r\n};\r\n\r\nexport const getStoreZipCode = (): string | undefined => {\r\n    return getCookieValue(COOKIES.visitor, 'Zip');\r\n};\r\n\r\nexport const getLatitude = (): number => {\r\n    const latString = getCookieValue(COOKIES.visitor, 'Lat');\r\n    let lat = 0;\r\n    if (latString !== undefined) {\r\n        lat = parseFloat(latString);\r\n    }\r\n    return lat;\r\n};\r\n\r\nexport const getLongitude = (): number => {\r\n    const longString = getCookieValue(COOKIES.visitor, 'Lon');\r\n    let long = 0;\r\n    if (longString !== undefined) {\r\n        long = parseFloat(longString);\r\n    }\r\n    return long;\r\n};\r\n\r\nconst getCookieValue = (cookieName: string, key: string): string | undefined => {\r\n    const cookie = createObjectFromCookie(cookieName);\r\n    return cookie?.[key];\r\n};\r\n","import * as React from 'react';\r\nimport { deviceIsApple, deviceIsAndroid, deviceIsWindows } from '../pages/home/utilities/helpers';\r\n\r\nclass Icons {\r\n    static get close() {\r\n        return (\r\n            <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get delete() {\r\n        return (\r\n            <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\r\n                <path d=\"M6 19c0 1.1.9 2 2 2h8a2 2 0 002-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get info() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" width=\"20px\" height=\"20px\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get info_rebrand() {\r\n        return (\r\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <g id=\"icons / material system icons / info\">\r\n                    <path\r\n                        id=\"Union\"\r\n                        fillRule=\"evenodd\"\r\n                        clipRule=\"evenodd\"\r\n                        d=\"M1.1825 11C1.1825 5.5825 5.5825 1.1825 11 1.1825C16.4175 1.1825 20.8175 5.5825 20.8175 11C20.8175 16.4175 16.4175 20.8175 11 20.8175C5.5825 20.8175 1.1825 16.4175 1.1825 11ZM2.48416 11C2.48416 15.6933 6.30666 19.5158 11 19.5158C15.6933 19.5158 19.5158 15.6933 19.5158 11C19.5158 6.30666 15.6933 2.48416 11 2.48416C6.30666 2.48416 2.48416 6.30666 2.48416 11ZM11 8.24996C11.5063 8.24996 11.9167 7.83955 11.9167 7.33329C11.9167 6.82703 11.5063 6.41663 11 6.41663C10.4937 6.41663 10.0833 6.82703 10.0833 7.33329C10.0833 7.83955 10.4937 8.24996 11 8.24996ZM12.8333 14.0158H11.6508V10.0833C11.6508 9.72583 11.3575 9.4325 11 9.4325H9.16667C8.80917 9.4325 8.51584 9.72583 8.51584 10.0833C8.51584 10.4408 8.80917 10.7342 9.16667 10.7342H10.3492V14.0158H9.16667C8.80917 14.0158 8.51584 14.3092 8.51584 14.6667C8.51584 15.0242 8.80917 15.3175 9.16667 15.3175H12.8333C13.1908 15.3175 13.4842 15.0242 13.4842 14.6667C13.4842 14.3092 13.1908 14.0158 12.8333 14.0158Z\"\r\n                        fill=\"#001333\"\r\n                    />\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get search() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path\r\n                    fill=\"#2A343D\"\r\n                    d=\"M15.5 14h-.79l-.28-.27a6.5 6.5 0 10-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0a4.5 4.5 0 11-.01-8.99A4.5 4.5 0 019.5 14z\"\r\n                />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get carPriceTag() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M10.3 43.4a3.9 3.9 0 00-3.88 3.8 4.07 4.07 0 001.1 2.7 3.73 3.73 0 002.77 1.27A3.8 3.8 0 0013 50a3.88 3.88 0 001.1-2.68 4 4 0 00-3.85-3.9zm1.85 3.88a1.9 1.9 0 01-.56 1.3 1.8 1.8 0 01-1.3.6 1.8 1.8 0 01-1.3-.63 2.1 2.1 0 01-.58-1.36 1.92 1.92 0 011.87-1.8 2 2 0 011.85 1.88zm25.56 3.9a3.73 3.73 0 002.77-1.28 4.07 4.07 0 001.1-2.7 3.9 3.9 0 00-3.86-3.8 4 4 0 00-3.85 3.88A3.88 3.88 0 0035 50a3.8 3.8 0 002.7 1.17zm0-5.8a1.92 1.92 0 011.88 1.8 2.1 2.1 0 01-.58 1.37 1.8 1.8 0 01-1.3.62 1.8 1.8 0 01-1.3-.6 1.9 1.9 0 01-.55-1.3 2 2 0 011.86-1.88zM25.6 30.66a1 1 0 010 2h-8.4c-1.8 0-2.27.34-2.5 1L13 37.47h14.4a1 1 0 010 2H11.45a1 1 0 01-.84-.45 1 1 0 01-.07-1l2.3-5.2c.85-2.22 3.22-2.22 4.36-2.22zM24 52.08a14.64 14.64 0 006.64-1.78 1 1 0 11.92 1.78 16.66 16.66 0 01-7.56 2 16.68 16.68 0 01-7.58-2 1 1 0 01.92-1.78A14.65 14.65 0 0024 52.08zm21.22-6.5a1 1 0 10-1.94.5 5.32 5.32 0 01.1 2.1L42.24 57H5.82l-1.2-8.76a5.6 5.6 0 011.82-5l1.37-1a1 1 0 00-.57-1.8h-3.3C2.92 40.4 2 39 2 37.87c0-.7.63-.94 1.17-.94H4.8a25.55 25.55 0 013 1.53 1 1 0 00.8.07 1 1 0 00.6-.58l2.54-6.5a3.7 3.7 0 013.62-2.12h9.54a1 1 0 000-2h-9.5a5.53 5.53 0 00-5.48 3.4L7.8 36.18c-2.28-1.23-2.73-1.23-2.94-1.23h-1.7a3 3 0 00-3.16 3C0 40 1.68 42.4 3.94 42.4h.52a7.48 7.48 0 00-1.83 6.06l1.2 8.76A2 2 0 005.76 59h.65v2.08a3 3 0 002.95 3h1.88a3 3 0 002.95-3V59h19.64v2.08a3 3 0 003 3h1.88a3 3 0 003-3V59h.65a2 2 0 001.9-1.75l1.22-8.77a7.83 7.83 0 00-.24-2.9zm-33 15.47a1 1 0 01-.95 1H9.35a1 1 0 01-.95-1V59h3.78zm27.42 0a1 1 0 01-1 1h-1.87a1 1 0 01-1-1V59h3.83z\" />\r\n                <path d=\"M49.17 11.26a1.1 1.1 0 00-.2-.4l-6.06-7.72a1 1 0 00-1-.36l-4.45 1-.7-3a1 1 0 00-2 .46l.7 3L31 5.3a1 1 0 00-.75.76l-2.05 9.6a.93.93 0 000 .45L34 41.24a1 1 0 001 .77.83.83 0 00.22 0l19-4.4a1 1 0 00.75-1.2zM35.77 39.8l-5.53-23.93L32.1 7.1l3.84-.9.46 2a4.32 4.32 0 00-1.7 1.54 4.2 4.2 0 00-.53 3.2 4.25 4.25 0 004.13 3.3 4.47 4.47 0 001-.12 4.25 4.25 0 002.64-1.9 4.2 4.2 0 00.53-3.2 4.23 4.23 0 00-4.08-3.26l-.46-1.95 3.84-.88 5.54 7.06 5.54 23.93zm1.1-29.58l.45 1.94a1 1 0 001 .78.85.85 0 00.23 0 1 1 0 00.75-1.2l-.45-1.94a2.22 2.22 0 011.65 1.66 2.24 2.24 0 11-4.36 1 2.2 2.2 0 01.28-1.7 2.38 2.38 0 01.45-.54zM47.2 29.48a3.8 3.8 0 01-.82 3.22 4.24 4.24 0 01-1.5 1l.25 1.1a1 1 0 01-.75 1.2h-.23a1 1 0 01-1-.8l-.23-1a16 16 0 01-2.85.24h-.67a1 1 0 010-2c3.54.1 4.9-.58 5.4-1.16a1.88 1.88 0 00.35-1.6c-.18-1.24-1.34-1.8-3.42-1.68-2.36.15-3.55-.7-4.14-1.43a3.78 3.78 0 01-.6-3.47 3.74 3.74 0 012.7-2.62l-.2-1.08a1 1 0 112-.45l.3 1.28a18.52 18.52 0 012.16 0 1 1 0 11-.12 2c-3.84-.23-4.58.64-4.84 1.5a1.9 1.9 0 00.2 1.67 3 3 0 002.47.7c4.5-.27 5.38 2.27 5.54 3.38zm13.8-2.1a1 1 0 010 1.42 1 1 0 01-1.4 0L55.76 25a1 1 0 011.4-1.4zm-5.24-8.94a1 1 0 010-1.4l3.84-3.84a1 1 0 011.4 1.4l-3.83 3.84a1 1 0 01-1.4 0zM64 21a1 1 0 01-1 1h-3.93a1 1 0 110-2H63a1 1 0 011 1z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get financialSlider() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M29.3 13.6a1 1 0 011-1H63a1 1 0 010 2H30.3a1 1 0 01-1-1zM0 13.6a1 1 0 011-1h6.64a9.1 9.1 0 110 2H1a1 1 0 01-1-1zm9.6-.08a7.06 7.06 0 107.05-7.06 7.07 7.07 0 00-7.06 7.06zM63 31.12h-4.62a1 1 0 000 2H63a1 1 0 000-2zm-63 1a1 1 0 011-1h34.85a9.1 9.1 0 110 2H1a1 1 0 01-1-1zM37.8 32a7.06 7.06 0 107.07-7.06A7.07 7.07 0 0037.8 32zM63 49.4H39.16a1 1 0 000 2H63a1 1 0 000-2zm-28.43 1.08a9.06 9.06 0 01-18.07.9H1a1 1 0 010-2h15.52a9.06 9.06 0 0118.05 1.1zm-2 0a7.06 7.06 0 10-7.06 7.06 7.07 7.07 0 007.07-7.06z\" />\r\n                <path d=\"M19.3 15.07a2.2 2.2 0 01-.92 1.7 2.26 2.26 0 01-.5.27v.07a1 1 0 01-2 .08 8.94 8.94 0 01-1.12-.18 1 1 0 11.5-1.93c1.55.4 2 .13 2 .12l.08-.25c0-.27-.52-.4-.84-.46a2.56 2.56 0 01-2-1.34 2.25 2.25 0 01.1-2.06 2.08 2.08 0 011.27-1.1v-.07a1 1 0 012 0v.13l.52.14a1 1 0 01.67 1.25 1 1 0 01-1.25.67c-.85-.25-1.43-.3-1.53-.1s-.1.2-.08.2.15.18.58.25c2.48.42 2.53 2.1 2.5 2.6zM45 31c-.43-.08-.57-.2-.58-.24a.4.4 0 01.07-.23c.1-.18.66-.14 1.53.12a1 1 0 00.57-1.92l-.53-.14v-.14a1 1 0 10-2 0v.06a2.08 2.08 0 00-1.34 1.06 2.25 2.25 0 00-.1 2.06 2.6 2.6 0 002 1.33c.3 0 .84.2.82.45a.4.4 0 01-.07.25s-.42.27-2-.13a1 1 0 00-.5 1.94 7.86 7.86 0 001.12.22 1 1 0 002-.06v-.07a2.74 2.74 0 00.5-.27 2.22 2.22 0 00.92-1.7c.13-.6.07-2.23-2.42-2.6zM25.65 49.42c-.43-.07-.57-.2-.58-.23a.54.54 0 01.07-.24c.1-.18.68-.14 1.54.12a1 1 0 00.57-1.92l-.53-.16v-.13a1 1 0 00-2 0V47a2.1 2.1 0 00-1.34 1 2.22 2.22 0 00-.1 2.06 2.55 2.55 0 002 1.33c.32.04.86.17.83.44a.4.4 0 01-.06.25s-.4.26-2-.14a1 1 0 00-.5 1.94c.4.1.77.17 1.12.22a1 1 0 002-.06V54a2.3 2.3 0 00.52-.26 2.22 2.22 0 00.97-1.74c.04-.48 0-2.15-2.5-2.58z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get maxcareService() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M32 59a1 1 0 01-.57-.18l-13-9A16.07 16.07 0 0111 37.05l-2-28A1 1 0 019.92 8C17.78 7.4 27 5.17 31 4.21l.77-.21a1 1 0 01.45 0l1.11.26c4 .93 13.47 3.11 20.75 3.72A1 1 0 0155 9.07l-2 28c-.29 6-2.33 10-6.45 12.76l-14 9A1 1 0 0132 59zM11.07 9.91l1.93 27a13.94 13.94 0 006.55 11.24L32 56.8l13.44-8.64C49 45.81 50.75 42.25 51 37l1.93-27a176.56 176.56 0 01-20-3.68L32 6l-.55.13a152.73 152.73 0 01-20.38 3.78zM32 64a1 1 0 01-.55-.17l-15.6-10.4A21.07 21.07 0 016.52 37L5 5.05a1 1 0 01.28-.74A1 1 0 016 4C15.76 4 31.6.07 31.76 0a.94.94 0 01.47 0c.17 0 17 4 25.77 4a1 1 0 01.72.31 1 1 0 01.28.74L57.48 37a21.07 21.07 0 01-9.33 16.47l-15.6 10.4A1 1 0 0132 64zM7.05 6l1.47 30.86A19 19 0 0017 51.77l15 10 15-10a19 19 0 008.44-14.91L57 6c-8.73-.27-22.91-3.49-25-4-2 .52-15.5 3.75-24.95 4z\" />\r\n                <path d=\"M30 36a1 1 0 01-.71-.29l-4-4a1 1 0 011.42-1.42l3.21 3.21 7.3-9.12a1 1 0 011.56 1.24l-8 10a1 1 0 01-.72.38zm16-6a14 14 0 10-14 14 14 14 0 0014-14zm-2 0a12 12 0 11-12-12 12 12 0 0112 12z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get ribbon() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M38.92 53.07l-2.37-6.52 1.46.54a2.2 2.2 0 00.92.12l1.88 5.17a1 1 0 01-.6 1.27 1 1 0 01-.34.06 1 1 0 01-.94-.66zM17.05 51.2a.83.83 0 00.34.08 1 1 0 00.93-.66l2.4-6.57-1.54.06a2 2 0 01-.6-.1l-2.15 5.9a1 1 0 00.6 1.3zm13.58-3.37L29 46.53l-5.4 14.8-4.7-3.78a1 1 0 00-.6-.22h-2.4l.92-2.53a1 1 0 10-1.82-.73l-1.16 3.18h-1.5l5.07-14a2.2 2.2 0 01-.4-.75l-.64-2.28-6.44 17.64a1 1 0 00.92 1.34l7.08.12 5.5 4.46a1 1 0 00.63.22 1.24 1.24 0 00.27 0 1 1 0 00.67-.63l5.64-15.5zm17-7.6L47 42.5a2.2 2.2 0 01-.38.75l5.08 14-6 .1a1 1 0 00-.6.22l-1.87 1.5-1.07-2.9a1 1 0 10-1.88.67l1.3 3.57-1.17 1L35 46.54l-1.65 1.3L39 63.33a1 1 0 00.67.64A1.24 1.24 0 0040 64a1 1 0 00.63-.22l5.5-4.46 7.08-.12a1 1 0 00.93-1.34z\" />\r\n                <path d=\"M55.68 25.52a2.2 2.2 0 000-2.74l-1.6-2a.2.2 0 010-.2l.9-2.42a2.2 2.2 0 00-.85-2.6L52 14.1a.2.2 0 01-.1-.18l.1-2.58a2.2 2.2 0 00-1.6-2.2l-2.48-.7a.2.2 0 01-.15-.15L47 5.8a2.2 2.2 0 00-2.2-1.6l-2.6.1a.24.24 0 01-.17-.1l-1.4-2.14A2.22 2.22 0 0038 1.2l-2.4.9a.23.23 0 01-.22 0l-2-1.58a2.2 2.2 0 00-2.74 0l-2 1.6a.26.26 0 01-.2 0L26 1.22a2.22 2.22 0 00-2.6.84L22 4.2a.28.28 0 01-.18.1l-2.58-.1A2.2 2.2 0 0017 5.8l-.7 2.5a.2.2 0 01-.15.13l-2.48.7a2.2 2.2 0 00-1.67 2.2l.1 2.6a.2.2 0 01-.1.17l-2.1 1.43a2.2 2.2 0 00-.84 2.6l.94 2.43a.2.2 0 010 .2l-1.6 2a2.2 2.2 0 000 2.74l1.6 2a.18.18 0 010 .2l-.9 2.42a2.2 2.2 0 00.86 2.6l2.14 1.43a.2.2 0 01.1.18L12 37a2.2 2.2 0 001.6 2.22l2.5.7a.23.23 0 01.14.14L17 42.5a2.2 2.2 0 002.2 1.6l2.6-.1a.2.2 0 01.17.1l1.43 2.14a2.2 2.2 0 002.6.85l2.42-.9a.2.2 0 01.2 0l2 1.6a2.23 2.23 0 002.75 0l2-1.6a.2.2 0 01.2 0l2.42.9a2.2 2.2 0 002.6-.85l1.43-2.15a.2.2 0 01.18-.1l2.6.1a2.23 2.23 0 002.2-1.6l.7-2.48a.23.23 0 01.15-.15l2.48-.7A2.2 2.2 0 0052 37l-.1-2.58a.2.2 0 01.1-.22l2.14-1.43a2.2 2.2 0 00.85-2.6l-.9-2.42a.2.2 0 010-.2zm-3.5 2.92l.88 2.42a.2.2 0 01-.08.25l-2.14 1.44a2.2 2.2 0 00-1 1.92L50 37a.22.22 0 01-.15.2l-2.5.7a2.2 2.2 0 00-1.5 1.54L45.1 42a.23.23 0 01-.2.15L42.3 42a2.23 2.23 0 00-1.9 1L39 45.13a.18.18 0 01-.24.08l-2.42-.88a2.25 2.25 0 00-2.14.34l-2 1.6a.2.2 0 01-.26 0l-2-1.6a2.27 2.27 0 00-2.14-.34l-2.42.9a.18.18 0 01-.24-.1L23.6 43a2.23 2.23 0 00-1.9-1l-2.6.1a.24.24 0 01-.2-.1l-.7-2.48A2.2 2.2 0 0016.67 38l-2.48-.7a.22.22 0 01-.2-.3l.1-2.58a2.2 2.2 0 00-1-1.92L11 31.1a.2.2 0 01-.08-.24l.9-2.42a2.23 2.23 0 00-.35-2.13l-1.6-2a.2.2 0 010-.25l1.6-2a2.25 2.25 0 00.34-2.14l-.88-2.4a.2.2 0 01.08-.3l2.14-1.43a2.22 2.22 0 001-1.93l-.15-2.6a.23.23 0 01.15-.2l2.5-.7a2.23 2.23 0 001.55-1.53l.7-2.48a.2.2 0 01.2-.16l2.6.1a2.23 2.23 0 001.9-1l1.45-2.15a.2.2 0 01.24-.08l2.4.93a2.2 2.2 0 002.15-.34l2-1.6a.2.2 0 01.26 0l2 1.6a2.2 2.2 0 002.2.34l2.4-.9a.2.2 0 01.25.1l1.44 2.13a2.2 2.2 0 001.9 1l2.6-.1a.23.23 0 01.2.16l.7 2.47a2.22 2.22 0 001.53 1.53l2.48.7a.23.23 0 01.16.2l-.1 2.58a2.22 2.22 0 001 1.93L53 17.2a.2.2 0 01.08.25l-.9 2.4a2.25 2.25 0 00.33 2.15l1.6 2a.2.2 0 010 .26l-1.6 2a2.23 2.23 0 00-.33 2.18zm-2.72-4.3a17.46 17.46 0 11-28-13.9 1 1 0 111.2 1.6 15.4 15.4 0 105-2.52 1 1 0 01-1.23-.67 1 1 0 01.67-1.25 17.48 17.48 0 0122.36 16.75z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get simpleHeart() {\r\n        return (\r\n            <svg\r\n                id=\"a53ae08b-f65f-41e5-af0d-54ed3b75814d\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"31.88\"\r\n                height=\"31.77\"\r\n                viewBox=\"0 0 31.88 31.77\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <defs>\r\n                    <mask\r\n                        id=\"a83f0532-778d-411b-814d-865f0841a41a\"\r\n                        x=\"0\"\r\n                        y=\"0\"\r\n                        width=\"31.88\"\r\n                        height=\"31.77\"\r\n                        maskUnits=\"userSpaceOnUse\"\r\n                    >\r\n                        <g transform=\"translate(0 -0.17)\">\r\n                            <g id=\"bf1bc6af-ae5d-4cfb-a35a-4614236ecb95\">\r\n                                <g id=\"b021762b-787c-4824-9a12-a31dbee3b4a8\">\r\n                                    <path\r\n                                        id=\"a54e4f99-68d2-4145-b6c8-6291d65e9b45\"\r\n                                        d=\"M15.86,28.5a.66.66,0,0,1-.42-.15L13.5,26.7,9.62,23.2a42,42,0,0,1-3-3,21.66,21.66,0,0,1-2.62-3,15.31,15.31,0,0,1-1.35-2.72A8.49,8.49,0,0,1,2,11.26,7.43,7.43,0,0,1,4.3,5.77,7.7,7.7,0,0,1,9.91,3.5a8.12,8.12,0,0,1,5.94,2.43,8.1,8.1,0,0,1,6-2.43,7.78,7.78,0,0,1,5.66,2.25,7.43,7.43,0,0,1,2.29,5.47,8.27,8.27,0,0,1-.65,3.22,17.68,17.68,0,0,1-1.42,2.73,20.55,20.55,0,0,1-2.58,3.08c-1.19,1.22-2.2,2.21-3,3s-2.15,1.89-3.9,3.4l-1.93,1.69A.65.65,0,0,1,15.86,28.5ZM9.91,4.79A6.33,6.33,0,0,0,5.22,6.67a6.09,6.09,0,0,0-1.94,4.57,7.56,7.56,0,0,0,.54,2.7A15.35,15.35,0,0,0,5.11,16.5a20.84,20.84,0,0,0,2.43,2.87c1.17,1.2,2.17,2.18,3,2.91l3.88,3.49,1.49,1.29,1.49-1.33c1.77-1.53,3.07-2.68,3.88-3.41S23,20.57,24.2,19.37a20.91,20.91,0,0,0,2.44-2.87A17.31,17.31,0,0,0,27.93,14a7.08,7.08,0,0,0,.55-2.73,6.11,6.11,0,0,0-1.93-4.57A6.46,6.46,0,0,0,21.83,4.8a6.85,6.85,0,0,0-5.46,2.5.65.65,0,0,1-.93.07l-.07-.07A6.85,6.85,0,0,0,9.9,4.79Z\"\r\n                                        fill=\"#fff\"\r\n                                        fillRule=\"evenodd\"\r\n                                    />\r\n                                </g>\r\n                            </g>\r\n                        </g>\r\n                    </mask>\r\n                </defs>\r\n                <g id=\"add4aef5-e2c3-487d-9312-0ffcc6c11737\">\r\n                    <g id=\"a0e761c1-da19-45fc-8b95-6776afd1ac17\">\r\n                        <g id=\"a083f922-d9c3-47b0-a2cf-e689b396b81b\">\r\n                            <g id=\"e53e5cc1-130f-40ea-bc06-1360f114dc99\">\r\n                                <rect\r\n                                    id=\"acd43210-a7c6-421b-a3ce-3a8de28b88b4\"\r\n                                    width=\"31.88\"\r\n                                    height=\"31.77\"\r\n                                    fill=\"none\"\r\n                                />\r\n                                <g id=\"e79693ae-4e67-4113-b4cf-c2cdac59b7c1\">\r\n                                    <path\r\n                                        d=\"M15.86,28.5a.66.66,0,0,1-.42-.15L13.5,26.7,9.62,23.2a42,42,0,0,1-3-3,21.66,21.66,0,0,1-2.62-3,15.31,15.31,0,0,1-1.35-2.72A8.49,8.49,0,0,1,2,11.26,7.43,7.43,0,0,1,4.3,5.77,7.7,7.7,0,0,1,9.91,3.5a8.12,8.12,0,0,1,5.94,2.43,8.1,8.1,0,0,1,6-2.43,7.78,7.78,0,0,1,5.66,2.25,7.43,7.43,0,0,1,2.29,5.47,8.27,8.27,0,0,1-.65,3.22,17.68,17.68,0,0,1-1.42,2.73,20.55,20.55,0,0,1-2.58,3.08c-1.19,1.22-2.2,2.21-3,3s-2.15,1.89-3.9,3.4l-1.93,1.69A.65.65,0,0,1,15.86,28.5ZM9.91,4.79A6.33,6.33,0,0,0,5.22,6.67a6.09,6.09,0,0,0-1.94,4.57,7.56,7.56,0,0,0,.54,2.7A15.35,15.35,0,0,0,5.11,16.5a20.84,20.84,0,0,0,2.43,2.87c1.17,1.2,2.17,2.18,3,2.91l3.88,3.49,1.49,1.29,1.49-1.33c1.77-1.53,3.07-2.68,3.88-3.41S23,20.57,24.2,19.37a20.91,20.91,0,0,0,2.44-2.87A17.31,17.31,0,0,0,27.93,14a7.08,7.08,0,0,0,.55-2.73,6.11,6.11,0,0,0-1.93-4.57A6.46,6.46,0,0,0,21.83,4.8a6.85,6.85,0,0,0-5.46,2.5.65.65,0,0,1-.93.07l-.07-.07A6.85,6.85,0,0,0,9.9,4.79Z\"\r\n                                        transform=\"translate(0 -0.17)\"\r\n                                        fill=\"#fff\"\r\n                                    />\r\n                                </g>\r\n                                <g mask=\"url(#a83f0532-778d-411b-814d-865f0841a41a)\">\r\n                                    <g id=\"a8df6527-49fb-4b38-80ce-ab5b5e394dab\">\r\n                                        <rect width=\"31.88\" height=\"31.77\" fill=\"#053361\" />\r\n                                    </g>\r\n                                </g>\r\n                                <path\r\n                                    id=\"fd1d36f7-5a46-4efb-8906-b6fdef2b3418\"\r\n                                    d=\"M17.74,9.56c1.85-3.7,7.41-2.78,8.33.93\"\r\n                                    transform=\"translate(0 -0.17)\"\r\n                                    fill=\"none\"\r\n                                    stroke=\"#053361\"\r\n                                    strokeLinecap=\"round\"\r\n                                />\r\n                            </g>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get storefront() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path\r\n                    className=\"storefront_svg__cls-2\"\r\n                    d=\"M29.46 36.53h6.08v1.78h-6.08zm7.77 0v1.78h6.08v-1.78zm-12.51-7.65c.38 0 .7.17.74 1h2.8c0-2.26-1.66-3.05-3.6-3.05a3.64 3.64 0 00-4 4c0 2.45 1.25 4.09 4 4.09 1.91 0 3.61-.93 3.61-3.06H25.4c0 .82-.31 1-.71 1-.77 0-.83-.87-.83-2s.07-1.98.86-1.98zM38 30v4.83h3.11V29.7c0-2.05-.94-2.81-2.24-2.81a2.13 2.13 0 00-2 1.39 2.24 2.24 0 00-4.15 0l-.07-1.16h-3v7.7h3.11V30c0-.62.27-.86.57-.86s.54.29.54.83v4.83h3.03V30c0-.62.27-.86.57-.86s.53.31.53.86z\"\r\n                />\r\n                <path d=\"M63 58.49h-2.8V26.34a1 1 0 00-1-1H52v-4.91a.29.29 0 000-.09.94.94 0 00-.06-.29.55.55 0 00-.12-.19.91.91 0 00-.08-.13L33.14.31a1 1 0 00-.71-.31 1 1 0 00-.72.29L12.25 19.72a1 1 0 00-.29.7v4.91H4.8a1 1 0 00-1 1v32.16H1a1 1 0 000 2h15.43V63a1 1 0 001 1h29.14a1 1 0 001-1v-2.51H63a1 1 0 000-2zM5.8 32.63h10.63v8.94H5.8zm12.63-6.29v-2.73h27.14v18H18.43zm.49-4.73L32.29 8.26l12.82 13.35zm28.65 11H58.2v8.94H47.57zm10.63-2H47.57v-3.27H58.2zm-10.61-5.27L50 22.86v2.48zM32.4 2.43l17.24 18-2.07 2.1v-.83a1 1 0 00-.28-.69L33 6.14a1.05 1.05 0 00-.71-.31.94.94 0 00-.72.3L16.73 21a1 1 0 00-.3.7v.83l-2.06-2.08zM14 22.86l2.45 2.48H14zm2.47 4.48v3.29H5.8v-3.29zM5.8 58.49V43.57h10.63v14.92zm21 3.51v-9.39H31V62zm6.2 0v-9.39h4.19V62zm12.57 0h-6.38V51.61a1 1 0 00-1-1H25.81a1 1 0 00-1 1V62h-6.38V43.57h27.14V62zm2-18.43H58.2v14.92H47.57z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get borderHeart() {\r\n        return (\r\n            <svg\r\n                width=\"20px\"\r\n                height=\"20px\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                viewBox=\"0 0 24 24\"\r\n                aria-hidden=\"true\"\r\n                fill=\"#053361\"\r\n            >\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M16.5 3A6 6 0 0012 5a6 6 0 00-4.5-2A5.5 5.5 0 002 8.5c0 3.8 3.4 6.9 8.6 11.5l1.4 1.4 1.4-1.4c5.2-4.6 8.6-7.7 8.6-11.5A5.5 5.5 0 0016.5 3zm.1 2A3.3 3.3 0 0120 8.4c0 2.8-3.2 5.8-8 10.2-4.8-4.4-8-7.4-8-10.2A3.3 3.3 0 017.4 5a3.9 3.9 0 012.9 1.4l1.7 2 1.7-2a3.9 3.9 0 013-1.4\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get coloredBorderHeart() {\r\n        return (\r\n            <svg width=\"53.91\" height=\"40\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 53.91 40\" aria-hidden=\"true\">\r\n                <path\r\n                    d=\"M7.41,8.42A27.13,27.13,0,0,0,2.81,15l2.3,1.14a24.9,24.9,0,0,1,4.17-6Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M17.19,4.61l-1-2.35a26.69,26.69,0,0,0-6.8,4.3l1.67,1.93A24.55,24.55,0,0,1,17.19,4.61Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M23,2.9a22.43,22.43,0,0,1,3.66-.33V0a27.18,27.18,0,0,0-7.95,1.31l.79,2.44A23.19,23.19,0,0,1,23,2.9Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M46.05,7.92a27.35,27.35,0,0,0-6.47-4.79L38.38,5.4A24.41,24.41,0,0,1,44,9.54L46,8Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M29.1,2.65a24.63,24.63,0,0,1,7.07,1.72l1-2.37A26.91,26.91,0,0,0,29.32.1Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#ffd900\"\r\n                />\r\n                <path\r\n                    d=\"M51,39.06a27,27,0,0,0-.37-25l-2,1.62A23.88,23.88,0,0,1,51,23a24.17,24.17,0,0,1-2.28,15Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#053361\"\r\n                />\r\n                <path\r\n                    d=\"M49.36,11.86l-1.59-2L37.33,18.1a7.46,7.46,0,0,0-5.23-2.19,7.14,7.14,0,0,0-5.23,2.64,7.12,7.12,0,0,0-5.23-2.64,7.39,7.39,0,0,0-7.37,7.39c0,3.74,2,7.61,5.93,11.5a39.4,39.4,0,0,0,6,4.77l.68.43.69-.43a39.4,39.4,0,0,0,6-4.77c3.94-3.89,5.94-7.76,5.94-11.5V23a7.22,7.22,0,0,0-.67-2.74ZM36.91,23.3c0,3-1.74,6.28-5.17,9.67a36,36,0,0,1-4.87,4A37.3,37.3,0,0,1,22,33c-3.42-3.39-5.16-6.64-5.16-9.67a4.81,4.81,0,0,1,4.8-4.82h0c1.78,0,3,1.37,4,2.58l1.19,1.35L28,21.09c1.06-1.21,2.26-2.58,4-2.58a4.82,4.82,0,0,1,4.92,4.72h0Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#053361\"\r\n                />\r\n                <path\r\n                    d=\"M4.17,18.33l-2.4-.91a27.66,27.66,0,0,0-1,3.08,27.09,27.09,0,0,0,2.1,18.56l2.29-1.15a24.41,24.41,0,0,1-2-16.14,2.88,2.88,0,0,1,.13-.65A22.58,22.58,0,0,1,4.17,18.33Z\"\r\n                    transform=\"translate(0 0)\"\r\n                    fill=\"#053361\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get tools() {\r\n        return (\r\n            <svg width=\"32px\" height=\"32px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h64v64H0z\" fill=\"none\" />\r\n                <path d=\"M61.91 6.33L57.5 1.92a1 1 0 00-1.2-.16L48.75 6a1 1 0 00-.49.67l-.83 3.91-14.94 14.94L32 25a1 1 0 00-.92-.27l-5.23 1.11a.45.45 0 00-.11 0h-.1a.94.94 0 00-.29.2l-3.17 3.16a1 1 0 00-.29.71c0 1.54-2.68 4.22-4.22 4.22a1.22 1.22 0 00-.38.07 1.19 1.19 0 00-.33.22L3.38 48.08a5.4 5.4 0 000 7.61l5.38 5.38a4.15 4.15 0 003 1.3 3.78 3.78 0 00.67 0 6.24 6.24 0 003.34-1.87l13.55-13.62a1.19 1.19 0 00.22-.33 1 1 0 00.07-.38c0-1.62 2.6-4.22 4.22-4.22a1 1 0 00.71-.29l3.16-3.17a.84.84 0 00.2-.29.3.3 0 010-.1l.1-.1 1.1-5.23a1 1 0 00-.27-.92l-.5-.49 14.94-15 3.91-.83a1 1 0 00.67-.49l4.24-7.55a1 1 0 00-.18-1.16zM31.78 27.64l4.41 4.41.82.82-.61 2.9-8.34-8.34 2.9-.61zM33.39 40c-2 .26-4.31 2.21-5.29 4.27l-2.83-2.83a1 1 0 10-1.41 1.41l3.34 3.34L14.34 59a4.47 4.47 0 01-2.24 1.32 2.15 2.15 0 01-1.93-.7L4.8 54.28a3.39 3.39 0 010-4.79l12.86-12.86L21 40a1 1 0 00.71.3 1 1 0 00.7-.3 1 1 0 000-1.41l-2.84-2.84c2-1 4-3.3 4.28-5.27l2.2-2.2 9.53 9.53zM56.3 13.71l-3.76.8a1 1 0 00-.5.27L36.89 29.93l-3-3 15.16-15.14a1 1 0 00.27-.5l.8-3.76 6.5-3.66L60 7.21z\" />\r\n                <path d=\"M29.85 20.58A1 1 0 0128.43 22l-2.83-2.87a1 1 0 01-.23-1 12.08 12.08 0 00-2.82-12.6A11.94 11.94 0 0014.47 2L19 6.58a3.94 3.94 0 011 3.79l-1.4 5.45a4 4 0 01-2.78 2.78l-5.45 1.46a3.94 3.94 0 01-3.79-1L2 14.47a12 12 0 0016 10.94 1 1 0 011 .24l1.43 1.43a1 1 0 010 1.41 1 1 0 01-1.41 0l-1-1A14 14 0 01.15 12a1 1 0 01.67-.81 1 1 0 011 .25L8 17.63a1.91 1.91 0 001.85.49l5.46-1.46a1.88 1.88 0 001.35-1.36l1.47-5.45a1.94 1.94 0 00-.5-1.85l-6.15-6.16a1 1 0 01-.24-1 1 1 0 01.76-.7 14 14 0 0115.41 18zM59.89 40a14.1 14.1 0 00-14-3.49L43 33.72a1 1 0 10-1.41 1.42l3.26 3.26a1 1 0 001 .24 12.1 12.1 0 0112.57 2.82A11.92 11.92 0 0162 49.54L57.43 45a3.93 3.93 0 00-3.79-1l-5.46 1.46a3.92 3.92 0 00-2.77 2.77L44 53.64a3.93 3.93 0 001 3.78L49.54 62A12 12 0 0138.6 46a1 1 0 00-.23-1l-1.22-1.28a1 1 0 10-1.45 1.38l.82.85A14.05 14.05 0 0049.93 64a14.21 14.21 0 002-.15 1 1 0 00.8-.67 1 1 0 00-.24-1L46.38 56a1.91 1.91 0 01-.5-1.86l1.46-5.45a1.94 1.94 0 011.36-1.36l5.46-1.46a1.89 1.89 0 011.85.5l6.15 6.15a1 1 0 001 .24 1 1 0 00.67-.81A13.92 13.92 0 0059.89 40z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get cleaningDisinfecting() {\r\n        return (\r\n            <svg\r\n                aria-hidden=\"true\"\r\n                id=\"ab37b1d8-936e-4d23-8088-20a764fe19d1\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"32\"\r\n                height=\"32.27\"\r\n                viewBox=\"0 0 32 32.27\"\r\n            >\r\n                <g id=\"b89f7b9a-37a7-418e-bd90-382f18e1b68d\">\r\n                    <g id=\"e1d149d0-fce1-4f1e-b411-842cb0070391\">\r\n                        <g id=\"b81cf590-3741-4397-a1b0-e733c5f3cc7c\">\r\n                            <g id=\"fd82d239-a781-4bb9-98e3-dbaac4465762\">\r\n                                <g id=\"f7c125a6-bc31-4739-9bb1-3209d5626322\">\r\n                                    <rect\r\n                                        id=\"f727acbc-f343-4033-bd3b-ef171ca8770c\"\r\n                                        width=\"32\"\r\n                                        height=\"32\"\r\n                                        fill=\"none\"\r\n                                    />\r\n                                    <g id=\"bfdf3720-1d12-49ee-a946-7b130ae1ec74\">\r\n                                        <g id=\"b1625795-41ee-4bd5-b010-36ef02700306\">\r\n                                            <g id=\"a5395e56-7d4e-48b6-82da-aabefecc97ad\">\r\n                                                <path\r\n                                                    id=\"a7df7f0b-124e-47b0-8aca-994bbc0ab186\"\r\n                                                    d=\"M17,17.84A20.32,20.32,0,0,1,15.5,16c0-.23,1-1.55,1.09-2,.35-1.49,0-2-1.23-3.65V8a3.36,3.36,0,0,1,.41-1c1.12,1.32,2.3,2.18,3.66,2.18a.68.68,0,0,0,.69-.68V8.16c0-.24-.51-.47-.73-.59A3.88,3.88,0,0,1,17.48,5c.08-.24,1-.54,1.11-.57l2.23-.09a.68.68,0,0,0,.61-.67V2.6a.68.68,0,0,0-.56-.66l-2.25-.43H11A5.19,5.19,0,0,0,6.46,5a.68.68,0,0,0,.38.87c1.69.68,3,1.42,3,2v2.47C8,12,6.62,13.57,6.42,15.05a69.48,69.48,0,0,0,0,11,7.88,7.88,0,0,0,2.77,5.54.7.7,0,0,0,.44.16h8a.68.68,0,0,0,.66-.49c.52-1.78.9-3.31,1.15-4.62\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <line\r\n                                                    id=\"a1cf84d3-2ac1-4785-9a63-ca4d6b08746b\"\r\n                                                    x1=\"18.54\"\r\n                                                    y1=\"4.49\"\r\n                                                    x2=\"18.54\"\r\n                                                    y2=\"1.51\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <path\r\n                                                    id=\"a11f1e50-0fee-4131-b285-3094ed6ee89d\"\r\n                                                    d=\"M23.36,21A3.25,3.25,0,0,1,21,23.9\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <path\r\n                                                    id=\"b795b77f-4225-49db-8d1b-ea8ef4d9242c\"\r\n                                                    d=\"M20.88,26.77a6.21,6.21,0,0,1-1.38-.16,5.65,5.65,0,0,1-1.89-.83,4.88,4.88,0,0,1-2.19-4,4.57,4.57,0,0,1,.44-1.73,16.46,16.46,0,0,1,1-1.88,46.08,46.08,0,0,1,4-5.43c4.48,5.38,5.46,7.88,5.46,9A5.25,5.25,0,0,1,20.88,26.77Z\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <polygon\r\n                                                    id=\"bb48d9c6-b084-4b02-a77a-b209ee409f64\"\r\n                                                    points=\"9.87 10.44 15.33 10.44 15.33 8.08 9.87 8.08 9.87 10.44\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                />\r\n                                                <path\r\n                                                    id=\"a3501a3d-4ef1-4116-934b-a66261822bb1\"\r\n                                                    d=\"M17.52,4.91A6.06,6.06,0,0,0,15.36,8\"\r\n                                                    fill=\"none\"\r\n                                                    stroke=\"#053361\"\r\n                                                    strokeLinecap=\"round\"\r\n                                                    strokeLinejoin=\"round\"\r\n                                                />\r\n                                            </g>\r\n                                        </g>\r\n                                    </g>\r\n                                </g>\r\n                            </g>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get healthPrecautions() {\r\n        return (\r\n            <svg\r\n                aria-hidden=\"true\"\r\n                id=\"b03a8145-5035-471d-aee6-fc3dfd654b3f\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                width=\"32\"\r\n                height=\"32\"\r\n                viewBox=\"0 0 32 32\"\r\n            >\r\n                <g id=\"a2ea9a08-0ea4-41d5-992b-f7d5bdbae5af\">\r\n                    <g id=\"ecf7c29f-52a8-4bb2-9503-49da15bac474\">\r\n                        <g id=\"aa927f7a-1f84-478e-9014-c6a1d9e6bb35\">\r\n                            <g id=\"b1b38044-3230-49ff-9f5d-51fc0e2b5245\">\r\n                                <g id=\"a0a5c31a-3331-44a7-aa1d-eea72404fcf6\">\r\n                                    <rect\r\n                                        id=\"bcaee203-a132-4dbd-867b-bc2450b5f768\"\r\n                                        width=\"32\"\r\n                                        height=\"32\"\r\n                                        fill=\"none\"\r\n                                    />\r\n                                    <path\r\n                                        id=\"e5625ea5-1da5-4158-b6f3-1a039a6a9500\"\r\n                                        d=\"M23.16,13.47H18.53V8.84A.85.85,0,0,0,17.68,8H14.32a.85.85,0,0,0-.85.84v4.63H8.84a.85.85,0,0,0-.84.85v3.36a.85.85,0,0,0,.84.85h4.63v4.63a.85.85,0,0,0,.85.84h3.36a.85.85,0,0,0,.85-.84V18.53h4.63a.85.85,0,0,0,.84-.85V14.32A.85.85,0,0,0,23.16,13.47Z\"\r\n                                        fill=\"none\"\r\n                                        stroke=\"#053361\"\r\n                                    />\r\n                                    <path\r\n                                        id=\"be8bec07-1764-4428-bd2f-94cc928a8442\"\r\n                                        d=\"M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z\"\r\n                                        fill=\"none\"\r\n                                        stroke=\"#053361\"\r\n                                    />\r\n                                </g>\r\n                            </g>\r\n                        </g>\r\n                    </g>\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get help() {\r\n        return (\r\n            <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92A3.4 3.4 0 0013 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8a4 4 0 118 0c0 .88-.36 1.68-.93 2.25z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get check() {\r\n        return (\r\n            <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get location() {\r\n        return (\r\n            <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                <path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get instagram() {\r\n        return (\r\n            <svg width=\"28px\" height=\"28px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" aria-hidden=\"true\">\r\n                <g>\r\n                    <path d=\"M256,49.471c67.266,0,75.233.256,101.8,1.468,24.562,1.121,37.9,5.225,46.779,8.674a78.07,78.07,0,0,1,28.966,18.845,78.07,78.07,0,0,1,18.845,28.966c3.449,8.877,7.553,22.217,8.674,46.778,1.212,26.565,1.468,34.532,1.468,101.8s-.256,75.233-1.468,101.8c-1.121,24.562-5.225,37.9-8.674,46.779a83.431,83.431,0,0,1-47.811,47.811c-8.878,3.449-22.217,7.553-46.779,8.674-26.56,1.212-34.527,1.468-101.8,1.468s-75.237-.256-101.8-1.468c-24.562-1.121-37.9-5.225-46.779-8.674a78.07,78.07,0,0,1-28.966-18.845,78.062,78.062,0,0,1-18.845-28.966c-3.449-8.878-7.553-22.217-8.674-46.778-1.212-26.565-1.468-34.532-1.468-101.8s.256-75.233,1.468-101.8c1.121-24.562,5.225-37.9,8.674-46.779A78.07,78.07,0,0,1,78.458,78.458a78.07,78.07,0,0,1,28.966-18.845c8.877-3.449,22.217-7.553,46.778-8.674,26.565-1.212,34.532-1.468,101.8-1.468m0-45.392c-68.418,0-77,.29-103.866,1.516-26.815,1.224-45.127,5.482-61.152,11.71a123.485,123.485,0,0,0-44.62,29.057,123.485,123.485,0,0,0-29.057,44.62C11.077,107.007,6.819,125.319,5.6,152.134,4.369,179,4.079,187.582,4.079,256s.29,77,1.516,103.866c1.224,26.815,5.482,45.127,11.71,61.152a123.493,123.493,0,0,0,29.057,44.62A123.485,123.485,0,0,0,90.982,494.7c16.025,6.228,34.337,10.486,61.152,11.71C179,507.631,187.582,507.921,256,507.921s77-.29,103.866-1.516c26.815-1.224,45.127-5.482,61.152-11.71A128.82,128.82,0,0,0,494.7,421.018c6.228-16.025,10.486-34.337,11.71-61.152C507.631,333,507.921,324.418,507.921,256s-.29-77-1.516-103.866c-1.224-26.815-5.482-45.127-11.71-61.152a123.485,123.485,0,0,0-29.057-44.62,123.485,123.485,0,0,0-44.62-29.057C404.993,11.077,386.681,6.819,359.866,5.6,333,4.369,324.418,4.079,256,4.079Z\" />\r\n                    <path d=\"M256,126.635A129.365,129.365,0,1,0,385.365,256,129.365,129.365,0,0,0,256,126.635Zm0,213.338A83.974,83.974,0,1,1,339.974,256,83.974,83.974,0,0,1,256,339.973Z\" />\r\n                    <circle cx=\"390.476\" cy=\"121.524\" r=\"30.23\" />\r\n                </g>\r\n            </svg>\r\n        );\r\n    }\r\n    static get carMaxLogoDark() {\r\n        return (\r\n            <svg\r\n                height=\"22px\"\r\n                width=\"111px\"\r\n                viewBox=\"0 0 327.84 64\"\r\n                xmlns=\"http://www.w3.org/2000/svg\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M289.8 5.05a1.1 1.1 0 0 0 .85-1.12c0-1.17-1.23-1.17-1.57-1.17h-1.65V7.4h.64V5.3h.8c.76 0 .94.2 1 .9a5.26 5.26 0 0 0 .23 1.2h.66a6.74 6.74 0 0 1-.28-1.46c-.05-.57-.2-.77-.7-.9zm-.72-.3h-1V3.3h1c.34 0 .92 0 .92.74s-.6.7-.92.7zM289 .8a4.33 4.33 0 1 0 4.32 4.32A4.34 4.34 0 0 0 289 .8zm0 8.2a3.83 3.83 0 1 1 3.8-3.84A3.82 3.82 0 0 1 289 9z\"\r\n                />\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M129.42 54.55h32.32V64h-32.32v-9.45zm41.53 0V64h32.32v-9.45zm41.52 0V64h32.32v-9.45zm41.52 0V64h32.3v-9.45zm41.52 0V64h32.32v-9.45z\"\r\n                />\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M129.57 42.43V1.23h16.26l.4 6.24h.15c2.82-5.9 7-7.47 10.88-7.47 5.3 0 9.16 2.38 11.3 7.47 2.82-5.9 7-7.47 10.88-7.47 7 0 12 4.1 12 15v27.43h-16.7V16.58c0-2.87-1.3-4.43-2.88-4.43s-3 1.3-3 4.6v25.68h-16.7V16.58c0-2.87-1.3-4.43-2.9-4.43s-3 1.3-3 4.6v25.68zm138.26 0h16.75l-11.48-22 9.35-19H265l-4.64 13-5.6-13H237.3l10.16 19-11.15 22h16.95l7.1-15 7.48 15zm-48.7-14.2V24.8h-2.6c-5.1 0-6.2 2.46-6.2 4.74 0 2.62 1.5 4.25 4.44 4.25 3.34 0 4.37-2.2 4.37-5.56zm0-11.32v-4.23c0-2-1-3.27-3.72-3.27-2.37 0-3.65.82-3.88 4.25h-15.86c.64-11 10.5-13.4 20.57-13.4 15.33 0 20.25 5 20.25 14.54v27.6h-16.85l-.5-3.88c-2.78 3.76-7 5.15-11.36 5.15-8.1 0-13.8-4.4-13.8-12.5 0-10.12 7.93-14.3 22.86-14.3z\"\r\n                />\r\n                <path\r\n                    fill=\"#053361\"\r\n                    d=\"M25.18 27.16H40.5c0 11.38-9.1 16.35-19.32 16.35C6.7 43.5 0 34.7 0 21.6-.38 8.75 7.28.06 21.23.06c10.4 0 19.22 4.23 19.28 16.36h-15c-.22-4.68-1.93-5.6-3.93-5.6-4.24 0-4.64 4.35-4.64 11 0 6.3.35 11 4.46 11 2.1 0 3.54-1.26 3.77-5.6zm78.18-8.77h1.37c3.15 0 5.43-1.1 5.43-4.18s-2.1-3.66-5.3-3.66h-1.5v7.83zm-16 24V1.2h24.4c8.84 0 14 2.68 14 10.45 0 4.74-2 8.34-8.18 9.94 4 .33 6.17 2.1 7 5.24.9 3.54 1.3 8.08 2.07 15.6h-16c-1.5-9.25-.88-8.3-1.45-11.83-.35-2.05-1.37-2.85-4-2.85h-1.9v14.68zM58.53 25.72h7l-3.4-15.55-3.6 15.55zm-19.8 16.7L52 1.13h21.17l13.27 41.3H69.5l-1.6-6.64H56.08l-1.66 6.63z\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n    static get arrowIcon() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\r\n                <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get rightArrowIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\">\r\n                <path\r\n                    d=\"M13.84 5.83999C13.56 6.11999 13.56 6.56999 13.84 6.83999L18.28 11.28H4.00004C3.61004 11.28 3.29004 11.6 3.29004 11.99C3.29004 12.38 3.61004 12.7 4.00004 12.7H18.29L13.85 17.14C13.57 17.42 13.57 17.87 13.85 18.14C14.13 18.41 14.58 18.42 14.85 18.14L20.51 12.48C20.58 12.42 20.63 12.34 20.66 12.25C20.7 12.16 20.72 12.07 20.72 11.98C20.72 11.89 20.7 11.79 20.66 11.71C20.62 11.62 20.57 11.55 20.51 11.48L14.85 5.81999C14.57 5.53999 14.12 5.53999 13.85 5.81999L13.84 5.83999Z\"\r\n                    fill=\"currentColor\"\r\n                    className=\"stroked\"\r\n                ></path>\r\n                <path\r\n                    d=\"M13.84 5.83999C13.56 6.11999 13.56 6.56999 13.84 6.83999L18.28 11.28H4.00004C3.61004 11.28 3.29004 11.6 3.29004 11.99C3.29004 12.38 3.61004 12.7 4.00004 12.7H18.29L13.85 17.14C13.57 17.42 13.57 17.87 13.85 18.14C14.13 18.41 14.58 18.42 14.85 18.14L20.51 12.48C20.58 12.42 20.63 12.34 20.66 12.25C20.7 12.16 20.72 12.07 20.72 11.98C20.72 11.89 20.7 11.79 20.66 11.71C20.62 11.62 20.57 11.55 20.51 11.48L14.85 5.81999C14.57 5.53999 14.12 5.53999 13.85 5.81999L13.84 5.83999Z\"\r\n                    fill=\"currentColor\"\r\n                    className=\"filled\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n    static get moreVert() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\r\n            </svg>\r\n        );\r\n    }\r\n    static get favoriteHeart() {\r\n        return (\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"5 0 18 24\" fill=\"none\">\r\n                <path\r\n                    fill=\"#fff\"\r\n                    d=\"M17.41 3.18c-1.82-.35-4.03.27-5.41 2.3-1.37-2.03-3.59-2.65-5.41-2.3-1.99.38-4.3 2.14-4.3 5.82 0 5.02 4.7 10.1 8.92 11.51.26.08.52.13.79.13s.54-.04.79-.13c4.22-1.41 8.92-6.48 8.92-11.51 0-3.68-2.32-5.44-4.3-5.82\"\r\n                ></path>\r\n                <path\r\n                    fill=\"#fff\"\r\n                    d=\"M12 20.63c-.27 0-.54-.04-.79-.13-4.22-1.41-8.92-6.48-8.92-11.51 0-3.68 2.32-5.44 4.3-5.82 1.82-.35 4.03.27 5.41 2.3 1.37-2.03 3.59-2.65 5.41-2.3 1.99.38 4.3 2.14 4.3 5.82 0 5.02-4.7 10.1-8.92 11.51-.26.09-.52.13-.79.13m-.34-1.47c.22.07.46.07.68 0 3.75-1.25 7.95-5.87 7.95-10.16 0-2.81-1.63-4.13-3.15-4.42-1.57-.3-3.57.41-4.48 2.69-.22.54-1.1.54-1.32 0-.91-2.28-2.91-2.99-4.48-2.69C5.34 4.87 3.71 6.19 3.71 9c0 4.29 4.2 8.9 7.95 10.16\"\r\n                ></path>\r\n                <path\r\n                    fill=\"#2A343D\"\r\n                    d=\"M12 20.63c-.27 0-.54-.04-.79-.13-4.22-1.41-8.92-6.48-8.92-11.51 0-3.68 2.32-5.44 4.3-5.82 1.82-.35 4.03.27 5.41 2.3 1.37-2.03 3.59-2.65 5.41-2.3 1.99.38 4.3 2.14 4.3 5.82 0 5.02-4.7 10.1-8.92 11.51-.26.09-.52.13-.79.13m-.34-1.47c.22.07.46.07.68 0 3.75-1.25 7.95-5.87 7.95-10.16 0-2.81-1.63-4.13-3.15-4.42-1.57-.3-3.57.41-4.48 2.69-.22.54-1.1.54-1.32 0-.91-2.28-2.91-2.99-4.48-2.69C5.34 4.87 3.71 6.19 3.71 9c0 4.29 4.2 8.9 7.95 10.16\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n    static get share() {\r\n        const shareIconIOS = () => {\r\n            return (\r\n                <svg viewBox=\"3 1 20 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                    <path\r\n                        d=\"M8.70845 5.95878L10.3493 4.31794V13.7504C10.3493 14.1079 10.6426 14.4013 11.0001 14.4013C11.3576 14.4013 11.651 14.1079 11.651 13.7504V4.31794L13.2918 5.95878C13.4201 6.08711 13.5851 6.15128 13.7501 6.15128C13.9151 6.15128 14.0801 6.08711 14.2085 5.95878C14.4651 5.70211 14.4651 5.28961 14.2085 5.04211L11.4585 2.29211C11.2018 2.03544 10.7893 2.03544 10.5418 2.29211L7.79178 5.04211C7.53512 5.29878 7.53512 5.71128 7.79178 5.95878C8.04845 6.20628 8.46095 6.21544 8.70845 5.95878Z\"\r\n                        fill=\"#2A343D\"\r\n                    ></path>\r\n                    <path\r\n                        d=\"M15.5835 7.59961C15.226 7.59961 14.9326 7.89294 14.9326 8.25044C14.9326 8.60794 15.226 8.90128 15.5835 8.90128C16.2343 8.90128 16.766 9.43294 16.766 10.0838V17.4171C16.766 18.0679 16.2343 18.5996 15.5835 18.5996H6.41678C5.76595 18.5996 5.23428 18.0679 5.23428 17.4171V10.0838C5.23428 9.43294 5.76595 8.90128 6.41678 8.90128C6.77428 8.90128 7.06762 8.60794 7.06762 8.25044C7.06762 7.89294 6.77428 7.59961 6.41678 7.59961C5.05095 7.59961 3.93262 8.71794 3.93262 10.0838V17.4171C3.93262 18.7829 5.05095 19.9013 6.41678 19.9013H15.5835C16.9493 19.9013 18.0676 18.7829 18.0676 17.4171V10.0838C18.0676 8.71794 16.9493 7.59961 15.5835 7.59961Z\"\r\n                        fill=\"#2A343D\"\r\n                    ></path>\r\n                </svg>\r\n            );\r\n        };\r\n\r\n        const shareIconAndroid = () => {\r\n            return (\r\n                <svg\r\n                    className=\"shareAndroid\"\r\n                    id=\"uuid-50515006-23d9-4e72-970b-d2a1dce94fb3\"\r\n                    xmlns=\"http://www.w3.org/2000/svg\"\r\n                    viewBox=\"0 0 48 48\"\r\n                >\r\n                    <rect fill=\"none\" />\r\n                    <path d=\"M35.79,32.27c-1.53,0-2.89,.6-3.94,1.55l-14.32-8.33c.1-.46,.18-.92,.18-1.41s-.08-.94-.18-1.41l14.16-8.25c1.08,1,2.51,1.63,4.1,1.63,3.33,0,6.02-2.69,6.02-6.02s-2.69-6.02-6.02-6.02-6.02,2.69-6.02,6.02c0,.48,.08,.94,.18,1.41l-14.16,8.25c-1.08-1-2.51-1.63-4.1-1.63-3.33,0-6.02,2.69-6.02,6.02s2.69,6.02,6.02,6.02c1.59,0,3.01-.62,4.1-1.63l14.3,8.35c-.1,.42-.16,.86-.16,1.31,0,3.23,2.63,5.86,5.86,5.86s5.86-2.63,5.86-5.86-2.63-5.86-5.86-5.86Zm0-24.26c1.1,0,2.01,.9,2.01,2.01s-.9,2.01-2.01,2.01-2.01-.9-2.01-2.01,.9-2.01,2.01-2.01ZM11.69,26.09c-1.1,0-2.01-.9-2.01-2.01s.9-2.01,2.01-2.01,2.01,.9,2.01,2.01-.9,2.01-2.01,2.01Zm24.1,14.1c-1.1,0-2.01-.9-2.01-2.01s.9-2.01,2.01-2.01,2.01,.9,2.01,2.01-.9,2.01-2.01,2.01Z\" />\r\n                </svg>\r\n            );\r\n        };\r\n\r\n        if (deviceIsApple()) {\r\n            return shareIconIOS();\r\n        }\r\n\r\n        if (deviceIsAndroid() || deviceIsWindows()) {\r\n            return shareIconAndroid();\r\n        }\r\n\r\n        return shareIconIOS();\r\n    }\r\n\r\n    static get remove() {\r\n        return (\r\n            <svg aria-hidden=\"true\" viewBox=\"8 0 42 50\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                <path\r\n                    fill=\"currentColor\"\r\n                    d=\"M40.65 44.95 35.9 40.2Q33.4 42 30.4 43q-3 1-6.4 1-4.25 0-7.9-1.525-3.65-1.525-6.35-4.225-2.7-2.7-4.225-6.35Q4 28.25 4 24q0-3.4 1-6.4 1-3 2.8-5.5L3.05 7.35 5.2 5.2l37.6 37.6ZM24 41q2.75 0 5.2-.775t4.55-2.175l-23.8-23.8q-1.4 2.1-2.175 4.55Q7 21.25 7 24q0 7.25 4.875 12.125T24 41Zm16.2-5.1-2.15-2.15q1.4-2.1 2.175-4.55Q41 26.75 41 24q0-7.25-4.875-12.125T24 7q-2.75 0-5.2.775T14.25 9.95L12.1 7.8Q14.6 6 17.6 5q3-1 6.4-1 4.2 0 7.85 1.55Q35.5 7.1 38.2 9.8q2.7 2.7 4.25 6.35Q44 19.8 44 24q0 3.4-1 6.4-1 3-2.8 5.5ZM26.15 21.85Zm-4.3 4.3Z\"\r\n                />\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get IconSuccess() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\r\n                <path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zM9.29 16.29L5.7 12.7a1 1 0 111.41-1.41L10 14.17l6.88-6.88a1 1 0 111.41 1.41l-7.59 7.59a1 1 0 01-1.41 0z\" />\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get IconWarning() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\r\n                <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n                <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get AdvancedFeaturesIcon() {\r\n        return (\r\n            <svg viewBox=\"4 0 21 24\">\r\n                <path\r\n                    fillRule=\"evenodd\"\r\n                    clipRule=\"evenodd\"\r\n                    d=\"M20.99 9.28998H19.47L19.4401 9.04998C18.9701 5.76998 16.11 3.28998 12.8 3.28998H11.21C7.89005 3.28998 5.04005 5.76998 4.57005 9.04998L4.54005 9.28998H3.01005C2.62005 9.28998 2.30005 9.60998 2.30005 9.99998C2.30005 10.39 2.62005 10.71 3.01005 10.71H4.33005L4.30005 10.91C3.69005 11.41 3.29005 12.15 3.29005 13V19C3.29005 19.94 4.06005 20.71 5.00005 20.71H6.00005C6.94005 20.71 7.71005 19.94 7.71005 19V17.71H16.2901V19C16.2901 19.94 17.06 20.71 18 20.71H19C19.9401 20.71 20.71 19.94 20.71 19V13C20.71 12.16 20.3101 11.41 19.7001 10.91L19.67 10.71H20.99C21.38 10.71 21.7001 10.39 21.7001 9.99998C21.7001 9.60998 21.38 9.28998 20.99 9.28998ZM6.00005 16.29C5.29005 16.29 4.71005 15.71 4.71005 15V13C4.71005 12.29 5.29005 11.71 6.00005 11.71H18C18.71 11.71 19.2901 12.29 19.2901 13V15C19.2901 15.71 18.71 16.29 18 16.29H6.00005ZM11.21 4.70998H12.79C15.4 4.70998 17.66 6.65998 18.03 9.24998L18.18 10.31C18.15 10.31 18.12 10.305 18.09 10.3C18.06 10.295 18.03 10.29 18 10.29H6.00005C5.94005 10.29 5.88005 10.3 5.82005 10.31L5.97005 9.24998C6.34005 6.65998 8.59005 4.70998 11.21 4.70998ZM6.29005 19C6.29005 19.16 6.16005 19.29 6.00005 19.29H5.00005C4.84005 19.29 4.71005 19.16 4.71005 19V17.37C5.10005 17.58 5.53005 17.71 6.00005 17.71H6.29005V19ZM19 19.29H18C17.84 19.29 17.71 19.16 17.71 19V17.71H18C18.47 17.71 18.9001 17.58 19.2901 17.37V19C19.2901 19.16 19.16 19.29 19 19.29ZM17 15C17.5523 15 18 14.5523 18 14C18 13.4477 17.5523 13 17 13C16.4477 13 16 13.4477 16 14C16 14.5523 16.4477 15 17 15ZM8 14C8 14.5523 7.55228 15 7 15C6.44772 15 6 14.5523 6 14C6 13.4477 6.44772 13 7 13C7.55228 13 8 13.4477 8 14Z\"\r\n                    fill=\"currentColor\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n\r\n    static get CopyIcon() {\r\n        return (\r\n            <svg viewBox=\"0 0 24 24\" width=\"24px\">\r\n                <path\r\n                    fillRule=\"evenodd\"\r\n                    clipRule=\"evenodd\"\r\n                    d=\"M11 2.79001H19C20.49 2.79001 21.71 4.01001 21.71 5.50001V13.5C21.71 14.99 20.49 16.21 19 16.21H18C17.61 16.21 17.29 15.89 17.29 15.5C17.29 15.11 17.61 14.79 18 14.79H19C19.71 14.79 20.29 14.21 20.29 13.5V5.50001C20.29 4.79001 19.71 4.21001 19 4.21001H11C10.29 4.21001 9.71004 4.79001 9.71004 5.50001C9.71004 5.89001 9.39004 6.21001 9.00004 6.21001C8.61004 6.21001 8.29004 5.89001 8.29004 5.50001C8.29004 4.01001 9.51004 2.79001 11 2.79001ZM2.29004 10C2.29004 8.51001 3.51004 7.29001 5.00004 7.29001H13C14.49 7.29001 15.71 8.51001 15.71 10V18C15.71 19.49 14.49 20.71 13 20.71H5.00004C3.51004 20.71 2.29004 19.49 2.29004 18V10ZM13 19.29C13.71 19.29 14.29 18.71 14.29 18V10C14.29 9.29001 13.71 8.71001 13 8.71001H5.00004C4.29004 8.71001 3.71004 9.29001 3.71004 10V18C3.71004 18.71 4.29004 19.29 5.00004 19.29H13Z\"\r\n                    fill=\"currentColor\"\r\n                ></path>\r\n            </svg>\r\n        );\r\n    }\r\n}\r\n\r\nexport default Icons;\r\n","export default function(startup: () => any) {\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', startup);\r\n    } else {\r\n        startup();\r\n        document.removeEventListener('DOMContentLoaded', startup);\r\n    }\r\n}\r\n","import { getVehicles } from '../api/search-api';\r\nimport { getVehiclesFromRVC } from '../api/rvc-api';\r\nimport { getVehicleRecommendations } from '../api/vehicle-recommendations-api';\r\nimport { Vehicle } from '../api/types';\r\nimport { IVehicleTile } from '../types/vehicleTile';\r\nimport {\r\n    MAX_RECENTLY_VIEWED_VEHICLE_TILES,\r\n    MAX_BEST_MATCH_VEHICLE_TILES,\r\n    BEST_MATCH_VERSION,\r\n    statusCodesForUnavailableVehicles,\r\n    viewedVehiclesLocalStorage,\r\n} from '../pages/home/utilities/constants';\r\nimport {\r\n    filterOutExpiredVehicles,\r\n    getExpirationDate,\r\n    getLocalStorageItem,\r\n    translateVehicleStatus,\r\n} from '../pages/home/utilities/helpers';\r\nimport { IViewedVehicleLocalStorage } from '../pages/home/utilities/types';\r\n\r\nexport const getRecentlyViewedVehicleTiles = (\r\n    maxTiles = MAX_RECENTLY_VIEWED_VEHICLE_TILES,\r\n    nearestStoreId?: string\r\n): Promise<IVehicleTile[]> => {\r\n    // Get viewed vehicles from localStorage\r\n    const viewedVehicles: IViewedVehicleLocalStorage[] = getLocalStorageItem(viewedVehiclesLocalStorage.key) || [];\r\n\r\n    // Keep only vehicles seen in the past {DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES}\r\n    const expirationDate = getExpirationDate();\r\n    const filteredVehicles = filterOutExpiredVehicles(viewedVehicles, expirationDate);\r\n\r\n    // Call API to get data related to the viewed vehicles\r\n    if (filteredVehicles.length > 0) {\r\n        const sortedViewedVehicles = getSortedViewedVehicleStockNumbersByDate(filteredVehicles);\r\n        return getVehicles({\r\n            stockNumberList: sortedViewedVehicles,\r\n            take: maxTiles,\r\n            transferDestinationStoreId: nearestStoreId,\r\n        }).then(function (vehiclesList: Vehicle[]) {\r\n            if (vehiclesList.length > 0) {\r\n                // Sometimes, the API might not return some vehicles, and we need to call a different API endpoint (home/api/vehicles) to get vehicle details.\r\n                // Reason: The vehicle's status may have changed; for example, it is now reserved.\r\n                const { isMissing, missingItems } = isResponseMissingVehicles(vehiclesList, sortedViewedVehicles);\r\n                if (isMissing) {\r\n                    return getVehiclesFromRVC({\r\n                        stockNumberList: missingItems,\r\n                    }).then((items) => {\r\n                        const combinedItems = [...vehiclesList, ...items];\r\n                        return buildVehicleTilesListFromVehicleList(\r\n                            buildOrderedVehicleTileList(sortedViewedVehicles, combinedItems)\r\n                        );\r\n                    });\r\n                } else {\r\n                    return buildVehicleTilesListFromVehicleList(\r\n                        buildOrderedVehicleTileList(sortedViewedVehicles, vehiclesList)\r\n                    );\r\n                }\r\n            } else {\r\n                return Promise.resolve([]);\r\n            }\r\n        });\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n\r\ninterface getRecommendedVehicleTilesParams {\r\n    sourceStockNumbers: string[];\r\n    lat: number;\r\n    long: number;\r\n    visitorId: string;\r\n    userStoreId: string;\r\n}\r\n\r\nexport const getRecommendedVehicleTiles = ({\r\n    sourceStockNumbers,\r\n    lat,\r\n    long,\r\n    visitorId,\r\n    userStoreId,\r\n}: getRecommendedVehicleTilesParams): Promise<IVehicleTile[]> => {\r\n    if (sourceStockNumbers && sourceStockNumbers.length > 0) {\r\n        const sortedSourceStockNumbers = sourceStockNumbers.sort();\r\n        return getVehicleRecommendations({\r\n            stockNumberList: sortedSourceStockNumbers,\r\n            lat,\r\n            long,\r\n            visitorId,\r\n            userStoreId,\r\n        }).then(function (vehiclesList: Vehicle[]) {\r\n            if (vehiclesList.length > 0) {\r\n                return buildVehicleTilesListFromVehicleList(vehiclesList);\r\n            } else {\r\n                return Promise.resolve([]);\r\n            }\r\n        } as any);\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n\r\nexport const getBestMatchVehicleTiles = (\r\n    maxTiles = MAX_BEST_MATCH_VEHICLE_TILES,\r\n    nearestStoreId?: string\r\n): Promise<IVehicleTile[]> => {\r\n    return getVehicles({\r\n        take: maxTiles,\r\n        scoringProfile: BEST_MATCH_VERSION,\r\n        transferDestinationStoreId: nearestStoreId,\r\n    }).then(function (vehiclesList: Vehicle[]) {\r\n        if (vehiclesList.length > 0) {\r\n            return buildVehicleTilesListFromVehicleList(vehiclesList);\r\n        } else {\r\n            return Promise.resolve([]);\r\n        }\r\n    } as any);\r\n};\r\n\r\nexport const getLocalVehiclesData = async (params: {\r\n    take: number;\r\n    zipCode: string;\r\n    radiusInMiles: number;\r\n    storeId: string;\r\n}): Promise<IVehicleTile[]> => {\r\n    const vehiclesList = await getVehicles({\r\n        take: params.take,\r\n        zipCode: params.zipCode,\r\n        radiusInMiles: params.radiusInMiles,\r\n        storeId: params.storeId,\r\n    });\r\n    if (vehiclesList.length > 0) {\r\n        return buildVehicleTilesListFromVehicleList(vehiclesList);\r\n    } else {\r\n        return Promise.resolve([]);\r\n    }\r\n};\r\n\r\nexport const buildSavedVehicleTiles = (\r\n    savedVehicleStockNumberList: number[],\r\n    cb: (vehicleTileList: IVehicleTile[]) => any,\r\n    nearestStoreId?: string\r\n) => {\r\n    if (savedVehicleStockNumberList && savedVehicleStockNumberList.length > 0) {\r\n        return getVehicles({\r\n            stockNumberList: savedVehicleStockNumberList,\r\n            transferDestinationStoreId: nearestStoreId,\r\n        }).then((vehiclesList: Vehicle[]) => {\r\n            if (vehiclesList.length > 0) {\r\n                const orderedVehicleList = buildOrderedVehicleTileList(savedVehicleStockNumberList, vehiclesList);\r\n                const vehicleTileList = buildVehicleTilesListFromVehicleList(orderedVehicleList);\r\n                cb(vehicleTileList);\r\n            } else {\r\n                cb([]);\r\n            }\r\n        });\r\n    } else {\r\n        cb([]);\r\n    }\r\n};\r\n\r\nconst buildOrderedVehicleTileList = (orderedStockNumberList: number[], vehiclesList: Vehicle[]) => {\r\n    const orderedVehicleList: Vehicle[] = [];\r\n\r\n    for (let i = 0; i < vehiclesList.length; i++) {\r\n        const orderedIndex = orderedStockNumberList.indexOf(vehiclesList[i].stockNumber);\r\n        orderedVehicleList[orderedIndex] = vehiclesList[i];\r\n    }\r\n\r\n    return orderedVehicleList;\r\n};\r\n\r\nexport const buildVehicleTilesListFromVehicleList = (vehicleList: Vehicle[]): IVehicleTile[] => {\r\n    return vehicleList.map(\r\n        (vehicle: Vehicle): IVehicleTile => {\r\n            const imageLink = `https://img2.carmax.com/assets/${vehicle.stockNumber}/hero.jpg?width=270&height=203`;\r\n            vehicle.imageLink = imageLink;\r\n            return vehicle;\r\n        }\r\n    );\r\n};\r\n\r\nexport const isResponseMissingVehicles = (\r\n    vehiclesReturned: Vehicle[],\r\n    vehiclesRequested: number[]\r\n): { isMissing: boolean; missingItems: number[] } => {\r\n    if (vehiclesReturned.length !== vehiclesRequested.length) {\r\n        const foundItems = vehiclesReturned.map((item) => item.stockNumber);\r\n\r\n        const notFound = vehiclesRequested?.filter((stockNumber) => {\r\n            const isIncluded = foundItems.includes(stockNumber);\r\n            if (!isIncluded) {\r\n                return stockNumber;\r\n            }\r\n            return;\r\n        });\r\n\r\n        return {\r\n            isMissing: notFound.length > 0,\r\n            missingItems: notFound,\r\n        };\r\n    }\r\n    return {\r\n        isMissing: false,\r\n        missingItems: [],\r\n    };\r\n};\r\n\r\nexport const buildStatusText = (vehicleTile: IVehicleTile): string => {\r\n    return translateVehicleStatus(vehicleTile);\r\n};\r\n\r\nexport const vehicleIsUnavailable = (statusCode: number, isSaleable: boolean): boolean => {\r\n    return !isSaleable && statusCodesForUnavailableVehicles.indexOf(statusCode) > -1;\r\n};\r\n\r\nconst getSortedViewedVehicleStockNumbersByDate = (vehicles: IViewedVehicleLocalStorage[]): number[] => {\r\n    return vehicles\r\n        .sort(({ timestamp: a }: IViewedVehicleLocalStorage, { timestamp: b }: IViewedVehicleLocalStorage) => b - a)\r\n        .map(({ stockNumber }: IViewedVehicleLocalStorage) => Number(stockNumber));\r\n};\r\n","import { IVehicleRecommendationsApiResponse, Vehicle } from './types';\r\n\r\n// TODO: Set this max. value on the server\r\nconst maxRecommendations = 10;\r\n\r\ninterface getVehicleRecommendationsParams {\r\n    stockNumberList: string[];\r\n    lat: number;\r\n    long: number;\r\n    visitorId: string;\r\n    userStoreId: string;\r\n}\r\n\r\nexport async function getVehicleRecommendations({\r\n    stockNumberList,\r\n    lat,\r\n    long,\r\n    visitorId,\r\n    userStoreId,\r\n}: getVehicleRecommendationsParams): Promise<Vehicle[]> {\r\n    try {\r\n        if (stockNumberList && stockNumberList.length > 0) {\r\n            const sortedStockNumberList = stockNumberList.sort();\r\n            const searchParams = new URLSearchParams();\r\n            searchParams.set('visitorId', visitorId);\r\n            searchParams.set('userStoreId', userStoreId);\r\n            searchParams.set('lat', lat.toString());\r\n            searchParams.set('lon', long.toString());\r\n            sortedStockNumberList.forEach((s) => {\r\n                searchParams.append('stockNumbers', s);\r\n            });\r\n\r\n            const url = `/home/api/recommendations/?${searchParams.toString()}`;\r\n            return await fetch(url)\r\n                .then((response) => response.json())\r\n                .then((data: IVehicleRecommendationsApiResponse) => {\r\n                    if (data && data.length > 0) {\r\n                        return data.slice(0, maxRecommendations);\r\n                    }\r\n                    return [];\r\n                })\r\n                .catch(() => []);\r\n        }\r\n        return Promise.resolve([]);\r\n    } catch {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n","import Cookies from 'js-cookie';\r\n\r\nexport function getStoreId(): string {\r\n    const kmxVisitorCookie = Cookies.get('KmxVisitor_0');\r\n    if (kmxVisitorCookie) {\r\n        const match = kmxVisitorCookie.match(/StoreId=(\\d{4})/);\r\n        if (match && match.length > 0) {\r\n            return match[1];\r\n        }\r\n    }\r\n    return '';\r\n}\r\nexport function getVisitorId(): string {\r\n    const kmxVisitorCookie = Cookies.get('KmxVisitor_0');\r\n    if (kmxVisitorCookie) {\r\n        const match = kmxVisitorCookie.match(/VisitorID=([a-z0-9\\-]+)/);\r\n        if (match && match.length > 0) {\r\n            return match[1];\r\n        }\r\n    }\r\n    return '';\r\n}\r\n"],"names":["emptySections","async","getFaqSections","url","res","fetch","json","error","Promise","resolve","getCiamId","window","kmxDevTools","ciamId","credentials","then","response","data","expireTime","Date","currentDate","getTime","catch","getVehiclesFromRVC","params","urlsToFetch","stockNumberList","length","forEach","stockNumber","push","fetchPromises","map","all","getVehicles","queryParamsArray","val","take","scoringProfile","transferDestinationStoreId","storeId","zipCode","radiusInMiles","join","get","items","getVehiclesTotalCount","isInStoreOnly","hasPriceDrop","hasFreeShipping","baseUrl","URLSearchParams","Object","entries","isSaleable","resultsOnly","field","value","append","toString","ok","totalCount","emptyFBSResponse","fbsDecision","expirationDateFormatted","downPayment","isSoftPull","decision","terms","conditionAmount","conditionAmountRounded","lenderName","totalFinanceAmount","stateAbbreviation","taxesAndFeesRounded","applicationUrl","getSmallBatchDecisions","stockNumbers","stockNumbersString","replace","storeIdToRequest","StoreId","err","console","log","props","dialogRef","useRef","children","isVisible","onClose","handleClose","dialog","fadeOutCSSClass","classList","add","addEventListener","close","remove","useEffect","current","querySelector","e","rect","getBoundingClientRect","top","clientY","height","left","clientX","width","closeIfBackgroundClicked","showModal","className","ref","type","ErrorBoundary","constructor","super","this","state","hasError","getDerivedStateFromError","render","count","autoHeight","autoplayButton","autoplayButtonOutput","autoplayHoverPause","autoplayTimeout","mouseDrag","slideBy","speed","swipeAngle","tinySlider","activeEl","document","activeElement","focus","start","event","touches","startPosition","x","y","move","currentX","currentY","degree","toDegree","getTouchDirection","cancelable","preventDefault","Math","atan2","PI","angle","abs","nextFocus","prevFocus","leaveCarousel","direction","preCarousel","postCarousel","play","keyHandler","pause","key","shiftKey","ignoreSlideInteractiveContent","contains","click","goTo","indexString","element","parent","parentNode","id","includes","index","match","parseInt","getFocusedSlideIndex","currentIndex","focusHandler","getInfo","container","carousel","offsetParent","touch","passive","removeEventListener","initCarousel","autoplay","fixedWidth","autoWidth","loop","gutter","navContainer","nextButton","prevButton","responsive","center","controls","edgePadding","nav","preventScrollOnTouch","removeEventHandlers","Carousel","slideCount","showNextButton","showPrevButton","handleIndexChanged","bind","initTinySlider","componentDidMount","name","_tinySlider","sliderInfo","setState","componentWillUnmount","destroy","_removeEventHandlers","leftAligned","events","on","info","showSlideNavButton","hoverEvent","firstVisibleTileIndex","targetClientRects","el","vehicleTileLocationPlusExtraThreshold","innerWidth","lastSlideIsHovered","nextButtonIsHovered","slideIsHovered","slideIndex","prevButtonIsHovered","hideSlideNavButton","componentDidUpdate","prevProps","rebuild","href","ariaLabel","child","onMouseEnter","target","onMouseLeave","tabIndex","viewBox","xmlns","d","fill","ReturnVisitorCarousel","carouselItems","buildCarouselItems","vehicleTileRefs","addToRefsList","tileRef","currState","vehicleTileList","filter","item","vehicle","year","make","model","trim","updatedViewedTiles","enableRemove","isWaitingForFavoritesResponse","stockNumbersPendingFavoritesUpdate","indexOf","sectionName","isMiniHomebase","headline","hasFbsData","fbsData","prevState","favoritedStockNumberListHasChanged","JSON","stringify","favoritedStockNumberList","vehicleTileListHasChanged","pendingFavoritesUpdates","isVisibleHasChanged","fbsTermsHaveChanged","setTimeout","carouselElement","getElementById","homeBaseHeroElement","tileTermElements","tile","tabElements","querySelectorAll","firstTabElement","fbsStylesAreSet","getAttribute","animFbsIntro","timeline","paused","to","duration","ease","translateY","stagger","autoAlpha","tabHeight","clientHeight","t","style","minHeight","delay","fromTo","progress","carouselName","contextType","largeBreakpoint","mediumBreakpoint","formatSeperatedInteger","toFixed","formatVin","input","toUpperCase","SnackBar","cancelAction","icon","textLabel","SNACKBAR_ACTIVE_CLASS","snackBarRef","bodyRef","body","keydownHandler","sbRef","openSnackbar","setAttribute","closeSnackbar","clearTimeout","CLOSE_TIMEOUT","snackbar","defaultContext","stationUrl","enableFBS","setVehicleList","FBSContext","createContext","FBSProvider","setEnableFBS","useState","vehicleList","setFbsData","setDownPayment","setStationUrl","vehicleStockNumbers","reduce","smallBatchDecisions","prevFbsData","tryEnablingFBS","Provider","useLocalCarsStore","set","favoriteVehicles","recentlyViewedVehicles","localVehicles","isLocalVehiclesLoading","isRecentlyVehiclesLoading","undefined","setCiam","setZipCode","setStoreId","mergedStockNumbers","fbs","uniqueStockNumbers","Array","from","Set","setRecentlyViewedVehicleTiles","localData","includeFbsData","find","setLocalVehicles","toggleFavoritesResponse","isSuccess","componentCallback","addVehicleToFavorites","payload","EVENTS","CLICK","SAVE_RECOMMENDED_CAR","linkDetails","position","CustomEvent","bubbles","detail","callback","result","documentElement","dispatchEvent","removeVehicleFromFavorites","hideSnackbar","CTA","favoriteStockNumber","setFavoriteVehicles","getCarImages","successCallback","errorCallback","mode","status","Error","assign","_useLocalCarsStore","EventChannel","_topics","hasTopic","topic","hasOwnProperty","call","topics","subscribe","listener","publish","TOPICS","MY_STORE_MODULE_UPDATES","CUSTOM_EVENTS","MiniHomebaseSlideCTA","gsap","_coreInitted","_win","_doc","_docEl","_body","_root","_resizeDelay","_raf","_request","_toArray","_clamp","_time2","_syncInterval","_refreshing","_pointerIsDown","_transformProp","_i","_prevWidth","_prevHeight","_autoRefresh","_sort","_suppressOverwrites","_ignoreResize","_limitCallbacks","_creatingMedia","_lastMediaTick","_startup","_proxies","_scrollers","_getTime","now","_time1","_lastScrollTime","_enabled","_passThrough","v","_windowExists","_getGSAP","registerPlugin","_isViewport","_getProxyProp","property","_getScrollFunc","_ref","s","sc","i","offset","_vertical","arguments","_getBoundsFunc","_winOffsets","innerHeight","_getBounds","_maxScroll","_ref3","d2","a","max","_iterateAutoRefresh","func","_isString","_isFunction","_isNumber","_isObject","_callIfFunc","_combineFunc","f1","f2","result1","result2","_abs","_scrollLeft","_scrollTop","_left","_top","_right","_bottom","_width","_height","_Right","_Left","_Top","_Bottom","_padding","_margin","_Width","_Height","_px","_horizontal","p","p2","os","os2","scrollTo","pageXOffset","op","pageYOffset","_getComputedStyle","getComputedStyle","_setDefaults","obj","defaults","withoutTransforms","tween","xPercent","yPercent","rotation","rotationX","rotationY","scale","skewX","skewY","bounds","kill","_getSize","_ref4","_getLabelRatioArray","labels","_multiListener","types","split","_addListener","_removeListener","_markerDefaults","startColor","endColor","indent","fontSize","fontWeight","_defaults","toggleActions","anticipatePin","_keywords","bottom","right","_offsetToPx","size","eqIndex","relative","charAt","parseFloat","substr","_createMarker","_ref5","matchWidthEl","createElement","useFixedPosition","isScroller","isStart","color","css","offsetWidth","_isStart","cssText","innerText","insertBefore","appendChild","_offset","_positionMarker","marker","flipped","vars","display","side","oppositeSide","_isFlipped","_triggers","_ids","_sync","_updateAll","_onScroll","_dispatch","_onResize","fullscreenElement","restart","_listeners","_emptyArray","_media","_onMediaChange","tick","ticker","frame","matches","_revertAll","matchMedia","_revertRecorded","_refreshAll","_softRefresh","ScrollTrigger","f","_savedStyles","media","uncache","trigger","scroll","rec","revert","force","skipRevert","refreshInits","sort","refresh","_lastScroll","_direction","l","time","recordVelocity","update","_propNamesToCopy","_stateProps","concat","_swapPinIn","pin","spacer","cs","spacerState","spacerStyle","pinStyle","overflow","boxSizing","_setState","_capsExp","_gsap","core","getCache","removeProperty","toLowerCase","_getState","_parsePosition","scrollerSize","markerScroller","self","scrollerBounds","borderWidth","scrollerMax","localOffset","globalOffset","offsets","m","round","_prefixExp","_reparent","_stOrig","test","_getTweenCreator","scroller","lastScroll1","lastScroll2","getScroll","prop","getTween","initialValue","change1","change2","onComplete","modifiers","ratio","animation","register","warn","init","prototype","tweenTo","pinCache","snapFunc","isReverted","scroll1","scroll2","end","markerStart","markerEnd","markerStartTrigger","markerEndTrigger","markerVars","change","pinOriginalState","pinActiveState","pinState","pinGetter","pinSetter","pinStart","pinChange","spacingStart","markerStartSetter","markerEndSetter","snap1","snap2","scrubTween","scrubSmooth","snapDurClamp","snapDelayedCall","prevProgress","prevScroll","prevAnimProgress","nodeType","horizontal","_vars","onUpdate","toggleClass","onToggle","onRefresh","scrub","pinSpacing","invalidateOnRefresh","onScrubComplete","onSnapComplete","once","snap","pinReparent","isToggle","scrollerCache","isViewport","pinType","callbacks","onEnter","onLeave","onEnterBack","onLeaveBack","markers","onRefreshInit","getScrollerSize","_ref2","_getSizeFunc","getScrollerOffsets","_getOffsetsFunc","tweenScroll","lazy","_initted","immediateRender","scrollTrigger","snapTo","scrollBehavior","utils","_getClosestLabel","st","b","pop","min","delayedCall","getVelocity","totalProgress","velocity","naturalEnd","endValue","endScroll","isActive","targets","force3D","getProperty","quickSetter","r","enabled","prevRefreshing","removeChild","_swapPinOut","soft","invalidate","isVertical","override","curTrigger","curPin","oppositeScroll","initted","otherPinOffset","parsedEnd","parsedEndTrigger","endTrigger","parsedStart","triggerIndex","_pinPush","ceil","omitOffsets","_copyState","splice","_pinOffset","reset","toggleState","action","stateChanged","toggled","clipped","enable","disable","allowAnimation","toArray","clamp","suppressOverwrites","globals","requestAnimationFrame","bodyStyle","border","borderTop","setInterval","checkPrefix","w","h","hidden","config","slice","limitCallbacks","ms","syncInterval","clearInterval","autoRefreshEvents","scrollerProxy","unshift","mq","addListener","clearMatchMedia","query","version","saveStyles","create","safe","maxScroll","getScrollFunc","getById","getAll","isScrolling","batch","varsCopy","interval","batchMax","proxyCallback","elements","triggers","refreshPriority","VEHICLE_ATTRIBUTES","vehicleInfo","setVehicleInfo","vehicleLabel","setVehicleLabel","setVehicleInfoFromPageReferrer","initFixedHeaderOnScroll","referrerStockNumber","referrer","urlParts","indexOfStockNumber","sanitizedStockNumber","getStockNumberFromCarDetailsReferrer","vehiclesList","getVehicleInfoFromCarDetailsReferrer","vehiclePropertiesToExtract","finalizedLabel","buildVehicleLabel","toggleHeaderVisibility","visible","onClick","history","back","arrowIcon","initCarAnimation","initFixedHeading","carLeaveScene","xPos","setPosition","topVal","src","alt","_isEdge","_numExp","_types","circle","ellipse","line","_round","_parseNum","_parseSingleVal","num","_getAttributeAsNumber","attr","_sqrt","sqrt","_getDistance","x1","y1","x2","y2","scaleX","scaleY","pow","_warn","message","_hasNonScalingStroke","_getLength","bbox","points","prevPoint","rx","ry","tagName","getScreenCTM","c","getBBox","strokeDasharray","getTotalLength","_getPosition","dash","strokeDashoffset","_initCore","navigator","userAgent","DrawSVGPlugin","_style","_target","defaultStart","_parse","_length","_dash","_dashPT","_offsetPT","strokeLinecap","strokeLinejoin","strokeMiterlimit","_live","_props","lengthRatio","pt","_pt","_next","getLength","getPosition","registerAnimations","pillTransition","opacity","step1Transition","textCommuncation","step2Transition","signatureModal","drawSVG","step3Transition","homeIcon","locationIcon","srcSet","signaturePath","initScrollAnimations","tl","QuestionLink","text","rightArrowIcon","nearestStoreId","setNearestStoreId","buyOnlineFaqContent","setBuyOnlineFaqContent","eventChannel","myStoreModuleUpdatesEvent","done","store","Id","attachNearestStoreChangeEventHandlers","faqSections","sectionTitle","faqs","faq","question","MiniHomebase","viewedVehicleTileList","onOpenSnackBar","setFavoritedStockNumberList","setStockNumbersPendingFavoritesUpdate","useContext","analyticsName","MiniHomebasePusher","MiniHomebaseContainer","hasLoadedSavedVehiclesAssets","setHasLoadedSavedVehiclesAssets","setViewedVehicleTileList","setSnackbar","isOpen","context","loadSavedVehiclesAssets","loadRecentlyViewedVehicleTiles","savedVehiclesCSSDataEl","savedVehiclesJSDataEl","savedVehiclesCSSSrc","savedVehiclesJSSrc","linkEl","scriptEl","onload","getElementsByTagName","tileToRemove","newViewedTileList","tileData","TileKebabMenuItemSnackbar","onDomContentLoaded","stickyHeaderContainer","heroContainer","stepsContainer","loveItContainer","FAQContainer","miniHomebaseContainer","startup","locationMUIIcon","fillRule","clipRule","focusable","transform","stroke","strokeWidth","calendarIcon","allPriorUses","displayName","addStringLineItem","label","lineItems","addNumberLineItem","addCommas","numberValue","Number","format","addStringArrayLineItem","isArray","every","excludedHighlights","highlightValuesToDescriptions","singleowner","allnewtires","newpairtires","lowmiles","lowmilesperyear","fuelefficient","advancedfeatures","premiumaudio","extractBaseSpecificationsLineItems","car","vehicleSize","series","mileage","storeCity","packages","priorUses","mpgCity","mpgHighway","cityState","displayNames","pu","priorUseWithDisplayName","apu","mpg","extractColorsLineItems","exteriorColor","interiorColor","extractEngineLineItems","engineSize","engineType","engineTorque","engineTorqueRpm","horsepower","horsepowerRpm","cylinders","fuelType","driveTrain","transmission","torqueValue","horsepowerValue","extractKeyFeatureLineItems","highlightedFeatures","extractHighlightsLineItems","highlights","extractFeaturesLineItems","featureScore","features","featureScoreCategory","extractRatingsAndReviewsLineItems","averageRating","numberOfReviews","Section","title","withLabels","useMemo","li","withoutLabels","VehicleDetailsDialog","setIsDialogVisible","Dialog","vin","CarTileWrapper","isCompact","isFavoriteInUI","setIsFavoriteInUI","setSnackBar","isDialogVisible","ribbonText","fbsContext","fbsApplication","tradeInBreakdown","mapDecisionToFbsApplication","CRITICAL_MENU_ITEM","handleRemoveVehicleTile","analytics","handleHeartClick","handleShareClick","share","location","origin","clipboard","writeText","onCarTileClick","closestAElement","closest","closestSection","RECOMMENDED_CARTILE","recommendations","recommendedCarClicked","module","moduleExperience","TRACKING_DELAY","disableScrollNav","imageUrl","imageLink","showFavorites","isDisabled","statusCode","ribbonStyle","isFavorite","menuItems","favoriteHeart","AdvancedFeaturesIcon","getMenuItems","criticalMenuItem","onFavorite","onUnfavorite","carImages","recommendationType","onMenuOpen","String","originalPrice","showElectricVehicleInfo","mapVehicleTileToCar","vehicleTile","imageCount","transferText","shippingText","hideSnackBarFromExternalScript","externalSnackbar","returnVisitorLocalStorage","viewedVehiclesLocalStorage","HeroTheme","VehicleStatuses","soldVehicleStatusCodes","onTestDriveStatusCodes","reservedStatusCodes","reservedConditionalStatusCodes","shippingStatusCodes","shippingConditionalStatusCodes","otherUnavailableStatusCodes","statusCodesForUnavailableVehicles","ProgressionActivities","LOADING_SPINNER_CLASS","MOBILE_TABLET_BREAKPOINT","FULL_STORY_HOME_PAGE_ID","MAX_RECENTLY_VIEWED_VEHICLE_TILES","ENABLE_HOMEBASE_OPTIMIZATION_EVENT","DAYS_BEFORE_HOMEBASE_VISITOR_EXPIRES","HomebaseTab","TAB_LIST_ARIA_LABEL","TAB_ARIA_ID_PREFIX","TAB_PANEL_ARIA_ID_PREFIX","HOMEBASE_CAROUSELS","defaultCarouselOrder","RecentlyViewed","Searched","Recommended","byId","carouselAnalyticsName","tabButtonId","tabPanelElementId","initiationAnalyticsLabel","tabButtonIcon","deviceIsApple","deviceIsAndroid","deviceIsWindows","isReturnHomePageVisitor","isFirstVisit","serializedReturnVisitor","localStorage","getItem","returnVisitor","parse","hasViewedVehicles","trackFirstTimeHomePageVisitor","setItem","getExpirationDate","setDate","getDate","getLocalStorageItem","filterOutExpiredVehicles","vehicles","expirationDate","timestamp","viewedVehicles","shiftUnavailableVehiclesToEnd","availableVehicles","comingSoonVehicles","onRemoteLotVehicles","beingTransferredVehicles","onTestDriveVehicles","holdVehicles","soldVehicles","otherUnavailableVehicles","sortedVehicleTileList","translateVehicleStatus","ComingSoon","OffSite","OnTestDrive","Shipping","Reserved","Sold","NotAvailable","isAvailableToTransact","isComingSoon","isOnRemoteLot","getSavedVehicles","recommendedIcon","recentSearchesHeaderIcon","cx","cy","placeholderTileIcon","fillOpacity","viewedVehiclesHeaderIcon","transformStockNumberTypeForLocalStorage","removeViewedVehicleItemLocalStorage","serializedViewedVehicles","newLocalStorage","ANALYTICS_CONSTANTS","SEARCH_INITIATED","PAGE","LOAD","STATE","PAGE_STATE_LOAD_TIME","trackEDDL","adobeDataLayer","trackAnchorClick","clickEvent","taggingEvent","page","search","initiationMethod","COOKIES","isAuthenticated","cookie","getMyKmxUserId","createObjectFromCookie","cookieName","dataArray","Map","substring","fromEntries","splitCookieData","KmxVisitorObject","getStoreId","getCookieValue","getStoreZipCode","getLatitude","latString","lat","getLongitude","longString","long","info_rebrand","carPriceTag","financialSlider","maxcareService","ribbon","simpleHeart","maskUnits","mask","storefront","borderHeart","coloredBorderHeart","tools","cleaningDisinfecting","healthPrecautions","help","check","instagram","carMaxLogoDark","moreVert","shareIconIOS","IconSuccess","IconWarning","CopyIcon","readyState","getRecentlyViewedVehicleTiles","maxTiles","filteredVehicles","sortedViewedVehicles","getSortedViewedVehicleStockNumbersByDate","isMissing","missingItems","isResponseMissingVehicles","combinedItems","buildVehicleTilesListFromVehicleList","buildOrderedVehicleTileList","getRecommendedVehicleTiles","sourceStockNumbers","visitorId","userStoreId","sortedStockNumberList","searchParams","getVehicleRecommendations","getLocalVehiclesData","buildSavedVehicleTiles","savedVehicleStockNumberList","cb","orderedVehicleList","orderedStockNumberList","vehiclesReturned","vehiclesRequested","foundItems","notFound","buildStatusText","vehicleIsUnavailable","kmxVisitorCookie","getVisitorId"],"sourceRoot":""}