{"version":3,"file":"dist/build-client/static/js/Pages-MotorcycleConfiguratorPage-MotorcycleConfiguratorPage.990d914b.chunk.js","mappings":"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","sources":["Atoms/Buttons/TabButton.tsx","Atoms/Checkbox/Checkbox.tsx","Atoms/RadioButton/RadioButton.tsx","Molecules/AddCartError/AddCartError.tsx","Molecules/ButtonGroups/TabButtonGroup.tsx","Organisms/SingleOptionCard/SingleOptionCard.tsx","Pages/MotorcycleConfiguratorPage/Reducers/MCCVariantReducer.ts","Shared/Providers/MCCVariantProvider.tsx","Pages/MotorcycleConfiguratorPage/Image/BackButton.tsx","Organisms/SingleOptionCard/OptionCardCheckbox.tsx","Pages/MotorcycleConfiguratorPage/Order/OptionItem.tsx","Pages/MotorcycleConfiguratorPage/ConfiguratorModal/Accessory.tsx","Pages/MotorcycleConfiguratorPage/Tab/AccessoryTab.tsx","Pages/MotorcycleConfiguratorPage/Order/MyOptions.tsx","Pages/MotorcycleConfiguratorPage/ConfiguratorModal/PackageModal.tsx","Pages/MotorcycleConfiguratorPage/Tab/PackageTab.tsx","Atoms/Tooltip/Tooltip.tsx","Pages/MotorcycleConfiguratorPage/MCCVariations.tsx","Pages/MotorcycleConfiguratorPage/Tab/ColorTab.tsx","Pages/MotorcycleConfiguratorPage/ConfigurationArea.tsx","Pages/MotorcycleConfiguratorPage/Image/MCCProductImage.tsx","Atoms/Buttons/ShareButton.tsx","Pages/MotorcycleConfiguratorPage/ConfiguratorModal/Share.tsx","Pages/MotorcycleConfiguratorPage/Order/CtaArea.tsx","Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPage.tsx","Shared/Common/QuantityLimit.ts","Shared/Common/UrlParser.ts","Shared/Hooks/useProductImage.ts","Shared/MotorcycleConfiguratorCart/MotorcycleConfiguratorCart.ts"],"sourcesContent":["import { styled } from 'stitches.config';\r\nimport { ButtonBase } from './BaseButtonStyle';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n onClick?: () => void;\r\n active?: boolean;\r\n css?: CSS;\r\n};\r\n\r\nfunction TabButton({ onClick, children, active, css }: PropType) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nconst StyledTabButton = styled('button', {\r\n ...ButtonBase,\r\n color: '$tabButtonText',\r\n backgroundColor: '$tabButtonBackground',\r\n border: 'none',\r\n flexGrow: 1,\r\n flexBasis: '33.33%',\r\n py: 3.5,\r\n transition: `all ${timings.oneFifth} ${animation.timingFn}`,\r\n '&:hover': {\r\n backgroundColor: '$tabButtonHoverBackground',\r\n },\r\n fs: 6,\r\n '@mediaMinLarge': {\r\n fs: 8,\r\n },\r\n variants: {\r\n active: {\r\n true: {\r\n backgroundColor: '$tabButtonActiveBackground',\r\n color: '$tabButtonActiveText',\r\n pointerEvents: 'none',\r\n '&:hover': {\r\n backgroundColor: '$tabButtonActiveBackground',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default TabButton;\r\n","import KexIconLoader from 'Kex/KexIconLoader';\r\nimport { styled } from 'stitches.config';\r\nimport { timings, animation } from 'Theme/Settings/animation';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype PropType = {\r\n isChecked: boolean;\r\n onCheck?: React.ChangeEventHandler;\r\n text: string;\r\n id?: string;\r\n css?: CSS;\r\n error?: boolean;\r\n noMargin?: true;\r\n};\r\n\r\nfunction Checkbox({\r\n isChecked,\r\n onCheck,\r\n id,\r\n text,\r\n css,\r\n error,\r\n noMargin,\r\n}: PropType) {\r\n const Icon = KexIconLoader('Checkmark');\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Checkbox;\r\n\r\nconst CheckboxWrapper = styled('div', {});\r\n\r\nconst StyledIcon = {\r\n m: 0,\r\n};\r\n\r\nconst Input = styled('input', {\r\n opacity: 0,\r\n wh: 0,\r\n});\r\n\r\nconst Label = styled('label', {\r\n cursor: 'pointer',\r\n color: '$secondary2',\r\n display: 'flex',\r\n alignItems: 'center',\r\n fs: 8,\r\n lineHeight: '$lh15',\r\n});\r\n\r\nconst Check = styled('div', {\r\n cursor: 'pointer',\r\n mr: 4,\r\n tblr: 0,\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n backgroundColor: 'inherit',\r\n wh: 4,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n transition: `all ${timings.threeTenths} ${animation.timingFn}`,\r\n variants: {\r\n isChecked: {\r\n true: {\r\n borderColor: '$JE68GreenPrimary',\r\n backgroundColor: '$JE68GreenPrimary',\r\n },\r\n false: {\r\n borderColor: '$secondary2',\r\n },\r\n },\r\n noMargin: {\r\n true: {\r\n m: 0,\r\n },\r\n },\r\n error: {\r\n true: {\r\n borderColor: 'red',\r\n },\r\n },\r\n },\r\n});\r\n","import { styled } from 'stitches.config';\r\nimport { timings } from 'Theme/Settings/animation';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype PropType = {\r\n isChecked: boolean;\r\n onChange?: React.ChangeEventHandler;\r\n text?: string;\r\n value?: string | number;\r\n css?: CSS;\r\n useAbsolute?: true;\r\n radioBackgroundColor?: 'primary6' | 'primary3';\r\n};\r\n\r\nfunction RadioButton({\r\n isChecked,\r\n onChange,\r\n value,\r\n text,\r\n css,\r\n useAbsolute,\r\n radioBackgroundColor = 'primary6',\r\n}: PropType) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default RadioButton;\r\n\r\nconst RadioButtonWrapper = styled('div', {});\r\n\r\nconst Input = styled('input', {\r\n opacity: 0,\r\n wh: 0,\r\n});\r\n\r\nconst Label = styled('label', {\r\n display: 'flex',\r\n cursor: 'pointer',\r\n color: '$radioTextColor',\r\n alignItems: 'center',\r\n fs: 6,\r\n});\r\n\r\nconst RadioButtonText = styled('span', {\r\n position: 'relative',\r\n ml: 2.5,\r\n variants: {\r\n useAbsolute: {\r\n true: {\r\n position: 'absolute',\r\n ml: 6,\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst Radio = styled('div', {\r\n cursor: 'pointer',\r\n\r\n tblr: 0,\r\n backgroundColor: '$radioIconColor',\r\n wh: 4,\r\n br: 34,\r\n position: 'relative',\r\n '&:before': {\r\n position: 'absolute',\r\n content: '\"\"',\r\n wh: 3,\r\n l: 0.5,\r\n b: 0.5,\r\n backgroundColor: '$radioBackground',\r\n br: '50%',\r\n transition: `background-color ${timings.threeTenths} ease-in-out`,\r\n },\r\n\r\n variants: {\r\n isChecked: {\r\n true: {\r\n '&:before': {\r\n backgroundColor: '$radioIconColor',\r\n bw: 0.5,\r\n borderColor: '$radioBackground',\r\n wh: 3,\r\n l: 0.5,\r\n b: 0.5,\r\n br: '50%',\r\n },\r\n },\r\n },\r\n radioBackgroundColor: {\r\n primary6: {\r\n isChecked: {\r\n false: {\r\n '&:before': {\r\n backgroundColor: '$radioBackground',\r\n },\r\n },\r\n },\r\n },\r\n primary3: {\r\n isChecked: {\r\n false: {\r\n '&:before': {\r\n backgroundColor: '$primary3',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import { styled } from 'stitches.config';\r\nimport useOutsideClick from 'Shared/Hooks/useOutsideClick';\r\nimport Error from 'Atoms/Error/Error';\r\nimport { CartError } from 'Organisms/FavoriteItem/FavoriteItem';\r\nimport { useRef } from 'react';\r\n\r\ntype Offset = {\r\n top?: number;\r\n left?: number;\r\n right?: number;\r\n bottom?: number;\r\n};\r\n\r\ntype PropTypes = {\r\n setAddToCartError: (arg: CartError) => void;\r\n offset?: Offset;\r\n message: string;\r\n};\r\n\r\nconst AddToCartError = ({\r\n setAddToCartError,\r\n offset = {},\r\n message = '',\r\n}: PropTypes) => {\r\n const errorRef = useRef(null);\r\n\r\n useOutsideClick(errorRef, () => setAddToCartError({ message: '' }));\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst AddToCartErrorContainer = styled('div', {\r\n position: 'absolute',\r\n});\r\n\r\nexport default AddToCartError;\r\n","import { styled } from 'stitches.config';\r\n\r\ntype Proptype = {\r\n children?: React.ReactNode;\r\n};\r\n\r\nfunction TabButtonGroup({ children }: Proptype) {\r\n return {children};\r\n}\r\n\r\nconst StyledTabButtonGroup = styled('div', {\r\n ls: '$ls05',\r\n lineHeight: '$lh175',\r\n cursor: 'pointer',\r\n overflow: 'auto',\r\n '@mediaMinLarge': {\r\n overflow: 'unset',\r\n },\r\n display: 'inline-flex',\r\n gap: '4px',\r\n w: '100%',\r\n '@mediaMaxLarge': {\r\n w: '100vw',\r\n px: 4,\r\n left: '50%',\r\n right: '50%',\r\n maxWidth: '100vw',\r\n position: 'relative',\r\n marginLeft: `-50vw`,\r\n marginRight: '-50vw',\r\n },\r\n '&::-webkit-scrollbar': {\r\n display: 'none',\r\n },\r\n});\r\n\r\nexport default TabButtonGroup;\r\n","import RadioButton from '../../Atoms/RadioButton/RadioButton';\r\nimport { animation, timings } from 'Theme/Settings/animation';\r\n\r\nimport { styled } from 'stitches.config';\r\n\r\ntype PropType = {\r\n image?: JSX.Element;\r\n content: JSX.Element;\r\n onClick: () => void;\r\n isActive: boolean;\r\n radioBg?: 'main' | 'secondary';\r\n isError?: boolean;\r\n};\r\n\r\nconst SingleOptionCard = ({\r\n image,\r\n content,\r\n onClick,\r\n isActive,\r\n radioBg = 'main',\r\n isError = false,\r\n}: PropType) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n onClick();\r\n }}\r\n isActive={isActive}\r\n isError={isError}\r\n >\r\n {image}\r\n \r\n {content}\r\n \r\n {}}\r\n radioBackgroundColor=\"primary3\"\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst SingleOptionCardContainer = styled('button', {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'stretch',\r\n width: '100%',\r\n borderWidth: '1px',\r\n borderColor: 'transparent',\r\n transition: `border ${timings.oneFifth} ${animation.timingFn}`,\r\n variants: {\r\n isActive: {\r\n true: {\r\n borderColor: '$JE68GreenPrimary',\r\n },\r\n },\r\n isError: {\r\n true: {\r\n borderColor: '$errorColor',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst SingleOptionCardContent = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n});\r\n\r\nconst SingleOptionCardRadio = styled('div', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n px: 6,\r\n variants: {\r\n radioBg: {\r\n main: {\r\n backgroundColor: '$primary3',\r\n },\r\n secondary: {\r\n backgroundColor: '$primary2',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default SingleOptionCard;\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 isAddCartError: boolean;\r\n};\r\n\r\ntype VariantActionType = {\r\n selectedVariant: VariationModel | null;\r\n hasColors: boolean;\r\n hasSizes: boolean;\r\n hasSelectedSize: boolean;\r\n isAddCartError: boolean;\r\n type: Variant.SET_INITIAL | Variant.SET_VARIANT | Variant.SET_ADD_CART_ERROR;\r\n};\r\n\r\nexport type VariantReducerActionType = {\r\n type: Variant.SET_INITIAL | Variant.SET_VARIANT | Variant.SET_ADD_CART_ERROR;\r\n} & Partial;\r\n\r\nconst MCCVariantReducer = (\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 isAddCartError: false,\r\n };\r\n }\r\n case Variant.SET_ADD_CART_ERROR: {\r\n return {\r\n ...state,\r\n isAddCartError: action.isAddCartError,\r\n };\r\n }\r\n default:\r\n console.warn(`unknown type ${action.type}`);\r\n return state;\r\n }\r\n};\r\n\r\nexport default MCCVariantReducer;\r\n","import { useReducer, useContext, createContext } from 'react';\r\nimport MCCVariantReducer, {\r\n VariantReducerActionType,\r\n} from '../../Pages/MotorcycleConfiguratorPage/Reducers/MCCVariantReducer';\r\nimport { VariantStateType } from '../../Pages/ProductPage/Reducers/variantReducer';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n};\r\n\r\nconst VariantContext = createContext({});\r\n\r\nexport const MCCVariantProvider = ({ children }: PropType) => {\r\n const [state, variantDispatch] = useReducer(MCCVariantReducer, {\r\n selectedVariant: null,\r\n hasColors: false,\r\n hasSizes: false,\r\n hasSelectedSize: false,\r\n isAddCartError: 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 = () => {\r\n return useContext(VariantContext) as {\r\n state: VariantStateType;\r\n variantDispatch: (action: VariantReducerActionType) => void;\r\n };\r\n};\r\n","import { BackIcon } from 'Atoms/Icons';\r\nimport { styled } from 'stitches.config';\r\nimport { CSS } from '@stitches/react';\r\n\r\ntype CloseButtonBaseType = {\r\n onClick?: () => void;\r\n css?: CSS;\r\n size: 'xs' | 's' | 'm' | 'l';\r\n bgColor: 'primary' | 'secondary' | 'primaryLight';\r\n};\r\n\r\nfunction BackButton({\r\n onClick = () => {},\r\n css,\r\n size,\r\n bgColor = 'primary',\r\n}: CloseButtonBaseType) {\r\n const iconColor =\r\n bgColor === ('primary' || 'primaryLight') ? 'secondary' : 'secondaryDark';\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\nexport default BackButton;\r\n\r\nconst BackBtn = styled('button', {\r\n variants: {\r\n size: {\r\n xs: {\r\n wh: 2,\r\n },\r\n s: {\r\n wh: 4,\r\n },\r\n m: {\r\n wh: 6,\r\n },\r\n l: {\r\n wh: 8,\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst CircleBackground = styled('span', {\r\n wh: '100%',\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: '$primary4',\r\n '&:hover': {\r\n backgroundColor: '$primary3',\r\n },\r\n },\r\n primaryLight: {\r\n backgroundColor: '$primary3',\r\n '&:hover': {\r\n backgroundColor: '$primary2',\r\n },\r\n },\r\n secondary: {\r\n backgroundColor: '$pureWhite',\r\n '&:hover': {\r\n backgroundColor: '$secondary1',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import CheckBox from '../../Atoms/Checkbox/Checkbox';\r\nimport { styled } from 'stitches.config';\r\nimport { useState } from 'react';\r\n\r\ntype PropType = {\r\n isActive: boolean;\r\n onClickInfo: () => void;\r\n onClickCheckbox: () => void;\r\n title: string;\r\n price: string;\r\n text: string;\r\n};\r\n\r\nconst OptionCardCheckbox = ({\r\n isActive,\r\n onClickInfo,\r\n onClickCheckbox,\r\n title,\r\n price,\r\n text,\r\n}: PropType) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n return (\r\n {\r\n setIsHovered(true);\r\n }}\r\n onMouseLeave={() => {\r\n setIsHovered(false);\r\n }}\r\n >\r\n \r\n \r\n {title}\r\n + {price}\r\n \r\n \r\n {text}\r\n \r\n \r\n \r\n {}}\r\n noMargin\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nconst Container = styled('button', {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'stretch',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n height: '134px',\r\n borderWidth: '1px',\r\n borderColor: 'transparent',\r\n});\r\n\r\nconst Information = styled('div', {\r\n width: '80%',\r\n backgroundColor: '$primary4',\r\n paddingLeft: '16px',\r\n paddingTop: '16px',\r\n variants: {\r\n isHovered: {\r\n true: {\r\n backgroundColor: '$primary3',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst TopInformation = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n});\r\n\r\nconst Title = styled('div', {\r\n fontFamily: '$fontSecondary600',\r\n fs: 7,\r\n lineHeight: '$lh125',\r\n height: '38px',\r\n textAlign: 'left',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n '@mediaMinLarge': {\r\n fs: 10,\r\n lineHeight: '$lh12',\r\n letterSpacing: 0,\r\n height: '48px',\r\n },\r\n variants: {\r\n isHovered: {\r\n true: {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst Price = styled('div', {\r\n backgroundColor: '$primary6',\r\n whiteSpace: 'nowrap',\r\n mx: 4,\r\n px: 2,\r\n height: '80%',\r\n variants: {\r\n isHovered: {\r\n true: {\r\n backgroundColor: '$primary5',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst BottomInformation = styled('div', {\r\n paddingTop: '8px',\r\n width: '90%',\r\n});\r\n\r\nconst Description = styled('div', {\r\n fontFamily: '$fontSecondary400',\r\n fs: 6,\r\n lineHeight: '$lh133',\r\n letterSpacing: 0,\r\n textAlign: 'left',\r\n height: '48px',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n WebkitLineClamp: 3,\r\n WebkitBoxOrient: 'vertical',\r\n});\r\n\r\nconst CheckBoxWrapper = styled('div', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '20%',\r\n backgroundColor: '$primary3',\r\n variants: {\r\n isHovered: {\r\n true: {\r\n backgroundColor: '$primary2',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default OptionCardCheckbox;\r\n","import { RemoveIcon } from 'Atoms/Icons';\r\nimport QuantitySelector from 'Atoms/Quantity/QuantitySelector';\r\nimport KexLink from 'Kex/KexLink';\r\nimport VariationModel from 'Models/KexVariation/VariationModel.interface';\r\nimport Price from 'Atoms/Price/Price';\r\nimport { MIN_QUANTITY } from 'Shared/Common/QuantityLimit';\r\nimport ProductImage from 'Atoms/Image/ProductImage';\r\nimport { styled } from 'stitches.config';\r\nimport ProductCardTitle from 'Atoms/ProductCardTitle/ProductCardTitle';\r\nimport useProductImage from 'Shared/Hooks/useProductImage';\r\n\r\ntype PropTypes = {\r\n product: VariationModel;\r\n preset: string;\r\n onRemove: () => void;\r\n onIncrement: () => void;\r\n onDecrement: () => void;\r\n isDesktop: boolean;\r\n size?: 's' | 'm';\r\n customOnClick?: () => void;\r\n};\r\n\r\nfunction OptionItem({\r\n product,\r\n preset,\r\n onRemove,\r\n onIncrement,\r\n onDecrement,\r\n isDesktop,\r\n size = 'm',\r\n customOnClick,\r\n}: PropTypes) {\r\n const {\r\n to,\r\n image,\r\n name,\r\n code,\r\n totalNowPrice,\r\n totalWasPrice,\r\n wasPrice,\r\n nowPrice,\r\n isUsed,\r\n quantity,\r\n stock,\r\n variationImages,\r\n isGift,\r\n } = product;\r\n\r\n const { itemImage } = useProductImage(image, variationImages);\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 {isDesktop && !isGift && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n
\r\n {isDesktop && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n {!isDesktop && (\r\n \r\n {!isGift ? (\r\n onRemove()} size={size}>\r\n \r\n \r\n ) : (\r\n
// placeholder\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 '@mediaMinLarge': {\r\n maxW: '80%',\r\n },\r\n});\r\n\r\nconst OptionItemContainer = styled('div', {\r\n display: 'flex',\r\n position: 'relative',\r\n flexWrap: 'wrap',\r\n '&:not(:last-child)': {\r\n py: 5,\r\n borderBottomWidth: '1px',\r\n borderBottomColor: '$checkoutPageBackgroundPrimary',\r\n },\r\n '&:last-child': {\r\n pt: 5,\r\n mb: 6,\r\n },\r\n});\r\n\r\nconst OptionItemTop = styled('div', {\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n flexGrow: 1,\r\n});\r\n\r\nconst imageSize = {\r\n s: {\r\n width: 72,\r\n maxHeight: 56,\r\n },\r\n m: {\r\n width: 104,\r\n maxHeight: 80,\r\n },\r\n};\r\n\r\nconst ImageContainer = styled('div', {\r\n mr: 4,\r\n variants: {\r\n size: {\r\n ...imageSize,\r\n },\r\n },\r\n});\r\n\r\nconst OptionItemRow = styled('div', {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst OptionItemContent = styled('div', {\r\n flexGrow: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst OptionItemBottom = styled('div', {\r\n mt: 4,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n});\r\n\r\nconst RemoveButton = styled('button', {\r\n display: 'flex',\r\n cursor: 'pointer',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n variants: {\r\n size: { ...imageSize },\r\n },\r\n});\r\n\r\nexport default OptionItem;\r\n","import { styled } from 'stitches.config';\r\nimport useMedia from 'Shared/Hooks/useMedia';\r\n\r\nimport { isEmpty } from 'Shared/Common/Helpers';\r\n\r\nimport Price from 'Atoms/Price/Price';\r\nimport ProductImage from 'Atoms/Image/ProductImage';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport BulletPoint from 'Atoms/BulletPoint/BulletPoint';\r\nimport { ModalTitle } from '../Order/MyOptions';\r\nimport XHtmlArea from 'Molecules/XHtmlArea/XHtmlArea';\r\n\r\nimport VariationModel from 'Models/KexVariation/VariationModel.interface';\r\nimport ProductTranslations from 'Models/Translations/ProductTranslations.interface';\r\nimport ProductBaseModel from 'Models/Pages/Base/ProductBaseModel.interface';\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\nimport Attributes from 'Molecules/Attributes/Attributes';\r\nimport CollapsableSection from 'Molecules/CollapsableSection/CollapsableSection';\r\nimport { useMemo } from 'react';\r\nimport ImageModel from 'Models/Assets/ImageModel.interface';\r\n\r\ntype AccessoryModalTypes = {\r\n showModal: boolean;\r\n setShowModal: (set: boolean) => void;\r\n product?: ProductBaseModel;\r\n variant?: VariationModel;\r\n productLabels: ProductTranslations;\r\n onAddItem: (code: string) => void;\r\n placeholderImage: ImageModel;\r\n};\r\n\r\nconst AccessoryModal = ({\r\n product,\r\n variant,\r\n showModal,\r\n setShowModal,\r\n productLabels,\r\n onAddItem,\r\n placeholderImage,\r\n}: AccessoryModalTypes) => {\r\n const isDesktop = useMedia(mediaQueryTypes.mediaMinLarge);\r\n\r\n const hasTechnicalData =\r\n !isEmpty(variant?.color.key) ||\r\n !isEmpty(product?.material) ||\r\n !isEmpty(product?.certifications);\r\n\r\n const memoizedUspList = useMemo(() => {\r\n return product?.usp.slice(0, 3);\r\n }, [product]);\r\n\r\n return (\r\n setShowModal(!showModal)}>\r\n {!variant || !product ? (\r\n <>\r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {variant.name}\r\n \r\n {!isEmpty(product.usp) &&\r\n memoizedUspList?.map((text: string, index: number) => (\r\n \r\n ))}\r\n \r\n\r\n {hasTechnicalData && (\r\n <>\r\n \r\n \r\n <>\r\n {!isEmpty(variant.color.key) && (\r\n \r\n {productLabels.color}\r\n {variant.color.name}\r\n \r\n )}\r\n {!isEmpty(product.material) && (\r\n \r\n {productLabels.material}\r\n {product.material}\r\n \r\n )}\r\n {!isEmpty(product.certifications) && (\r\n \r\n {productLabels.certifications}\r\n {product.certifications.join(',')}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {product.extendedDescription && (\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\n )}\r\n
\r\n );\r\n};\r\n\r\nconst AccessoryModalContent = styled('div', {\r\n height: '70vh',\r\n overflowY: 'auto',\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': {\r\n WebkitAppearance: 'none',\r\n display: 'none',\r\n },\r\n '&::scrollbar': {\r\n display: 'none',\r\n },\r\n '@mediaMinExtraSmall': {\r\n height: '80vh',\r\n },\r\n});\r\n\r\nconst Technical = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n});\r\n\r\nconst TechnicalItem = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n flexWrap: 'nowrap',\r\n fs: 8,\r\n lineHeight: '$lh125',\r\n mb: 2,\r\n '&:last-child': {\r\n mb: 0,\r\n },\r\n});\r\n\r\nconst ModalImage = styled('div', {\r\n mt: 16,\r\n mb: 4,\r\n maxHeight: 247,\r\n aspectRatio: '16/9',\r\n});\r\n\r\nconst VariantPrice = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n gap: 16,\r\n backgroundColor: '$primary4',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n px: 4,\r\n py: 6,\r\n position: 'absolute',\r\n '@mediaMinLarge': {\r\n py: 8,\r\n },\r\n});\r\n\r\nconst VariantUSP = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 16,\r\n mb: 8,\r\n mt: 4,\r\n});\r\n\r\nexport default AccessoryModal;\r\n","import { styled } from 'stitches.config';\r\nimport { useState } from 'react';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport MotorcycleConfiguratorAccessoryCategory from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorAccessoryCategory.interface';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport {\r\n UpdateMotorcycleConfiguratorCart,\r\n GetMotorcycleConfiguratorCart,\r\n RemoveFromMotorcycleConfiguratorCart,\r\n SetQuantityInMotorcycleConfiguratorCart,\r\n} from 'Shared/MotorcycleConfiguratorCart/MotorcycleConfiguratorCart';\r\n\r\nimport Price from 'Atoms/Price/Price';\r\nimport ProductImage from 'Atoms/Image/ProductImage';\r\nimport CollapsableSection from 'Molecules/CollapsableSection/CollapsableSection';\r\nimport { AddIcon, CheckmarkIcon, RemoveIcon } from 'Atoms/Icons';\r\nimport AccessoryModal from '../ConfiguratorModal/Accessory';\r\n\r\nimport VariationModel from 'Models/KexVariation/VariationModel.interface';\r\nimport ProductBaseModel from 'Models/Pages/Base/ProductBaseModel.interface';\r\nimport { MIN_QUANTITY } from 'Shared/Common/QuantityLimit';\r\nimport QuantitySelector from 'Atoms/Quantity/QuantitySelector';\r\nimport CircleBackground from 'Atoms/Icons/CircleBackground';\r\n\r\ntype AccessoryTabTypes = {\r\n data: MotorcycleConfiguratorPageModel;\r\n};\r\n\r\nexport const SMALL_CARD_PRESET_DESKTOP = '?preset=small-product-card-desktop';\r\n\r\nconst AccessoryTab = ({ data }: AccessoryTabTypes) => {\r\n const [showModal, setShowModal] = useState(false);\r\n const [currentVariant, setCurrentVariant] = useState();\r\n const [currentProduct, setCurrentProduct] = useState();\r\n\r\n const { cartName } = useCurrentPage();\r\n const { languageRoute, missingImage } = useAppSettingsData();\r\n const { productLabels } = useTranslationData();\r\n\r\n const configuratorCart = GetMotorcycleConfiguratorCart(\r\n languageRoute,\r\n cartName\r\n );\r\n\r\n const onAddItem = (code: string) => {\r\n const quantity = 1;\r\n UpdateMotorcycleConfiguratorCart(\r\n code,\r\n quantity,\r\n languageRoute,\r\n data?.cartName\r\n );\r\n\r\n setShowModal(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {data.accessories.map(\r\n (category: MotorcycleConfiguratorAccessoryCategory, index) => (\r\n \r\n \r\n {category.products?.map((product: ProductBaseModel) => {\r\n return product.variationCollection.map(\r\n (variant: VariationModel) => {\r\n const alreadyAdded = configuratorCart.cart?.lineItems?.find(\r\n (item) => item.code === variant.code\r\n );\r\n\r\n const uniqueIdx = variant.code + variant.isGift;\r\n\r\n return (\r\n \r\n {\r\n setCurrentVariant(variant);\r\n setCurrentProduct(product);\r\n setShowModal(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {variant.name}\r\n \r\n \r\n \r\n {alreadyAdded ? (\r\n <>\r\n \r\n \r\n \r\n \r\n ) : (\r\n {\r\n e.stopPropagation();\r\n\r\n onAddItem(variant.code);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {alreadyAdded && (\r\n \r\n \r\n RemoveFromMotorcycleConfiguratorCart(\r\n alreadyAdded.code,\r\n languageRoute,\r\n cartName\r\n )\r\n }\r\n >\r\n \r\n \r\n\r\n {\r\n SetQuantityInMotorcycleConfiguratorCart(\r\n alreadyAdded.code,\r\n alreadyAdded.quantity + 1,\r\n languageRoute,\r\n cartName\r\n );\r\n }}\r\n handleDecrement={() => {\r\n SetQuantityInMotorcycleConfiguratorCart(\r\n alreadyAdded.code,\r\n alreadyAdded.quantity - 1,\r\n languageRoute,\r\n cartName\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\n\r\nconst AccessoryList = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexBasis: '100%',\r\n});\r\n\r\nconst AccessoryCard = styled('div', {\r\n position: 'relative',\r\n '&:not(:last-child)': {\r\n py: 4,\r\n borderBottomWidth: '1px',\r\n borderBottomColor: '$primary6',\r\n },\r\n '&:first-child': {\r\n pt: 0,\r\n },\r\n '&:last-child:not(:only-child)': {\r\n pt: 4,\r\n },\r\n});\r\n\r\nconst AccessoryCardTop = styled('div', {\r\n display: 'flex',\r\n cursor: 'pointer',\r\n});\r\n\r\nconst AccessoryCardImage = styled('div', {\r\n width: 72,\r\n height: 56,\r\n mr: 4,\r\n});\r\n\r\nconst AccessoryCardTitle = styled('span', {\r\n fontFamily: '$fontSecondary600',\r\n color: '$cartItemText',\r\n fs: 7,\r\n});\r\n\r\nconst AccessoryCardContent = styled('div', {\r\n flexGrow: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst AccessoryCardPrice = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n});\r\n\r\nconst AddIconCircle = styled('button', {\r\n borderRadius: '50%',\r\n border: '1px solid $JE68GreenPrimary',\r\n p: 1.25,\r\n});\r\n\r\nconst AccessoryCardBottom = styled('div', {\r\n mt: 4,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n});\r\n\r\nconst RemoveButton = styled('button', {\r\n display: 'flex',\r\n cursor: 'pointer',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 72,\r\n maxHeight: 56,\r\n});\r\n\r\nexport default AccessoryTab;\r\n","import useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport useMedia from 'Shared/Hooks/useMedia';\r\nimport { styled } from 'stitches.config';\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport {\r\n GetMotorcycleConfiguratorCart,\r\n RemoveFromMotorcycleConfiguratorCart,\r\n UpdateMotorcycleConfiguratorCart,\r\n} from 'Shared/MotorcycleConfiguratorCart/MotorcycleConfiguratorCart';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport OptionItem from './OptionItem';\r\nimport { useVariantData } from 'Shared/Providers/MCCVariantProvider';\r\nimport { CartError } from 'Organisms/FavoriteItem/FavoriteItem';\r\nimport AddToCartError from 'Molecules/AddCartError/AddCartError';\r\nimport { SMALL_CARD_PRESET_DESKTOP } from '../Tab/AccessoryTab';\r\nimport VariationModel from 'Models/KexVariation/VariationModel.interface';\r\n\r\ntype MyOptionsTypes = {\r\n productPricing: JSX.Element;\r\n productAttributes: JSX.Element;\r\n onShowSummaryModal: () => void;\r\n showSummaryModal: boolean;\r\n onOrder: () => void;\r\n cartError: CartError;\r\n setAddToCartError: (arg: CartError) => void;\r\n};\r\n\r\nconst MyOptions = ({\r\n productPricing,\r\n productAttributes,\r\n showSummaryModal,\r\n onShowSummaryModal,\r\n onOrder,\r\n cartError,\r\n setAddToCartError,\r\n}: MyOptionsTypes) => {\r\n const { displayName, cartName } =\r\n useCurrentPage();\r\n const { productLabels } = useTranslationData();\r\n const { languageRoute } = useAppSettingsData();\r\n const isDesktop = useMedia(mediaQueryTypes.mediaMinLarge);\r\n\r\n const { state } = useVariantData();\r\n\r\n const configuratorCart = GetMotorcycleConfiguratorCart(\r\n languageRoute,\r\n cartName\r\n );\r\n\r\n function handleIncrement(item: VariationModel) {\r\n UpdateMotorcycleConfiguratorCart(item.code, 1, languageRoute, cartName);\r\n }\r\n\r\n function handleDecrement(item: VariationModel) {\r\n UpdateMotorcycleConfiguratorCart(item.code, -1, languageRoute, cartName);\r\n }\r\n\r\n function handleRemove(item: VariationModel) {\r\n RemoveFromMotorcycleConfiguratorCart(item.code, languageRoute, cartName);\r\n }\r\n\r\n if (!configuratorCart.cart.lineItems) return <>;\r\n\r\n return (\r\n \r\n \r\n \r\n {isDesktop ? (\r\n {displayName}\r\n ) : (\r\n productAttributes\r\n )}\r\n {productLabels.options}\r\n \r\n \r\n {configuratorCart.cart.lineItems\r\n .filter((item) => !item.isMotorcycle)\r\n .map((item) => {\r\n const uniqueIdx = item.code + item.isGift;\r\n\r\n return (\r\n handleRemove(item)}\r\n onIncrement={() => handleIncrement(item)}\r\n onDecrement={() => handleDecrement(item)}\r\n isDesktop={isDesktop}\r\n />\r\n );\r\n })}\r\n \r\n \r\n\r\n \r\n {productPricing}\r\n {cartError.message !== '' && (\r\n \r\n )}\r\n\r\n \r\n {productLabels.order}\r\n \r\n \r\n \r\n );\r\n};\r\nconst MyOptionsContainer = styled('div', {\r\n height: '80vh',\r\n paddingTop: '24px',\r\n paddingBottom: '24px',\r\n overflowY: 'auto',\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': {\r\n WebkitAppearance: 'none',\r\n display: 'none',\r\n },\r\n '&::scrollbar': {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst OptionsContent = styled('div', {\r\n color: '$secondary2',\r\n pt: 8,\r\n px: 4,\r\n '@mediaMinLarge': {\r\n pt: 20,\r\n px: 6,\r\n },\r\n});\r\n\r\nconst OptionsPrice = styled('div', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n bottom: 0,\r\n left: 0,\r\n position: 'absolute',\r\n px: 4,\r\n pt: 6,\r\n pb: 10,\r\n width: '100%',\r\n backgroundColor: '$primary4',\r\n gap: 16,\r\n});\r\n\r\nconst OptionsHeading = styled('span', {\r\n fontFamily: '$fontPrimary400',\r\n ls: '$ls1',\r\n fs: 10,\r\n lineHeight: '$lh12',\r\n wordSpacing: '$wordSpacings$fontPrimary',\r\n mb: 1,\r\n textTransform: 'uppercase',\r\n display: 'block',\r\n mt: 8,\r\n});\r\n\r\nconst OptionsList = styled('div', {\r\n px: 6,\r\n});\r\n\r\nexport const ModalTitle = styled('span', {\r\n color: '$secondary2',\r\n display: 'block',\r\n fs: 10,\r\n lineHeight: '$lh12',\r\n fontFamily: '$fontSecondary600',\r\n '@mediaMinLarge': {\r\n fs: 16,\r\n lineHeight: '$lh1125',\r\n },\r\n});\r\n\r\nconst ButtonWidth = {\r\n flexGrow: 1,\r\n '@mediaMinLarge': {\r\n minWidth: 200,\r\n flexGrow: 0,\r\n },\r\n};\r\n\r\nexport default MyOptions;\r\n","import { styled } from 'stitches.config';\r\nimport useMedia from 'Shared/Hooks/useMedia';\r\nimport Price from 'Atoms/Price/Price';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport PricePerMonth from 'Atoms/Price/PricePerMonth';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport BulletPoint from 'Atoms/BulletPoint/BulletPoint';\r\nimport { ModalTitle } from '../Order/MyOptions';\r\nimport ProductBaseModel from 'Models/Pages/Base/ProductBaseModel.interface';\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\nimport Attributes from 'Molecules/Attributes/Attributes';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport ProductPackage from 'Pages/ProductPage/ProductPackage';\r\nimport { isEmpty } from 'Shared/Common/Helpers';\r\n\r\ntype PackageModalTypes = {\r\n showModal: boolean;\r\n setShowModal: (set: boolean) => void;\r\n product?: ProductBaseModel;\r\n onAddItem: (code: string) => void;\r\n};\r\n\r\nconst PackageModal = ({\r\n showModal,\r\n setShowModal,\r\n product,\r\n onAddItem,\r\n}: PackageModalTypes) => {\r\n const isDesktop = useMedia(mediaQueryTypes.mediaMinLarge);\r\n const { productLabels } = useTranslationData();\r\n\r\n return (\r\n setShowModal(!showModal)}>\r\n {!product ? (\r\n <> \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n {product.displayName}\r\n {!isEmpty(product.usp) && (\r\n \r\n {product.usp.map((uspText: string, index: number) => (\r\n \r\n ))}\r\n \r\n )}\r\n {product.extendedDescription}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n onAddItem(product.variationCollection[0].code)}\r\n >\r\n {productLabels.add}\r\n \r\n
\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst PackageModalContent = styled('div', {\r\n height: '80vh',\r\n overflowY: 'auto',\r\n scrollbarWidth: 'none',\r\n '&::-webkit-scrollbar': {\r\n WebkitAppearance: 'none',\r\n display: 'none',\r\n },\r\n '&::scrollbar': {\r\n display: 'none',\r\n },\r\n});\r\n\r\nconst TopMargin = styled('div', {\r\n mt: 20,\r\n});\r\n\r\nconst VariantPrice = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n gap: 16,\r\n backgroundColor: '$primary4',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n px: 4,\r\n py: 6,\r\n position: 'absolute',\r\n '@mediaMinLarge': {\r\n py: 8,\r\n },\r\n});\r\n\r\nconst MonthlyPrice = styled('div', {\r\n mt: 2,\r\n fs: 6,\r\n display: 'flex',\r\n gap: 8,\r\n lineHeight: '$lh125',\r\n fontFamily: '$fontSecondary400',\r\n color: '$productDescriptionTextPrimary',\r\n});\r\n\r\nconst VariantUSP = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '4px',\r\n mb: 8,\r\n mt: 6,\r\n});\r\n\r\nconst Description = styled('div', {\r\n fontFamily: '$fontSecondary400',\r\n color: '$textPrimary',\r\n letterSpacing: 0,\r\n lineHeight: '$lh15',\r\n fs: 8,\r\n mb: 6,\r\n});\r\n\r\nconst PackageCardWrapper = styled('div', {\r\n '&:not(:last-child)': {\r\n py: 4,\r\n borderBottomWidth: '1px',\r\n borderBottomColor: '$primary6',\r\n },\r\n pointerEvents: 'none', // Disable navigation on the children components\r\n display: 'flex',\r\n postion: 'relative',\r\n flexDirection: 'column',\r\n rowGap: '16px',\r\n zIndex: '1',\r\n});\r\n\r\nexport default PackageModal;\r\n","import ProductBaseModel from 'Models/Pages/Base/ProductBaseModel.interface';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport OptionCardCheckbox from 'Organisms/SingleOptionCard/OptionCardCheckbox';\r\nimport PackageModal from '../ConfiguratorModal/PackageModal';\r\nimport { useState } from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport {\r\n GetMotorcycleConfiguratorCart,\r\n RemoveFromMotorcycleConfiguratorCart,\r\n UpdateMotorcycleConfiguratorCart,\r\n} from 'Shared/MotorcycleConfiguratorCart/MotorcycleConfiguratorCart';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\n\r\ntype PackageTabTypes = {\r\n data: MotorcycleConfiguratorPageModel;\r\n};\r\n\r\nconst PackageTab = ({ data }: PackageTabTypes) => {\r\n const { languageRoute } = useAppSettingsData();\r\n const [showModal, setShowModal] = useState(false);\r\n const [currentProduct, setCurrentProduct] = useState();\r\n\r\n const onAddItem = (code: string) => {\r\n const quantity = 1;\r\n\r\n UpdateMotorcycleConfiguratorCart(\r\n code,\r\n quantity,\r\n languageRoute,\r\n data?.cartName\r\n );\r\n setShowModal(false);\r\n };\r\n\r\n const configuratorCart = GetMotorcycleConfiguratorCart(\r\n languageRoute,\r\n data?.cartName\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n {data.packages.map(\r\n (productPackage: ProductBaseModel, index: number) => {\r\n const alreadyAdded = configuratorCart.cart?.lineItems?.find(\r\n (item) => item.code === productPackage.variationCollection[0].code\r\n );\r\n\r\n if (alreadyAdded) {\r\n return (\r\n
\r\n {\r\n RemoveFromMotorcycleConfiguratorCart(\r\n productPackage.variationCollection[0].code,\r\n languageRoute,\r\n data.cartName\r\n );\r\n }}\r\n isActive={true}\r\n title={productPackage.displayName}\r\n price={\r\n productPackage.variationCollection[0].nowPrice\r\n .priceAsString\r\n }\r\n onClickInfo={() => {\r\n setCurrentProduct(productPackage);\r\n setShowModal(true);\r\n }}\r\n text={productPackage.extendedDescription}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n {\r\n onAddItem(productPackage.variationCollection[0].code);\r\n }}\r\n isActive={false}\r\n title={productPackage.displayName}\r\n price={\r\n productPackage.variationCollection[0].nowPrice.priceAsString\r\n }\r\n onClickInfo={() => {\r\n setCurrentProduct(productPackage);\r\n setShowModal(true);\r\n }}\r\n text={productPackage.extendedDescription}\r\n />\r\n
\r\n );\r\n }\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst PackageTabContainer = styled('div', {});\r\n\r\nexport default PackageTab;\r\n","import { styled } from 'stitches.config';\r\nimport InfoIcon from 'Atoms/Icons/InfoIcon';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport useOutsideClick from '../../../Features/Shared/Hooks/useOutsideClick';\r\nimport useMedia from 'Shared/Hooks/useMedia';\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\n\r\ntype PropTypes = { text: string };\r\n\r\nconst Tooltip = ({ text }: PropTypes) => {\r\n const [openTooltip, setOpenTooltip] = useState(false);\r\n const [tooltipPosition, setTooltipPosition] = useState(0);\r\n\r\n const tooltipRef = useRef(null);\r\n const textbubbleRef = useRef(null);\r\n const isMobile = useMedia(mediaQueryTypes.mediaMaxLarge);\r\n\r\n useOutsideClick(tooltipRef, () => setOpenTooltip(false));\r\n\r\n const toggleTooltip = () => setOpenTooltip(!openTooltip);\r\n\r\n useEffect(() => {\r\n if (tooltipRef.current && textbubbleRef.current) {\r\n const getTopPosition =\r\n tooltipRef.current.offsetTop - textbubbleRef.current.clientHeight - 8;\r\n\r\n setTooltipPosition(getTopPosition);\r\n }\r\n }, [openTooltip]);\r\n\r\n return (\r\n \r\n setOpenTooltip(true),\r\n })}\r\n {...(!isMobile && {\r\n onMouseLeave: () => setOpenTooltip(false),\r\n })}\r\n onClick={toggleTooltip}\r\n >\r\n \r\n \r\n\r\n \r\n {text}\r\n \r\n \r\n );\r\n};\r\nconst Wrapper = styled('div', { display: 'inline-block' });\r\n\r\nconst TextBubble = styled('div', {\r\n borderWidth: '1px',\r\n width: '100%',\r\n maxW: 55,\r\n position: 'absolute',\r\n zIndex: '$Tooltip',\r\n backgroundColor: '$backgroundPrimary',\r\n borderColor: '$tooltipBorder',\r\n p: 2,\r\n fs: 6,\r\n fontFamily: '$fontSecondary400',\r\n lineHeight: '$lh133',\r\n color: '$secondary2',\r\n variants: { isTooltip: { false: { opacity: 0, visibility: 'hidden' } } },\r\n});\r\n\r\nconst IconWrapper = styled('div', {\r\n cursor: 'pointer',\r\n px: 2,\r\n});\r\nexport default Tooltip;\r\n","import ProductImage from 'Atoms/Image/ProductImage';\r\nimport SingleOptionCard from 'Organisms/SingleOptionCard/SingleOptionCard';\r\nimport { styled } from 'stitches.config';\r\nimport VariationModel from 'Models/KexVariation/VariationModel.interface';\r\nimport { useVariantData as useMCCVariantData } from '../../Shared/Providers/MCCVariantProvider';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { Indicator, Stock } from 'Atoms/StockViewer/StockViewer';\r\nimport Paragraph from 'Atoms/Typography/Paragraph/Paragraph';\r\nimport Tooltip from 'Atoms/Tooltip/Tooltip';\r\nimport { Variant } from 'Enums/Variant.enum';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport { useKexNavigate } from 'Kex/KexRouter/KexRouter';\r\n\r\ntype PropTypes = {\r\n variationCollection: VariationModel[];\r\n cartName: string;\r\n};\r\n\r\nfunction MCCVariations({ variationCollection, cartName }: PropTypes) {\r\n const { productLabels } = useTranslationData();\r\n const {\r\n missingImage,\r\n staticPages: { motorcycleConfiguratorPage },\r\n } = useAppSettingsData();\r\n const { variantDispatch, state } = useMCCVariantData();\r\n const kexNavigate = useKexNavigate();\r\n\r\n function changeVariant(code: string) {\r\n const variant = variationCollection.find(\r\n (variant) => variant.code === code\r\n );\r\n variantDispatch({\r\n type: Variant.SET_VARIANT,\r\n selectedVariant: variant,\r\n });\r\n kexNavigate(\r\n `${motorcycleConfiguratorPage}?productcode=${variant?.productCode}&variantcode=${variant?.code}`\r\n );\r\n }\r\n\r\n return (\r\n \r\n {variationCollection.map((variant) => {\r\n return (\r\n \r\n \r\n {variant.color.name}\r\n {variant.stock.stockAvailableAtVendor ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n {variant.stock?.inStock ? (\r\n <>\r\n {variant.stock?.stockQuantity}{' '}\r\n {productLabels.inStock}\r\n \r\n ) : (\r\n productLabels.notInStock\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n }\r\n image={\r\n \r\n \r\n \r\n }\r\n onClick={() => {\r\n changeVariant(variant.code);\r\n }}\r\n isActive={state?.selectedVariant?.code === variant.code}\r\n />\r\n );\r\n })}\r\n \r\n );\r\n}\r\n\r\nconst VariationsContainer = styled('div', {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 16,\r\n});\r\n\r\nconst SingleOptionContent = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n backgroundColor: '$primary4',\r\n flexGrow: 1,\r\n px: 6,\r\n});\r\n\r\nconst SingleOptionCardText = styled('span', {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n columnGap: 16,\r\n textAlign: 'left',\r\n color: '$secondary2',\r\n width: '100%',\r\n fs: 8,\r\n lineHeight: '$lh15',\r\n '@mediaMinLarge': {\r\n fs: 9,\r\n lineHeight: '$lh155',\r\n },\r\n});\r\n\r\nconst ImageContainer = styled('div', { flexShrink: 0, width: 80, height: 64 });\r\nexport default MCCVariations;\r\n","import VariationModel from 'Models/KexVariation/VariationModel.interface';\r\nimport { styled } from 'stitches.config';\r\nimport MCCVariations from '../MCCVariations';\r\n\r\ntype PropTypes = {\r\n variationCollection: VariationModel[];\r\n cartName: string;\r\n};\r\n\r\nconst ColorTab = ({ variationCollection, cartName }: PropTypes) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst ColorTabContainer = styled('div', {});\r\n\r\nexport default ColorTab;\r\n","import { useState, useEffect, useMemo } from 'react';\r\nimport { styled } from 'stitches.config';\r\n\r\nimport { useVariantData } from '../../Shared/Providers/MCCVariantProvider';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\n\r\nimport { Variant } from 'Enums/Variant.enum';\r\nimport { isEmpty } from 'Shared/Common/Helpers';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\n\r\nimport PackageTab from './Tab/PackageTab';\r\nimport ColorTab from './Tab/ColorTab';\r\nimport AccessoryTab from './Tab/AccessoryTab';\r\nimport TabButton from 'Atoms/Buttons/TabButton';\r\nimport TabButtonGroup from 'Molecules/ButtonGroups/TabButtonGroup';\r\n\r\nimport { GetMotorcycleConfiguratorCart } from 'Shared/MotorcycleConfiguratorCart/MotorcycleConfiguratorCart';\r\n\r\nimport { SizeConstants } from 'Theme/Settings/sizes';\r\nimport { parseQueryParameters } from 'Shared/Common/UrlParser';\r\n\r\nconst tabButtonGroupHeight = 86;\r\n\r\nexport const calcHeightToBarDesktop =\r\n SizeConstants.desktopHeaderHeight +\r\n SizeConstants.desktopConfiguratorBarHeight;\r\n\r\nexport const calcHeightToBarMobile =\r\n SizeConstants.mobileHeaderHeight + SizeConstants.mobileConfiguratorBarHeight;\r\n\r\ntype PropTypes = {\r\n data: MotorcycleConfiguratorPageModel;\r\n};\r\n\r\nconst PACKAGE = 'package';\r\nconst COLOR = 'color';\r\nconst ACCESSORIES = 'accessories';\r\n\r\nfunction ConfigurationArea({ data }: PropTypes) {\r\n const hasMCPackages = !isEmpty(data.packages);\r\n const hasMCAccessories = !isEmpty(data.accessories);\r\n\r\n const initialTab = useMemo(() => {\r\n const hasOneColor = data.variationCollection.length === 1;\r\n\r\n if (hasMCPackages) {\r\n return PACKAGE;\r\n } else if (hasOneColor && hasMCAccessories) {\r\n return ACCESSORIES;\r\n } else {\r\n return COLOR;\r\n }\r\n }, [hasMCPackages, data.variationCollection, hasMCAccessories]);\r\n\r\n const [currentTab, setCurrentTab] = useState(initialTab);\r\n const { cartName, preselectedVariantCode } =\r\n useCurrentPage();\r\n const { languageRoute } = useAppSettingsData();\r\n const configuratorCart = GetMotorcycleConfiguratorCart(\r\n languageRoute,\r\n cartName\r\n );\r\n\r\n const {\r\n productLabels: {\r\n color: colorLabel,\r\n accessories: accessoriesLabel,\r\n package: packageLabel,\r\n },\r\n } = useTranslationData();\r\n\r\n const { variantDispatch } = useVariantData();\r\n\r\n useEffect(() => {\r\n if (isEmpty(configuratorCart.cart)) return;\r\n\r\n const defaultVariantCode =\r\n parseQueryParameters().get('variantcode') || preselectedVariantCode;\r\n\r\n // this data is fetched from current page\r\n const variant = data.variationCollection.find(\r\n (variant) => variant.code === defaultVariantCode\r\n );\r\n\r\n if (variant) {\r\n variantDispatch({\r\n type: Variant.SET_INITIAL,\r\n selectedVariant: variant,\r\n });\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [configuratorCart.cart]);\r\n\r\n const renderTabContent = () => {\r\n switch (currentTab) {\r\n case PACKAGE:\r\n return ;\r\n case COLOR:\r\n return (\r\n \r\n );\r\n case ACCESSORIES:\r\n return ;\r\n default:\r\n <>;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {hasMCPackages && (\r\n setCurrentTab(PACKAGE)}\r\n >\r\n {packageLabel}\r\n \r\n )}\r\n setCurrentTab(COLOR)}\r\n >\r\n {colorLabel}\r\n \r\n {hasMCAccessories && (\r\n setCurrentTab(ACCESSORIES)}\r\n >\r\n {accessoriesLabel}\r\n \r\n )}\r\n \r\n {renderTabContent()}\r\n \r\n \r\n );\r\n}\r\n\r\nconst StyledTabContainer = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n backgroundColor: '$backgroundPrimary',\r\n '@mediaMinLarge': {\r\n px: 0,\r\n },\r\n});\r\n\r\nconst StyledTabContent = styled('div', {\r\n color: '$secondary2',\r\n py: 4,\r\n overflowY: 'auto',\r\n height: `calc(100vh - ${calcHeightToBarMobile}px - ${SizeConstants.configuratorImageHeightSmall}px - ${tabButtonGroupHeight}px)`,\r\n '@mediaMinMedium': {\r\n height: `calc(100vh - ${calcHeightToBarMobile}px - ${SizeConstants.configuratorImageHeightMedium}px - ${tabButtonGroupHeight}px)`,\r\n },\r\n '@mediaMinLarge': {\r\n height: `calc(100vh - ${calcHeightToBarDesktop}px - ${tabButtonGroupHeight}px)`,\r\n },\r\n '&::-webkit-scrollbar': {\r\n WebkitAppearance: 'none',\r\n display: 'none',\r\n },\r\n '&::scrollbar': {\r\n display: 'none',\r\n },\r\n});\r\n\r\nexport default ConfigurationArea;\r\n","import { useState } from 'react';\r\nimport { styled } from 'stitches.config';\r\nimport Carousel from '../../../Organisms/Carousel/Carousel';\r\nimport FullScreenModal from '../../../Organisms/Modal/FullScreenModal';\r\nimport { useVariantData } from 'Shared/Providers/MCCVariantProvider';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport BackButton from './BackButton';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport { calcHeightToBarDesktop } from '../ConfigurationArea';\r\nimport { SizeConstants } from 'Theme/Settings/sizes';\r\nimport { useKexNavigate } from 'Kex/KexRouter/KexRouter';\r\nimport BlurredImage from 'Pages/ProductPage/BlurredImage';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\n\r\nfunction ProductImage() {\r\n const [isFullScreen, setIsFullScreen] = useState(false);\r\n const [currentImage, setCurrentImage] = useState(0);\r\n const { missingImage } = useAppSettingsData();\r\n\r\n const { isUsed, productUrl } =\r\n useCurrentPage();\r\n\r\n const { state } = useVariantData();\r\n const kexNavigate = useKexNavigate();\r\n\r\n if (!state?.selectedVariant?.variationImages) return <>;\r\n\r\n const variationImages = state.selectedVariant?.variationImages;\r\n\r\n const handleCurrentImage = (current: number) => {\r\n setCurrentImage(current);\r\n };\r\n\r\n const returnAction = () => {\r\n kexNavigate(productUrl);\r\n };\r\n\r\n const handleFullScreen = (index: number) => {\r\n setIsFullScreen(!isFullScreen);\r\n handleCurrentImage(index);\r\n };\r\n\r\n const renderFullScreenCarousel = () => {\r\n return (\r\n isFullScreen && (\r\n setIsFullScreen(false)}\r\n >\r\n \r\n \r\n )\r\n );\r\n };\r\n\r\n if (!variationImages || variationImages.length === 0) {\r\n const missingSrc = `${missingImage.src}?preset=product-card-new-desktop`;\r\n return (\r\n {}}\r\n isFullWidth={true}\r\n isUsed={false}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {renderFullScreenCarousel()}\r\n \r\n );\r\n}\r\n\r\nexport const configuratorImageHeight = {\r\n small: 280,\r\n medium: 480,\r\n};\r\n\r\nconst CarouselContainer = styled('div', {\r\n position: 'relative',\r\n h: '100%',\r\n variants: {\r\n isFullScreen: {\r\n false: {\r\n img: { height: SizeConstants.configuratorImageHeightSmall },\r\n '@mediaMinMedium': {\r\n img: { height: SizeConstants.configuratorImageHeightMedium },\r\n },\r\n '@mediaMinLarge': {\r\n img: {\r\n height: `calc(100vh - ${calcHeightToBarDesktop}px)`,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst ButtonWrapper = styled('div', {\r\n position: 'absolute',\r\n zIndex: 1,\r\n t: 4,\r\n l: 4,\r\n});\r\n\r\nexport default ProductImage;\r\n","import { ShareIcon } from 'Atoms/Icons';\r\nimport { styled } from 'stitches.config';\r\n\r\ntype ShareButtonBaseType = {\r\n onClick?: () => void;\r\n css?: any;\r\n size: 's' | 'm'; // 32px, 48px\r\n color?: 'primary' | 'secondary';\r\n isActive?: boolean;\r\n};\r\n\r\nfunction ShareButton({\r\n onClick = () => {},\r\n css,\r\n size,\r\n color = 'primary',\r\n}: ShareButtonBaseType) {\r\n return (\r\n {\r\n onClick();\r\n }}\r\n size={size}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n}\r\nexport default ShareButton;\r\n\r\nconst ShareBtn = 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 },\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 useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport { canUseDOM } from 'Shared/Common/Helpers';\r\nimport { styled } from 'stitches.config';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport { H4, H2 } from 'Atoms/Typography/Headings/Heading';\r\nimport Modal from 'Organisms/Modal/Modal';\r\nimport Paragraph from 'Atoms/Typography/Paragraph/Paragraph';\r\nimport Input from 'Atoms/Input/Input';\r\nimport { InputValidation } from 'Atoms/Input/InputValidation';\r\n\r\ntype ShareTypes = {\r\n showModal: boolean;\r\n onShowModal: () => void;\r\n};\r\n\r\nconst Share = ({ showModal, onShowModal }: ShareTypes) => {\r\n const { cartId, displayName } =\r\n useCurrentPage();\r\n const { productLabels } = useTranslationData();\r\n const { staticPages } = useAppSettingsData();\r\n\r\n if (!canUseDOM()) return <>;\r\n const configuratorPage = staticPages.motorcycleConfiguratorPage.slice(0, -1);\r\n const shareUrl = `${window.location.origin}${configuratorPage}?configuration=${cartId}`;\r\n\r\n return (\r\n <>\r\n \r\n \r\n

{displayName}

\r\n

{productLabels.shareYourMotorcycle}

\r\n \r\n \r\n {productLabels.shareYourMotorcycleDescription}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {\r\n navigator.clipboard.writeText(shareUrl);\r\n }}\r\n fullWidth\r\n >\r\n {productLabels.copyLink}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nconst ShareInput = styled('div', { position: 'relative' });\r\n\r\nconst ShareDescription = styled('div', {\r\n mb: 8,\r\n});\r\n\r\nconst ModalContent = styled('div', {\r\n pb: 8,\r\n pt: 16,\r\n px: 4,\r\n '@mediaMinLarge': {\r\n px: 6,\r\n },\r\n});\r\n\r\nconst CopyUrl = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n gap: 16,\r\n backgroundColor: '$primary4',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n px: 4,\r\n pt: 6,\r\n pb: 10,\r\n position: 'absolute',\r\n '@mediaMinLarge': {\r\n px: 6,\r\n py: 8,\r\n },\r\n});\r\n\r\nexport default Share;\r\n","import { H3, H5 } from 'Atoms/Typography/Headings/Heading';\r\nimport { useVariantData } from '../../../Shared/Providers/MCCVariantProvider';\r\nimport { useRef, useState } from 'react';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport { useTranslationData } from 'Shared/Providers/TranslationProvider';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport useMedia from 'Shared/Hooks/useMedia';\r\nimport { useKexNavigate } from 'Kex/KexRouter/KexRouter';\r\n\r\nimport { styled } from 'stitches.config';\r\n\r\nimport { mediaQueryTypes } from 'Theme/Settings/mediaQueries';\r\n\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport {\r\n GetMotorcycleConfiguratorCart,\r\n MergeMotorcycleConfiguratorCartIntoDefaultCart,\r\n} from 'Shared/MotorcycleConfiguratorCart/MotorcycleConfiguratorCart';\r\nimport {\r\n AddFavoriteConfigurator,\r\n GetFavorites,\r\n RemoveFavoriteConfigurator,\r\n} from 'Shared/Favorites/Favorites';\r\nimport FavoriteButton from 'Atoms/Buttons/FavoriteButton';\r\nimport Button from 'Atoms/Buttons/Button';\r\nimport Price from 'Atoms/Price/Price';\r\n\r\nimport ShareButton from 'Atoms/Buttons/ShareButton';\r\nimport { ChevronIcon } from 'Atoms/Icons';\r\nimport MyOptions from './MyOptions';\r\nimport { useUserStateData } from 'Shared/Providers/UserContextProvider';\r\n\r\nimport Share from '../ConfiguratorModal/Share';\r\nimport ContactModal from 'Organisms/ContactModal/ContactModal';\r\nimport TestDriveModal from 'Organisms/TestDriveModal/TestDriveModal';\r\nimport { GetCart } from 'Shared/Cart/Cart';\r\nimport { CartError } from 'Organisms/FavoriteItem/FavoriteItem';\r\nimport AddToCartError from 'Molecules/AddCartError/AddCartError';\r\nimport SubmitInterestModal from 'Organisms/SubmitInterestModal/SubmitInterestModal';\r\n\r\nconst CtaArea = () => {\r\n const [showSummaryModal, setShowSummaryModal] = useState(false);\r\n const [showShareModal, setShowShareModal] = useState(false);\r\n const [showContactModal, setShowContactModal] = useState(false);\r\n const [showTestDriveModal, setShowTestDriveModal] = useState(false);\r\n const [showSubmitInterestModal, setSubmitInterestModal] =\r\n useState(false);\r\n const [cartError, setAddToCartError] = useState({ message: '' });\r\n const containerRef = useRef(null);\r\n const { displayName, cartName } =\r\n useCurrentPage();\r\n const { productLabels } = useTranslationData();\r\n const { languageRoute, staticPages } = useAppSettingsData();\r\n const {\r\n user: { authenticated },\r\n accountDispatch,\r\n } = useUserStateData();\r\n const { state } = useVariantData();\r\n const isDesktop = useMedia(mediaQueryTypes.mediaMinLarge);\r\n const kexNavigate = useKexNavigate();\r\n\r\n const { favoriteList } = GetFavorites(languageRoute);\r\n const { hasMotorCycle } = GetCart(languageRoute);\r\n const CartMCC = GetMotorcycleConfiguratorCart(languageRoute, cartName);\r\n\r\n const onOrder = async () => {\r\n if (hasMotorCycle) {\r\n setAddToCartError({\r\n message: productLabels.motorcycleAlreadyInCartError,\r\n });\r\n return;\r\n }\r\n\r\n await MergeMotorcycleConfiguratorCartIntoDefaultCart(\r\n cartName,\r\n languageRoute\r\n );\r\n\r\n kexNavigate(staticPages.checkoutPage);\r\n };\r\n\r\n const isFavorited = (): boolean => {\r\n return favoriteList?.favoriteMotorcycleConfigurations?.some(\r\n (x) => x.motorcycleConfigurationCart.name === cartName\r\n );\r\n };\r\n\r\n const onFavoriteClick = () => {\r\n if (authenticated) {\r\n isFavorited()\r\n ? RemoveFavoriteConfigurator(cartName, languageRoute)\r\n : AddFavoriteConfigurator(cartName, languageRoute);\r\n return;\r\n }\r\n accountDispatch({ type: 'toggle' });\r\n };\r\n\r\n const optionsLength = CartMCC.cart?.lineItems?.length - 1;\r\n\r\n const isSoonInStock = state.selectedVariant?.stock?.salesStartFormatted;\r\n\r\n const ProductAttributes = (\r\n <>\r\n \r\n

{displayName}

\r\n \r\n {\r\n onFavoriteClick();\r\n setShowSummaryModal(false);\r\n }}\r\n />\r\n {\r\n setShowShareModal(true);\r\n setShowSummaryModal(false);\r\n }}\r\n />\r\n \r\n
\r\n \r\n {isSoonInStock ? (\r\n {\r\n setShowSummaryModal(false);\r\n setSubmitInterestModal(true);\r\n }}\r\n >\r\n {productLabels.submitOfInterest}\r\n \r\n ) : (\r\n {\r\n setShowSummaryModal(false);\r\n setShowTestDriveModal(true);\r\n }}\r\n >\r\n {productLabels.testDrive}\r\n \r\n )}\r\n\r\n {\r\n setShowSummaryModal(false);\r\n setShowContactModal(true);\r\n }}\r\n >\r\n {productLabels.contactUs}\r\n \r\n\r\n {isSoonInStock ? (\r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n );\r\n\r\n const ProductPricing = (\r\n \r\n \r\n {/* \r\n \r\n \r\n */}\r\n \r\n );\r\n\r\n return (\r\n <>\r\n {isDesktop ? (\r\n <>\r\n \r\n \r\n \r\n {ProductAttributes}\r\n \r\n {ProductPricing}\r\n \r\n setShowSummaryModal(true)}\r\n >\r\n {productLabels.options}{' '}\r\n {optionsLength > 0 ? `(${optionsLength})` : ''}\r\n \r\n\r\n {cartError.message !== '' && (\r\n \r\n )}\r\n \r\n {productLabels.order}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n \r\n
\r\n
{displayName}
\r\n \r\n \r\n \r\n
\r\n setShowSummaryModal(true)}>\r\n \r\n \r\n
\r\n \r\n )}\r\n setShowShareModal(!showShareModal)}\r\n />\r\n setShowSummaryModal(!showSummaryModal)}\r\n onOrder={onOrder}\r\n cartError={cartError}\r\n setAddToCartError={setAddToCartError}\r\n />\r\n \r\n );\r\n};\r\n\r\nconst Placeholder = styled('div', {});\r\n\r\nconst CtaAreaContainer = styled('div', {\r\n backgroundColor: '$primary4',\r\n p: 8,\r\n position: 'fixed',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n zIndex: '$zIndices$ConfiguratorSummary',\r\n});\r\n\r\nconst CtaAreaWrapper = styled('div', {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n gap: 32,\r\n position: 'relative',\r\n});\r\n\r\nconst Column = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\n\r\nconst TitleContainer = styled('div', {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n mb: 4,\r\n '@mediaMinLarge': {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 32,\r\n mb: 8,\r\n },\r\n});\r\n\r\nconst ShareFavoriteContainer = styled('div', {\r\n mt: 2,\r\n '@mediaMinLarge': {\r\n mt: 0,\r\n },\r\n});\r\n\r\nconst ContactContainer = styled('div', {\r\n display: 'flex',\r\n gap: 16,\r\n});\r\n\r\n// const MonthlyPrice = styled('div', {\r\n// mt: 2,\r\n// fs: 6,\r\n// display: 'flex',\r\n// gap: 8,\r\n// lineHeight: '$lh125',\r\n// fontFamily: '$fontSecondary400',\r\n// color: '$productDescriptionTextPrimary',\r\n// });\r\n\r\nconst PriceContainer = styled('div', {\r\n marginBottom: 'auto',\r\n mt: 2,\r\n flexGrow: 1,\r\n fontFamily: '$fontPrimary400',\r\n '@mediaMinLarge': {\r\n flexGrow: 0,\r\n },\r\n});\r\n\r\nconst OrderContainer = styled('div', {\r\n display: 'flex',\r\n gap: 16,\r\n mt: 6,\r\n});\r\n\r\nconst Summary = styled('div', {\r\n backgroundColor: '$primary6',\r\n position: 'fixed',\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n zIndex: '$zIndices$ConfiguratorSummary',\r\n p: 4,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n borderTop: '1px solid $colors$primary3',\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 h: 12,\r\n w: 12,\r\n backgroundColor: '$primary4',\r\n});\r\n\r\nconst ButtonWidth = {\r\n flexGrow: 1,\r\n '@mediaMinLarge': {\r\n minWidth: 200,\r\n flexGrow: 0,\r\n },\r\n};\r\n\r\nexport default CtaArea;\r\n","import MCCProductImage from './Image/MCCProductImage';\r\nimport { calcHeightToBarDesktop } from './ConfigurationArea';\r\nimport useCurrentPage from 'Shared/Hooks/useCurrentPage';\r\nimport { styled } from 'stitches.config';\r\nimport { MCCVariantProvider } from '../../Shared/Providers/MCCVariantProvider';\r\nimport SelectionArea from './ConfigurationArea';\r\nimport MotorcycleConfiguratorPageModel from 'Models/Pages/MotorcycleConfiguratorPage/MotorcycleConfiguratorPageModel.interface';\r\nimport CtaArea from './Order/CtaArea';\r\n\r\nfunction MotorcycleConfiguratorPage() {\r\n const data = useCurrentPage();\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\nconst Top = styled('div', {\r\n display: 'grid',\r\n gridTemplateColumns: '1fr',\r\n g: 0,\r\n w: '100%',\r\n '@mediaMinLarge': {\r\n gridTemplateColumns: '2fr 1fr',\r\n g: 8,\r\n height: `calc(100vh - ${calcHeightToBarDesktop}px)`,\r\n overflow: 'hidden',\r\n },\r\n '@mediaMinMassive': {\r\n gridTemplateColumns: '1.6fr 1fr',\r\n },\r\n});\r\n\r\nconst LowerContainer = styled('div', {\r\n p: 4,\r\n '@mediaMinLarge': {\r\n pt: 8,\r\n pr: 8,\r\n pl: 0,\r\n },\r\n});\r\n\r\nconst ProductImageWrapper = styled('div', {\r\n px: 0,\r\n w: '100%',\r\n height: '100%',\r\n});\r\n\r\nexport default MotorcycleConfiguratorPage;\r\n","export const MIN_QUANTITY = 0;\r\nexport const MAX_QUANTITY = 50;\r\n","import { canUseDOM } from './Helpers';\r\n\r\nexport type TokenType = 'reset' | 'emailConfirmed' | null;\r\nexport type TokenInfo = {\r\n email: string;\r\n token: string;\r\n type: TokenType;\r\n};\r\n\r\nexport const parseQueryParameters = () => {\r\n const values = window.location.search\r\n .replace('?', '')\r\n .split('&')\r\n .map((param): null | [string, string] => {\r\n const splitAt = param.indexOf('=');\r\n\r\n if (splitAt === -1) {\r\n return null;\r\n }\r\n\r\n return [param.substring(0, splitAt), param.substring(splitAt + 1)];\r\n })\r\n .filter((value): value is [string, string] => value !== null);\r\n\r\n return new Map(values);\r\n};\r\n\r\nexport const NO_TOKEN = { email: '', token: '', type: null };\r\n\r\nexport const parseTokenFromQuery = (): TokenInfo => {\r\n if (!canUseDOM()) return NO_TOKEN;\r\n const mappedParams = parseQueryParameters();\r\n\r\n const email = mappedParams.get('email');\r\n\r\n if (!email) {\r\n return NO_TOKEN;\r\n }\r\n\r\n const resetToken = mappedParams.get('resetToken');\r\n const regToken = mappedParams.get('confirmEmailToken');\r\n\r\n if (resetToken) {\r\n return { email, token: resetToken, type: 'reset' };\r\n } else if (regToken) {\r\n return { email, token: regToken, type: 'emailConfirmed' };\r\n } else {\r\n return NO_TOKEN;\r\n }\r\n};\r\n","import { isEmpty } from 'Shared/Common/Helpers';\r\nimport ImageModel from 'Models/Assets/ImageModel.interface';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\n\r\nconst useProductImage = (image: ImageModel, variationImages: ImageModel[]) => {\r\n const { missingImage } = useAppSettingsData();\r\n\r\n let itemImage = image;\r\n if (isEmpty(image) && !isEmpty(variationImages)) {\r\n itemImage = variationImages[0];\r\n }\r\n\r\n if (isEmpty(itemImage)) {\r\n itemImage = missingImage;\r\n }\r\n\r\n return { itemImage };\r\n};\r\n\r\nexport default useProductImage;\r\n","import KexCartModel from 'Models/Cart/KexCartModel.interface';\r\nimport { useEffect, useState } from 'react';\r\nimport Fetcher from 'Shared/Common/Fetcher';\r\nimport { IS_PRODUCTION_ENV } from 'Shared/Configs/EnvConfig';\r\nimport { useAppSettingsData } from 'Shared/Providers/AppSettingsProvider';\r\nimport useSWR, { mutate } from 'swr';\r\n\r\nlet abortController: AbortController = new AbortController();\r\nlet hasMounted = false;\r\nlet cartUrl = '/api/cart/';\r\n\r\ntype CartReturnType = {\r\n cart: KexCartModel;\r\n isLoading: boolean;\r\n};\r\n\r\nexport function GetMotorcycleConfiguratorCart(\r\n languageRoute: string,\r\n cartName: string\r\n): CartReturnType {\r\n const tempCartObject: KexCartModel = {} as KexCartModel;\r\n const [cart, setCart] = useState(tempCartObject);\r\n const { pageCacheTime } = useAppSettingsData();\r\n const [isLoading, setIsLoading] = useState(true);\r\n const { data: fetchedCart } = useSWR(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n FetchMotorcycleConfiguratorCart,\r\n {\r\n fallbackData: undefined,\r\n revalidateOnFocus: IS_PRODUCTION_ENV,\r\n dedupingInterval: pageCacheTime,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n if (!hasMounted) {\r\n hasMounted = true;\r\n } else {\r\n if (fetchedCart) {\r\n setCart(fetchedCart);\r\n setIsLoading(false);\r\n }\r\n }\r\n }, [fetchedCart]);\r\n\r\n return { cart, isLoading };\r\n}\r\n\r\nexport async function RemoveFromMotorcycleConfiguratorCart(\r\n productCode: string,\r\n languageRoute: string,\r\n cartName: string\r\n) {\r\n const queryParams = {\r\n language: languageRoute,\r\n code: productCode,\r\n cartName: cartName,\r\n };\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}RemoveItem?${queryString}`, {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n cart,\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport async function UpdateMotorcycleConfiguratorCart(\r\n productCode: string,\r\n quantity: number,\r\n languageRoute: string,\r\n cartName: string\r\n) {\r\n const queryParams = {\r\n language: languageRoute,\r\n code: productCode,\r\n quantity: quantity.toString(),\r\n cartName: cartName,\r\n };\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}Update?${queryString}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n cart,\r\n false\r\n );\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport async function SetQuantityInMotorcycleConfiguratorCart(\r\n productCode: string,\r\n quantity: number,\r\n languageRoute: string,\r\n cartName: string\r\n) {\r\n const queryParams = {\r\n language: languageRoute,\r\n code: productCode,\r\n quantity: quantity.toString(),\r\n cartName: cartName,\r\n };\r\n\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n\r\n const res = await fetch(`${cartUrl}SetQuantity?${queryString}`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n cart,\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport async function EmptyMotorcycleConfiguratorCart(\r\n languageRoute: string,\r\n cartName: string\r\n) {\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n { numberOfItems: 0 } as KexCartModel,\r\n false\r\n );\r\n\r\n const res = await fetch(\r\n `${cartUrl}RemoveAllItems?languageRoute=${languageRoute}&cartName=${cartName}`,\r\n {\r\n method: 'DELETE',\r\n }\r\n );\r\n\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n cart,\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport async function MergeMotorcycleConfiguratorCartIntoDefaultCart(\r\n sourceCartName: string,\r\n languageRoute: string,\r\n targetCartName = 'Default'\r\n) {\r\n const res = await fetch(\r\n `${cartUrl}MergeCarts?sourceCartName=${sourceCartName}&targetCartName=${targetCartName}&language=${languageRoute}`,\r\n {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n\r\n //Mutate motorcycle cart\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${sourceCartName}`,\r\n cart,\r\n false\r\n );\r\n\r\n //mutate default cart\r\n mutate(`${cartUrl}GetCart?language=` + languageRoute, false);\r\n }\r\n}\r\n\r\nexport async function SetMotorcycleInMotorcycleConfigurator(\r\n productCode: string,\r\n languageRoute: string,\r\n cartName: string\r\n) {\r\n const queryParams = {\r\n cartName: cartName,\r\n code: productCode,\r\n language: languageRoute,\r\n };\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n const res = await fetch(\r\n `${cartUrl}SetMotorcycleInMotorcycleConfigurator?${queryString}`,\r\n {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n }\r\n );\r\n if (res.ok) {\r\n const { cart } = await res.json();\r\n\r\n mutate(\r\n `${cartUrl}GetCart?language=${languageRoute}&cartName=${cartName}`,\r\n cart,\r\n false\r\n );\r\n }\r\n}\r\n\r\nfunction FetchMotorcycleConfiguratorCart(url: string) {\r\n abortController.abort();\r\n abortController = new AbortController();\r\n const signal = abortController.signal;\r\n\r\n return Fetcher(url, signal, (data, resolve) => {\r\n resolve(data.cart);\r\n });\r\n}\r\n"],"names":["StyledTabButton","styled","ButtonBase","color","backgroundColor","border","flexGrow","flexBasis","py","transition","timings","animation","fs","variants","active","true","pointerEvents","onClick","children","css","isChecked","onCheck","id","text","error","noMargin","Icon","KexIconLoader","CheckboxWrapper","Label","Input","type","checked","onChange","tabIndex","Check","StyledIcon","size","onBackground","m","opacity","wh","cursor","display","alignItems","lineHeight","mr","tblr","borderWidth","borderStyle","position","justifyContent","flexShrink","borderColor","false","value","useAbsolute","radioBackgroundColor","RadioButtonWrapper","toString","Radio","RadioButtonText","ml","br","content","l","b","bw","primary6","primary3","AddToCartErrorContainer","setAddToCartError","offset","message","errorRef","useRef","useOutsideClick","ref","top","left","right","bottom","errorLabel","StyledTabButtonGroup","ls","overflow","gap","w","px","maxWidth","marginLeft","marginRight","SingleOptionCardContainer","flexDirection","width","isActive","isError","SingleOptionCardContent","SingleOptionCardRadio","radioBg","main","secondary","image","e","preventDefault","state","action","Variant","selectedVariant","hasColors","hasSizes","hasSelectedSize","isAddCartError","console","warn","VariantContext","createContext","MCCVariantProvider","useReducer","MCCVariantReducer","variantDispatch","Provider","useVariantData","useContext","bgColor","iconColor","BackBtn","CircleBackground","xs","s","borderRadius","primary","primaryLight","Container","height","Information","paddingLeft","paddingTop","isHovered","TopInformation","Title","fontFamily","textAlign","textOverflow","WebkitLineClamp","WebkitBoxOrient","letterSpacing","textDecoration","Price","whiteSpace","mx","BottomInformation","Description","CheckBoxWrapper","onClickInfo","onClickCheckbox","title","price","useState","setIsHovered","onMouseEnter","onMouseLeave","StyledKexLink","KexLink","wordSpacing","maxW","OptionItemContainer","flexWrap","borderBottomWidth","borderBottomColor","pt","mb","OptionItemTop","imageSize","maxHeight","ImageContainer","OptionItemRow","OptionItemContent","OptionItemBottom","mt","RemoveButton","product","preset","onRemove","onIncrement","onDecrement","isDesktop","customOnClick","to","name","code","totalNowPrice","totalWasPrice","wasPrice","nowPrice","isUsed","quantity","stock","variationImages","isGift","itemImage","useProductImage","href","undefined","underlined","ProductImage","src","alt","ProductCardTitle","friendlyWasPrice","priceRoundedAsString","friendlyNowPrice","direction","nowPriceSize","wasPriceSize","QuantitySelector","maxQuantity","stockQuantity","minQuantity","MIN_QUANTITY","currentQuantity","handleIncrement","handleDecrement","disabledMin","AccessoryModalContent","overflowY","scrollbarWidth","WebkitAppearance","Technical","TechnicalItem","ModalImage","aspectRatio","VariantPrice","VariantUSP","variant","showModal","setShowModal","productLabels","onAddItem","placeholderImage","useMedia","mediaQueryTypes","hasTechnicalData","isEmpty","key","material","certifications","memoizedUspList","useMemo","usp","slice","Modal","toggle","Attributes","attributeList","parentCategoryName","brand","ModalTitle","map","index","BulletPoint","CollapsableSection","technicalDetails","fullWidth","join","extendedDescription","detailedDescription","XHtmlArea","Button","add","SMALL_CARD_PRESET_DESKTOP","AccessoryList","AccessoryCard","AccessoryCardTop","AccessoryCardImage","AccessoryCardTitle","AccessoryCardContent","AccessoryCardPrice","AddIconCircle","p","AccessoryCardBottom","data","currentVariant","setCurrentVariant","currentProduct","setCurrentProduct","cartName","useCurrentPage","useAppSettingsData","languageRoute","missingImage","useTranslationData","configuratorCart","GetMotorcycleConfiguratorCart","UpdateMotorcycleConfiguratorCart","Accessory","accessories","category","icon","navigationImage","products","variationCollection","alreadyAdded","cart","lineItems","find","item","uniqueIdx","backgroundColorVariants","large","stopPropagation","RemoveFromMotorcycleConfiguratorCart","SetQuantityInMotorcycleConfiguratorCart","MyOptionsContainer","paddingBottom","OptionsContent","OptionsPrice","pb","OptionsHeading","textTransform","OptionsList","ButtonWidth","minWidth","productPricing","productAttributes","showSummaryModal","onShowSummaryModal","onOrder","cartError","displayName","noPadding","options","filter","isMotorcycle","handleRemove","disabled","isBuyable","order","PackageModalContent","TopMargin","MonthlyPrice","PackageCardWrapper","postion","rowGap","zIndex","uspText","ProductPackage","packageItems","isPackage","packageIncludes","PricePerMonth","friendlyMonthlyPrice","paymentMonthlyCost","PackageTabContainer","packages","productPackage","priceAsString","Wrapper","TextBubble","isTooltip","visibility","IconWrapper","openTooltip","setOpenTooltip","tooltipPosition","setTooltipPosition","tooltipRef","textbubbleRef","isMobile","useEffect","current","getTopPosition","offsetTop","clientHeight","InfoIcon","style","VariationsContainer","SingleOptionContent","SingleOptionCardText","columnGap","motorcycleConfiguratorPage","staticPages","useMCCVariantData","kexNavigate","useKexNavigate","SingleOptionCard","stockAvailableAtVendor","extendedDeliveryTime","inStock","Paragraph","notInStock","productCode","changeVariant","ColorTabContainer","calcHeightToBarDesktop","SizeConstants","calcHeightToBarMobile","PACKAGE","COLOR","ACCESSORIES","StyledTabContainer","StyledTabContent","hasMCPackages","hasMCAccessories","initialTab","hasOneColor","length","currentTab","setCurrentTab","preselectedVariantCode","colorLabel","accessoriesLabel","packageLabel","package","defaultVariantCode","parseQueryParameters","get","TabButtonGroup","TabButton","renderTabContent","CarouselContainer","h","isFullScreen","img","ButtonWrapper","t","setIsFullScreen","currentImage","setCurrentImage","productUrl","handleCurrentImage","handleFullScreen","missingSrc","BlurredImage","lowQualitySrc","highQualitySrc","isFullWidth","Carousel","images","hasThumbnail","hasCounter","isMCC","FullScreenModal","close","ShareBtn","fillColor","ShareInput","ShareDescription","ModalContent","CopyUrl","onShowModal","cartId","canUseDOM","configuratorPage","shareUrl","window","location","origin","H2","H4","shareYourMotorcycle","shareYourMotorcycleDescription","InputValidation","defaultValue","navigator","clipboard","writeText","copyLink","Placeholder","CtaAreaContainer","CtaAreaWrapper","Column","TitleContainer","ShareFavoriteContainer","ContactContainer","PriceContainer","marginBottom","OrderContainer","Summary","borderTop","setShowSummaryModal","showShareModal","setShowShareModal","showContactModal","setShowContactModal","showTestDriveModal","setShowTestDriveModal","showSubmitInterestModal","setSubmitInterestModal","containerRef","useUserStateData","authenticated","user","accountDispatch","favoriteList","GetFavorites","hasMotorCycle","GetCart","CartMCC","motorcycleAlreadyInCartError","MergeMotorcycleConfiguratorCartIntoDefaultCart","checkoutPage","isFavorited","favoriteMotorcycleConfigurations","some","x","motorcycleConfigurationCart","optionsLength","isSoonInStock","salesStartFormatted","ProductAttributes","H3","FavoriteButton","pr","RemoveFavoriteConfigurator","AddFavoriteConfigurator","submitOfInterest","testDrive","contactUs","SubmitInterestModal","TestDriveModal","ContactModal","ProductPricing","totalPriceForItems","H5","transform","Top","gridTemplateColumns","g","LowerContainer","pl","ProductImageWrapper","MCCProductImage","values","search","replace","split","param","splitAt","indexOf","substring","Map","NO_TOKEN","email","token","parseTokenFromQuery","mappedParams","resetToken","regToken","abortController","AbortController","hasMounted","cartUrl","setCart","pageCacheTime","isLoading","setIsLoading","fetchedCart","useSWR","FetchMotorcycleConfiguratorCart","fallbackData","revalidateOnFocus","IS_PRODUCTION_ENV","dedupingInterval","queryString","URLSearchParams","language","fetch","method","headers","res","ok","json","mutate","queryParams","sourceCartName","targetCartName","url","abort","signal","Fetcher","resolve"],"sourceRoot":""}