{"version":3,"file":"static/js/components-SectionComponents-TestimonialCarousel-TestimonialCarouselCustomSection.70cd9bfbac19674176d4.js","mappings":"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","sources":["components/RichTextContent.tsx","components/SectionComponents/TestimonialCarousel/TestimonialCarouselConstants.ts","components/SectionComponents/TestimonialCarousel/TestimonialCard.tsx","components/SectionComponents/TestimonialCarousel/TestimonialCarousel.tsx","components/SectionComponents/TestimonialCarousel/TestimonialCarouselCustomSection.tsx","components/SectionComponents/helpers/DangerouslySetInnerHTML.tsx","components/SectionComponents/helpers/DangerouslySetInnerHTMLHelper.ts","components/SectionComponents/styleObjects/richTextHtmlStyles.ts","helpers/browserHelper.ts"],"sourcesContent":["import React from 'react';\nimport { DangerouslySetInnerHTML } from './SectionComponents/helpers/DangerouslySetInnerHTML';\nimport { DefaultTextProps } from '@web-for-marketing/react-ui';\nimport { richTextHtmlStyles } from './SectionComponents/styleObjects/richTextHtmlStyles';\nimport { RichTextListStyle } from '@models/richTextEditor';\n\ninterface RichTextContentProps extends DefaultTextProps {\n content: string;\n hideLinks?: boolean;\n listStyle?: RichTextListStyle;\n}\n\nexport function RichTextContent({ content, listStyle = 'default', ...other }: RichTextContentProps): JSX.Element {\n return (\n \n );\n}\n","export const CARD_WIDTH = 516;\nexport const CARD_WIDTH_MOBILE = 400;\nexport const CARD_MARGIN = 24;\nexport const CARD_MARGIN_MOBILE = 16;\n","import React, { MouseEventHandler } from 'react';\nimport { Stack } from '@mui/material';\nimport { breakpoints, LinkOverlay, LinkOverlayContainer, Text, V2Button, v2Colors } from '@web-for-marketing/react-ui';\nimport { RichTextContent } from '@components/RichTextContent';\nimport { CARD_WIDTH, CARD_MARGIN, CARD_WIDTH_MOBILE, CARD_MARGIN_MOBILE } from './TestimonialCarouselConstants';\n\nexport interface TestimonialCardContent {\n statistic: string;\n statisticDescription: string;\n author: {\n name: string;\n title: string;\n quote: string;\n };\n company: string;\n button: {\n text: string;\n link: string;\n };\n}\n\ninterface TestimonialCardProps {\n cardContent: TestimonialCardContent;\n isDragging?: boolean;\n}\n\nconst classes = {\n cardContainer: {\n width: `${CARD_WIDTH}px`,\n padding: '2.8rem',\n marginRight: `${CARD_MARGIN}px`,\n boxSizing: 'border-box',\n border: `1px solid ${v2Colors.border.primary}`,\n borderRadius: '8px',\n backgroundColor: v2Colors.background.white,\n flexShrink: 0,\n userSelect: 'none',\n cursor: 'pointer',\n transition: 'scale 0.3s ease-in-out',\n willChange: 'translate',\n '&:hover': {\n borderColor: v2Colors.border.activePrimary,\n scale: '1.04',\n },\n '&:focus-within': {\n borderColor: v2Colors.border.activePrimary,\n outline: `1px solid ${v2Colors.border.activePrimary}`,\n outlineOffset: '3px',\n },\n [`@media (max-width: ${breakpoints.md})`]: {\n width: `${CARD_WIDTH_MOBILE}px`,\n marginRight: `${CARD_MARGIN_MOBILE}px`,\n },\n },\n linkButton: (isDragging?: boolean) =>\n ({\n position: 'static',\n pointerEvents: isDragging ? 'none' : 'auto',\n }) as const,\n} as const;\n\nexport function TestimonialCard({ cardContent, isDragging }: TestimonialCardProps): JSX.Element {\n const handleClick: MouseEventHandler = (event): void => {\n event.currentTarget.blur();\n };\n\n return (\n \n \n \n \n {cardContent.statistic}\n \n \n {cardContent.statisticDescription.toUpperCase()}\n \n \n \n \n \n \n {cardContent.author.name}, {cardContent.author.title}\n \n \n {cardContent.company}\n \n \n \n {cardContent.button.text}\n \n \n \n \n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAtom } from 'jotai';\nimport { isMobileAtom } from '@atoms/appSettings';\nimport { Skeleton } from '@mui/material';\nimport { breakpoints } from '@web-for-marketing/react-ui';\nimport { checkIfReduceMotion } from '@helpers/browserHelper';\nimport { TestimonialCard, TestimonialCardContent } from './TestimonialCard';\nimport { CARD_WIDTH, CARD_MARGIN, CARD_WIDTH_MOBILE, CARD_MARGIN_MOBILE } from './TestimonialCarouselConstants';\n\ninterface TestimonialCarouselProps {\n testimonialCards: TestimonialCardContent[];\n scrollDirection: 'left' | 'right';\n scrollSpeed: number;\n autoplay?: boolean;\n}\n\nconst classes = {\n carouselContainer: {\n width: '100%',\n overflowX: 'hidden',\n padding: '2rem 0',\n [`@media (max-width: ${breakpoints.md})`]: {\n padding: '1rem 0',\n },\n },\n carousel: {\n display: 'flex',\n },\n} as const;\n\nexport function TestimonialCarousel({\n testimonialCards,\n scrollDirection,\n scrollSpeed,\n autoplay = false,\n}: TestimonialCarouselProps): JSX.Element {\n const [isMobile] = useAtom(isMobileAtom);\n const [isDragging, setIsDragging] = useState(false);\n const [isRunning, setIsRunning] = useState(autoplay);\n const [carouselItems, setCarouselItems] = useState([]);\n const carouselContainerRef = useRef(null);\n const animationRef = useRef(null);\n const dragStartX = useRef(null);\n const tabScroll = useRef(false);\n const reduceMotion = useRef(false);\n const carouselItemWidth = isMobile ? CARD_WIDTH_MOBILE + CARD_MARGIN_MOBILE : CARD_WIDTH + CARD_MARGIN;\n\n const updateCarouselItemPositions = useCallback(\n (movementX: number) => {\n if (carouselContainerRef.current) {\n const carouselContainer = carouselContainerRef.current;\n const carouselCards: HTMLElement[] = Array.from(carouselContainer.querySelectorAll('.carousel-card'));\n\n // Loop over each carousel item and adjust the translate-x property to create an inifiite carousel animation\n carouselCards.forEach((item, index) => {\n const currentTranslateX = parseFloat(item.style.translate?.split(' ')[0]) || 0;\n const itemPosition = index + 1;\n\n // Keep carousel items within the bounds of the carousel container\n let newTranslateX = currentTranslateX + movementX;\n\n const maxTranslateX = (carouselCards.length - itemPosition) * carouselItemWidth;\n const minTranslateX = -itemPosition * carouselItemWidth;\n\n // Wrap item to back of carousel\n if (newTranslateX < minTranslateX) {\n newTranslateX += maxTranslateX - minTranslateX;\n // Wrap item to front of carousel\n } else if (newTranslateX > maxTranslateX) {\n newTranslateX -= maxTranslateX - minTranslateX;\n }\n\n // Offset the native browser scrolling to continue applying carousel movement via modifying the translate property\n if (tabScroll.current) {\n carouselContainer.scrollBy({ left: movementX });\n }\n\n item.style.translate = `${newTranslateX}px 0`;\n });\n }\n },\n [carouselItemWidth]\n );\n\n const startAnimation = useCallback(() => {\n const animate = (): void => {\n updateCarouselItemPositions(scrollSpeed * (scrollDirection === 'left' ? -1 : 1));\n animationRef.current = requestAnimationFrame(animate);\n };\n animationRef.current = requestAnimationFrame(animate);\n }, [scrollDirection, scrollSpeed, updateCarouselItemPositions]);\n\n const stopAnimation = (): void => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n };\n\n const pauseAnimation = (): void => setIsRunning(false);\n\n const resumeAnimation = (): void => setIsRunning(true);\n\n useEffect(() => {\n reduceMotion.current = checkIfReduceMotion(window);\n }, []);\n\n useEffect(() => {\n if (!reduceMotion.current && isRunning) {\n startAnimation();\n }\n\n return () => {\n stopAnimation();\n };\n }, [isRunning, startAnimation]);\n\n const handleCarouselMouseDragStart = useCallback((event: MouseEvent): void => {\n dragStartX.current = event.clientX;\n tabScroll.current = false;\n pauseAnimation();\n }, []);\n\n const handleCarouselMouseDrag = useCallback(\n (event: MouseEvent): void => {\n if (dragStartX.current) {\n updateCarouselItemPositions(event.movementX);\n\n if (Math.abs(event.movementX) > 2) {\n setIsDragging(true);\n }\n }\n },\n [updateCarouselItemPositions]\n );\n\n const handleCarouselMouseDragEnd = (): void => {\n setIsDragging(false);\n dragStartX.current = null;\n };\n\n const handleCarouselTouchDragStart = useCallback((event: TouchEvent): void => {\n dragStartX.current = event.touches[0].clientX;\n pauseAnimation();\n }, []);\n\n const handleCarouselTouchDrag = useCallback(\n (event: TouchEvent): void => {\n if (dragStartX.current) {\n const movementX = event.touches[0].clientX - dragStartX.current;\n updateCarouselItemPositions(movementX);\n\n if (Math.abs(movementX) > 2) {\n setIsDragging(true);\n }\n\n dragStartX.current = event.touches[0].clientX;\n }\n },\n [updateCarouselItemPositions]\n );\n\n const handleCarouseTouchlDragEnd = useCallback((): void => {\n setIsDragging(false);\n resumeAnimation();\n dragStartX.current = null;\n }, []);\n\n const handleFocus = useCallback((): void => {\n pauseAnimation();\n if (tabScroll.current && carouselContainerRef.current) {\n if (carouselContainerRef.current.scrollLeft !== 0) {\n updateCarouselItemPositions(-carouselContainerRef.current.scrollLeft);\n }\n }\n }, [updateCarouselItemPositions]);\n\n const handleBlur = useCallback((): void => {\n if (carouselContainerRef.current) {\n const carouselContainer = carouselContainerRef.current;\n setTimeout(() => {\n // Only resume animation if the focus is outside of the carousel container\n if (!carouselContainer.contains(document.activeElement)) {\n tabScroll.current = false;\n resumeAnimation();\n }\n }, 0); // Small delay to ensure focus state updates\n }\n }, []);\n\n const handleKeyDown = useCallback((event: KeyboardEvent): void => {\n if (event.key === 'Tab') {\n tabScroll.current = true;\n }\n }, []);\n\n useEffect(() => {\n // Calculate the minimum number of carousel item duplications needed to create an infinite carousel on all screen sizes\n const screenWidth = window.innerWidth;\n const minItemsNeeded = Math.ceil(screenWidth / carouselItemWidth) + 2;\n const duplications = Math.ceil(minItemsNeeded / testimonialCards.length);\n setCarouselItems(Array(duplications).fill(testimonialCards).flat());\n }, [carouselItemWidth, testimonialCards]);\n\n useEffect(() => {\n const carouselContainer = carouselContainerRef.current;\n if (carouselContainer) {\n carouselContainer.addEventListener('mousedown', handleCarouselMouseDragStart, true);\n carouselContainer.addEventListener('mousemove', handleCarouselMouseDrag);\n carouselContainer.addEventListener('touchstart', handleCarouselTouchDragStart, true);\n carouselContainer.addEventListener('touchmove', handleCarouselTouchDrag);\n carouselContainer.addEventListener('focus', handleFocus, true);\n carouselContainer.addEventListener('blur', handleBlur, true);\n carouselContainer.addEventListener('keydown', handleKeyDown);\n }\n document.addEventListener('mouseup', handleCarouselMouseDragEnd);\n document.addEventListener('touchend', handleCarouseTouchlDragEnd);\n\n return () => {\n if (carouselContainer) {\n carouselContainer.removeEventListener('mousedown', handleCarouselMouseDragStart, true);\n carouselContainer.removeEventListener('mousemove', handleCarouselMouseDrag);\n carouselContainer.removeEventListener('touchstart', handleCarouselTouchDragStart, true);\n carouselContainer.removeEventListener('touchmove', handleCarouselTouchDrag);\n carouselContainer.removeEventListener('focus', handleFocus, true);\n carouselContainer.removeEventListener('blur', handleBlur, true);\n carouselContainer.removeEventListener('keydown', handleKeyDown);\n }\n document.removeEventListener('mouseup', handleCarouselMouseDragEnd);\n document.removeEventListener('touchend', handleCarouseTouchlDragEnd);\n };\n }, [\n handleBlur,\n handleCarouseTouchlDragEnd,\n handleCarouselMouseDrag,\n handleCarouselMouseDragStart,\n handleCarouselTouchDrag,\n handleCarouselTouchDragStart,\n handleFocus,\n handleKeyDown,\n ]);\n\n return (\n
\n
\n {carouselItems.length\n ? carouselItems.map((item, index) => (\n \n ))\n : Array.from(new Array(10)).map((_, index) => (\n \n ))}\n
\n
\n );\n}\n","import React from 'react';\nimport { useAtom } from 'jotai';\nimport { isMobileAtom } from '@atoms/appSettings';\nimport { Stack } from '@mui/material';\nimport { breakpoints, Heading, Text } from '@web-for-marketing/react-ui';\nimport { CustomSectionComponentProps } from '@models/customSection';\nimport { TestimonialCardContent } from './TestimonialCard';\nimport { TestimonialCarousel } from '@components/SectionComponents/TestimonialCarousel/TestimonialCarousel';\n\nconst testimonialCards: TestimonialCardContent[] = [\n {\n statistic: '30%',\n statisticDescription: 'savings on every mile',\n author: {\n name: 'Christian Reisch',\n title: 'Co-owner',\n quote: 'We love Geotab! When I talk to other Domino’s Pizza franchisees and they ask me how it’s going with our fleet, I tell them I cannot imagine having these cars without the technology installed. If you get a fleet of cars, then you need to have Geotab.',\n },\n company: 'Team Goliath Inc. d/b/a Domino’s Pizza',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/dominos-team-goliath/',\n },\n },\n {\n statistic: '$1.3M',\n statisticDescription: 'in potential savings with fleet electrification',\n author: {\n name: 'Yves Mador',\n title: 'Senior Officer',\n quote: 'The EVSA was a very valuable exercise. Thanks to the analysis, departments have more confidence in acquiring EVs.',\n },\n company: 'Transportation and Alternative Fuels, Natural Resources Canada',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/natural-resources-canada/',\n },\n },\n {\n statistic: '30%',\n statisticDescription: 'reduction in insurance premium costs',\n author: {\n name: 'Leslie Tarble',\n title: 'President and Co-Owner',\n quote: 'As a small business, the research and experience that they have saved me countless hours and allows me to make informed and quick decisions. I truly value and trust their expertise in the space.',\n },\n company: '3 Sisters Logistics',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/3-sisters-logistics/',\n },\n },\n {\n statistic: '90K',\n statisticDescription: 'annual reduction in fuel and maintenance costs',\n author: {\n name: 'Eric Gardner',\n title: 'Motor Pool Manager',\n quote: 'Our governor limits idling, but we couldn’t know if people were doing it. I was really surprised at how much idling our drivers were doing and how easy it was to affect change.',\n },\n company: 'State of Utah',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/white-paper/rolling-out-telematics-in-government-fleet/',\n },\n },\n {\n statistic: '59%',\n statisticDescription: 'reduction in idling costs',\n author: {\n name: 'Jonathan Hamilton',\n title: 'Director of Fleet Safety and Compliance',\n quote: 'We’re aligned on our overall values which makes it really easy and enjoyable to work with Geotab. They have a smart team who are always willing to help, and we appreciate the strong partnership.',\n },\n company: 'California Freight',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/california-freight/',\n },\n },\n {\n statistic: '40%',\n statisticDescription: 'reduction in speeding',\n author: {\n name: 'Michael Kidwell',\n title: 'President of Branch Operations',\n quote: 'Geotab makes my day work!',\n },\n company: 'Wiseway Supply Ltd.',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/wiseway-supply/',\n },\n },\n {\n statistic: '90%',\n statisticDescription: 'reduction in high risk drivers',\n author: {\n name: 'Deniz Tuna',\n title: 'Sales and Fleet Health and Safety Manager',\n quote: 'MyGeotab’s unified view of individual and organizational data and insights helps PepsiCo TR proactively manage risks, improve our metrics, elevate safety culture and promote care for our drivers and other road users.',\n },\n company: 'PepsiCo TR',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/uk/case-study/pepsico/',\n },\n },\n {\n statistic: '71%',\n statisticDescription: 'improvement in driver safety performance',\n author: {\n name: 'Ken Venzke',\n title: 'Division Manager',\n quote: 'We\\'ve improved our driver score by 71% over the last 18 months by utilizing Geotab\\'s technology. Having this technology has done more than just keep us safe, it\\'s kept us cutting-edge in a very competitive industry.',\n },\n company: 'Wright Tree Services',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/wright-tree-services/',\n },\n },\n {\n statistic: '70K',\n statisticDescription: 'saved on fuel and maintenance',\n author: {\n name: 'Dan Haseman',\n title: 'Logistics Coordinator',\n quote: 'One of the top challenges for us was to gather all the information we were getting and build that into usable and quantifiable information that could help us make better business decisions.',\n },\n company: 'Solaris Oilfield Infrastructure',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/solaris-oilfield-infrastructure-integrated-fleet/',\n },\n },\n {\n statistic: '700',\n statisticDescription: 'vehicles up from 125 in four years',\n author: {\n name: 'Kevin Henry',\n title: 'Director of Fleet',\n quote: 'We were using another telematics provider when I came on board, but I really didn’t like their program…I wanted to make a switch. With Geotab, we have really great data, and we want to be able to analyze it in specific ways.',\n },\n company: 'Centerline Communications',\n button: {\n text: 'Read more',\n link: 'https://www.geotab.com/case-study/centerline-communications/',\n },\n },\n];\n\nconst classes = {\n testimonialCarouselContainer: {\n paddingTop: '4rem',\n paddingBottom: '2rem',\n [`@media (max-width: ${breakpoints.md})`]: {\n paddingTop: '3rem',\n },\n },\n} as const;\n\nexport default function TestimonialCarouselCustomSection({ headerSection }: CustomSectionComponentProps): JSX.Element {\n const [isMobile] = useAtom(isMobileAtom);\n return (\n
\n \n \n Why businesses choose Geotab\n \n \n 25+ Years of fleet management excellence\n \n \n \n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport { useStaticValues } from '@stateManagement/StaticValuesContext';\nimport { OverrideTextProps, Text } from '@web-for-marketing/react-ui';\nimport { getDangerouslySetInnerHTML, addScriptsToDOM, removeScriptTags } from './DangerouslySetInnerHTMLHelper';\n\ninterface BaseProps {\n html: string;\n parseLinks?: boolean;\n hideLinks?: boolean;\n}\n\ntype DangerouslySetInnerHTMLProps = BaseProps & OverrideTextProps;\n\nexport function DangerouslySetInnerHTML({\n html,\n parseLinks,\n hideLinks,\n ...other\n}: DangerouslySetInnerHTMLProps): JSX.Element {\n const { baseUrl } = useStaticValues();\n const { sanitizedHtml, scriptTags } = removeScriptTags(html);\n\n useEffect(() => {\n if (scriptTags) {\n addScriptsToDOM(scriptTags);\n }\n }, [scriptTags]);\n\n return (\n \n );\n}\n","import { isInternalOrBaseLink } from '@helpers/string';\n\nexport const getDangerouslySetInnerHTML = (\n html: string,\n baseUrl: string,\n parseLinks?: boolean,\n hideLinks?: boolean\n): string => {\n if (parseLinks) {\n const spliHtml = html.split(' {\n if (index === 0) {\n return str;\n }\n const match = str.match(/href=\"(.*?)\"/);\n if (match) {\n let linkAttributes = '';\n if (hideLinks) {\n linkAttributes += ' tabIndex=\"-1\"';\n }\n if (match[1] && !isInternalOrBaseLink(match[1], baseUrl)) {\n linkAttributes += ' target=\"_blank\" rel=\"noopener noreferrer\"';\n }\n return ` {\n const domParser = new DOMParser();\n const parsedScriptTags = domParser.parseFromString(scriptTags, 'text/html').querySelectorAll('script');\n\n parsedScriptTags.forEach((scriptTag) => {\n const newScriptTag = document.createElement('script');\n newScriptTag.innerHTML = scriptTag.innerHTML;\n const attributes = scriptTag.attributes;\n for (let i = 0; i < attributes.length; i++) {\n const { name, value } = attributes[i];\n newScriptTag.setAttribute(name, value);\n }\n document.body.appendChild(newScriptTag);\n });\n};\n\nexport const addLinksToDOM = (linkTags: string): void => {\n const domParser = new DOMParser();\n const parsedLinkTags = domParser.parseFromString(linkTags, 'text/html').querySelectorAll('link');\n\n parsedLinkTags.forEach((linkTag) => {\n const newLinkTag = document.createElement('link');\n newLinkTag.innerHTML = linkTag.innerHTML;\n const attributes = linkTag.attributes;\n for (let i = 0; i < attributes.length; i++) {\n const { name, value } = attributes[i];\n newLinkTag.setAttribute(name, value);\n }\n document.head.appendChild(newLinkTag);\n });\n};\n\nexport const removeScriptTags = (html: string): { sanitizedHtml: string; scriptTags: string } => {\n const scriptTags: string[] = [];\n\n const sanitizedHtml = html.replace(\n /]*<\\/script>)(?:(?!\\/\\/)(?!\\/\\*)[^'\"]|\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\/\\/.*(?:\\n)|\\/\\*(?:(?:.|\\s))*?\\*\\/)*?<\\/script>/gi,\n (match) => {\n scriptTags.push(match);\n return '';\n }\n );\n\n return { sanitizedHtml, scriptTags: scriptTags.join('') };\n};\n\nexport const removeLinkTags = (html: string): { sanitizedHtml: string; linkTags: string } => {\n const linkTags: string[] = [];\n\n const sanitizedHtml = html.replace(/]*?(?:\\/>|>)/gi, (match) => {\n linkTags.push(match);\n return '';\n });\n\n return { sanitizedHtml, linkTags: linkTags.join('') };\n};\n","import openInNewTab from '@images/Blog/OpenInNewTab.svg';\nimport checkmark from '@images/round-checkmark.svg';\nimport { RichTextListStyle } from '@models/richTextEditor';\nimport { getRgbaColor, v2Colors } from '@web-for-marketing/react-ui';\n\nexport const richTextHtmlStyles = {\n rawHTML: (listSyle?: RichTextListStyle) =>\n ({\n width: '100%',\n '& p': {\n margin: 0,\n wordBreak: 'break-word',\n },\n '& ul': {\n margin: '2rem 0 2.2rem',\n listStyleImage: listSyle === 'checkmark' ? `url(${checkmark})` : undefined,\n '&:last-child': {\n marginBottom: 0,\n },\n },\n '& ol': {\n margin: '2rem 0 2.2rem',\n '&:last-child': {\n marginBottom: 0,\n },\n },\n '& li': {\n wordBreak: 'break-word',\n '&:not(:last-of-type)': {\n marginBottom: '1.2rem',\n },\n '& ul,ol': {\n marginTop: '1.2rem',\n marginBottom: 0,\n },\n },\n '& a': {\n padding: '0.5rem 0.2rem',\n transition: '200ms background-color ease',\n textDecoration: 'underline',\n wordBreak: 'break-word',\n color: v2Colors.text.activeSecondary,\n '&:hover': {\n backgroundColor: `${getRgbaColor(v2Colors.core.deepSpace, 0.03)} !important`,\n },\n '&:focus': {\n outlineColor: v2Colors.core.innovation,\n backgroundColor: `${getRgbaColor(v2Colors.core.deepSpace, 0.06)} !important`,\n },\n '&:active': {\n outline: 'none',\n backgroundColor: `${getRgbaColor(v2Colors.core.deepSpace, 0.05)} !important`,\n },\n '&[target=\"_blank\"]::after': {\n content: '\"\"',\n height: '0.8em',\n width: '0.8em',\n marginLeft: '0.6rem',\n verticalAlign: 'baseline',\n display: 'inline-block',\n backgroundImage: `url(${openInNewTab})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n },\n '&:not([href*=\"www.geotab.com\"]):not([href^=\"/\"])::after': {\n content: '\"\"',\n height: '0.8em',\n width: '0.8em',\n marginLeft: '0.6rem',\n verticalAlign: 'baseline',\n display: 'inline-block',\n backgroundImage: `url(${openInNewTab})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n },\n },\n }) as const,\n};\n","export const checkIfReduceMotion = (window: Window): boolean =>\n !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches);\n"],"names":["RichTextContent","content","listStyle","other","_jsx","DangerouslySetInnerHTML","parseLinks","color","html","css","richTextHtmlStyles","rawHTML","CARD_WIDTH","CARD_WIDTH_MOBILE","CARD_MARGIN","CARD_MARGIN_MOBILE","classes","cardContainer","width","padding","marginRight","boxSizing","border","v2Colors","primary","borderRadius","backgroundColor","background","white","flexShrink","userSelect","cursor","transition","willChange","borderColor","activePrimary","scale","outline","outlineOffset","breakpoints","md","linkButton","isDragging","position","pointerEvents","_ref","name","styles","_ref2","_ref3","TestimonialCard","cardContent","LinkOverlayContainer","className","children","_jsxs","Stack","height","direction","spacing","alignItems","component","Text","variant","statistic","weight","statisticDescription","toUpperCase","author","quote","justifyContent","columnGap","flex","title","company","V2Button","LinkOverlay","href","button","link","onClick","event","currentTarget","blur","draggable","size","target","rel","text","carouselContainer","overflowX","carousel","display","TestimonialCarousel","testimonialCards","scrollDirection","scrollSpeed","autoplay","isMobile","useAtom","isMobileAtom","setIsDragging","useState","isRunning","setIsRunning","carouselItems","setCarouselItems","carouselContainerRef","useRef","animationRef","dragStartX","tabScroll","reduceMotion","carouselItemWidth","updateCarouselItemPositions","useCallback","movementX","current","carouselCards","Array","from","querySelectorAll","forEach","item","index","itemPosition","newTranslateX","parseFloat","style","translate","split","maxTranslateX","length","minTranslateX","scrollBy","left","startAnimation","animate","requestAnimationFrame","pauseAnimation","resumeAnimation","useEffect","checkIfReduceMotion","window","cancelAnimationFrame","handleCarouselMouseDragStart","clientX","handleCarouselMouseDrag","Math","abs","handleCarouselMouseDragEnd","handleCarouselTouchDragStart","touches","handleCarouselTouchDrag","handleCarouseTouchlDragEnd","handleFocus","scrollLeft","handleBlur","setTimeout","contains","document","activeElement","handleKeyDown","key","screenWidth","innerWidth","minItemsNeeded","ceil","duplications","fill","flat","addEventListener","removeEventListener","ref","onMouseEnter","onMouseLeave","map","_","Skeleton","animation","_css","testimonialCarouselContainer","paddingTop","paddingBottom","TestimonialCarouselCustomSection","headerSection","gap","align","Heading","slice","hideLinks","baseUrl","useStaticValues","sanitizedHtml","scriptTags","removeScriptTags","addScriptsToDOM","dangerouslySetInnerHTML","__html","getDangerouslySetInnerHTML","str","match","linkAttributes","isInternalOrBaseLink","join","DOMParser","parseFromString","scriptTag","newScriptTag","createElement","innerHTML","attributes","i","value","setAttribute","body","appendChild","addLinksToDOM","linkTags","linkTag","newLinkTag","head","replace","push","removeLinkTags","listSyle","margin","wordBreak","listStyleImage","checkmark","undefined","marginBottom","marginTop","textDecoration","activeSecondary","getRgbaColor","core","deepSpace","outlineColor","innovation","marginLeft","verticalAlign","backgroundImage","openInNewTab","backgroundSize","backgroundRepeat","matchMedia","matches"],"sourceRoot":""}