{"version":3,"sources":["webpack:///./src/img/icons/close.svg","webpack:///./src/helpers/global.ts","webpack:///./src/hooks/useBodyScrollLock.ts","webpack:///./src/stories/Components/Misc/Modal/Context/Context.tsx","webpack:///./src/stories/Components/Misc/Modal/Background/Background.styles.ts","webpack:///./src/stories/Components/Misc/Modal/Background/Background.tsx","webpack:///./src/stories/Components/Buttons/FloatingActionButton/FloatingActionButton.styles.ts","webpack:///./src/stories/Components/Buttons/FloatingActionButton/FloatingActionButton.tsx","webpack:///./src/stories/Components/Misc/Modal/Close/Close.tsx","webpack:///./src/stories/Components/Misc/Modal/Modal.styles.ts","webpack:///./src/stories/Components/Misc/Modal/Modal.tsx","webpack:///./src/stories/Widgets/ModalForm/ModalForm.styles.ts","webpack:///./src/stories/Widgets/ModalForm/ModalForm.tsx","webpack:///./src/hoc/withMotionMax.tsx","webpack:///./src/helpers/scrollbars.ts","webpack:///./src/helpers/ssr.ts","webpack:///./src/helpers/layers.ts","webpack:///./src/helpers/image.ts"],"names":["_path","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgClose","props","xmlns","viewBox","fill","d","ButtonReset","css","useBodyScrollLock","trigger","ref","useRef","useEffect","current","disableBodyScroll","enableBodyScroll","clearAllBodyScrollLocks","ModalContext","React","closeLabel","closeOnBackground","showBackground","showClose","onClose","noop","useModal","ModalProvider","Provider","value","children","BackgroundStyles","Background","styled","m","div","reduceMotion","useReducedMotion","modal","S","onClick","event","preventDefault","undefined","initial","animate","exit","variants","visible","opacity","hidden","Container","button","transition","brand","white","black","yellow","green","from","Device","Desktop","FloatingActionButtonStyles","Text","span","headingStyles","FloatingActionButton","mode","showIcon","theme","FocusRing","focusRingClass","as","Close","type","ModalStyles","section","rgba","Layers","Modal","Inner","withMotionMax","isSSR","portalContainer","document","getElementById","body","portalContent","MotionConfig","duration","ease","AnimatePresence","isOpen","id","role","ariaLabel","tabIndex","onKeyDown","clipPath","FocusScope","autoFocus","restoreFocus","ReactDOM","Header","fluid","SitePaddingMin","scrollbars","Title","h2","Content","p","paragraphMedium","FormWrapper","CtaWrapper","Cta","LogoWrapper","ModalFormStyles","Logo","img","opened","status","setStatus","postSubmitAction","config","configuration","setIsOpen","isAnimating","setIsAnimating","prevScrollY","animation","useAnimation","handleScroll","scrolledPercentage","window","scrollY","documentElement","scrollHeight","clientHeight","scrolledPercentageRounded","Math","floor","start","addEventListener","removeEventListener","scrollPosition","restoreScroll","scrollTo","scrolled","scale","repeat","repeatType","onAnimationStart","onAnimationComplete","floatingCtaLabel","location","hash","title","logo","alt","altText","loading","src","imageUrl","content","HubspotForm","buttonPosition","defaultValues","disabled","onSubmitValid","async","fetch","API_URLS","postFormsHubspot","JSON","stringify","formData","method","headers","ok","href","isModal","WrappedComponent","displayName","name","ComponentWithMotionMax","createElement","LazyMotion","features","domMax","strict","grey","cl","Cloudinary","cloud","cloudName","url","secure","image","imageParams","clImage","resizeAction","width","height","console","warn","crop","limitFill","widthratio","aspectRatio","heightratio","gravity","focusOn","face","autoGravity","getResizeAction","resize","delivery","formatAction","format","autoFormat","getFormatAction","quality","autoQuality","dpr","setVersion","process","CLOUDINARY_VERSION","toURL","getSrcs","upper","lower","steps","ratio","increment","Array","map","_","index","ceil","getRange","size","getRetinaSrcs","imgSrcRegex","cloudinaryPathRegex","transformCloudinarySrcsInHtmlString","HtmlString","images","replace","trim","matchAll","forEach","cloudinaryPath","match","indexOf","decodedPath","decodeURI","srcSet","join"],"mappings":"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","file":"ModalForm-3281092ad7be79fbf480.js","sourcesContent":["var _path;\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nfunction SvgClose(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 95.98 320.02 320.02\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25-6.2 6.25-14.4 9.35-22.6 9.35s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416s-16.37-3.1-22.625-9.4c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z\"\n })));\n}\n\nexport default __webpack_public_path__ + \"a518604f50d6acfb9c48f9b4d6fb3482.svg\";\nexport { SvgClose as ReactComponent };","import { css } from 'styled-components';\r\nexport default {\r\n navHeight: 107,\r\n navHeightTablet: 80,\r\n navHeightMobile: 59,\r\n};\r\nexport const ButtonReset = css `\r\n border: none;\r\n outline: none;\r\n padding: 0px;\r\n background: none;\r\n border-radius: 0px;\r\n`;\r\n","import { useEffect, useRef } from 'react';\r\nimport { clearAllBodyScrollLocks, disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\r\nconst useBodyScrollLock = (trigger) => {\r\n const ref = useRef(null);\r\n useEffect(() => {\r\n if (ref.current === null) {\r\n clearAllBodyScrollLocks();\r\n return;\r\n }\r\n if (trigger === true) {\r\n disableBodyScroll(ref.current);\r\n }\r\n else {\r\n enableBodyScroll(ref.current);\r\n }\r\n return () => {\r\n if (ref.current !== null) {\r\n enableBodyScroll(ref.current);\r\n }\r\n };\r\n }, [trigger]);\r\n return ref;\r\n};\r\nexport default useBodyScrollLock;\r\n","import noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nconst ModalContext = React.createContext({\r\n closeLabel: 'Close',\r\n closeOnBackground: false,\r\n showBackground: false,\r\n showClose: false,\r\n onClose: noop,\r\n});\r\nexport const useModal = () => React.useContext(ModalContext);\r\nexport const ModalProvider = (props) => {\r\n return React.createElement(ModalContext.Provider, { value: props }, props.children);\r\n};\r\n","import { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nconst Background = styled(m.div) `\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n display: block;\r\n background: var(--tintColor);\r\n height: 100%;\r\n width: 100%;\r\n\r\n &[data-close='true'] {\r\n cursor: zoom-out;\r\n }\r\n`;\r\nconst BackgroundStyles = {\r\n Background,\r\n};\r\nexport default BackgroundStyles;\r\n","import { useReducedMotion } from 'framer-motion';\r\nimport * as React from 'react';\r\nimport { useModal } from '../Context/Context';\r\nimport S from './Background.styles';\r\nconst Background = () => {\r\n const reduceMotion = useReducedMotion();\r\n const modal = useModal();\r\n return (React.createElement(S.Background, { \"data-close\": modal.closeOnBackground, \"aria-hidden\": true, onClick: modal.closeOnBackground\r\n ? (event) => {\r\n event.preventDefault();\r\n modal.onClose();\r\n }\r\n : undefined, initial: reduceMotion ? undefined : 'hidden', animate: reduceMotion ? undefined : 'visible', exit: reduceMotion ? undefined : 'hidden', variants: {\r\n visible: { opacity: 1 },\r\n hidden: { opacity: 0 },\r\n } }));\r\n};\r\nexport default Background;\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { Device, from } from '@helpers/media';\r\nimport { headingStyles } from '@helpers/typography';\r\nimport styled from 'styled-components';\r\nimport { m } from 'framer-motion';\r\nconst Container = styled(m.button) `\r\n ${ButtonReset}\r\n ${transition('background-color, border-color, color')}\r\n\r\n --iconSize: 8px;\r\n --size: 88px;\r\n\r\n display: flex;\r\n background: var(--bgColor);\r\n border: 1px solid var(--fgColor);\r\n border-radius: 50%;\r\n color: var(--fgColor);\r\n flex-direction: column;\r\n height: var(--size);\r\n place-content: center;\r\n place-items: center;\r\n text-align: center;\r\n width: var(--size);\r\n z-index: 2;\r\n\r\n svg {\r\n display: block;\r\n height: var(--iconSize);\r\n width: var(--iconSize);\r\n }\r\n\r\n &.focus-ring {\r\n outline: auto;\r\n }\r\n\r\n &[data-theme='white'] {\r\n --bgColor: ${brand.white};\r\n --fgColor: ${brand.black};\r\n }\r\n\r\n &[data-theme='yellow'] {\r\n --bgColor: ${brand.yellow};\r\n --fgColor: ${brand.black};\r\n }\r\n\r\n &[data-theme='green'] {\r\n --bgColor: ${brand.green};\r\n --fgColor: ${brand.black};\r\n }\r\n\r\n @media ${from(Device.Desktop)} {\r\n --iconSize: 14px;\r\n --size: 138px;\r\n }\r\n`;\r\nconst Text = styled.span `\r\n ${headingStyles}\r\n\r\n display: block;\r\n font-size: 18px;\r\n line-height: 18px;\r\n margin: 0;\r\n max-width: 70%;\r\n\r\n @media ${from(Device.Desktop)} {\r\n font-size: 25px;\r\n line-height: 30px;\r\n max-width: 80px;\r\n }\r\n\r\n ${Container}[data-has-icon='true'] & {\r\n margin-bottom: 4px;\r\n }\r\n`;\r\nconst FloatingActionButtonStyles = {\r\n Container,\r\n Text,\r\n};\r\nexport default FloatingActionButtonStyles;\r\n","import { ReactComponent as SvgClose } from '@img/icons/close.svg';\r\nimport * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport S from './FloatingActionButton.styles';\r\nconst FloatingActionButton = ({ children, mode = 'button', showIcon = false, theme = 'white', ...props }) => {\r\n return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.Container, { as: mode, \"data-theme\": theme, \"data-has-icon\": showIcon, ...props },\r\n React.createElement(S.Text, null, children),\r\n showIcon && React.createElement(SvgClose, null))));\r\n};\r\nexport default FloatingActionButton;\r\n","import FloatingActionButton from '@stories/Components/Buttons/FloatingActionButton/FloatingActionButton';\r\nimport * as React from 'react';\r\nimport { useModal } from '../Context/Context';\r\nconst Close = () => {\r\n const modal = useModal();\r\n return (React.createElement(FloatingActionButton, { mode: \"button\", type: \"button\", onClick: modal.onClose }, modal.closeLabel));\r\n};\r\nexport default Close;\r\n","import brand from '@helpers/brand';\r\nimport { Layers } from '@helpers/layers';\r\nimport { m } from 'framer-motion';\r\nimport { rgba } from 'polished';\r\nimport styled from 'styled-components';\r\nconst Container = styled(m.section) `\r\n --bgColor: ${brand.white};\r\n --fgColor: ${brand.black};\r\n --tintColor: ${rgba(brand.black, 0.89)};\r\n\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n display: grid;\r\n color: var(--fgColor);\r\n height: 100%;\r\n place-content: center;\r\n place-items: center;\r\n width: 100%;\r\n z-index: ${Layers.Modal};\r\n\r\n &[data-open='false'] {\r\n display: none;\r\n }\r\n`;\r\nconst Inner = styled(m.div) `\r\n position: relative;\r\n height: 100vh;\r\n padding-bottom: 116px;\r\n padding-top: 72px;\r\n`;\r\nconst ModalStyles = {\r\n Container,\r\n Inner,\r\n};\r\nexport default ModalStyles;\r\n","import { isSSR } from '@helpers/ssr';\r\nimport { withMotionMax } from '@hoc/withMotionMax';\r\nimport { FocusScope } from '@react-aria/focus';\r\nimport { AnimatePresence, MotionConfig, useReducedMotion } from 'framer-motion';\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport Background from './Background/Background';\r\nimport Close from './Close/Close';\r\nimport { ModalProvider } from './Context/Context';\r\nimport S from './Modal.styles';\r\nconst Modal = (props) => {\r\n const reduceMotion = useReducedMotion();\r\n if (isSSR()) {\r\n return null;\r\n }\r\n // Use #root if available, otherwise fallback to body.\r\n const portalContainer = document.getElementById('root') ?? document.body;\r\n const portalContent = (React.createElement(ModalProvider, { closeLabel: props.closeLabel, closeOnBackground: props.closeOnBackground, showBackground: props.showBackground, showClose: props.showClose, onClose: props.onClose },\r\n React.createElement(MotionConfig, { transition: { duration: 0.35, ease: 'easeIn' } },\r\n React.createElement(AnimatePresence, null, props.isOpen && (React.createElement(S.Container, { id: props.id, role: \"dialog\", \"aria-label\": props.ariaLabel, \"aria-modal\": \"true\", tabIndex: -1, onKeyDown: (event) => {\r\n if (event.key === 'Escape') {\r\n props.onClose();\r\n }\r\n }, initial: reduceMotion ? undefined : 'hidden', animate: reduceMotion ? undefined : 'visible', exit: reduceMotion ? undefined : 'hidden', variants: {\r\n visible: { clipPath: 'circle(200% at 100% 100%)' },\r\n hidden: { clipPath: 'circle(0% at 100% 100%)' },\r\n } },\r\n React.createElement(FocusScope, { autoFocus: true, restoreFocus: true },\r\n props.showBackground && React.createElement(Background, null),\r\n React.createElement(S.Inner, null, props.children),\r\n props.showClose && React.createElement(Close, null))))))));\r\n return ReactDOM.createPortal(portalContent, portalContainer);\r\n};\r\nexport default withMotionMax(Modal);\r\n","import brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport { SitePaddingMin } from '@helpers/grid';\r\nimport { Layers } from '@helpers/layers';\r\nimport scrollbars from '@helpers/scrollbars';\r\nimport { h2, paragraphMedium } from '@helpers/typography';\r\nimport FloatingActionButton from '@stories/Components/Buttons/FloatingActionButton/FloatingActionButton';\r\nimport { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nconst Container = styled.section `\r\n position: relative;\r\n display: flex;\r\n background: ${brand.white};\r\n flex-direction: column;\r\n max-height: 100%;\r\n max-width: 862px;\r\n`;\r\nconst Header = styled.div `\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding-right: ${fluid(SitePaddingMin, 40)};\r\n`;\r\nconst Inner = styled.div `\r\n ${scrollbars}\r\n\r\n overflow-y: auto;\r\n padding: ${fluid(28, 64)} ${fluid(SitePaddingMin, 40)} ${fluid(SitePaddingMin, 40)};\r\n`;\r\nconst Title = styled.h2 `\r\n ${h2}\r\n\r\n align-self: flex-start;\r\n background: ${brand.yellow};\r\n clip-path: polygon(0% 0%, 100% 0%, calc(100% - 40px) 100%, 0% 100%);\r\n margin: 0;\r\n padding: 16px 72px 16px ${fluid(SitePaddingMin, 40)};\r\n`;\r\nconst Content = styled.p `\r\n ${paragraphMedium}\r\n`;\r\nconst FormWrapper = styled.div ``;\r\nconst CtaWrapper = styled(m.div) `\r\n --spacingX: ${SitePaddingMin}px;\r\n --spacingY: 14px;\r\n\r\n position: fixed;\r\n bottom: var(--spacingY);\r\n right: var(--spacingX);\r\n z-index: 1001;\r\n`;\r\nconst Cta = styled(FloatingActionButton) `\r\n z-index: ${Layers.Modal + 1};\r\n`;\r\nconst LogoWrapper = styled.div `\r\n height: ${fluid(36, 56)};\r\n`;\r\nconst Logo = styled.img `\r\n display: block;\r\n height: 100%;\r\n object-fit: contain;\r\n object-position: center right;\r\n`;\r\nconst ModalFormStyles = {\r\n Container,\r\n Content,\r\n CtaWrapper,\r\n Cta,\r\n FormWrapper,\r\n Header,\r\n Inner,\r\n Logo,\r\n LogoWrapper,\r\n Title,\r\n};\r\nexport default ModalFormStyles;\r\n","import { API_URLS } from '@helpers/api';\r\nimport { imageUrl } from '@helpers/image';\r\nimport { isSSR } from '@helpers/ssr';\r\nimport useBodyScrollLock from '@hooks/useBodyScrollLock';\r\nimport HubspotForm from '@stories/Components/Forms/HubspotForm/HubspotForm';\r\nimport Modal from '@stories/Components/Misc/Modal/Modal';\r\nimport * as React from 'react';\r\nimport S from './ModalForm.styles';\r\nimport { withMotionMax } from '@hoc/withMotionMax';\r\nimport { useAnimation } from 'framer-motion';\r\nconst ModalForm = ({ opened = false, ...props }) => {\r\n const [status, setStatus] = React.useState('idle');\r\n const { postSubmitAction } = props.config.configuration;\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [isAnimating, setIsAnimating] = React.useState(false);\r\n const prevScrollY = React.useRef(0);\r\n const animation = useAnimation();\r\n React.useEffect(() => {\r\n if (opened) {\r\n setIsOpen(true);\r\n }\r\n }, [opened]);\r\n React.useEffect(() => {\r\n const handleScroll = () => {\r\n // animate every 15% of page scrolled unless currently animating\r\n const currentScrollY = window.scrollY;\r\n const pageHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;\r\n const scrolledPercentage = (currentScrollY / pageHeight) * 100;\r\n const scrolledPercentageRounded = Math.floor(scrolledPercentage / 15) * 15;\r\n // reset if user scrolls back to top\r\n if (scrolledPercentageRounded < 1) {\r\n prevScrollY.current = scrolledPercentageRounded;\r\n }\r\n if (scrolledPercentageRounded > prevScrollY.current) {\r\n prevScrollY.current = scrolledPercentageRounded;\r\n if (!isAnimating) {\r\n animation.start('scrolled');\r\n }\r\n }\r\n };\r\n window.addEventListener('scroll', handleScroll);\r\n return () => {\r\n window.removeEventListener('scroll', handleScroll);\r\n };\r\n }, [isAnimating]);\r\n const scrollPosition = !isSSR() && isOpen ? window.scrollY : 0;\r\n const restoreScroll = () => window?.scrollTo(0, scrollPosition);\r\n const ref = useBodyScrollLock(isOpen);\r\n const ctaVariants = {\r\n scrolled: {\r\n scale: 1.1,\r\n transition: {\r\n duration: 0.6,\r\n ease: 'easeInOut',\r\n repeat: 8.5,\r\n repeatType: 'reverse',\r\n },\r\n },\r\n };\r\n const handleAnimationStart = () => {\r\n setIsAnimating(true);\r\n };\r\n const handleAnimationComplete = () => {\r\n setIsAnimating(false);\r\n };\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(S.CtaWrapper, { variants: ctaVariants, animate: animation, onAnimationStart: handleAnimationStart, onAnimationComplete: handleAnimationComplete },\r\n React.createElement(S.Cta, { mode: \"button\", showIcon: isOpen, theme: isOpen ? 'white' : 'green', type: \"button\", onClick: (event) => {\r\n event.preventDefault();\r\n if (isOpen) {\r\n setIsOpen(false);\r\n restoreScroll();\r\n }\r\n else {\r\n setIsOpen(true);\r\n }\r\n } }, isOpen ? 'Close Form' : props.floatingCtaLabel)),\r\n React.createElement(Modal, { ariaLabel: \"\", closeLabel: \"Close Form\", isOpen: isOpen, showBackground: true, showClose: false, onClose: () => {\r\n window.location.hash = '';\r\n restoreScroll();\r\n } },\r\n React.createElement(S.Container, null,\r\n React.createElement(S.Header, null,\r\n React.createElement(S.Title, null, props.title),\r\n props.logo && (React.createElement(S.LogoWrapper, null,\r\n React.createElement(S.Logo, { alt: props.logo.altText, loading: \"lazy\", role: \"presentation\", src: imageUrl(props.logo, {}) })))),\r\n React.createElement(S.Inner, { ref: ref },\r\n props.content && React.createElement(S.Content, null, props.content),\r\n status === 'fulfilled' && postSubmitAction.type === 'thank_you' && (React.createElement(S.Content, null,\r\n React.createElement(\"p\", null, postSubmitAction.value))),\r\n status !== 'fulfilled' && (React.createElement(S.FormWrapper, null,\r\n React.createElement(HubspotForm, { buttonPosition: \"left\", config: props.config, defaultValues: props.defaultValues, disabled: status === 'pending', onSubmitValid: async (formData) => {\r\n setStatus('pending');\r\n const res = await fetch(API_URLS.postFormsHubspot, {\r\n body: JSON.stringify(formData),\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n if (!res.ok) {\r\n setStatus('errored');\r\n // @todo: Handle general error state\r\n }\r\n // Handle post submit actions.\r\n if (postSubmitAction.type === 'redirect_url') {\r\n window.location.href = postSubmitAction.value;\r\n return;\r\n }\r\n setStatus('fulfilled');\r\n }, isModal: true }))))))));\r\n};\r\nexport default withMotionMax(ModalForm);\r\n","import { domMax, LazyMotion } from 'framer-motion';\r\nimport React from 'react';\r\nexport function withMotionMax(WrappedComponent) {\r\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n const ComponentWithMotionMax = (props) => {\r\n return (React.createElement(LazyMotion, { features: domMax, strict: true },\r\n React.createElement(WrappedComponent, { ...props })));\r\n };\r\n ComponentWithMotionMax.displayName = `withMotionMax(${displayName})`;\r\n return ComponentWithMotionMax;\r\n}\r\n","import { css } from 'styled-components';\r\nimport brand from './brand';\r\nexport default css `\r\n /* @note: This is an attempt to use default scrollbars on touch devices */\r\n @media (hover: hover) or (pointer: fine) {\r\n &::-webkit-scrollbar-track {\r\n background-color: ${brand.grey};\r\n }\r\n\r\n &::-webkit-scrollbar {\r\n background-color: ${brand.grey};\r\n height: 6px;\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: ${brand.yellow};\r\n border-radius: 0;\r\n cursor: pointer;\r\n }\r\n }\r\n`;\r\n","export const isSSR = () => {\r\n const returnValue = !(typeof window != 'undefined' && window.document);\r\n return returnValue;\r\n};\r\n","/**\r\n * The various major z-index layers, adjust with caution and leave space between to add to later.\r\n */\r\nexport const Layers = {\r\n Header: 100,\r\n Modal: 1000,\r\n};\r\n","import { Cloudinary } from '@cloudinary/url-gen';\r\nimport { dpr, format, quality } from '@cloudinary/url-gen/actions/delivery';\r\nimport { crop, fill, limitFill } from '@cloudinary/url-gen/actions/resize';\r\nimport { face } from '@cloudinary/url-gen/qualifiers/focusOn';\r\nimport { auto as autoFormat } from '@cloudinary/url-gen/qualifiers/format';\r\nimport { autoGravity, focusOn } from '@cloudinary/url-gen/qualifiers/gravity';\r\nimport { auto as autoQuality } from '@cloudinary/url-gen/qualifiers/quality';\r\nconst cl = new Cloudinary({\r\n cloud: {\r\n cloudName: 'essential-living',\r\n },\r\n url: {\r\n secure: true,\r\n },\r\n});\r\n/**\r\n * Create an image URL for ImageProcessor\r\n * @param image The image model\r\n * @param imageParams The image parameters\r\n * @returns The image URL\r\n */\r\nexport function imageUrl(image, imageParams) {\r\n if (!image?.src) {\r\n return '';\r\n }\r\n let clImage = cl.image(image.src);\r\n const resizeAction = getResizeAction(image, imageParams);\r\n if (resizeAction) {\r\n clImage = clImage.resize(resizeAction);\r\n }\r\n clImage = clImage.delivery(getFormatAction(imageParams)).delivery(quality(autoQuality()));\r\n if (imageParams.dpr) {\r\n clImage = clImage.delivery(dpr(imageParams.dpr));\r\n }\r\n // Set version to enable mass invalidation.\r\n clImage.setVersion(process.env.CLOUDINARY_VERSION ?? '1');\r\n return clImage.toURL();\r\n}\r\nfunction getResizeAction(image, imageParams) {\r\n if (!imageParams.width && !imageParams.height) {\r\n console.warn(`Image Not Resized: \"${image.src}\"`, image, imageParams);\r\n return undefined;\r\n }\r\n let resizeAction;\r\n switch (imageParams.crop) {\r\n case 'crop':\r\n resizeAction = crop();\r\n break;\r\n case 'fill':\r\n resizeAction = fill();\r\n break;\r\n case 'lfill':\r\n resizeAction = limitFill();\r\n break;\r\n default:\r\n resizeAction = fill();\r\n break;\r\n }\r\n if (imageParams.width) {\r\n resizeAction = resizeAction.width(imageParams.width);\r\n }\r\n else if (imageParams.widthratio) {\r\n resizeAction = resizeAction.aspectRatio(imageParams.widthratio);\r\n }\r\n if (imageParams.height) {\r\n resizeAction = resizeAction.height(imageParams.height);\r\n }\r\n else if (imageParams.heightratio) {\r\n resizeAction = resizeAction.aspectRatio(imageParams.heightratio);\r\n }\r\n if (imageParams.gravity === 'face') {\r\n resizeAction = resizeAction.gravity(focusOn(face()));\r\n }\r\n else {\r\n resizeAction = resizeAction.gravity(autoGravity());\r\n }\r\n return resizeAction;\r\n}\r\nfunction getFormatAction(imageParams) {\r\n let formatAction;\r\n if (imageParams.format) {\r\n formatAction = format(imageParams.format);\r\n }\r\n else {\r\n formatAction = format(autoFormat());\r\n }\r\n return formatAction;\r\n}\r\nexport function getSrcs(image, upper, lower, steps, ratio) {\r\n const sizes = getRange(upper, lower, steps);\r\n return sizes.map((size) => `${imageUrl(image, { width: size, heightratio: ratio })} ${size}w`);\r\n}\r\nexport function getRetinaSrcs(image, width, ratio) {\r\n const dprs = [1, 1.5, 2, 2.5, 3];\r\n return dprs.map((dpr) => `${imageUrl(image, { width: width, heightratio: ratio, dpr })} ${dpr}x`);\r\n}\r\nfunction getRange(upper, lower, steps) {\r\n const difference = upper - lower;\r\n const increment = difference / (steps - 1);\r\n return [\r\n lower,\r\n ...Array(steps - 2)\r\n .fill('')\r\n .map((_, index) => Math.ceil(lower + increment * (index + 1))),\r\n upper,\r\n ];\r\n}\r\nconst imgSrcRegex = /]*(src=\"[^\"]+\")[^>]*>/g;\r\nconst cloudinaryPathRegex = /res.cloudinary.com\\/[^/]*\\/image\\/upload\\/v[\\d]*\\/(.*)\"/;\r\nexport function transformCloudinarySrcsInHtmlString(HtmlString, imageParams, upper, lower, steps) {\r\n HtmlString = HtmlString.replace(/\\s+/g, ' ').trim();\r\n const images = HtmlString.matchAll(imgSrcRegex);\r\n let ratio = undefined;\r\n if (imageParams.heightratio && imageParams.widthratio) {\r\n ratio = imageParams.heightratio / imageParams.widthratio;\r\n }\r\n if (images) {\r\n Array.from(images).forEach((image) => {\r\n const cloudinaryPath = image[1].match(cloudinaryPathRegex);\r\n if (cloudinaryPath && cloudinaryPath[1] && image[0].indexOf('srcset') == -1) {\r\n const decodedPath = decodeURI(cloudinaryPath[1]);\r\n const src = imageUrl({ src: decodedPath }, imageParams);\r\n const srcSet = getSrcs({ src: decodedPath }, upper, lower, steps, ratio).join(',');\r\n HtmlString = HtmlString.replace(image[1], `src=\"${src}\" srcset=\"${srcSet}\"`);\r\n }\r\n });\r\n }\r\n return HtmlString;\r\n}\r\n"],"sourceRoot":""}