{"version":3,"file":"dist/build-client/static/js/1404.b652258c.chunk.js","mappings":"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","sources":["Atoms/Buttons/BaseButtonStyle.ts","Atoms/Buttons/Button.tsx","Atoms/Buttons/FavoriteButton.tsx","Atoms/Error/Error.tsx","Atoms/Loaders/LoadingCircle.tsx","Atoms/Overlay/Overlay.tsx","Atoms/Price/Price.tsx","Atoms/Price/PricePerMonth.tsx","Atoms/Quantity/QuantitySelector.tsx","Atoms/DeliveryStatus/DeliveryStatus.tsx","Atoms/StockViewer/StockViewer.tsx","Atoms/Typography/SmallLabel/SmallLabel.tsx","Enums/ProductType.enum.ts","Enums/Variant.enum.ts","Molecules/Attributes/Attributes.tsx","Organisms/Carousel/CarouselChevrons.tsx","Organisms/Carousel/CarouselThumbnails.tsx","Organisms/Carousel/Carousel.tsx","Atoms/Input/TextArea.tsx","Organisms/ContactModal/ContactModal.tsx","Organisms/Modal/FullScreenModal.tsx","Atoms/Overlay/ModalOverlay.tsx","Organisms/Modal/Modal.tsx","Organisms/SubmitInterestModal/SubmitInterestModal.tsx","Organisms/TestDriveModal/TestDriveModal.tsx","Pages/ProductPage/BlurredImage.tsx","Organisms/ProductCard/PackageCard.tsx","Pages/ProductPage/ProductPackage.tsx","Shared/Hooks/useMountTransition.ts","Shared/Hooks/useOutsideClick.ts","Shared/Hooks/usePreventBackgroundScroll.ts","Pages/ProductPage/Reducers/variantReducer.ts","Shared/Providers/VariantProvider.tsx"],"sourcesContent":["import { styled } from 'stitches.config';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\n\r\nconst hoverCondition = '&:hover:not([disabled])';\r\n\r\nexport const ButtonVariants = {\r\n variants: {\r\n color: {\r\n primary: {\r\n backgroundColor: '$buttonPrimary',\r\n color: '$textSecondary',\r\n [hoverCondition]: {\r\n backgroundColor: '$JE68GreenHover',\r\n },\r\n },\r\n primary2: {\r\n backgroundColor: '$buttonPrimary2',\r\n color: '$textPrimary',\r\n [hoverCondition]: {\r\n backgroundColor: '$buttonPrimary2',\r\n },\r\n },\r\n secondary: {\r\n backgroundColor: '$buttonSecondary',\r\n color: '$textSecondary',\r\n [hoverCondition]: {\r\n backgroundColor: '$primaryLight1',\r\n },\r\n },\r\n secondaryDark: {\r\n backgroundColor: '$buttonSecondaryDark',\r\n color: '$textPrimary',\r\n [hoverCondition]: {\r\n backgroundColor: '$primary4',\r\n },\r\n },\r\n tertiary: {\r\n backgroundColor: 'transparent',\r\n color: '$textPrimary',\r\n // using box shadow to create a border - this way hover doesn't affect layout\r\n boxShadow: '0 0 0 1px $colors$borderPrimary',\r\n [hoverCondition]: {\r\n boxShadow: '0 0 0 2px $colors$borderPrimary',\r\n },\r\n },\r\n quaternary: {\r\n backgroundColor: '$primary2',\r\n color: '$textPrimary',\r\n [hoverCondition]: {\r\n backgroundColor: '$primary1',\r\n },\r\n },\r\n outlined: {\r\n backgroundColor: 'transparent',\r\n border: '1px solid $secondary2',\r\n [hoverCondition]: {\r\n backgroundColor: '$primary2',\r\n },\r\n },\r\n },\r\n size: {\r\n s: {\r\n py: 3,\r\n px: 6,\r\n fs: 6,\r\n h: 10,\r\n lineHeight: '$lh133',\r\n },\r\n l: {\r\n py: 3.5,\r\n px: 6,\r\n fs: 8,\r\n h: 12,\r\n lineHeight: '$lh125',\r\n },\r\n },\r\n fullWidth: {\r\n true: {\r\n width: '100%',\r\n },\r\n },\r\n loading: {\r\n true: {\r\n opacity: 0.7,\r\n fs: 7,\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n color: 'primary',\r\n size: 'l',\r\n },\r\n};\r\n\r\nexport const ButtonBase = {\r\n borderColor: 'transparent',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n wordSpacing: '$wordSpacings$fontPrimary',\r\n whiteSpace: 'nowrap',\r\n fontFamily: 'fontPrimary500',\r\n ls: '$ls1',\r\n bw: 0.25,\r\n transition: `all ${timings.oneFifth} ${animation.timingFn}`,\r\n textAlign: 'center',\r\n textTransform: 'uppercase',\r\n '&:active': {\r\n outlineWidth: 0,\r\n },\r\n '&:focus': {},\r\n '&:disabled': {\r\n cursor: 'not-allowed',\r\n opacity: 0.5,\r\n },\r\n};\r\n\r\nconst BaseButtonStyled = styled('button', {\r\n ...ButtonBase,\r\n ...ButtonVariants,\r\n});\r\n\r\nexport default BaseButtonStyled;\r\n","import LoadingCircle from 'Atoms/Loaders/LoadingCircle';\r\nimport KexIconLoader from 'Kex/KexIconLoader';\r\nimport { styled } from 'stitches.config';\r\nimport BaseButtonStyled from './BaseButtonStyle';\r\nimport BaseButtonType from './BaseButtonType';\r\n\r\nfunction Button({\r\n onClick,\r\n children,\r\n icon,\r\n disabled,\r\n type,\r\n size,\r\n css,\r\n isLoading,\r\n fullWidth,\r\n}: BaseButtonType) {\r\n const Icon = icon && styled(KexIconLoader(icon.type));\r\n return (\r\n \r\n \r\n {Icon && (\r\n \r\n {' '}\r\n \r\n )}\r\n {children}\r\n \r\n\r\n {isLoading && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nconst IconContainer = styled('div', {\r\n position: 'absolute',\r\n left: 24,\r\n});\r\n\r\nconst StyledLoadingCircle = styled('div', {\r\n position: 'absolute',\r\n});\r\n\r\nconst StyledButtonText = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n variants: {\r\n isLoading: {\r\n true: {\r\n opacity: 0,\r\n },\r\n false: {\r\n opacity: 1,\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst StyledButton = styled(BaseButtonStyled, {\r\n position: 'relative',\r\n overflow: 'hidden',\r\n});\r\n\r\nexport default Button;\r\n","import { HeartIcon } from 'Atoms/Icons';\r\nimport { styled } from 'stitches.config';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype FavoriteButtonBaseType = {\r\n onClick?: () => void;\r\n css?: CSS;\r\n size: 's' | 'm'; // 32px, 48px\r\n color?: 'primary' | 'secondary';\r\n isActive?: boolean;\r\n disabled?: boolean;\r\n};\r\n\r\nfunction FavoriteButton({\r\n onClick = () => {},\r\n css,\r\n size,\r\n isActive = false,\r\n color = 'primary',\r\n disabled = false,\r\n}: FavoriteButtonBaseType) {\r\n return (\r\n {\r\n onClick();\r\n }}\r\n size={size}\r\n disabled={disabled}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n}\r\nexport default FavoriteButton;\r\n\r\nconst FavoriteBtn = styled('button', {\r\n variants: {\r\n size: {\r\n s: {\r\n h: 8,\r\n },\r\n m: {\r\n h: 12,\r\n },\r\n },\r\n disabled: {\r\n true: { opacity: 0.6 },\r\n },\r\n },\r\n});\r\n\r\nconst CircleBackground = styled('span', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: 'relative',\r\n borderRadius: '50%',\r\n variants: {\r\n bgColor: {\r\n primary: {\r\n backgroundColor: '$primary2',\r\n '&:hover': {\r\n backgroundColor: '$primary2',\r\n },\r\n },\r\n secondary: {\r\n backgroundColor: '$pureWhite',\r\n '&:hover': {\r\n backgroundColor: '$secondary2',\r\n },\r\n },\r\n },\r\n size: {\r\n s: {\r\n h: 8,\r\n w: 8,\r\n },\r\n m: {\r\n h: 12,\r\n w: 12,\r\n },\r\n },\r\n },\r\n});\r\n","import { forwardRef } from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport { InfoIcon } from '../../Atoms/Icons';\r\n\r\ntype PropTypes = {\r\n errorLabel: string;\r\n};\r\n\r\nconst Error = forwardRef(({ errorLabel }, ref) => {\r\n return (\r\n \r\n \r\n {errorLabel}\r\n \r\n );\r\n});\r\n\r\nconst ErrorContainer = styled('span', {\r\n color: '$textSecondary',\r\n backgroundColor: '$secondary4',\r\n fs: 6,\r\n fontFamily: '$fontSecondary500',\r\n lineHeight: '$lh133',\r\n py: 2,\r\n px: 4,\r\n mb: 2,\r\n display: 'inline-flex',\r\n width: '100%',\r\n});\r\n\r\nexport default Error;\r\n","import IconBaseType from 'Atoms/Icons/IconBaseType';\r\nimport { styled } from 'stitches.config';\r\n\r\ntype LoadingCircleType = Omit & {\r\n isLoading?: boolean;\r\n size?: 's' | 'l' | 'xl';\r\n};\r\n\r\nfunction LoadingCircle({ size, isLoading }: LoadingCircleType) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst LoadingSvgStyles = styled('svg', {\r\n stroke: '$JE68GreenPrimary',\r\n overflow: 'visible',\r\n variants: {\r\n isLoading: {\r\n true: {\r\n display: 'initial',\r\n },\r\n false: {\r\n display: 'none',\r\n },\r\n },\r\n size: {\r\n s: {\r\n w: 6,\r\n h: 6,\r\n },\r\n l: {\r\n h: 12,\r\n w: 12,\r\n },\r\n xl: {\r\n h: 16,\r\n w: 16,\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 's',\r\n },\r\n});\r\n\r\nconst LoadingCircleStyles = styled('circle', {\r\n stroke: '$JE68GreenBackground',\r\n});\r\n\r\nexport default LoadingCircle;\r\n","import usePreventBackgroundScroll from 'Shared/Hooks/usePreventBackgroundScroll';\r\nimport { styled } from 'stitches.config';\r\n\r\ntype PropTypes = {\r\n clickEvnt?: () => void;\r\n isVisible: boolean;\r\n overlayColor?: 'primary' | 'secondary';\r\n};\r\n\r\nfunction Overlay({\r\n clickEvnt,\r\n isVisible,\r\n overlayColor = 'primary',\r\n}: PropTypes) {\r\n usePreventBackgroundScroll();\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default Overlay;\r\n\r\nconst OverlayDiv = styled('div', {\r\n w: '100vw',\r\n h: '100vh',\r\n position: 'fixed',\r\n l: 0,\r\n t: 0,\r\n opacity: '0',\r\n zIndex: '$ModalOverlay',\r\n transition: 'all 0.25s ease-in-out',\r\n visibility: 'hidden',\r\n variants: {\r\n isVisible: {\r\n true: {\r\n visibility: 'initial',\r\n opacity: '0.5',\r\n },\r\n },\r\n overlayColor: {\r\n primary: {\r\n backgroundColor: '$modalOverlayPrimary',\r\n },\r\n secondary: {\r\n backgroundColor: '$modalOverlaySecondary',\r\n },\r\n },\r\n },\r\n});\r\n","import { styled } from 'stitches.config';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype PropType = {\r\n nowPrice: number | undefined;\r\n wasPrice: number | undefined;\r\n friendlyNowPrice: string | undefined;\r\n friendlyWasPrice: string | undefined;\r\n size?: 'xs' | 'sm' | 'lg';\r\n direction?: 'row' | 'columnReverse';\r\n nowPriceSize?: CSS;\r\n wasPriceSize?: CSS;\r\n};\r\n\r\nfunction Price({\r\n nowPrice,\r\n wasPrice,\r\n friendlyNowPrice,\r\n friendlyWasPrice,\r\n size = 'sm',\r\n direction = 'row',\r\n nowPriceSize,\r\n wasPriceSize,\r\n}: PropType) {\r\n let hasLoweredPrice = false;\r\n if (nowPrice && wasPrice) {\r\n hasLoweredPrice = nowPrice < wasPrice;\r\n }\r\n\r\n return (\r\n \r\n \r\n {friendlyNowPrice}\r\n \r\n {hasLoweredPrice && (\r\n \r\n {friendlyWasPrice}\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default Price;\r\n\r\nconst PriceContainer = styled('div', {\r\n display: 'flex',\r\n variants: {\r\n direction: {\r\n columnReverse: {\r\n flexDirection: 'column-reverse',\r\n rowGap: 4,\r\n },\r\n row: {\r\n flexDirection: 'row',\r\n },\r\n },\r\n size: {\r\n xs: {\r\n fs: 6,\r\n lineHeight: '$lh133',\r\n columnGap: 26,\r\n },\r\n sm: {\r\n fs: 8,\r\n lineHeight: '$lh15',\r\n columnGap: 32,\r\n },\r\n lg: {\r\n columnGap: 40,\r\n fs: 12,\r\n lineHeight: '$lh116',\r\n fontFamily: '$fontPrimary400',\r\n wordSpacing: '$wordSpacings$fontPrimary',\r\n ls: '$ls1',\r\n flexDirection: 'column',\r\n '@mediaMinLarge': {\r\n flexDirection: 'row',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst NowPriceText = styled('span', {\r\n variants: {\r\n hasLoweredPrice: {\r\n true: {\r\n color: '$JE68GreenPrimary',\r\n },\r\n false: {\r\n color: '$secondary2',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst WasPriceText = styled('span', {\r\n textDecoration: 'line-through',\r\n color: '$secondary2',\r\n variants: {\r\n size: {\r\n lg: {\r\n // Reason why font size is specified here again is because we have special case where size 'lg' and in MOBILE should show different font size.\r\n fs: 9,\r\n lineHeight: '$lh133',\r\n '@mediaMinLarge': {\r\n fontSize: 'inherit',\r\n lineHeight: 'inherit',\r\n },\r\n },\r\n sm: {},\r\n xs: {},\r\n },\r\n },\r\n});\r\n","import { styled } from 'stitches.config';\r\nimport { useTranslationData } from '../../Shared/Providers/TranslationProvider';\r\n\r\ntype PropType = {\r\n friendlyMonthlyPrice: string | undefined;\r\n};\r\n\r\nfunction PricePerMonth({ friendlyMonthlyPrice }: PropType) {\r\n const { productLabels } = useTranslationData();\r\n const { perMonth } = productLabels;\r\n\r\n return (\r\n \r\n {friendlyMonthlyPrice}\r\n {perMonth}\r\n \r\n );\r\n}\r\n\r\nexport default PricePerMonth;\r\n\r\nconst PricePerMonthContainer = styled('div', {\r\n fontFamily: '$fontSecondary400',\r\n lineHeight: '$lh133',\r\n color: '$primaryLight3',\r\n letterSpacing: '$ls0',\r\n fs: 6,\r\n mb: 1,\r\n});\r\n","import KexIconLoader from 'Kex/KexIconLoader';\r\nimport { styled } from 'stitches.config';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\n\r\ntype PropTypes = {\r\n code: string;\r\n maxQuantity: number;\r\n minQuantity: number;\r\n currentQuantity: number;\r\n handleIncrement: (code: string) => void;\r\n handleDecrement: (code: string) => void;\r\n size?: 'xs' | 's' | 'l';\r\n disabled?: boolean;\r\n disabledMin?: boolean;\r\n};\r\n\r\nfunction QuantitySelector({\r\n code,\r\n maxQuantity,\r\n minQuantity,\r\n currentQuantity,\r\n size,\r\n disabled,\r\n disabledMin,\r\n handleIncrement,\r\n handleDecrement,\r\n}: PropTypes) {\r\n const hasReachedMaxQuantity = currentQuantity === maxQuantity;\r\n const hasReachedMinQuantity = currentQuantity === minQuantity;\r\n\r\n const SubtractIcon = KexIconLoader('Subtract');\r\n const AddIcon = KexIconLoader('Add');\r\n\r\n return (\r\n \r\n handleDecrement(code)}\r\n disabled={hasReachedMinQuantity || disabled || disabledMin}\r\n size={size}\r\n >\r\n \r\n \r\n \r\n {currentQuantity}\r\n \r\n handleIncrement(code)}\r\n disabled={hasReachedMaxQuantity || disabled}\r\n size={size}\r\n >\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BaseQuantityStyle = {\r\n backgroundColor: 'rgba(255,255,255, 0.0263)',\r\n color: '$secondary2',\r\n lineHeight: '$lh125',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n border: '1px solid transparent',\r\n variants: {\r\n disabled: {\r\n true: {\r\n pointerEvents: 'none',\r\n },\r\n },\r\n size: {\r\n xs: {\r\n minW: 8,\r\n h: 8,\r\n },\r\n s: {\r\n minW: 8,\r\n h: 10,\r\n },\r\n l: {\r\n minW: 12,\r\n h: 12,\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'xs',\r\n },\r\n};\r\n\r\nconst QuantityWrapper = styled('div', {\r\n display: 'flex',\r\n});\r\n\r\nconst CurrentQuantityWrapper = styled('div', {\r\n ...BaseQuantityStyle,\r\n cursor: 'default',\r\n mx: 0.5,\r\n});\r\n\r\nconst IconWrapper = styled('button', {\r\n ...BaseQuantityStyle,\r\n transition: `all ${timings.oneFifth} ${animation.timingFn}`,\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: 'rgba(255,255,255, 0.075)',\r\n },\r\n});\r\n\r\nexport default QuantitySelector;\r\n","import { styled } from 'stitches.config';\r\nimport { InfoIcon } from 'Atoms/Icons';\r\n\r\ntype DeliveryStatusType = {\r\n label: string;\r\n color?: 'secondary' | 'transparent';\r\n};\r\n\r\nfunction DeliveryStatus({ label, color = 'secondary' }: DeliveryStatusType) {\r\n const iconColor = color === 'secondary' ? 'secondaryDark' : 'secondary';\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst DeliveryStatusContainer = styled('div', {\r\n py: 2,\r\n px: 4,\r\n display: 'flex',\r\n alignItems: 'center',\r\n textAlign: 'left',\r\n variants: {\r\n color: {\r\n transparent: {\r\n backgroundColor: 'transparent',\r\n border: '1px solid $primary2',\r\n },\r\n secondary: {\r\n backgroundColor: '$secondary4',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n color: 'secondary',\r\n },\r\n});\r\n\r\nconst Label = styled('span', {\r\n fs: 6,\r\n fontFamily: '$fontSecondary500',\r\n variants: {\r\n color: {\r\n transparent: {\r\n color: '$textPrimary',\r\n },\r\n secondary: {\r\n color: '$textSecondary',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n color: 'secondary',\r\n },\r\n});\r\n\r\nexport default DeliveryStatus;\r\n","import { styled } from 'stitches.config';\r\nimport DeliveryStatus from 'Atoms/DeliveryStatus/DeliveryStatus';\r\nimport Paragraph from 'Atoms/Typography/Paragraph/Paragraph';\r\nimport { useVariantData } from 'Shared/Providers/VariantProvider';\r\nimport ProductTranslations from '../../Models/Translations/ProductTranslations.interface';\r\n\r\ntype StockViewerType = {\r\n productLabels: ProductTranslations;\r\n isUsed: boolean;\r\n};\r\n\r\nfunction StockViewer({ productLabels, isUsed }: StockViewerType) {\r\n const { inStock, notInStock, salesStart, extendedDeliveryTime } =\r\n productLabels;\r\n\r\n const { state } = useVariantData();\r\n\r\n const isHideStock = (!state.hasSelectedSize && state.hasSizes) || isUsed;\r\n\r\n if (!state.selectedVariant || isHideStock) {\r\n return ;\r\n }\r\n\r\n const { stock } = state.selectedVariant;\r\n\r\n const salesStartString = salesStart?.replace(\r\n '{0}',\r\n stock?.salesStartFormatted\r\n );\r\n\r\n return (\r\n \r\n {stock?.stockAvailableAtVendor ? (\r\n \r\n ) : stock?.salesStartFormatted ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n {stock?.inStock ? (\r\n <>\r\n {stock?.stockQuantity} {inStock}\r\n \r\n ) : (\r\n notInStock\r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nconst StockContainer = styled('div', {\r\n mb: '28px',\r\n '@mediaMinLarge': {\r\n mb: '32px',\r\n },\r\n});\r\n\r\nexport const Stock = styled('div', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'end',\r\n color: '$textPrimary',\r\n});\r\n\r\nexport const Indicator = styled('span', {\r\n display: 'inline-block',\r\n borderRadius: '50%',\r\n background: '$JE68GreenPrimary',\r\n w: 2,\r\n h: 2,\r\n mr: 2,\r\n variants: {\r\n inStock: {\r\n true: {\r\n backgroundColor: '$JE68GreenPrimary',\r\n },\r\n false: {\r\n backgroundColor: 'red',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default StockViewer;\r\n","import React from 'react';\r\nimport { styled } from 'stitches.config';\r\n\r\ntype SmallLabelProps = {\r\n children: React.ReactNode;\r\n marginBottom?: number;\r\n};\r\n\r\nconst SmallLabel = ({ children, marginBottom = 2 }: SmallLabelProps) => (\r\n {children}\r\n);\r\n\r\nconst SmallLabelWrapper = styled('span', {\r\n color: '$secondary2',\r\n textTransform: 'uppercase',\r\n fs: 6,\r\n lineHeight: 'lh133',\r\n ls: '$ls1',\r\n fontFamily: '$fontPrimary400',\r\n wordSpacing: '$wordSpacings$fontPrimary',\r\n display: 'block',\r\n});\r\n\r\nexport default SmallLabel;\r\n","export enum ProductType {\r\n MOTORCYCLES = 'motorcycles',\r\n ACCESSORIES = 'accessories',\r\n CLOTHING = 'clothing',\r\n SPAREPARTS = 'spareparts',\r\n VENDORSPAREPARTS = 'vendorspareparts',\r\n}\r\n","export enum Variant {\r\n SET_INITIAL = 'setInitial',\r\n SET_VARIANT = 'setVariant',\r\n SET_ADD_CART_ERROR = 'setCartError',\r\n}\r\n","import { styled } from 'stitches.config';\r\nimport SmallLabel from 'Atoms/Typography/SmallLabel/SmallLabel';\r\nimport { CSS } from '@stitches/react';\r\nimport { useMemo } from 'react';\r\n\r\ntype AttributeListType = {\r\n value: string | boolean | undefined;\r\n};\r\n\r\ntype PropTypes = {\r\n attributeList: AttributeListType[];\r\n marginBottom?: number;\r\n css?: CSS;\r\n};\r\n\r\nfunction Attributes({ attributeList, marginBottom = 2, css }: PropTypes) {\r\n const filteredList = useMemo(() => {\r\n return attributeList.filter((attribute) => attribute.value);\r\n }, [attributeList]);\r\n\r\n return (\r\n \r\n {filteredList.map((attribute, index) => {\r\n return (\r\n \r\n \r\n {attribute.value}\r\n \r\n {filteredList.length !== index + 1 && (\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n}\r\n\r\nconst ProductAttributeList = styled('ul', {\r\n listStyle: 'initial',\r\n color: '$textPrimary',\r\n display: 'flex',\r\n listStyleType: 'none',\r\n gap: '8px',\r\n});\r\n\r\nconst AttributeItem = styled('div', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n});\r\n\r\nconst Dot = styled('span', {\r\n position: 'relative',\r\n '@mediaMinLarge': {\r\n top: '-1.5px',\r\n },\r\n});\r\n\r\nexport default Attributes;\r\n","import { styled } from 'stitches.config';\r\nimport { ChevronIcon } from 'Atoms/Icons';\r\n\r\ntype CarouselChevronType = {\r\n onclick: () => void;\r\n imagesLength?: number;\r\n currentImage: number;\r\n hasThumbnail: boolean;\r\n};\r\n\r\nexport const CarouselChevronNext = ({\r\n onclick,\r\n imagesLength,\r\n currentImage,\r\n hasThumbnail,\r\n}: CarouselChevronType) => {\r\n const hasNextSlide = imagesLength && currentImage < imagesLength - 1;\r\n\r\n if (!hasNextSlide) return <>;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const CarouselChevronPrevious = ({\r\n onclick,\r\n currentImage,\r\n hasThumbnail,\r\n}: CarouselChevronType) => {\r\n const hasPreviousSlide = currentImage !== 0;\r\n\r\n if (!hasPreviousSlide) return <>;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst CircleBaseStyle = {\r\n backgroundColor: '$pureWhite',\r\n borderRadius: '50%',\r\n position: 'relative',\r\n height: '32px',\r\n width: '32px',\r\n margin: 'auto',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n variants: {\r\n hasThumbnail: {\r\n true: { position: 'absolute', bottom: 24 },\r\n },\r\n },\r\n};\r\n\r\nconst PreviousCircle = styled('button', {\r\n ...CircleBaseStyle,\r\n left: 16,\r\n});\r\n\r\nconst NextCircle = styled('button', {\r\n ...CircleBaseStyle,\r\n right: 16,\r\n});\r\n","import { styled } from 'stitches.config';\r\n\r\nimport ScrollContainer from 'react-indiana-drag-scroll';\r\n\r\nimport ImageModel from 'Models/Assets/ImageModel.interface';\r\nimport ProductImage from 'Atoms/Image/ProductImage';\r\n\r\ntype CarouselChevronType = {\r\n goToSlide: (index: number) => void;\r\n images: ImageModel[];\r\n currentImage: number;\r\n isUsed: boolean;\r\n};\r\n\r\nexport const CarouselThumbnails = ({\r\n images,\r\n currentImage,\r\n goToSlide,\r\n isUsed,\r\n}: CarouselChevronType) => {\r\n return (\r\n \r\n {images?.map((image, index) => (\r\n goToSlide(index)}\r\n active={currentImage === index}\r\n >\r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nconst ThumbnailContainer = styled(ScrollContainer, {\r\n display: 'flex',\r\n justifyContent: 'start',\r\n mt: 2,\r\n mx: 4,\r\n pb: 4,\r\n});\r\n\r\nconst Thumbnail = styled('button', {\r\n position: 'relative',\r\n h: '$thumbnailImageHeight',\r\n width: 58,\r\n backgroundColor: 'transparent',\r\n ml: 2,\r\n flexShrink: 0,\r\n '&:first-of-type': {\r\n ml: 0,\r\n },\r\n variants: {\r\n active: {\r\n true: {\r\n '&:after': {\r\n content: '',\r\n width: 'inherit',\r\n border: '2px solid $colors$JE68GreenPrimary',\r\n display: 'block',\r\n position: 'absolute',\r\n left: 0,\r\n mt: 2,\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import ImageModel from 'Models/Assets/ImageModel.interface';\r\nimport { useEffect, useRef } from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport {\r\n CarouselChevronPrevious,\r\n CarouselChevronNext,\r\n} from './CarouselChevrons';\r\nimport NukaCarousel from 'nuka-carousel';\r\nimport { CarouselThumbnails } from './CarouselThumbnails';\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\nimport useMedia from 'Shared/Hooks/useMedia';\r\n\r\ntype ProductImages = {\r\n images: ImageModel[];\r\n handleFullScreen: (index: number) => void;\r\n isFullScreen?: boolean;\r\n hasCounter?: boolean;\r\n hasThumbnail?: boolean;\r\n currentImage: number;\r\n handleCurrentImage: (current: number) => void;\r\n isUsed: boolean;\r\n isMCC?: boolean;\r\n};\r\n\r\nfunction Carousel({\r\n images,\r\n handleFullScreen,\r\n isFullScreen,\r\n hasThumbnail,\r\n currentImage,\r\n handleCurrentImage,\r\n isUsed,\r\n hasCounter,\r\n isMCC = false,\r\n}: ProductImages) {\r\n const carouselRef = useRef(null);\r\n const isTablet = useMedia(mediaQueryTypes.mediaMinSmall);\r\n const isDesktop = useMedia(mediaQueryTypes.mediaMinLarge);\r\n\r\n useEffect(() => {\r\n carouselRef?.current?.focus();\r\n }, []);\r\n\r\n const getImagePresets = (image: ImageModel) => {\r\n const fullScreenImage = isFullScreen\r\n ? `${image.src}?preset=product-page-full-screen`\r\n : '';\r\n\r\n const mobileImage = isMCC\r\n ? `${image.src}?preset=configuration-page-mobile-main`\r\n : isUsed\r\n ? `${image.src}?preset=product-page-mobile-main-used`\r\n : `${image.src}?preset=product-page-mobile-main`;\r\n\r\n const tabletImage = isMCC\r\n ? `${image.src}?preset=configuration-page-tablet-main`\r\n : isUsed\r\n ? `${image.src}?preset=product-page-tablet-main-used`\r\n : `${image.src}?preset=product-page-tablet-main`;\r\n\r\n const desktopImage = isMCC\r\n ? `${image.src}?preset=configuration-page-desktop-main`\r\n : isUsed\r\n ? `${image.src}?preset=product-page-desktop-main-used`\r\n : `${image.src}?preset=product-page-desktop-main`;\r\n\r\n const nonFullScreenImage = isTablet\r\n ? isDesktop\r\n ? desktopImage\r\n : tabletImage\r\n : mobileImage;\r\n\r\n return isFullScreen ? fullScreenImage : nonFullScreenImage;\r\n };\r\n\r\n return (\r\n \r\n handleCurrentImage(slideIndex)}\r\n renderBottomCenterControls={({ currentSlide, goToSlide }) => {\r\n if (hasThumbnail) {\r\n return (\r\n \r\n );\r\n }\r\n if (hasCounter) {\r\n return (\r\n \r\n {currentSlide + 1} / {images.length}\r\n \r\n );\r\n }\r\n }}\r\n renderCenterLeftControls={({ previousSlide }) => (\r\n \r\n )}\r\n renderCenterRightControls={({ nextSlide }) => (\r\n \r\n )}\r\n >\r\n {images.map((image, index) => {\r\n return (\r\n {\r\n const isNotInFullScreen = !isFullScreen;\r\n\r\n isNotInFullScreen && handleFullScreen(index);\r\n }}\r\n isFullScreen={isFullScreen}\r\n isUsed={isUsed}\r\n />\r\n );\r\n })}\r\n \r\n \r\n );\r\n}\r\n\r\nconst CarouselImage = styled('img', {\r\n backgroundColor: '$carouselImageBackground',\r\n width: '100%',\r\n objectFit: 'contain',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n\r\n variants: {\r\n isFullScreen: {\r\n true: {\r\n h: '100vh',\r\n objectFit: 'contain',\r\n },\r\n },\r\n isUsed: {\r\n false: {\r\n filter: '$colors$imageFilter',\r\n },\r\n true: {\r\n backgroundColor: 'unset',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst CarouselWrapper = styled('div', {\r\n position: 'relative',\r\n '@mediaMinLarge': {\r\n mx: 0,\r\n },\r\n // override default nuka carousel css - to position our thumbnail\r\n '.slider-control-bottomcenter': {\r\n bottom: 'unset !important',\r\n position: 'relative !important',\r\n width: '100vw',\r\n },\r\n '& section': {\r\n outline: 'transparent',\r\n },\r\n});\r\n\r\nconst CarouselStepsCount = styled('span', {\r\n position: 'absolute',\r\n bottom: 48,\r\n color: '$textSecondary',\r\n fontFamily: '$fontPrimary400',\r\n wordSpacing: '$wordSpacings$fontPrimary',\r\n ls: 'ls1',\r\n lineHeight: 'lh16',\r\n fs: 12,\r\n margin: '0 auto',\r\n left: 0,\r\n right: 0,\r\n width: 'fit-content',\r\n whiteSpace: 'nowrap',\r\n});\r\n\r\nexport default Carousel;\r\n","import Label from 'Atoms/Label/Label';\r\nimport React, {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\n\r\nimport { useInputValidation, ValidationParams } from './InputValidation';\r\nimport { doValidation } from './ValidationHelper';\r\n\r\ntype InputValidationType =\r\n | {\r\n validation?: ValidationParams;\r\n name: string;\r\n }\r\n | { validation?: undefined; name?: string };\r\n\r\ntype InputType = InputValidationType & {\r\n onChange?: (value: string) => void;\r\n onBlur?: (value: string) => void;\r\n onKeyDown?: (event: React.KeyboardEvent) => void;\r\n title: string;\r\n type?: string;\r\n name?: string;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n newPassword?: boolean;\r\n autoComplete?: string;\r\n defaultValue?: string;\r\n inputBackground?: 'primary6' | 'primary4';\r\n};\r\n\r\nconst TextArea = ({\r\n title,\r\n onChange,\r\n onBlur,\r\n onKeyDown,\r\n name,\r\n validation,\r\n disabled,\r\n placeholder,\r\n defaultValue,\r\n inputBackground = 'primary6',\r\n}: InputType) => {\r\n const validationDispatch = useInputValidation();\r\n const [hasTouched, setHasTouched] = useState(false);\r\n const [hasValue, setHasValue] = useState(!!defaultValue);\r\n const [focus, setFocus] = useState(false);\r\n const inputRef = useRef(null);\r\n const [errorMessage, setErrorMessage] = useState(\r\n doValidation(defaultValue || '', validation)\r\n );\r\n\r\n const showError = useMemo(\r\n () => hasTouched && !focus && !!errorMessage,\r\n [errorMessage, focus, hasTouched]\r\n );\r\n\r\n useEffect(() => {\r\n if (validation?.backendValidation?.message) {\r\n setHasTouched(true);\r\n setErrorMessage(validation.backendValidation.message);\r\n }\r\n }, [validation?.backendValidation]);\r\n\r\n const handleChange = useCallback(\r\n (value: string) => {\r\n if (value) {\r\n setHasTouched(true);\r\n }\r\n setErrorMessage(doValidation(value, validation));\r\n\r\n setHasValue(!!value);\r\n onChange && onChange(value);\r\n },\r\n [onChange, validation]\r\n );\r\n\r\n const onInputBlur = (e: React.FocusEvent) => {\r\n setFocus(false);\r\n handleChange(e.currentTarget.value);\r\n onBlur && onBlur(e.currentTarget.value);\r\n };\r\n\r\n const onInputFocus = (e: React.FocusEvent) => {\r\n setFocus(true);\r\n setHasTouched(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (!validation) return;\r\n\r\n validationDispatch({\r\n type: 'register',\r\n name: name || '',\r\n payload: {\r\n hasError: !!errorMessage,\r\n hasValue: hasValue,\r\n isRequired: !!validation.required,\r\n },\r\n });\r\n\r\n return () =>\r\n validationDispatch({ type: 'unregister', name: name || '', payload: {} });\r\n }, [\r\n validationDispatch,\r\n name,\r\n hasTouched,\r\n errorMessage,\r\n hasValue,\r\n validation,\r\n ]);\r\n\r\n const formInputStyle = {\r\n borderColor: showError ? '$errorColor' : '$secondary4',\r\n color: showError ? '$errorColor' : '$secondary4',\r\n };\r\n\r\n //to make validation work on autofill\r\n useEffect(() => {\r\n let interval = setInterval(() => {\r\n if (\r\n inputRef.current &&\r\n inputRef.current.value !== '' &&\r\n document.activeElement !== inputRef.current\r\n ) {\r\n doValidation(inputRef.current.value, validation);\r\n //do the same for all autofilled fields\r\n clearInterval(interval);\r\n } else {\r\n clearInterval(interval);\r\n }\r\n }, 300);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [inputRef.current?.value]);\r\n\r\n const getLabelStyle = () => {\r\n let cssStyle = {};\r\n if (focus) {\r\n cssStyle = labelCss;\r\n } else {\r\n cssStyle = { ...labelCss, color: '$secondary4' };\r\n }\r\n\r\n if (showError) {\r\n cssStyle = {\r\n ...labelCss,\r\n borderColor: '$errorColor',\r\n color: '$errorColor',\r\n };\r\n }\r\n\r\n return { ...cssStyle, backgroundColor: `$${inputBackground}` };\r\n };\r\n\r\n return (\r\n \r\n {(focus || hasValue || showError) && (\r\n \r\n )}\r\n\r\n handleChange(e.currentTarget.value)}\r\n {...(onKeyDown && { onKeyDown })}\r\n onBlur={onInputBlur}\r\n onFocus={onInputFocus}\r\n name={name}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n style={formInputStyle}\r\n id={name}\r\n defaultValue={defaultValue}\r\n inputBackground={inputBackground}\r\n maxLength={4000}\r\n />\r\n\r\n {showError && {errorMessage}}\r\n \r\n );\r\n};\r\n\r\nconst InputGroup = styled('div', {\r\n position: 'relative',\r\n mb: 2,\r\n});\r\n\r\nconst fontStyleCss = {\r\n fontFamily: '$fontSecondary400',\r\n letterSpacing: '$ls0',\r\n};\r\n\r\nconst ErrorText = styled('div', {\r\n ...fontStyleCss,\r\n fs: 6,\r\n lineHeight: '$lh133',\r\n color: '$errorColor',\r\n ml: '15px',\r\n});\r\n\r\nconst labelCss = {\r\n ...fontStyleCss,\r\n color: '$JE68GreenPrimary',\r\n top: 2,\r\n px: 1,\r\n fs: 5,\r\n lineHeight: '$lh12',\r\n};\r\n\r\nconst FormTextArea = styled('textarea', {\r\n ...fontStyleCss,\r\n minHeight: 152,\r\n lineHeight: 'lh1125',\r\n fs: 8,\r\n w: '100%',\r\n h: 11,\r\n mt: 2,\r\n mb: 1,\r\n px: 4,\r\n py: 3,\r\n bw: 0.25,\r\n borderStyle: 'solid',\r\n borderColor: '$inputBorderColor',\r\n color: '$inputText',\r\n '&:focus': {\r\n outline: 'none',\r\n borderColor: '$JE68GreenPrimary',\r\n },\r\n '&::placeholder': {\r\n WebkitTextFillColor: '$colors$inputPlaceholderText !important',\r\n opacity: 1,\r\n transition: `opacity, opacity ${timings.threeTenths} ${animation.timingFn}`,\r\n },\r\n '&:-webkit-autofill,': {\r\n WebkitTextFillColor: '$colors$inputText !important',\r\n caretColor: '$colors$inputText',\r\n },\r\n '&:disabled': {\r\n WebkitBoxShadow: `0 0 0 1000px rgba(0, 0, 0, 0) inset !important`,\r\n borderColor: '$inputDisabledBorderColor',\r\n backgroundColor: '$inputDisabledbackground',\r\n color: '$inputDisabledText',\r\n },\r\n '&:focus::placeholder': {\r\n opacity: 0,\r\n transition: `opacity ${timings.threeTenths} ${animation.timingFn}`,\r\n },\r\n '&::-webkit-inner-spin-button': {\r\n WebkitAppearance: 'none',\r\n margin: 0,\r\n },\r\n variants: {\r\n error: {\r\n true: {\r\n color: '$errorColor',\r\n borderColor: '$errorColor',\r\n },\r\n },\r\n inputBackground: {\r\n primary6: {\r\n backgroundColor: '$inputBackground',\r\n '&:-webkit-autofill,': {\r\n WebkitBoxShadow: `0 0 0 1000px $colors$inputBackground inset !important`,\r\n },\r\n },\r\n primary4: {\r\n backgroundColor: '$primary4',\r\n '&:-webkit-autofill,': {\r\n WebkitBoxShadow: `0 0 0 1000px $colors$primary4 inset !important`,\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default TextArea;\r\n","import { styled } from 'stitches.config';\r\nimport { H2, H4 } from 'Atoms/Typography/Headings/Heading';\r\nimport SmallLabel from 'Atoms/Typography/SmallLabel/SmallLabel';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport Input from 'Atoms/Input/Input';\r\nimport TextArea from 'Atoms/Input/TextArea';\r\nimport { InputValidation } from 'Atoms/Input/InputValidation';\r\nimport { accountFormValidation } from 'Shared/Common/AccountFormValidation';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport BulletPoint from 'Atoms/BulletPoint/BulletPoint';\r\nimport ContactUsModel from 'Models/Email/ContactUsModel.interface';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport { useUserStateData } from 'Shared/Providers/UserContextProvider';\r\nimport ProductPageModel from 'Models/Pages/ProductPage/ProductPageModel.interface';\r\n\r\nexport type PropType = {\r\n showModal: boolean;\r\n setShowModal: (arg: boolean) => void;\r\n};\r\n\r\nconst API_URL = '/Email/Contactus';\r\n\r\nfunction ContactModal({ showModal, setShowModal }: PropType) {\r\n const timerRef = useRef();\r\n\r\n const {\r\n productLabels: { contactUs },\r\n checkoutLabels: { phoneNumber: phoneNumberLabel },\r\n accountLabels: { email },\r\n validationLabels: { invalidEmail, invalidPhoneNumber },\r\n commonLabels: {\r\n phoneOpen: phoneOpenLabel,\r\n phoneOpenHours,\r\n phoneNumber,\r\n fullName,\r\n message,\r\n thanksForYourMessage,\r\n sendMessage,\r\n messageSent,\r\n writeToUs,\r\n somethingWentWrong,\r\n },\r\n } = useTranslationData();\r\n const { languageRoute } = useAppSettingsData();\r\n const {\r\n user: {\r\n email: savedEmail,\r\n fullName: savedFullName,\r\n phoneNumber: savedPhoneNumber,\r\n },\r\n } = useUserStateData();\r\n const { brand, displayName } = useCurrentPage();\r\n\r\n const [formName, setName] = useState(savedFullName ?? '');\r\n const [formPhoneNumber, setPhoneNumber] = useState(\r\n savedPhoneNumber ?? ''\r\n );\r\n const [formEmail, setEmail] = useState(savedEmail ?? '');\r\n const [formMessage, setMessage] = useState('');\r\n const [validFormData, setValidFormData] = useState(false);\r\n\r\n const [status, setStatus] = useState<\r\n 'init' | 'loading' | 'error' | 'success'\r\n >('init');\r\n\r\n useEffect(() => {\r\n if (showModal) setStatus((s) => (s === 'success' ? 'init' : s));\r\n }, [showModal]);\r\n\r\n const body: ContactUsModel = {\r\n brand: brand,\r\n model: displayName,\r\n fullName: formName,\r\n phoneNumber: formPhoneNumber,\r\n email: formEmail,\r\n text: formMessage,\r\n language: languageRoute,\r\n };\r\n\r\n async function submitForm(e?: {\r\n preventDefault?: () => void;\r\n }): Promise {\r\n if (e?.preventDefault) e?.preventDefault();\r\n\r\n if (!validFormData) return;\r\n\r\n try {\r\n setStatus('loading');\r\n const obj = await fetch(API_URL, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n }).then((res) => res.json());\r\n\r\n setStatus(obj?.success ? 'success' : 'error');\r\n } catch (error) {\r\n console.error(error);\r\n setStatus('error');\r\n }\r\n }\r\n\r\n const onInputsValid = () => {\r\n setValidFormData(true);\r\n };\r\n\r\n const onInputsInvalid = () => {\r\n setValidFormData(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (status !== 'success') return;\r\n\r\n timerRef.current = setTimeout(() => {\r\n setName(savedFullName ?? '');\r\n setPhoneNumber(savedPhoneNumber ?? '');\r\n setEmail(savedEmail ?? '');\r\n setMessage('');\r\n setValidFormData(false);\r\n setShowModal(false);\r\n }, 3000);\r\n\r\n return () => {\r\n if (timerRef.current) clearTimeout(timerRef.current);\r\n };\r\n }, [\r\n status,\r\n setName,\r\n setPhoneNumber,\r\n setEmail,\r\n setMessage,\r\n setValidFormData,\r\n setShowModal,\r\n savedFullName,\r\n savedPhoneNumber,\r\n savedEmail,\r\n ]);\r\n\r\n if (status === 'success') {\r\n return (\r\n setShowModal(false)}>\r\n

{messageSent}

\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n setShowModal(!showModal)}>\r\n

{contactUs}

\r\n \r\n \r\n {phoneNumberLabel}\r\n {phoneNumber}\r\n \r\n \r\n {phoneOpenLabel}\r\n {phoneOpenHours}\r\n \r\n \r\n \r\n

{writeToUs}

\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {sendMessage}\r\n \r\n
\r\n\r\n {status === 'error' && somethingWentWrong}\r\n
\r\n );\r\n}\r\n\r\nconst ContactInfo = styled('div', {\r\n display: 'flex',\r\n gap: 96,\r\n mb: 16,\r\n});\r\n\r\nconst ContactInfoColumn = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\n\r\nconst ContactForm = styled('form', { mb: 7 });\r\n\r\nexport default ContactModal;\r\n","import CloseButton from 'Atoms/Buttons/CloseButton';\r\nimport Overlay from 'Atoms/Overlay/Overlay';\r\nimport React, { useRef, useEffect } from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n showModal: boolean;\r\n close: () => void;\r\n};\r\n\r\nfunction FullScreenModal({ showModal, children, close }: PropType) {\r\n const modalRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n close();\r\n }\r\n };\r\n window.addEventListener('keydown', onKeyDown);\r\n return () => window.removeEventListener('keydown', onKeyDown);\r\n }, [close]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst CloseWrapper = styled('div', {\r\n display: 'flex',\r\n position: 'absolute',\r\n top: 16,\r\n right: 16,\r\n zIndex: 9,\r\n});\r\n\r\nconst ModalContainer = styled('div', {\r\n position: 'fixed',\r\n zIndex: -1,\r\n visibility: 'hidden',\r\n top: 0,\r\n right: 0,\r\n h: '100%',\r\n w: '100%',\r\n opacity: 0,\r\n transition: `all ${timings.oneHalf} ${animation.timingFn}`,\r\n variants: {\r\n isVisible: {\r\n true: {\r\n opacity: 1,\r\n visibility: 'initial',\r\n zIndex: '$zIndices$Modal',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst ModalContent = styled('div', {\r\n width: '100%',\r\n height: '100vh',\r\n opacity: 1,\r\n margin: '0 auto',\r\n backgroundColor: '$modalContentBackground',\r\n zIndex: '$zIndices$Modal',\r\n position: 'relative',\r\n});\r\n\r\nexport default FullScreenModal;\r\n","import usePreventBackgroundScroll from 'Shared/Hooks/usePreventBackgroundScroll';\r\nimport { styled } from 'stitches.config';\r\n\r\ntype PropTypes = {\r\n clickEvent?: () => void;\r\n isVisible: boolean;\r\n overlayColor?: 'primary' | 'secondary';\r\n};\r\n\r\nfunction ModalOverlay({\r\n clickEvent,\r\n isVisible,\r\n overlayColor = 'primary',\r\n}: PropTypes) {\r\n usePreventBackgroundScroll();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ModalOverlay;\r\n\r\nconst ModalOverlayLeftPane = styled('div', {\r\n zIndex: '$Modal',\r\n transition: 'all 0.25s ease-in-out',\r\n visibility: 'hidden',\r\n position: 'fixed',\r\n height: '3vh',\r\n width: '120vw',\r\n t: 0,\r\n l: -15,\r\n '@mediaMinLarge': {\r\n h: '100vh',\r\n width: 'calc(100% - 496px)',\r\n t: 0,\r\n l: 0,\r\n },\r\n variants: {\r\n isVisible: {\r\n true: {\r\n visibility: 'initial',\r\n },\r\n },\r\n overlayColor: {\r\n primary: {\r\n backgroundColor: '$modalOverlayPrimary',\r\n },\r\n secondary: {\r\n backgroundColor: '$modalOverlaySecondary',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst ModalOverlayRightPane = styled('div', {\r\n transition: 'all 0.25s ease-in-out',\r\n visibility: 'hidden',\r\n zIndex: '$ModalOverlay',\r\n position: 'fixed',\r\n height: '97vh',\r\n width: '120vw',\r\n right: 'unset',\r\n top: 'unset',\r\n left: 0,\r\n bottom: 0,\r\n '@mediaMinLarge': {\r\n h: '100vh',\r\n width: '496px',\r\n r: 0,\r\n t: 0,\r\n b: 'unset',\r\n l: 'unset',\r\n },\r\n variants: {\r\n isVisible: {\r\n true: {\r\n visibility: 'initial',\r\n },\r\n },\r\n overlayColor: {\r\n primary: {\r\n backgroundColor: '$modalOverlayPrimary',\r\n },\r\n secondary: {\r\n backgroundColor: '$modalOverlaySecondary',\r\n },\r\n },\r\n },\r\n});\r\n","import CloseButton from 'Atoms/Buttons/CloseButton';\r\nimport React, { useRef } from 'react';\r\nimport useMountTransition from 'Shared/Hooks/useMountTransition';\r\nimport { styled } from 'stitches.config';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\nimport ReactDOM from 'react-dom';\r\nimport ModalOverlay from 'Atoms/Overlay/ModalOverlay';\r\nimport { canUseDOM } from 'Shared/Common/Helpers';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n showModal: boolean;\r\n toggle?: () => void;\r\n hideCloseButton?: boolean;\r\n overlay?: boolean;\r\n noPadding?: boolean;\r\n showScrollbar?: boolean;\r\n};\r\n\r\nfunction Modal({\r\n showModal,\r\n children,\r\n toggle,\r\n noPadding = false,\r\n hideCloseButton,\r\n showScrollbar = true,\r\n}: PropType) {\r\n const modalRef = useRef(null);\r\n const hasTransitionedIn = useMountTransition(showModal, 250);\r\n\r\n if (canUseDOM()) {\r\n const portalElement = document.querySelector('#root-content');\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n \r\n \r\n {toggle && !hideCloseButton && (\r\n \r\n \r\n \r\n )}\r\n {children}\r\n \r\n \r\n {(hasTransitionedIn || showModal) && (\r\n \r\n )}\r\n ,\r\n portalElement as Element\r\n );\r\n } else {\r\n return <>;\r\n }\r\n}\r\n\r\nconst CloseWrapper = styled('div', {\r\n display: 'flex',\r\n position: 'absolute',\r\n zIndex: 9,\r\n top: 16,\r\n right: 16,\r\n '@mediaMinLarge': {\r\n top: 24,\r\n right: 24,\r\n },\r\n});\r\n\r\nconst ModalContainer = styled('div', {\r\n position: 'fixed',\r\n visibility: 'hidden',\r\n overflowY: 'scroll',\r\n scrollbarWidth: 'none',\r\n top: 0,\r\n right: 0,\r\n h: '100%',\r\n w: '100%',\r\n opacity: 1,\r\n zIndex: '$zIndices$Modal',\r\n transition: `all ${timings.oneHalf} ${animation.timingFn}`,\r\n variants: {\r\n isVisible: {\r\n true: {\r\n visibility: 'initial',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst ModalContent = styled('div', {\r\n overflow: 'auto',\r\n position: 'absolute',\r\n bottom: 0,\r\n width: '100%',\r\n height: 0,\r\n p: 4,\r\n opacity: 1,\r\n marginLeft: 'auto',\r\n backgroundColor: '$modalContentBackground',\r\n borderLeft: '1px solid $modalContentBorder',\r\n transition: `height ${timings.oneHalf} ${animation.timingFn}`,\r\n '@mediaMinLarge': {\r\n position: 'relative',\r\n transition: `all ${timings.oneHalf} ${animation.timingFn}`,\r\n height: '100%',\r\n width: 0,\r\n p: 6,\r\n transform: 'translateX(300%)',\r\n },\r\n variants: {\r\n isVisible: {\r\n true: {\r\n height: '97%',\r\n '@mediaMinLarge': {\r\n width: '480px',\r\n height: '100%',\r\n transform: 'translateX(0)',\r\n },\r\n },\r\n },\r\n noPadding: {\r\n true: {\r\n p: 0,\r\n },\r\n },\r\n showScrollbar: {\r\n false: {\r\n '&::-webkit-scrollbar': {\r\n display: 'none',\r\n },\r\n scrollbarWidth: 'none',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default Modal;\r\n","import { styled } from 'stitches.config';\r\nimport { H2 } from 'Atoms/Typography/Headings/Heading';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport { useUserStateData } from 'Shared/Providers/UserContextProvider';\r\nimport Input from 'Atoms/Input/Input';\r\nimport { InputValidation } from 'Atoms/Input/InputValidation';\r\nimport { accountFormValidation } from 'Shared/Common/AccountFormValidation';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport BulletPoint from 'Atoms/BulletPoint/BulletPoint';\r\nimport SubmitOfInterestModel from 'Models/Email/TestDriveModel.interface';\r\nimport ProductPageModel from 'Models/Pages/ProductPage/ProductPageModel.interface';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport Attributes from 'Molecules/Attributes/Attributes';\r\nimport Paragraph from 'Atoms/Typography/Paragraph/Paragraph';\r\n\r\nexport type PropType = {\r\n showModal: boolean;\r\n setShowModal: (arg: boolean) => void;\r\n};\r\n\r\nconst API_URL = '/Email/RegistrationOfInterest';\r\n\r\nfunction SubmitInterestModal({ showModal, setShowModal }: PropType) {\r\n const timerRef = useRef();\r\n const { languageRoute } = useAppSettingsData();\r\n const { brand, manufacturerYear, displayName } =\r\n useCurrentPage();\r\n\r\n const [status, setStatus] = useState<\r\n 'init' | 'loading' | 'error' | 'success'\r\n >('init');\r\n\r\n useEffect(() => {\r\n if (showModal) setStatus((s) => (s === 'success' ? 'init' : s));\r\n }, [showModal]);\r\n\r\n const {\r\n user: {\r\n email: savedEmail,\r\n fullName: savedFullName,\r\n phoneNumber: savedPhoneNumber,\r\n },\r\n } = useUserStateData();\r\n\r\n const [formName, setName] = useState(savedFullName ?? '');\r\n const [formPhoneNumber, setPhoneNumber] = useState(\r\n savedPhoneNumber ?? ''\r\n );\r\n const [formEmail, setEmail] = useState(savedEmail ?? '');\r\n const [validFormData, setValidFormData] = useState(false);\r\n\r\n const {\r\n productLabels: {\r\n submitOfInterest,\r\n submitOfInterestDescription,\r\n sendSubmitOfInterest,\r\n },\r\n checkoutLabels: { phoneNumber: phoneNumberLabel },\r\n accountLabels: { email },\r\n validationLabels: { invalidEmail, invalidPhoneNumber, isRequired },\r\n commonLabels: {\r\n fullName,\r\n thanksForYourMessage,\r\n contactDetails,\r\n somethingWentWrong,\r\n messageSent,\r\n },\r\n } = useTranslationData();\r\n\r\n const body: SubmitOfInterestModel = {\r\n fullName: formName,\r\n phone: formPhoneNumber,\r\n email: formEmail,\r\n language: languageRoute,\r\n brand: brand,\r\n model: displayName,\r\n };\r\n\r\n const onInputsValid = () => {\r\n setValidFormData(true);\r\n };\r\n\r\n const onInputsInvalid = () => {\r\n setValidFormData(false);\r\n };\r\n\r\n const onSubmit = async (e?: { preventDefault?: () => void }) => {\r\n if (e?.preventDefault) e.preventDefault();\r\n\r\n if (!validFormData) return;\r\n\r\n try {\r\n setStatus('loading');\r\n const obj = await fetch(API_URL, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n }).then((res) => res.json());\r\n\r\n setStatus(obj?.success ? 'success' : 'error');\r\n } catch (error) {\r\n console.error(error);\r\n setStatus('error');\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (status !== 'success') return;\r\n\r\n timerRef.current = setTimeout(() => {\r\n setName(savedFullName ?? '');\r\n setPhoneNumber(savedPhoneNumber ?? '');\r\n setEmail(savedEmail ?? '');\r\n setValidFormData(false);\r\n setShowModal(false);\r\n }, 3000);\r\n\r\n return () => {\r\n if (timerRef.current) clearTimeout(timerRef.current);\r\n };\r\n }, [\r\n status,\r\n setName,\r\n setPhoneNumber,\r\n setEmail,\r\n setValidFormData,\r\n setShowModal,\r\n savedFullName,\r\n savedPhoneNumber,\r\n savedEmail,\r\n ]);\r\n\r\n if (status === 'success') {\r\n return (\r\n setShowModal(false)}>\r\n

{messageSent}

\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n setShowModal(!showModal)}>\r\n

{submitOfInterest}

\r\n \r\n {displayName}\r\n \r\n {submitOfInterestDescription}\r\n \r\n\r\n \r\n {contactDetails}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {status === 'error' && somethingWentWrong}\r\n
\r\n );\r\n}\r\n\r\nconst ProductDisplayName = styled('h1', {\r\n fs: 10,\r\n lineHeight: '$lh12',\r\n fontFamily: '$fontSecondary600',\r\n mb: 6,\r\n mt: 0,\r\n textTransform: 'uppercase',\r\n color: '$textPrimary',\r\n});\r\n\r\nconst SubmitInterestDescription = {\r\n mb: 12,\r\n};\r\n\r\nconst ContactForm = styled('form', { mb: 7 });\r\n\r\nconst FormTitle = styled('span', {\r\n fs: 9,\r\n fontFamily: '$fontSecondary400',\r\n lineHeight: '$lh155',\r\n mb: 3,\r\n display: 'block',\r\n});\r\n\r\nexport default SubmitInterestModal;\r\n","import { styled } from 'stitches.config';\r\nimport { H2 } from 'Atoms/Typography/Headings/Heading';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport { useUserStateData } from 'Shared/Providers/UserContextProvider';\r\nimport Input from 'Atoms/Input/Input';\r\nimport { InputValidation } from 'Atoms/Input/InputValidation';\r\nimport { accountFormValidation } from 'Shared/Common/AccountFormValidation';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport BulletPoint from 'Atoms/BulletPoint/BulletPoint';\r\nimport TestDriveModel from 'Models/Email/TestDriveModel.interface';\r\nimport ProductPageModel from 'Models/Pages/ProductPage/ProductPageModel.interface';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport Attributes from 'Molecules/Attributes/Attributes';\r\nimport Paragraph from 'Atoms/Typography/Paragraph/Paragraph';\r\n\r\nexport type PropType = {\r\n showModal: boolean;\r\n setShowModal: (arg: boolean) => void;\r\n};\r\n\r\nconst API_URL = '/Email/Testdrive';\r\n\r\nfunction TestDriveModal({ showModal, setShowModal }: PropType) {\r\n const { languageRoute } = useAppSettingsData();\r\n const { brand, manufacturerYear, displayName } =\r\n useCurrentPage();\r\n\r\n const {\r\n user: {\r\n email: savedEmail,\r\n fullName: savedFullName,\r\n phoneNumber: savedPhoneNumber,\r\n },\r\n } = useUserStateData();\r\n\r\n const [formName, setName] = useState(savedFullName ?? '');\r\n const [formPhoneNumber, setPhoneNumber] = useState(\r\n savedPhoneNumber ?? ''\r\n );\r\n const [formEmail] = useState(savedEmail ?? '');\r\n const [validFormData, setValidFormData] = useState(false);\r\n\r\n const {\r\n productLabels: {\r\n bookTestDrive,\r\n sendRequest,\r\n loginBookTestDrive,\r\n howToBookTestDrive,\r\n },\r\n checkoutLabels: { phoneNumber: phoneNumberLabel },\r\n accountLabels: { email, signIn },\r\n validationLabels: { invalidEmail, invalidPhoneNumber, isRequired },\r\n commonLabels: {\r\n fullName,\r\n thanksForYourMessage,\r\n messageSent,\r\n contactDetails,\r\n somethingWentWrong,\r\n },\r\n } = useTranslationData();\r\n\r\n const {\r\n user: { authenticated },\r\n accountDispatch,\r\n } = useUserStateData();\r\n\r\n const body: TestDriveModel = {\r\n fullName: formName,\r\n phone: formPhoneNumber,\r\n email: formEmail,\r\n language: languageRoute,\r\n brand: brand,\r\n model: displayName,\r\n };\r\n\r\n const timerRef = useRef();\r\n\r\n const [status, setStatus] = useState<\r\n 'init' | 'loading' | 'error' | 'success'\r\n >('init');\r\n\r\n useEffect(() => {\r\n if (showModal) setStatus((s) => (s === 'success' ? 'init' : s));\r\n }, [showModal]);\r\n\r\n useEffect(() => {\r\n if (status !== 'success') return;\r\n timerRef.current = setTimeout(() => {\r\n setName(savedFullName ?? '');\r\n setPhoneNumber(savedPhoneNumber ?? '');\r\n setValidFormData(false);\r\n setShowModal(false);\r\n }, 3000);\r\n\r\n return () => {\r\n if (timerRef.current) clearTimeout(timerRef.current);\r\n };\r\n }, [\r\n status,\r\n setName,\r\n setPhoneNumber,\r\n setValidFormData,\r\n setShowModal,\r\n savedFullName,\r\n savedPhoneNumber,\r\n ]);\r\n\r\n async function onSubmit(e?: { preventDefault?: () => void }): Promise {\r\n if (e?.preventDefault) e?.preventDefault();\r\n\r\n if (!validFormData) return;\r\n\r\n try {\r\n setStatus('loading');\r\n const obj = await fetch(API_URL, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n }).then((res) => res.json());\r\n\r\n setStatus(obj?.success ? 'success' : 'error');\r\n } catch (error) {\r\n console.error(error);\r\n setStatus('error');\r\n }\r\n }\r\n\r\n const onInputsValid = () => {\r\n setValidFormData(true);\r\n };\r\n\r\n const onInputsInvalid = () => {\r\n setValidFormData(false);\r\n };\r\n\r\n const onLogin = () => {\r\n setShowModal(false);\r\n accountDispatch({ type: 'toggle' });\r\n };\r\n\r\n if (status === 'success') {\r\n return (\r\n setShowModal(false)}>\r\n

{messageSent}

\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n setShowModal(!showModal)}>\r\n

{bookTestDrive}

\r\n \r\n {displayName}\r\n {howToBookTestDrive}\r\n\r\n {!authenticated && (\r\n \r\n {loginBookTestDrive}\r\n \r\n \r\n )}\r\n\r\n \r\n {contactDetails}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n {status === 'error' && somethingWentWrong}\r\n
\r\n );\r\n}\r\n\r\nconst ProductDisplayName = styled('h1', {\r\n fs: 10,\r\n lineHeight: '$lh12',\r\n fontFamily: '$fontSecondary600',\r\n mb: 6,\r\n mt: 0,\r\n textTransform: 'uppercase',\r\n color: '$textPrimary',\r\n});\r\n\r\nconst HowToTestDrive = {\r\n mb: 12,\r\n};\r\n\r\nconst Login = styled('div', {\r\n mb: 20,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 24,\r\n});\r\n\r\nconst ContactForm = styled('form', { mb: 7 });\r\n\r\nconst FormTitle = styled('span', {\r\n fs: 9,\r\n fontFamily: '$fontSecondary400',\r\n lineHeight: '$lh155',\r\n mb: 3,\r\n display: 'block',\r\n});\r\n\r\nexport default TestDriveModal;\r\n","import { useState } from 'react';\r\n\r\nimport { styled } from 'stitches.config';\r\n\r\ntype BlurredImageType = {\r\n index: number;\r\n lowQualitySrc: string;\r\n highQualitySrc: string;\r\n handleFullScreen: (index: number) => void;\r\n isFullWidth?: boolean;\r\n isUsed: boolean;\r\n};\r\n\r\nconst BlurredImage = ({\r\n index,\r\n lowQualitySrc,\r\n highQualitySrc,\r\n handleFullScreen,\r\n isFullWidth,\r\n isUsed,\r\n}: BlurredImageType) => {\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n const contrastStyle = isUsed ? 'none' : '$colors$imageFilter';\r\n const filterStyle = isLoading ? 'blur(10px)' : contrastStyle;\r\n const transitionStyle = isLoading ? 'none' : 'filter 0.3s ease-out';\r\n\r\n return (\r\n setIsLoading(false)}\r\n onClick={() => {\r\n handleFullScreen(index);\r\n }}\r\n css={{\r\n filter: filterStyle,\r\n transition: transitionStyle,\r\n }}\r\n isFullWidth={isFullWidth}\r\n />\r\n );\r\n};\r\n\r\nconst Image = styled('img', {\r\n backgroundColor: '$backgroundSecondary',\r\n h: 'auto',\r\n w: '100%',\r\n maxH: '430px',\r\n pr: 0,\r\n cursor: 'pointer',\r\n objectFit: 'cover',\r\n flexBasis: '49%',\r\n width: '49%',\r\n flexGrow: 1,\r\n variants: {\r\n isFullWidth: {\r\n true: {\r\n width: '100%',\r\n flexBasis: '100%',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default BlurredImage;\r\n","import KexLink from 'Kex/KexLink';\r\n\r\nimport ProductImage from 'Atoms/Image/ProductImage';\r\nimport SimpleProductRelation from 'Models/Pages/ProductPage/SimpleProductRelation.interface';\r\n\r\nimport { styled } from 'stitches.config';\r\nimport ProductCardTitle from 'Atoms/ProductCardTitle/ProductCardTitle';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\n\r\ntype PropTypes = {\r\n packageItem: SimpleProductRelation;\r\n};\r\n\r\nfunction PackageCardItem({ packageItem }: PropTypes) {\r\n const { image, name, productUrl } = packageItem;\r\n const { missingImage } = useAppSettingsData();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst StyledKexLink = styled(KexLink, {\r\n fontFamily: '$fontSecondary600',\r\n wordSpacing: 'unset',\r\n});\r\n\r\nconst CartItemContainer = styled('div', {\r\n display: 'flex',\r\n position: 'relative',\r\n mb: 4,\r\n});\r\n\r\nconst ImageContainer = styled('div', {\r\n width: 96,\r\n height: 72,\r\n mr: 4,\r\n '@mediaMinLarge': {\r\n width: 104,\r\n height: 80,\r\n },\r\n});\r\n\r\nconst TopWrapper = styled('div', {\r\n display: 'flex',\r\n flexGrow: 1,\r\n flexDirection: 'column',\r\n alignItems: 'baseline',\r\n justifyContent: 'space-between',\r\n});\r\nconst Details = styled('div', {\r\n flexGrow: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nexport default PackageCardItem;\r\n","import SimpleProductRelation from 'Models/Pages/ProductPage/SimpleProductRelation.interface';\r\nimport PackageCardItem from 'Organisms/ProductCard/PackageCard';\r\nimport { H4 } from 'Atoms/Typography/Headings/Heading';\r\nimport { isEmpty } from 'Shared/Common/Helpers';\r\n\r\ntype ProductPackageType = {\r\n packageItems: SimpleProductRelation[];\r\n isPackage: boolean;\r\n packageIncludes: string;\r\n};\r\n\r\nfunction ProductPackage({\r\n packageItems,\r\n isPackage,\r\n packageIncludes,\r\n}: ProductPackageType) {\r\n if (!isPackage || isEmpty(packageItems)) return <>;\r\n\r\n return (\r\n <>\r\n

{packageIncludes}

\r\n {!isEmpty(packageItems) &&\r\n packageItems\r\n .filter((packageItem) => packageItem)\r\n .map((packageItem) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n}\r\n\r\nexport default ProductPackage;\r\n","import { useEffect, useState } from 'react';\r\n\r\nconst useMountTransition = (isMounted: boolean, unmountDelay: number) => {\r\n const [hasTransitionedIn, setHasTransitionedIn] = useState(false);\r\n\r\n useEffect(() => {\r\n let timeoutId: NodeJS.Timeout | null = null;\r\n\r\n if (isMounted && !hasTransitionedIn) {\r\n setHasTransitionedIn(true);\r\n } else if (!isMounted && hasTransitionedIn) {\r\n timeoutId = setTimeout(() => setHasTransitionedIn(false), unmountDelay);\r\n }\r\n\r\n return () => {\r\n if (timeoutId) clearTimeout(timeoutId);\r\n };\r\n }, [unmountDelay, isMounted, hasTransitionedIn]);\r\n\r\n return hasTransitionedIn;\r\n};\r\n\r\nexport default useMountTransition;\r\n","import { useEffect } from 'react';\r\n\r\nconst useOutsideClick = (ref: React.RefObject, callback: () => void) => {\r\n const handleClick = (e: MouseEvent | TouchEvent) => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('mousedown', handleClick);\r\n document.addEventListener('touchstart', handleClick);\r\n return () => {\r\n document.removeEventListener('mousedown', handleClick);\r\n document.removeEventListener('touchstart', handleClick);\r\n };\r\n });\r\n};\r\n\r\nexport default useOutsideClick;\r\n","import { useEffect } from 'react';\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\nimport useMedia from './useMedia';\r\n\r\nfunction usePreventBackgroundScroll() {\r\n const isMobile = useMedia(mediaQueryTypes.mediaMaxMedium);\r\n\r\n useEffect(() => {\r\n const documentWidth = document.documentElement.clientWidth;\r\n const windowWidth = window.innerWidth;\r\n const scrollBarWidth = windowWidth - documentWidth;\r\n\r\n document.body.classList.add('hide-scrollbar');\r\n document.body.style.paddingRight = `${scrollBarWidth}px`;\r\n document.body.style.overflowY = 'hidden';\r\n\r\n //For ios\r\n let scrollPosition = 0;\r\n if (isMobile) {\r\n document.body.style.position = 'fixed';\r\n document.body.style.width = '100%';\r\n scrollPosition = window.pageYOffset;\r\n document.body.style.top = scrollPosition + 'px';\r\n }\r\n\r\n return () => {\r\n document.body.classList.remove('hide-scrollbar');\r\n //For ios\r\n if (isMobile) {\r\n document.body.style.position = 'unset';\r\n window.scrollTo(0, scrollPosition);\r\n document.body.style.top = 'unset';\r\n document.body.style.width = 'auto';\r\n }\r\n document.body.style.paddingRight = '0px';\r\n document.body.style.overflowY = 'initial';\r\n document.body.style.overflowX = 'hidden';\r\n };\r\n }, [isMobile]);\r\n}\r\n\r\nexport default usePreventBackgroundScroll;\r\n","import VariationModel from '../../../Models/KexVariation/VariationModel.interface';\r\nimport { Variant } from '../../../Enums/Variant.enum';\r\n\r\nexport type VariantStateType = {\r\n selectedVariant: VariationModel | null;\r\n hasColors: boolean;\r\n hasSizes: boolean;\r\n hasSelectedSize: boolean;\r\n errorSize: boolean;\r\n};\r\n\r\ntype SET_INITIAL = {\r\n type: Variant.SET_INITIAL;\r\n selectedVariant: VariationModel;\r\n hasColors: boolean;\r\n hasSizes: boolean;\r\n};\r\n\r\ntype SET_VARIANT = {\r\n type: Variant.SET_VARIANT;\r\n selectedVariant: VariationModel;\r\n hasSelectedSize: boolean;\r\n};\r\n\r\ntype SET_ADD_CART_ERROR = {\r\n type: Variant.SET_ADD_CART_ERROR;\r\n errorSize: boolean;\r\n};\r\n\r\nexport type VariantActionType = SET_INITIAL | SET_VARIANT | SET_ADD_CART_ERROR;\r\n\r\nconst variantReducer = (\r\n state: VariantStateType,\r\n action: VariantActionType\r\n): VariantStateType => {\r\n switch (action.type) {\r\n case Variant.SET_INITIAL: {\r\n return {\r\n ...state,\r\n selectedVariant: action.selectedVariant,\r\n hasColors: action.hasColors,\r\n hasSizes: action.hasSizes,\r\n };\r\n }\r\n case Variant.SET_VARIANT: {\r\n return {\r\n ...state,\r\n selectedVariant: action.selectedVariant,\r\n hasSelectedSize: action.hasSelectedSize,\r\n errorSize: false,\r\n };\r\n }\r\n case Variant.SET_ADD_CART_ERROR: {\r\n return {\r\n ...state,\r\n errorSize: action.errorSize,\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport default variantReducer;\r\n","import { useReducer, useContext, createContext } from 'react';\r\nimport variantReducer, {\r\n VariantStateType,\r\n VariantActionType,\r\n} from '../../Pages/ProductPage/Reducers/variantReducer';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n};\r\n\r\ntype ContextType = {\r\n state: VariantStateType;\r\n variantDispatch: React.Dispatch;\r\n};\r\n\r\nconst VariantContext = createContext({} as ContextType);\r\n\r\nexport const VariantProvider = ({ children }: PropType) => {\r\n const [state, variantDispatch] = useReducer(variantReducer, {\r\n selectedVariant: null,\r\n hasColors: false,\r\n hasSizes: false,\r\n hasSelectedSize: false,\r\n errorSize: false,\r\n });\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useVariantData = (): ContextType => {\r\n return useContext(VariantContext);\r\n};\r\n"],"names":["hoverCondition","ButtonVariants","variants","color","primary","backgroundColor","primary2","secondary","secondaryDark","tertiary","boxShadow","quaternary","outlined","border","size","s","py","px","fs","h","lineHeight","l","fullWidth","true","width","loading","opacity","defaultVariants","ButtonBase","borderColor","cursor","display","alignItems","justifyContent","wordSpacing","whiteSpace","fontFamily","ls","bw","transition","timings","animation","textAlign","textTransform","outlineWidth","BaseButtonStyled","styled","IconContainer","position","left","StyledLoadingCircle","StyledButtonText","flexDirection","isLoading","false","StyledButton","overflow","onClick","children","icon","disabled","type","css","Icon","KexIconLoader","toString","onBackground","isActive","FavoriteBtn","CircleBackground","bgColor","fillColor","m","borderRadius","w","Error","forwardRef","ref","errorLabel","ErrorContainer","space","mb","LoadingSvgStyles","stroke","xl","LoadingCircleStyles","viewBox","xmlns","fill","fillRule","transform","strokeWidth","strokeOpacity","cx","cy","r","d","attributeName","from","to","dur","repeatCount","clickEvnt","isVisible","overlayColor","usePreventBackgroundScroll","OverlayDiv","t","zIndex","visibility","nowPrice","wasPrice","friendlyNowPrice","friendlyWasPrice","direction","nowPriceSize","wasPriceSize","hasLoweredPrice","PriceContainer","NowPriceText","WasPriceText","columnReverse","rowGap","row","xs","columnGap","sm","lg","textDecoration","fontSize","friendlyMonthlyPrice","perMonth","useTranslationData","productLabels","PricePerMonthContainer","letterSpacing","BaseQuantityStyle","pointerEvents","minW","QuantityWrapper","CurrentQuantityWrapper","mx","IconWrapper","code","maxQuantity","minQuantity","currentQuantity","disabledMin","handleIncrement","handleDecrement","hasReachedMaxQuantity","hasReachedMinQuantity","SubtractIcon","AddIcon","DeliveryStatusContainer","transparent","Label","label","iconColor","StockContainer","Stock","Indicator","background","mr","inStock","isUsed","notInStock","salesStart","extendedDeliveryTime","state","useVariantData","isHideStock","hasSelectedSize","hasSizes","selectedVariant","stock","salesStartString","replace","salesStartFormatted","stockAvailableAtVendor","Paragraph","stockQuantity","SmallLabelWrapper","marginBottom","ProductType","Variant","ProductAttributeList","listStyle","listStyleType","gap","AttributeItem","Dot","top","attributeList","filteredList","useMemo","filter","attribute","value","map","index","length","CarouselChevronNext","onclick","imagesLength","currentImage","hasThumbnail","NextCircle","CarouselChevronPrevious","PreviousCircle","CircleBaseStyle","height","margin","bottom","right","CarouselThumbnails","images","goToSlide","ThumbnailContainer","image","Thumbnail","active","ProductImage","src","alt","ScrollContainer","mt","pb","ml","flexShrink","content","CarouselImage","objectFit","isFullScreen","CarouselWrapper","outline","CarouselStepsCount","handleFullScreen","handleCurrentImage","hasCounter","isMCC","carouselRef","useRef","isTablet","useMedia","mediaQueryTypes","isDesktop","useEffect","current","focus","getImagePresets","fullScreenImage","mobileImage","tabletImage","desktopImage","innerRef","enableKeyboardControls","slideIndex","afterSlide","renderBottomCenterControls","currentSlide","renderCenterLeftControls","previousSlide","renderCenterRightControls","nextSlide","InputGroup","fontStyleCss","ErrorText","labelCss","FormTextArea","minHeight","borderStyle","WebkitTextFillColor","caretColor","WebkitBoxShadow","WebkitAppearance","error","inputBackground","primary6","primary4","title","onChange","onBlur","onKeyDown","name","validation","placeholder","defaultValue","validationDispatch","useInputValidation","useState","hasTouched","setHasTouched","hasValue","setHasValue","setFocus","inputRef","doValidation","errorMessage","setErrorMessage","showError","backendValidation","message","handleChange","useCallback","payload","hasError","isRequired","required","formInputStyle","interval","setInterval","document","activeElement","clearInterval","cssStyle","getLabelStyle","e","currentTarget","onFocus","style","id","maxLength","API_URL","ContactInfo","ContactInfoColumn","ContactForm","showModal","setShowModal","timerRef","contactUs","phoneNumberLabel","checkoutLabels","phoneNumber","email","accountLabels","validationLabels","invalidEmail","invalidPhoneNumber","commonLabels","phoneOpenLabel","phoneOpen","phoneOpenHours","fullName","thanksForYourMessage","sendMessage","messageSent","writeToUs","somethingWentWrong","languageRoute","useAppSettingsData","useUserStateData","user","savedEmail","savedFullName","savedPhoneNumber","useCurrentPage","brand","displayName","formName","setName","formPhoneNumber","setPhoneNumber","formEmail","setEmail","formMessage","setMessage","validFormData","setValidFormData","status","setStatus","body","model","text","language","submitForm","preventDefault","fetch","method","headers","JSON","stringify","then","res","json","obj","success","console","setTimeout","clearTimeout","Modal","toggle","H2","BulletPoint","SmallLabel","onSubmit","H4","InputValidation","onInputsValid","onInputsInvalid","Input","autoComplete","accountFormValidation","Button","CloseWrapper","ModalContainer","ModalContent","close","modalRef","key","window","addEventListener","removeEventListener","marginLeft","clickEvent","ModalOverlayLeftPane","ModalOverlayRightPane","b","overflowY","scrollbarWidth","p","borderLeft","noPadding","showScrollbar","hideCloseButton","hasTransitionedIn","useMountTransition","canUseDOM","portalElement","querySelector","ReactDOM","CloseButton","ProductDisplayName","SubmitInterestDescription","FormTitle","manufacturerYear","submitOfInterest","submitOfInterestDescription","sendSubmitOfInterest","contactDetails","phone","HowToTestDrive","Login","bookTestDrive","sendRequest","loginBookTestDrive","howToBookTestDrive","signIn","authenticated","accountDispatch","Image","maxH","pr","flexBasis","flexGrow","isFullWidth","lowQualitySrc","highQualitySrc","setIsLoading","filterStyle","transitionStyle","onLoad","StyledKexLink","KexLink","CartItemContainer","ImageContainer","TopWrapper","Details","packageItem","productUrl","missingImage","href","underlined","ProductCardTitle","packageItems","isPackage","packageIncludes","isEmpty","PackageCard","isMounted","unmountDelay","setHasTransitionedIn","timeoutId","callback","handleClick","contains","target","isMobile","documentWidth","documentElement","clientWidth","scrollBarWidth","innerWidth","classList","add","paddingRight","scrollPosition","pageYOffset","remove","scrollTo","overflowX","action","hasColors","errorSize","VariantContext","createContext","VariantProvider","useReducer","variantReducer","variantDispatch","Provider","useContext"],"sourceRoot":""}