{\r\n\tconst theme = useTheme();\r\n\r\n\tconst matches = {\r\n\t\txs: useMediaQuery(theme.breakpoints.up('xs'), { noSsr: true }),\r\n\t\tsm: useMediaQuery(theme.breakpoints.up('sm'), { noSsr: true }),\r\n\t\tmd: useMediaQuery(theme.breakpoints.up('md'), { noSsr: true }),\r\n\t\tlg: useMediaQuery(theme.breakpoints.up('lg'), { noSsr: true }),\r\n\t\txl: useMediaQuery(theme.breakpoints.up('xl'), { noSsr: true })\r\n\t};\r\n\r\n\treturn function (responsiveValues: { [breakpoint: string]: P }) {\r\n\t\tconst match = [...theme.breakpoints.keys]\r\n\t\t\t.reverse()\r\n\t\t\t.find(breakpoint => matches[breakpoint] && responsiveValues[breakpoint] != null);\r\n\r\n\t\treturn match && responsiveValues[match];\r\n\t};\r\n};\r\n\r\n/**\r\n * Hook pre-loads image. Returns whether image is loaded or alredy loaded in cache.\r\n * @param src Image source.\r\n */\r\nexport const useImageLoaded = (src: string) => {\r\n\tconst [imageLoaded, setImageLoaded] = useState(isImageCached(src));\r\n\tuseEffect(() => {\r\n\t\tconst image = new Image();\r\n\t\tif (notNullOrEmpty(src)) {\r\n\t\t\timage.src = src;\r\n\t\t\tif (image.complete)\r\n\t\t\t\tsetImageLoaded(true);\r\n\t\t\telse\r\n\t\t\t\timage.onload = () => setImageLoaded(true);\r\n\t\t} else {\r\n\t\t\tsetImageLoaded(false);\r\n\t\t}\r\n\t\treturn () => image.onload = null;\r\n\t}, [src]);\r\n\treturn imageLoaded;\r\n};\r\n\r\n/**\r\n * Hook tries to load image and returns result. Use to check if browser supports image format.\r\n * @param src image source\r\n * @returns undefined if processing, true if image loaded successfully, false if image load failed.\r\n */\r\nexport const useImageCanLoad = (src: string) => {\r\n\tconst [canRender, setCanRender] = useState();\r\n\tuseEffect(() => {\r\n\t\tconst image = new Image();\r\n\t\timage.src = src;\r\n\t\tif (image.complete)\r\n\t\t\tsetCanRender(true);\r\n\t\telse {\r\n\t\t\timage.onload = () => setCanRender(true);\r\n\t\t\timage.onerror = () => setCanRender(false);\r\n\t\t}\r\n\t\treturn () => {\r\n\t\t\timage.onload = null;\r\n\t\t\timage.onerror = null;\r\n\t\t};\r\n\t}, [src]);\r\n\treturn canRender;\r\n};\r\n\r\nexport const emobilityContextParametersPlaceholder = '{emobilityContextParameters}';\r\n\r\nexport const useBuildEmobilityLink = () => {\r\n\tconst { current } = useContext(EmobilityFilterContext);\r\n\tconst buildEmobilityLinkCallback = useCallback((template: string) => {\r\n\t\tconst cleanParams = removeNullOrUndefined(current);\r\n\t\tconst contextParameters = querystring.stringify(cleanParams);\r\n\t\tconst link = template.replace(emobilityContextParametersPlaceholder, contextParameters);\r\n\t\tlet result = Object.keys(current).reduce((prev, curr) => prev.replace(`{${curr}}`, current[curr] ?? ''), link);\r\n\t\twhile (result.endsWith('&'))\r\n\t\t\tresult = result.slice(0, -1);\r\n\t\treturn result;\r\n\t}, [current]);\r\n\treturn buildEmobilityLinkCallback;\r\n};\r\n\r\nexport const useBuildEmobilityClgLink = () => {\r\n\tconst buildEmobilityLink = useBuildEmobilityLink();\r\n\tconst callback = useCallback((clgEndpoint: string, tool: string, bid: string, culture: string, dealer?: string) => {\r\n\t\tconst template = getClgLinkTemplate(clgEndpoint, tool, dealer);\r\n\t\tconst filledToolContext = buildToolContextLink(template, bid, culture, dealer);\r\n\t\tconst filledEmobContext = buildEmobilityLink(filledToolContext);\r\n\t\treturn filledEmobContext;\r\n\t}, [buildEmobilityLink]);\r\n\treturn callback;\r\n};\r\n\r\nexport const getClgLinkTemplate = (clgEndpoint: string, toolCode: string, dealer: string, params?: CtaLinkParams) => {\r\n\tconst dealerParam = dealer ? '&dealerid={dealerid}' : '';\r\n\tlet result = `${clgEndpoint}/api/link?tool=${toolCode}&bid={bid}&culture={culture}${dealerParam}&${emobilityContextParametersPlaceholder}`;\r\n\tif (params) {\r\n\t\tconst validKeys = Object.keys(params).filter(key => notNullOrEmpty(params[key]?.toString()));\r\n\t\tvalidKeys.forEach(key => {\r\n\t\t\tresult = result + '&' + key + `={${key}}`;\r\n\t\t});\r\n\t}\r\n\treturn result;\r\n};\r\n","import { Fab, FabProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { buildToolContextLink } from '../../utils/common';\r\nimport { getClgLinkTemplate, useBuildEmobilityLink } from '../../utils/customHooks';\r\n\r\nexport type ClgCtaLink = {\r\n\tclgEndpoint: string;\r\n\ttool: string;\r\n};\r\n\r\nexport type CtaLink = string | ClgCtaLink;\r\n\r\nexport type CtaLinkParams = { [key: string]: string | number | boolean };\r\n\r\nexport type CtaProps = Omit, 'onClick' | 'children' | 'variant' | 'type' | 'href'> & {\r\n\tlink: CtaLink;\r\n\tlabel: string;\r\n\tbid: string;\r\n\tculture: string;\r\n\tdealer?: string;\r\n\tparams?: CtaLinkParams;\r\n\ttype?: string;\r\n\tonClick?: (href: string, label: string, type: string) => void;\r\n\tclassName?: string;\r\n};\r\n\r\nexport const Cta = (props: CtaProps) => {\r\n\tconst { link, type, onClick, bid, culture, dealer, params, label, ...other } = props;\r\n\tconst template = typeof (link) === 'string' ? link : getClgLinkTemplate(link.clgEndpoint, link.tool, dealer, params);\r\n\tconst buildEmobilityLink = useBuildEmobilityLink();\r\n\tconst filledToolContext = buildToolContextLink(template, bid, culture, dealer, params);\r\n\tconst filledEmobilityContext = buildEmobilityLink(filledToolContext);\r\n\r\n\treturn (\r\n\t\t onClick(filledEmobilityContext, label, type)}\r\n\t\t\t{...other}>\r\n\t\t\t{label}\r\n\t\t\r\n\t);\r\n};\r\n\r\nCta.defaultProps = {\r\n\tcolor: 'primary',\r\n\ttarget: '_blank'\r\n};\r\n","import React, { HTMLAttributes } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { ClgCtaLink, Cta, CtaLink, CtaLinkParams } from '../cta';\r\n\r\nconst useStyles = makeStyles({ name: 'CtaPanel' })((theme) => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexWrap: 'wrap',\r\n\t\tgap: 16,\r\n\t\tjustifyContent: 'center'\r\n\t},\r\n\tcta: {\r\n\r\n\t}\r\n}));\r\n\r\nexport type CtaInfo = {\r\n\tlink: CtaLink;\r\n\tlabel: string;\r\n\ttype: string;\r\n\ttarget?: '_blank';\r\n}\r\n\r\nexport type CtaPanelProps = HTMLAttributes & {\r\n\tcta1?: CtaInfo;\r\n\tcta2?: CtaInfo;\r\n\tbid: string;\r\n\tculture: string;\r\n\tdealer?: string;\r\n\tparams?: CtaLinkParams;\r\n\tonCtaClick?: (href: string, label: string, type: string) => void;\r\n\treverse?: boolean;\r\n\tprimaryIfSingle?: boolean;\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const CtaPanel: React.FC = (props) => {\r\n\tconst { cta1, cta2, classes, className, bid, culture, dealer, params, onCtaClick, reverse, primaryIfSingle, ...other } = props;\r\n\r\n\tlet { classes: styles, cx } = useStyles(undefined, { props: { classes } });\r\n\r\n\tconst checkClgCtaLink = (link: ClgCtaLink) =>\r\n\t\tnotNullOrEmpty(link.clgEndpoint) && notNullOrEmpty(link.tool);\r\n\r\n\tconst checkCtaLink = (cta: CtaInfo) =>\r\n\t\tcta?.link &&\r\n\t\t(typeof (cta.link) === 'string'\r\n\t\t\t? cta.link.length\r\n\t\t\t: checkClgCtaLink(cta.link));\r\n\r\n\tconst hasCta1 = checkCtaLink(cta1);\r\n\tconst hasCta2 = checkCtaLink(cta2);\r\n\tconst hasCta = hasCta1 || hasCta2;\r\n\r\n\tif (!hasCta)\r\n\t\treturn null;\r\n\r\n\tconst CommonProps = { bid, culture, dealer, params, className: styles.cta, onClick: onCtaClick };\r\n\r\n\tconst colorCta1 = 'primary';\r\n\tconst colorCta2 = !primaryIfSingle || hasCta1 ? 'secondary' : 'primary';\r\n\r\n\tlet ctas = [\r\n\t\thasCta1 && ,\r\n\t\thasCta2 && \r\n\t];\r\n\r\n\tif (reverse)\r\n\t\tctas = ctas.reverse();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{ctas}\r\n\t\t
\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport './disclaimerStatic.scss';\r\nimport { useStyles } from 'tss-react/mui';\r\n\r\nexport type DisclaimerStaticProps = {\r\n\ttitle?: string,\r\n\tcontent: string,\r\n\tclasses?: {\r\n\t\troot?: string;\r\n\t\ttitle?: string;\r\n\t\tcontent?: string;\r\n\t}\r\n};\r\n\r\nconst DisclaimerStatic: React.FC = ({ content, title, classes: classOverrides }) => {\r\n\tconst { cx } = useStyles();\r\n\treturn (\r\n\t\t\r\n\t\t\t
{title}
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default DisclaimerStatic;\r\n","import ExpandLessIcon from '@mui/icons-material/ExpandLess';\r\nimport { Collapse } from '@mui/material';\r\nimport deepmerge from 'deepmerge';\r\nimport React, { useState } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'ExpandDisclaimer' })(theme => deepmerge({\r\n\troot: {\r\n\r\n\t},\r\n\tbutton: {\r\n\t\tdisplay: 'inline-flex',\r\n\t\talignItems: 'center',\r\n\t\tcursor: 'pointer'\r\n\t},\r\n\tlabel: {\r\n\t\tfontWeight: 'bold',\r\n\t\ttextTransform: 'uppercase',\r\n\t\tfontSize: '14px',\r\n\t\tlineHeight: '20px'\r\n\t},\r\n\tindicator: {\r\n\t\tmarginLeft: 10,\r\n\t\ttransitionDuration: '0.25s',\r\n\t\ttransitionProperty: 'transform',\r\n\t\tcolor: theme.palette.dropdownIcon,\r\n\t\t'&.less': {\r\n\t\t\ttransform: 'rotate(0deg)'\r\n\t\t},\r\n\t\t'&.more': {\r\n\t\t\ttransform: 'rotate(180deg)'\r\n\t\t}\r\n\t},\r\n\tcontent: {\r\n\t\ttextAlign: 'justify',\r\n\t\tpadding: '26px 0 0 0',\r\n\t\tmargin: 0,\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px',\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '20px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tfontSize: '12px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '20px'\r\n\t\t}\r\n\t}\r\n}, theme?.Skoda?.overrides?.SkodaExpandDisclaimer ?? {}));\r\n\r\nexport type DisclaimerExpandProps = {\r\n\ttitle: string;\r\n\topenDefault?: boolean;\r\n\tclasses?: Partial['classes']>;\r\n\tchildren: string;\r\n};\r\n\r\nconst DisclaimerExpand: React.FC = (props) => {\r\n\tconst { title, openDefault, children } = props;\r\n\tconst [expanded, setExpanded] = useState(openDefault);\r\n\r\n\tlet { classes, cx } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
setExpanded(prev => !prev)}>\r\n\t\t\t\t\r\n\t\t\t\t\t{title}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default DisclaimerExpand;\r\n","import { ClickAwayListener, Tooltip, TooltipProps } from '@mui/material';\r\nimport React, { useState } from 'react';\r\n\r\nexport type EfficiencyClassTooltipProps = React.PropsWithChildren<{\r\n\ttitle: React.ReactNode;\r\n\tplacement?: TooltipProps['placement'];\r\n\tonTooltipOpen?: () => void;\r\n}>;\r\n\r\nexport const EfficiencyClassTooltip: React.FC = (props) => {\r\n\tconst [isTooltipOpen, setTooltipOpen] = useState(false);\r\n\r\n\treturn (\r\n\t\t setTooltipOpen(false)}>\r\n\t\t\t {\r\n\t\t\t\t\tsetTooltipOpen(true);\r\n\t\t\t\t\tprops.onTooltipOpen?.();\r\n\t\t\t\t}}\r\n\t\t\t\tonClose={() => setTooltipOpen(false)}\r\n\t\t\t\tdisableTouchListener\r\n\t\t\t>\r\n\t\t\t\t setTooltipOpen(true)}>{props.children}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","import { Paper, PaperProps } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { OverlayScrollbarsComponent } from 'overlayscrollbars-react';\r\nimport 'overlayscrollbars/css/OverlayScrollbars.css';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'Scrollbar' })(theme => ({\r\n\troot: {\r\n\t\t'& .os-scrollbar-vertical': { width: '7px', padding: '0px' },\r\n\t\t'&.os-theme-dark': {\r\n\t\t\toverflow: 'hidden !important',\r\n\t\t\t'& .os-scrollbar': {\r\n\t\t\t\t'& .os-scrollbar-track': {\r\n\t\t\t\t\t'& .os-scrollbar-handle': {\r\n\t\t\t\t\t\tbackground: theme.palette.scrollbar.dark\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t'&.os-theme-light': {\r\n\t\t\toverflow: 'hidden !important',\r\n\t\t\t'& .os-scrollbar': {\r\n\t\t\t\t'& .os-scrollbar-track': {\r\n\t\t\t\t\t'& .os-scrollbar-handle': {\r\n\t\t\t\t\t\tbackground: theme.palette.scrollbar.light\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nconst useStylesSelectMenuScrollbar = makeStyles({ name: 'SelectMenuScrollbar' })(theme => ({\r\n\theader: {\r\n\t\tpadding: '6px 16px'\r\n\t},\r\n\tpaper: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column'\r\n\t},\r\n\troot: {\r\n\t\tflexGrow: 1,\r\n\t\t'&.os-theme-dark, &.os-theme-light': {\r\n\t\t\t'& .os-scrollbar-vertical': {\r\n\t\t\t\twidth: '17px',\r\n\t\t\t\tpadding: '10px 10px 10px 0px'\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type SkodaScrollbarProps = {\r\n\tclassName?: string;\r\n\tstyle?: React.CSSProperties;\r\n\tlight?: boolean;\r\n\tchildren?: React.ReactNode;\r\n};\r\n\r\nexport const SkodaScrollbars = ({ className, style, children, light }: SkodaScrollbarProps) => {\r\n\tconst theme = useTheme();\r\n\tconst useLightScrollbar = theme.palette.mode === 'dark' || light;\r\n\r\n\tlet { classes: styles, cx } = useStyles();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{children}\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport type SkodaSelectMenuPaperProps = PaperProps & {\r\n\tmenuHeader: React.ReactNode\r\n};\r\n\r\nexport const SkodaSelectMenu = React.forwardRef(({ children, menuHeader, className, ...props }, ref) => {\r\n\tlet { classes: styles, cx } = useStylesSelectMenuScrollbar();\r\n\treturn (\r\n\t\t\r\n\t\t\t{menuHeader &&\r\n\t\t\t\t\r\n\t\t\t\t\t{menuHeader}\r\n\t\t\t\t
}\r\n\t\t\t\r\n\t\t\t\t{children}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n});\r\n","import { Button, Fab, MenuProps, Paper, PaperProps, Select, Slide } from '@mui/material';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { SkodaScrollbars } from '../../scrollbars';\r\nimport { ResponsiveSelectProps } from '../responsiveSelect';\r\n\r\nconst useStyles = makeStyles({ name: 'MobileSelect' })(theme => ({\r\n\tpaper: {\r\n\t\tpadding: '25px 0px 25px 0px',\r\n\t\ttop: 'unset !important',\r\n\t\tbottom: '0 !important',\r\n\t\tleft: '0 !important',\r\n\t\tright: '0 !important',\r\n\t\tmaxWidth: 'unset',\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tmaxHeight: '75%',\r\n\t\theight: 'auto',\r\n\t\tboxSizing: 'border-box',\r\n\t\t'&.dark': {\r\n\t\t\tbackground: theme.palette.tertiary.main\r\n\t\t}\r\n\t},\r\n\tmenuHeader: {\r\n\t\tpadding: '6px 16px'\r\n\t},\r\n\tscrollbars: {\r\n\t\t'&.os-host': {\r\n\t\t\toverflow: 'hidden !important',\r\n\t\t\tflex: 1,\r\n\t\t\tmaxHeight: 'unset',\r\n\t\t\theight: 'unset',\r\n\t\t\tdisplay: 'flex',\r\n\t\t\t'& .os-scrollbar': {\r\n\t\t\t\tmaxHeight: 'inherit',\r\n\t\t\t\t'&.os-scrollbar-vertical': {\r\n\t\t\t\t\twidth: '17px',\r\n\t\t\t\t\tpadding: '0px 10px 0px 0px'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tbuttons: {\r\n\t\tflexGrow: 0,\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'center',\r\n\t\tmarginTop: '15px'\r\n\t},\r\n\tbutton: {\r\n\t\tmarginBottom: '15px',\r\n\t\t'&:last-child': { marginBottom: '0px' },\r\n\t\t'&.cancel': {\r\n\t\t\tfontSize: '10px',\r\n\t\t\tfontWeight: 'bold',\r\n\t\t\tfontStretch: 'normal',\r\n\t\t\tfontStyle: 'normal',\r\n\t\t\tlineHeight: 'normal',\r\n\t\t\tletterSpacing: '1px',\r\n\t\t\t'&.light': {\r\n\t\t\t\tcolor: theme.palette.text.primary\r\n\t\t\t},\r\n\t\t\t'&.dark': {\r\n\t\t\t\tcolor: theme.palette.skodaColors['neutrals-white']\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport const MobileSelect = React.forwardRef((props, ref) => {\r\n\tconst { textCancel, textConfirm, dark, MenuProps, menuHeader, ...other } = props;\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [value, setValue] = useState(props.value);\r\n\tconst [children, setChildren] = useState(props.children);\r\n\tconst confirmMode = textConfirm && textConfirm.length;\r\n\r\n\tlet { cx } = useStyles();\r\n\r\n\t// sync local value and children with props\r\n\tuseEffect(() => {\r\n\t\tsetValue(props.value);\r\n\t\tsetChildren(props.children);\r\n\t}, [props.value, props.children]);\r\n\r\n\tconst handleCancel = () => {\r\n\t\tsetOpen(false);\r\n\t\tsetValue(props.value);\r\n\t};\r\n\r\n\tconst handleConfirm = () => {\r\n\t\tsetOpen(false);\r\n\t\tconst evt = { target: { name: props.name, value } };\r\n\t\tprops.onChange(evt as any, undefined);\r\n\t};\r\n\r\n\tconst menuProps: Partial = {\r\n\t\t...MenuProps,\r\n\t\tBackdropProps: {\r\n\t\t\tonClick: handleCancel\r\n\t\t},\r\n\t\tPaperProps: {\r\n\t\t\tcomponent: MobileSelectMenu,\r\n\t\t\ttextCancel,\r\n\t\t\ttextConfirm,\r\n\t\t\tsquare: true,\r\n\t\t\tenableConfirm: props.value !== value,\r\n\t\t\tonCancel: handleCancel,\r\n\t\t\tonConfirm: handleConfirm,\r\n\t\t\tdark,\r\n\t\t\tmenuHeader\r\n\t\t} as MobileSelectMenuProps,\r\n\t\tMenuListProps: {\r\n\t\t\tdisablePadding: true\r\n\t\t},\r\n\t\tTransitionComponent: Slide,\r\n\t\tTransitionProps: {\r\n\t\t\tdirection: 'up'\r\n\t\t} as any\r\n\t};\r\n\r\n\t// add dark color class to mobile menu items\r\n\tconst mobileMenuItems = React.Children.map(children, child => {\r\n\t\tif (React.isValidElement(child)) {\r\n\t\t\treturn React.cloneElement(child, { ...child.props, className: cx(child.props.className, dark && 'dark') });\r\n\t\t}\r\n\t});\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n});\r\n\r\ntype MobileSelectMenuProps = {\r\n\ttextCancel: string;\r\n\ttextConfirm: string;\r\n\tenableConfirm: boolean;\r\n\tonCancel: () => void;\r\n\tonConfirm: () => void;\r\n\tdark?: boolean;\r\n\tconfirmButton?: React.ReactNode;\r\n\tmenuHeader: React.ReactNode;\r\n} & PaperProps;\r\n\r\nexport const MobileSelectMenu = React.forwardRef((props, ref) => {\r\n\tconst { children, onCancel, onConfirm, enableConfirm, textCancel, textConfirm, dark, className, confirmButton, menuHeader, ...rest } = props;\r\n\tconst showConfirm = (textConfirm && textConfirm.length && props.onConfirm) || confirmButton;\r\n\tconst showCancel = textCancel && textCancel.length > 0;\r\n\tconst showButtons = showConfirm || showCancel;\r\n\r\n\tlet { classes: styles, cx } = useStyles();\r\n\r\n\tconst _confirmButton = confirmButton ? confirmButton : ;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{menuHeader && {menuHeader}
}\r\n\t\t\t\r\n\t\t\t{showButtons &&\r\n\t\t\t\t\r\n\t\t\t\t\t{showConfirm &&\r\n\t\t\t\t\t\t_confirmButton}\r\n\t\t\t\t\t{showCancel &&\r\n\t\t\t\t\t\t}\r\n\t\t\t\t
}\r\n\t\t\r\n\t);\r\n});\r\n\r\ntype ConfirmButtonProps = {\r\n\ttext: string;\r\n\tenable: boolean;\r\n\tonClick: () => void;\r\n};\r\n\r\nexport const ConfirmButton = (props: ConfirmButtonProps) => {\r\n\tconst { text, enable, onClick } = props;\r\n\tconst { classes: styles, cx } = useStyles();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{text}\r\n\t\t\r\n\t);\r\n};\r\n\r\nMobileSelect.defaultProps = {\r\n\tdark: true\r\n};\r\n","import { Select, SelectProps, useMediaQuery } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React from 'react';\r\nimport { SkodaSelectMenuPaperProps } from '../scrollbars/scrollbars';\r\nimport { MobileSelect } from './mobileSelect';\r\n\r\nexport type ResponsiveSelectProps = Omit & {\r\n textCancel: string;\r\n textConfirm: string;\r\n dark?: boolean;\r\n\tmenuHeader?: React.ReactNode;\r\n};\r\n\r\nexport const ResponsiveSelect = React.forwardRef((props, ref) => {\r\n const { textCancel, textConfirm, dark, menuHeader, ...other } = props;\r\n const theme = useTheme();\r\n const isDesktop = useMediaQuery(theme.originalBreakpoints.up('sm'));\r\n\t\r\n\tconst MenuProps = {\r\n\t\t...theme.components.MuiSelect.defaultProps.MenuProps,\r\n\t\tPaperProps: {\r\n\t\t\t...theme.components.MuiSelect.defaultProps.MenuProps.PaperProps,\r\n\t\t\tmenuHeader\r\n\t\t} as SkodaSelectMenuPaperProps\r\n\t};\r\n\r\n return isDesktop\r\n ? \r\n : ;\r\n}); \r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\n\r\nconst useStyles = makeStyles({ name: 'LabelAndValue' })(theme => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'flex-start',\r\n\t\tfontSize: '14px',\r\n\t\tlineHeight: '16px',\r\n\t\tfontWeight: 'bold'\r\n\t},\r\n\tlabel: {\r\n\t\tcolor: theme.palette.text.primary,\r\n\t\tfontWeight: theme.typography.fontWeightLight\r\n\t},\r\n\tvalue: {\r\n\r\n\t}\r\n}));\r\n\r\nexport type LabelAndValueProps = {\r\n\tvalue: string;\r\n\tlabel?: string;\r\n\tclasses?: {\r\n\t\troot?: string;\r\n\t\tlabel?: string;\r\n\t\tvalue?: string;\r\n\t};\r\n};\r\n\r\nexport const LabelAndValue: React.FC = (props) => {\r\n\tconst { label, value, classes, ...other } = props;\r\n\tconst { classes: styles } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{notNullOrEmpty(label) &&\r\n\t\t\t\t{label}}\r\n\t\t\t{value}\r\n\t\t
\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { BatteryLevelIcon } from '../icons';\r\nimport { LabelAndValue } from '../labelAndValue';\r\nimport { Level } from './types';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityBatterySelectContent' })(theme => ({\r\n\ticon: {\r\n\t\t'&.small': {\r\n\t\t\theight: 'auto',\r\n\t\t\tfontSize: '48px',\r\n\t\t\tmarginRight: '40px',\r\n\t\t\tmarginTop: 4\r\n\t\t},\r\n\t\t'&.large': {\r\n\t\t\theight: 'auto',\r\n\t\t\tfontSize: '66px',\r\n\t\t\tmarginRight: '32px'\r\n\t\t}\r\n\t},\r\n\tvalueItem: {\r\n\t\tmarginRight: 15,\r\n\t\t'&.large': {\r\n\t\t\tminWidth: 73,\r\n\t\t\tfontSize: '24px',\r\n\t\t\tlineHeight: '28px'\r\n\t\t},\r\n\t\t'&.small': {\r\n\t\t\tminWidth: 73,\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t'&.small-wide': {\r\n\t\t\tminWidth: 129,\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t'&:last-child': {\r\n\t\t\tmarginRight: 0\r\n\t\t}\r\n\t},\r\n\tnote: {\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px',\r\n\t\twhiteSpace: 'normal',\r\n\t\tfontWeight: theme.typography.fontWeightLight,\r\n\t\toverflowWrap: 'anywhere',\r\n\t\tdisplay: 'flex',\r\n\t\tminHeight: 28,\r\n\t\talignItems: 'center'\r\n\t}\r\n}));\r\n\r\nexport type EmobilityBatteryMenuItemContentProps = {\r\n\tlevel: Level;\r\n\ticonVariant: 'small' | 'large' | 'none';\r\n\tvalueVariant: 'small' | 'small-wide' | 'large';\r\n\tlabelCharging?: string;\r\n\tnote?: string;\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const EmobilityBatteryMenuItemContent: React.FC = (props) => {\r\n\tconst { level, iconVariant, labelCharging, note, valueVariant } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{iconVariant !== 'none' &&\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t{notNullOrEmpty(note) &&\r\n\t\t\t\t\r\n\t\t\t\t\t{note}\r\n\t\t\t\t}\r\n\t\t\r\n\t);\r\n};\r\n","export type SizeStylesDictionary =\r\n\tPartial<{ [size in Size]: ValueType }>\r\n\r\n/**\r\n * Picks style from styles dictionary according to size value.\r\n * @param size current size.\r\n * @param styles dictionary size - style value\r\n * @returns resolved value from dictionary.\r\n */\r\nexport const getStyleBySize = (size: number, styles: SizeStylesDictionary): ValueType =>\r\n\tObject.keys(styles)\r\n\t\t.map(Number)\r\n\t\t.sort()\r\n\t\t.map(key => ({ key, style: styles[key] }))\r\n\t\t.reduce((result, rule) => size >= rule.key ? rule.style : result, undefined);\r\n","import { getStyleBySize, SizeStylesDictionary } from '../../utils/styles';\r\n\r\n/**\r\n * Engine select breakpoints.\r\n */\r\nexport type SelectSize = 0 | 275 | 822;\r\n\r\n/**\r\n * All engine select breakpoints named in array.\r\n */\r\nexport const selectSizes = [0, 275, 822] as SelectSize[];\r\n\r\n/**\r\n * Engine select makeStyles props type.\r\n */\r\nexport type StylesProps = { selectSize: number; };\r\n\r\n/**\r\n * Builds function which resolves css property value from size in StyleProps.\r\n * Use this in makeStyles function of engine select. \r\n * @param styles dictionary size - property value \r\n * @returns function\r\n */\r\nexport const fromSize = (styles: SizeStylesDictionary) =>\r\n\t(props: StylesProps) => getStyleBySize(props.selectSize, styles);\r\n","import { MenuItem, useMediaQuery } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React from 'react';\r\nimport { useMeasure } from 'react-use';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { StylesProps } from '../emobilityEngineSelect/stylesHelpers';\r\nimport { ResponsiveSelect, ResponsiveSelectProps } from '../responsiveSelect';\r\nimport { EmobilityBatteryMenuItemContent, EmobilityBatteryMenuItemContentProps } from './emobilityBatteryValueItemContent';\r\nimport { fromSize } from './stylesHelpers';\r\nimport { Battery, Level } from './types';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityBatterySelect' })((theme, props) => ({\r\n\tselect: {\r\n\t\tpaddingTop: 0,\r\n\t\tpaddingBottom: 0,\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tjustifyContent: 'space-between',\r\n\t\twidth: '100%',\r\n\t\t'&.MuiSelect-select': {\r\n\t\t\theight: fromSize({ '0': 56, '275': 83 })(props)\r\n\t\t}\r\n\t},\r\n\ticon: {\r\n\t\ttop: '50%',\r\n\t\tright: fromSize({ '0': 16, '275': 24 })(props)\r\n\t},\r\n\tmenuItem: {\r\n\t\talignItems: 'flex-start',\r\n\t\t'&.mobile-screen': {\r\n\t\t\tpaddingRight: 28,\r\n\t\t\tpaddingLeft: 28,\r\n\t\t\tpaddingTop: 13,\r\n\t\t\tpaddingBottom: 13,\r\n\t\t\tminHeight: 'unset'\r\n\t\t},\r\n\t\t'&.desktop-screen': {\r\n\t\t\tpaddingTop: 19,\r\n\t\t\tpaddingBottom: 19\r\n\t\t}\r\n\t}\r\n}));\r\n\r\ntype OmitProps = 'children' | 'onChange' | 'value';\r\n\r\nexport type EmobilityBatterySelectProps = Omit & {\r\n\titems: Battery[];\r\n\tvalue: Level;\r\n\tlabelCharging: string;\r\n\tonChange: (value: Level) => void;\r\n\tonItemClick?: (item: Battery, index: number) => void;\r\n};\r\n\r\nexport const EmobilityBatterySelect: React.FC = (props) => {\r\n\tconst { items, value, onChange, labelCharging, onItemClick, classes, dark, ...other } = props;\r\n\tconst theme = useTheme();\r\n\tconst isMobileScreen = useMediaQuery(theme.originalBreakpoints.only('xs'));\r\n\tconst [selectRef, { width: selectSize }] = useMeasure();\r\n\r\n\tlet { classes: styles, cx } = useStyles({ selectSize }, { props });\r\n\r\n\tif (!notNullOrEmpty(items)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst createMobileScreenMenuItemProps = (battery: Battery) => ({\r\n\t\ticonVariant: 'none',\r\n\t\tvalueVariant: 'large',\r\n\t\t...battery\r\n\t} as EmobilityBatteryMenuItemContentProps);\r\n\r\n\tconst createDesktopScreenMenuItemProps = (battery: Battery) => ({\r\n\t\ticonVariant: 'small',\r\n\t\tvalueVariant: 'small',\r\n\t\tlabelCharging,\r\n\t\t...battery\r\n\t} as EmobilityBatteryMenuItemContentProps);\r\n\r\n\tconst createMenuItemProps = (engine: Battery) =>\r\n\t\tisMobileScreen\r\n\t\t\t? createMobileScreenMenuItemProps(engine)\r\n\t\t\t: createDesktopScreenMenuItemProps(engine);\r\n\r\n\tconst crateValueProps = (battery: Battery) => ({\r\n\t\ticonVariant: 'large',\r\n\t\tvalueVariant: fromSize({ '0': 'small', '822': 'small-wide' })({ selectSize }),\r\n\t\tlabelCharging,\r\n\t\tlevel: battery.level\r\n\t} as EmobilityBatteryMenuItemContentProps);\r\n\r\n\tconst menuItems = items.map((item, index) =>\r\n\t\t);\r\n\r\n\tconst renderValue = (level: Level) => {\r\n\t\tconst item = items.find(i => i.level === level);\r\n\t\tconst props = crateValueProps(item);\r\n\t\treturn ;\r\n\t};\r\n\r\n\tconst DesktopMenuProps = {\r\n\t\t...theme.components.MuiSelect.defaultProps.MenuProps,\r\n\t\tPaperProps: {\r\n\t\t\t...theme.components.MuiSelect.defaultProps.MenuProps.PaperProps,\r\n\t\t\tstyle: { width: selectSize }\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t onChange(ev.target.value as Level)}\r\n\t\t\trenderValue={renderValue}\r\n\t\t\tvariant='filled'\r\n\t\t\tdark={dark}\r\n\t\t\tMenuProps={isMobileScreen ? undefined : DesktopMenuProps}\r\n\t\t\t{...other}>\r\n\t\t\t{menuItems}\r\n\t\t\r\n\t);\r\n};\r\n\r\nEmobilityBatterySelect.defaultProps = {\r\n\tdark: true\r\n};\r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityEngineConsumptionAndCo2' })(() => ({\r\n\troot: {\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px',\r\n\t\tmarginTop: '9px',\r\n\r\n\t\t'> div': {\r\n\t\t\tdisplay: 'inline-block',\r\n\t\t\t'&:not(:last-child)': {\r\n\t\t\t\tpaddingRight: '7px'\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tlabel: {},\r\n\tvalue: {\r\n\t\tpaddingLeft: '3px',\r\n\t\tfontWeight: 'bold',\r\n\t\twhiteSpace: 'nowrap'\r\n\t},\r\n\tco2ClassValue: {\r\n\t\tfontSize: '14px',\r\n\t\t'& svg': {\r\n\t\t\theight: '10px'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\ntype ConsumptionData = {\r\n\tlabel: string;\r\n\tvalue: string;\r\n};\r\n\r\ntype CO2Data = {\r\n\tlabel: string;\r\n\tvalue: string;\r\n};\r\n\r\ntype EfficiencyClassData = {\r\n\tlabel: string;\r\n\tvalue: React.ReactNode;\r\n};\r\n\r\nexport type EmobilityEngineConsumptionAndCo2Props = {\r\n\tconsumption?: ConsumptionData;\r\n\tco2?: CO2Data;\r\n\tefficiencyClass?: EfficiencyClassData;\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const EmobilityEngineConsumptionAndCo2: React.FC = (props) => {\r\n\tconst { consumption, co2, efficiencyClass } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props });\r\n\r\n\tif (!consumption && !co2 && !efficiencyClass) return null;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{consumption && (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{consumption.value}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t{co2 && (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{co2.value}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t{efficiencyClass && (\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{efficiencyClass.value}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t
\r\n\t);\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\n\r\nexport type ImageLoaderProps = Omit, 'src'> & {\r\n\tdummy?: string;\r\n\tsrc: string | string[]\r\n};\r\n\r\nexport const ImageLoader: React.FC = (props) => {\r\n\tconst { src, dummy, alt, onLoad, onLoadStart, ...other } = props;\r\n\tconst images = typeof (src) === 'string' ? [src] : src;\r\n\tconst [defaultImage, ...otherImages] = images;\r\n\tconst [imageLoaded, setImageLoaded] = useState(false);\r\n\r\n\tconst handleOnLoad = useCallback((event: React.SyntheticEvent) => {\r\n\t\tsetImageLoaded(true);\r\n\t\tonLoad?.(event);\r\n\t}, [onLoad, setImageLoaded]);\r\n\r\n\tconst handleOnLoadStart = useCallback((event: React.SyntheticEvent) => {\r\n\t\tsetImageLoaded(false);\r\n\t\tonLoadStart?.(event);\r\n\t}, [onLoadStart, setImageLoaded]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{!imageLoaded && notNullOrEmpty(dummy) &&\r\n\t\t\t\t
}\r\n\t\t\t\r\n\t\t\t\t{otherImages.map(anotherFormatImage =>\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { ImageLoader } from '../imageLoader';\r\nimport { LabelAndValue } from '../labelAndValue';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityEngineSelectContent' })(() => ({\r\n\timage: {\r\n\t\theight: 'auto',\r\n\t\tmarginRight: 0,\r\n\t\t'&.large': {\r\n\t\t\twidth: 110,\r\n\t\t\tmarginLeft: -20,\r\n\t\t\ttransform: 'translateY(-4px)'\r\n\t\t},\r\n\t\t'&.small': {\r\n\t\t\twidth: 85,\r\n\t\t\tmarginLeft: -15\r\n\t\t}\r\n\t},\r\n\ttitlePanel: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tflexGrow: 1,\r\n\t\toverflow: 'hidden'\r\n\t},\r\n\ttitle: {\r\n\t\toverflow: 'hidden',\r\n\t\ttextOverflow: 'ellipsis',\r\n\t\tfontWeight: 'bold',\r\n\t\t'&.small': {\r\n\t\t\tfontSize: '16px',\r\n\t\t\tlineHeight: '18px'\r\n\t\t},\r\n\t\t'&.medium': {\r\n\t\t\tfontSize: '18px',\r\n\t\t\tlineHeight: '20px'\r\n\t\t},\r\n\t\t'&.large': {\r\n\t\t\tfontSize: '24px',\r\n\t\t\tlineHeight: '26px'\r\n\t\t}\r\n\t},\r\n\tsubtitle: {\r\n\t\toverflow: 'hidden',\r\n\t\ttextOverflow: 'ellipsis',\r\n\t\tfontWeight: 'bold',\r\n\t\t'&.small': {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t'&.medium': {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t'&.large': {\r\n\t\t\tfontSize: '16px',\r\n\t\t\tlineHeight: '18px'\r\n\t\t}\r\n\t},\r\n\tpanelValueItems: {\r\n\t\tdisplay: 'flex',\r\n\t\tmarginLeft: 15\r\n\t},\r\n\tvalueItem: {\r\n\t\tmarginRight: 15,\r\n\t\t'&.small': {\r\n\t\t\tminWidth: 73,\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t'&.small-wide': {\r\n\t\t\tminWidth: 129,\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '16px'\r\n\t\t},\r\n\t\t'&.large': {\r\n\t\t\tfontSize: '16px',\r\n\t\t\tlineHeight: '28px',\r\n\t\t\tfontWeight: 'inherit'\r\n\t\t},\r\n\t\t'&:last-child': {\r\n\t\t\tmarginRight: 0\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type EmobilityEngineMenuItemContentProps = {\r\n\ttitle: string;\r\n\tsubtitle?: string;\r\n\ttitleVariant: 'small' | 'medium' | 'large';\r\n\tvalueVariant: 'small' | 'small-wide' | 'large';\r\n\timageVariant?: 'small' | 'large';\r\n\tbattery?: {\r\n\t\tlabel?: string;\r\n\t\tvalue: string;\r\n\t};\r\n\trange?: {\r\n\t\tlabel?: string;\r\n\t\tvalue: string;\r\n\t};\r\n\timage?: {\r\n\t\tsrc: string;\r\n\t\tdummy: string;\r\n\t};\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const EmobilityEngineMenuItemContent: React.FC = (props) => {\r\n\tconst { image, title, subtitle, titleVariant, valueVariant, imageVariant, battery, range } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{notNullOrEmpty(image?.src) && }\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{title}\r\n\t\t\t\t\r\n\t\t\t\t{notNullOrEmpty(subtitle) && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{subtitle}\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\t{(range || battery) && (\r\n\t\t\t\t\r\n\t\t\t\t\t{range && }\r\n\t\t\t\t\t{battery && }\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n};\r\n\r\nEmobilityEngineMenuItemContent.defaultProps = {\r\n\timageVariant: 'large'\r\n};\r\n","import { getStyleBySize, SizeStylesDictionary } from '../../utils/styles';\r\n\r\n/**\r\n * All engine select breakpoints named in array.\r\n */\r\nexport const selectSizes = [0, 275, 320, 416, 504, 822] as const;\r\n\r\n/**\r\n * Engine select breakpoints.\r\n */\r\nexport type SelectSize = typeof selectSizes[number];\r\n\r\n/**\r\n * Engine select makeStyles props type.\r\n */\r\nexport type StylesProps = { selectSize: number };\r\n\r\n/**\r\n * Builds function which resolves css property value from size in StyleProps.\r\n * Use this in makeStyles function of engine select.\r\n * @param styles dictionary size - property value\r\n * @returns function\r\n */\r\nexport function fromSize(styles: SizeStylesDictionary) {\r\n\treturn (props: StylesProps) => getStyleBySize(props.selectSize, styles);\r\n}\r\n","import { MenuItem, MenuProps, useMediaQuery } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React from 'react';\r\nimport { useMeasure } from 'react-use';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { ResponsiveSelect, ResponsiveSelectProps } from '../responsiveSelect';\r\nimport { EmobilityEngineConsumptionAndCo2, EmobilityEngineConsumptionAndCo2Props } from './emobilityEngineConsumptionAndCo2';\r\nimport { EmobilityEngineMenuItemContent, EmobilityEngineMenuItemContentProps } from './emobilityEngineValueItemContent';\r\nimport { StylesProps, fromSize } from './stylesHelpers';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityEngineSelect' })((theme, props) => ({\r\n\tselect: {\r\n\t\twidth: '100%',\r\n\t\tpaddingTop: 0,\r\n\t\tpaddingBottom: 0,\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\t'&.MuiSelect-select': {\r\n\t\t\theight: fromSize({ 0: 56, 275: 83 })(props)\r\n\t\t}\r\n\t},\r\n\ticon: {\r\n\t\ttop: '50%',\r\n\t\tright: fromSize({ 0: 16, 275: 24 })(props)\r\n\t},\r\n\tmenuItem: {\r\n\t\t'&.mobile-screen': {\r\n\t\t\tpaddingRight: 28,\r\n\t\t\tpaddingLeft: 28,\r\n\t\t\tpaddingTop: 2,\r\n\t\t\tpaddingBottom: 2\r\n\t\t},\r\n\t\t'&.desktop-screen': {\r\n\t\t\tpaddingTop: 4,\r\n\t\t\tpaddingBottom: 4,\r\n\t\t\tpaddingRight: fromSize({ 0: 24, 320: 16, 504: 64 })(props)\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type EmobilityEngineSelectConsumptionData = {\r\n\tlabel: string;\r\n\tvalue: string;\r\n};\r\n\r\nexport type EmobilityEngineSelectCo2Data = {\r\n\tlabel: string;\r\n\tvalue: string;\r\n};\r\n\r\nexport type EmobilityEngineSelectEfficiencyClassData = {\r\n\tlabel: string;\r\n\tvalue: React.ReactNode;\r\n};\r\n\r\nexport type EmobilityEngineSelectItem = {\r\n\tid: string;\r\n\timage: string;\r\n\ttitle: string;\r\n\tsubtitle?: string;\r\n\tbattery?: string;\r\n\trange?: string;\r\n\tconsumption?: EmobilityEngineSelectConsumptionData;\r\n\tco2?: EmobilityEngineSelectCo2Data;\r\n\tefficiencyClass?: EmobilityEngineSelectEfficiencyClassData;\r\n};\r\n\r\ntype OmitProps = 'children' | 'onChange' | 'value';\r\n\r\nexport type EmobilityEngineSelectProps = Omit & {\r\n\tengines: EmobilityEngineSelectItem[];\r\n\tdummy: string;\r\n\tlabelBattery: string;\r\n\tlabelRange: string;\r\n\tvalue: string;\r\n\tshowConsumptionAndCo2?: boolean;\r\n\tonChange: (value: string) => void;\r\n\tonItemClick?: (engine: EmobilityEngineSelectItem, index: number) => void;\r\n};\r\n\r\nexport const EmobilityEngineSelect: React.FC = (props) => {\r\n\tconst { engines, value, onChange, dummy, labelBattery, labelRange, showConsumptionAndCo2, onItemClick, classes, dark, ...other } = props;\r\n\r\n\tconst theme = useTheme();\r\n\tconst isMobileScreen = useMediaQuery(theme.originalBreakpoints.only('xs'));\r\n\tconst [selectRef, { width: selectSize }] = useMeasure();\r\n\tconst { classes: styles, cx } = useStyles({ selectSize }, { props });\r\n\r\n\tif (!notNullOrEmpty(engines)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst createMobileScreenMenuItemProps = (engine: EmobilityEngineSelectItem): EmobilityEngineMenuItemContentProps => ({\r\n\t\ttitle: engine.title,\r\n\t\tsubtitle: engine.subtitle,\r\n\t\ttitleVariant: 'medium',\r\n\t\timage: { src: engine.image, dummy },\r\n\t\timageVariant: 'small',\r\n\t\trange: { value: engine.range },\r\n\t\tvalueVariant: 'large'\r\n\t});\r\n\r\n\tconst createDesktopScreenMenuItemProps = (engine: EmobilityEngineSelectItem): EmobilityEngineMenuItemContentProps => ({\r\n\t\ttitle: engine.title,\r\n\t\tsubtitle: engine.subtitle,\r\n\t\ttitleVariant: 'small',\r\n\t\tvalueVariant: fromSize({ 0: 'small', 822: 'small-wide' })({\r\n\t\t\tselectSize\r\n\t\t}),\r\n\t\timage: fromSize({ 0: null, 275: { src: engine.image, dummy } })({ selectSize }),\r\n\t\trange: fromSize({ 0: null, 320: { label: labelRange, value: engine.range } })({ selectSize }),\r\n\t\tbattery: fromSize({ 0: null, 416: { label: labelBattery, value: engine.battery } })({ selectSize })\r\n\t});\r\n\r\n\tconst createMenuItemProps = (engine: EmobilityEngineSelectItem) => {\r\n\t\tif (isMobileScreen) return createMobileScreenMenuItemProps(engine);\r\n\t\treturn createDesktopScreenMenuItemProps(engine);\r\n\t};\r\n\r\n\tconst createSelectedEngineProps = (engine: EmobilityEngineSelectItem): EmobilityEngineMenuItemContentProps => ({\r\n\t\ttitle: engine.title,\r\n\t\tsubtitle: engine.subtitle,\r\n\t\ttitleVariant: fromSize({ 0: 'small', 320: 'large' })({\r\n\t\t\tselectSize\r\n\t\t}),\r\n\t\tvalueVariant: fromSize({ 0: 'small', 822: 'small-wide' })({\r\n\t\t\tselectSize\r\n\t\t}),\r\n\t\timage: fromSize({ 0: null, 275: { src: engine.image, dummy } })({ selectSize }),\r\n\t\trange: fromSize({ 0: null, 416: { label: labelRange, value: engine.range } })({ selectSize }),\r\n\t\tbattery: fromSize({ 0: null, 504: { label: labelBattery, value: engine.battery } })({ selectSize })\r\n\t});\r\n\r\n\tconst renderSelectedEngine = (id: string) => {\r\n\t\tconst engine = engines.find((e) => e.id === id);\r\n\t\treturn ;\r\n\t};\r\n\r\n\tconst createConsumptionProps = (engine: EmobilityEngineSelectItem): EmobilityEngineConsumptionAndCo2Props['consumption'] => {\r\n\t\tif (!showConsumptionAndCo2 || !engine.consumption) return undefined;\r\n\t\treturn { label: engine.consumption.label, value: engine.consumption.value };\r\n\t};\r\n\r\n\tconst createCo2Props = (engine: EmobilityEngineSelectItem): EmobilityEngineConsumptionAndCo2Props['co2'] => {\r\n\t\tif (!showConsumptionAndCo2 || !engine.co2) return undefined;\r\n\t\treturn { label: engine.co2.label, value: engine.co2.value };\r\n\t};\r\n\r\n\tconst createEfficiencyClassProps = (engine: EmobilityEngineSelectItem): EmobilityEngineConsumptionAndCo2Props['efficiencyClass'] => {\r\n\t\tif (!showConsumptionAndCo2 || !engine.efficiencyClass) return undefined;\r\n\t\treturn { label: engine.efficiencyClass.label, value: engine.efficiencyClass.value };\r\n\t};\r\n\r\n\tconst renderConsumptionAndCo2 = (id: string) => {\r\n\t\tconst engine = engines.find((e) => e.id === id);\r\n\t\treturn ;\r\n\t};\r\n\r\n\tconst DesktopMenuProps: Partial = {\r\n\t\t...theme.components.MuiSelect.defaultProps.MenuProps,\r\n\t\tPaperProps: {\r\n\t\t\t...theme.components.MuiSelect.defaultProps.MenuProps.PaperProps,\r\n\t\t\tstyle: { width: selectSize }\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t onChange(ev.target.value as string)}\r\n\t\t\t\trenderValue={renderSelectedEngine}\r\n\t\t\t\tvariant='filled'\r\n\t\t\t\tdark={dark}\r\n\t\t\t\tMenuProps={isMobileScreen ? undefined : DesktopMenuProps}\r\n\t\t\t\t{...other}\r\n\t\t\t>\r\n\t\t\t\t{engines.map((engine, index) => (\r\n\t\t\t\t\t\r\n\t\t\t\t))}\r\n\t\t\t\r\n\t\t\t{showConsumptionAndCo2 && value && renderConsumptionAndCo2(value)}\r\n\t\t\r\n\t);\r\n};\r\n\r\nEmobilityEngineSelect.defaultProps = {\r\n\tdark: true\r\n};\r\n","import { makeStyles } from 'tss-react/mui';\r\n\r\nexport const useStyles = makeStyles({ name: 'EmobilityExplorePanel' })(theme => ({\r\n\troot: {\r\n\r\n\t},\r\n\tgrid: {\r\n\t\theight: 'auto',\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tjustifyContent: 'center',\r\n\t\t[theme.breakpoints.up('md')]: { height: '372px' },\r\n\t\t[theme.breakpoints.up('lg')]: { height: '450px' }\r\n\t},\r\n\texplore: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'center',\r\n\t\tmarginLeft: '25px',\r\n\t\tmarginRight: '25px',\r\n\t\tpaddingTop: '50px',\r\n\t\tpaddingBottom: '50px',\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tpaddingTop: '70px',\r\n\t\t\tpaddingBottom: '60px',\r\n\t\t\tmaxWidth: '410px',\r\n\t\t\tmarginLeft: 'auto',\r\n\t\t\tmarginRight: 'auto'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmaxWidth: '310px',\r\n\t\t\tmarginRight: '20px',\r\n\t\t\tpaddingTop: '0px',\r\n\t\t\tpaddingBottom: '0px',\r\n\t\t\talignItems: 'flex-start'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tmaxWidth: '350px',\r\n\t\t\tmarginRight: '0px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tmaxWidth: '487px',\r\n\t\t\tmarginRight: '-18px'\r\n\t\t}\r\n\t},\r\n\ttitle: {\r\n\t\tfontWeight: 'bold',\r\n\t\tfontSize: '28px',\r\n\t\tlineHeight: '36px',\r\n\t\tmarginBottom: '6px',\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tmarginBottom: '15px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tfontSize: '32px',\r\n\t\t\tlineHeight: '38px',\r\n\t\t\tmarginBottom: '17px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tfontSize: '36px',\r\n\t\t\tlineHeight: '44px',\r\n\t\t\tmarginBottom: '10px'\r\n\t\t}\r\n\t},\r\n\ttext: {\r\n\t\tfontSize: '16px',\r\n\t\tlineHeight: '24px',\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmarginBottom: '30px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tmarginBottom: '50px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tfontSize: '18px',\r\n\t\t\tlineHeight: '28px',\r\n\t\t\tmarginBottom: '50px'\r\n\t\t},\r\n\t\t'&:last-child': {\r\n\t\t\tmarginBottom: '0'\r\n\t\t}\r\n\t},\r\n\timage: {\r\n\t\twidth: '130%',\r\n\t\tmarginTop: '-10%',\r\n\t\theight: 'auto',\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\twidth: 'unset',\r\n\t\t\theight: '300px',\r\n\t\t\tmarginTop: '-51px',\r\n\t\t\tmarginBottom: '-16px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tdisplay: 'none'\r\n\t\t}\r\n\t},\r\n\trowImageDesktop: {\r\n\t\tdisplay: 'none',\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tdisplay: 'block'\r\n\t\t}\r\n\t},\r\n\timageDesktop: {\r\n\t\theight: '355px',\r\n\t\twidth: 'auto',\r\n\t\tmarginLeft: '-15px',\r\n\t\tmarginTop: '-50px',\r\n\t\tmarginRight: 'auto',\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\theight: '400px',\r\n\t\t\tmarginLeft: '-43px',\r\n\t\t\tmarginTop: '-70px',\r\n\t\t\tmarginRight: 'auto'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\theight: '500px',\r\n\t\t\tmarginLeft: '-45px',\r\n\t\t\tmarginTop: '-70px',\r\n\t\t\tmarginRight: 'auto'\r\n\t\t}\r\n\t},\r\n\t'layer-0': {\r\n\r\n\t},\r\n\t'layer-1': {\r\n\r\n\t},\r\n\t'layer-2': {\r\n\r\n\t}\r\n}));\r\n","import React, { PropsWithChildren, useMemo, useState } from 'react';\r\nimport { EmobilityFilter, EmobilityFilterActions, EmobilityFilterContext } from '../../context';\r\n\r\ntype EmobilityFilterProviderProps = PropsWithChildren<{\r\n\tfilter?: EmobilityFilter;\r\n\tactions?: EmobilityFilterActions;\r\n}>;\r\n\r\nconst defaultEmobilityFilter: EmobilityFilter = {\r\n\tbatterylevel: null,\r\n\tcharging_ac: null,\r\n\tcharging_dc: null,\r\n\tcharging_home: null,\r\n\tcharging_ionity: null,\r\n\tcharging_public: null,\r\n\tfuelconsumption: null,\r\n\tmbv: null,\r\n\tmileage: null,\r\n\townershipperiod: null,\r\n\tsalesgroup: null,\r\n\tactioncode: null,\r\n\tchargingPrice: null,\r\n\tfuelPrice: null,\r\n\tdrivingEnvironment: null,\r\n\tdrivingStyle: null,\r\n\toccupancy: null,\r\n\tseason: null,\r\n\ttemperature: null\r\n};\r\n\r\n/**\r\n * Provides original, current emobility filter values and actions to edit current emobility filter values.\r\n */\r\nexport const EmobilityFilterProvider = (props: EmobilityFilterProviderProps) => {\r\n\tconst { children, filter, actions } = props;\r\n\tconst original = useMemo(() => ({ ...defaultEmobilityFilter, ...filter }), [filter]);\r\n\tconst [current, setCurrent] = useState(original);\r\n\r\n\tconst localActions = useMemo(() => {\r\n\t\treturn ({\r\n\t\t\tonEngineChange: (mbv, salesgroup, actioncode) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, mbv, salesgroup, actioncode }));\r\n\t\t\t\tactions?.onEngineChange?.(mbv, salesgroup, actioncode);\r\n\t\t\t},\r\n\t\t\tonChargingPreferenceChange: (charging_home, charging_public) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, charging_home, charging_public }));\r\n\t\t\t\tactions?.onChargingPreferenceChange?.(charging_home, charging_public);\r\n\t\t\t},\r\n\t\t\tonChargingChange: (charging_ac, charging_dc, charging_ionity) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, charging_ac, charging_dc, charging_ionity }));\r\n\t\t\t\tactions?.onChargingChange?.(charging_ac, charging_dc, charging_ionity);\r\n\t\t\t},\r\n\t\t\tonFuelconsumptionChange: (fuelconsumption) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, fuelconsumption }));\r\n\t\t\t\tactions?.onFuelconsumptionChange?.(fuelconsumption);\r\n\t\t\t},\r\n\t\t\tonMileageChange: (mileage) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, mileage }));\r\n\t\t\t\tactions?.onMileageChange?.(mileage);\r\n\t\t\t},\r\n\t\t\tonOwnershipperiodChange: (ownershipperiod) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, ownershipperiod }));\r\n\t\t\t\tactions?.onOwnershipperiodChange?.(ownershipperiod);\r\n\t\t\t},\r\n\t\t\tonBatterylevelChange: (batterylevel) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, batterylevel }));\r\n\t\t\t\tactions?.onBatterylevelChange?.(batterylevel);\r\n\t\t\t},\r\n\t\t\tonChargingPriceChange: (chargingPrice) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, chargingPrice }));\r\n\t\t\t\tactions?.onChargingPriceChange?.(chargingPrice);\r\n\t\t\t},\r\n\t\t\tonFuelPriceChange: (fuelPrice) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, fuelPrice }));\r\n\t\t\t\tactions?.onFuelPriceChange?.(fuelPrice);\r\n\t\t\t},\r\n\t\t\tonDrivingEnvironmentChange: (drivingEnvironment) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, drivingEnvironment }));\r\n\t\t\t\tactions?.onDrivingEnvironmentChange?.(drivingEnvironment);\r\n\t\t\t},\r\n\t\t\tonDrivingStyleChange: (drivingStyle) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, drivingStyle }));\r\n\t\t\t\tactions?.onDrivingStyleChange?.(drivingStyle);\r\n\t\t\t},\r\n\t\t\tonOccupancyChange: (occupancy) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, occupancy }));\r\n\t\t\t\tactions?.onOccupancyChange?.(occupancy);\r\n\t\t\t},\r\n\t\t\tonSeasonChange: (season) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, season }));\r\n\t\t\t\tactions?.onSeasonChange?.(season);\r\n\t\t\t},\r\n\t\t\tonTemperatureChange: (temperature) => {\r\n\t\t\t\tsetCurrent((prev) => ({ ...prev, temperature }));\r\n\t\t\t\tactions?.onTemperatureChange?.(temperature);\r\n\t\t\t}\r\n\t\t});\r\n\t}, [setCurrent, actions]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{children}\r\n\t\t\r\n\t);\r\n};\r\n","import React, { PropsWithChildren, useCallback, useMemo } from 'react';\r\nimport { EmobilityFilter, EmobilityFilterActions } from '../../context';\r\nimport { notNullOrEmpty, removeNullOrUndefined } from '../../utils/common';\r\nimport { EmobilityFilterProvider } from './emobilityFilterProvider';\r\nimport querystring from 'query-string';\r\n\r\n/**\r\n * EmobilityFilterProvider extension.\r\n * Provides same functionality as EmobilityFilterProvider. Initializes filter from query and also updates query to reflect changes in filter.\r\n */\r\nexport const EmobilityPageFilterProvider = ({ children }: PropsWithChildren) => {\r\n\tconst filter = useMemo(() => {\r\n\t\tconst filter = querystring.parse(window.location.search.substr(1));\r\n\t\tconst result: EmobilityFilter = {\r\n\t\t\tmbv: filter.mbv?.toString() ?? null,\r\n\t\t\tsalesgroup: filter.salesgroup?.toString() ?? null,\r\n\t\t\tactioncode: filter.actioncode?.toString() ?? null,\r\n\t\t\tmileage: notNullOrEmpty(filter.mileage) ? +filter.mileage : null,\r\n\t\t\tfuelconsumption: notNullOrEmpty(filter.fuelconsumption) ? +filter.fuelconsumption : null,\r\n\t\t\tcharging_home: notNullOrEmpty(filter.charging_home) ? +filter.charging_home : null,\r\n\t\t\tcharging_public: notNullOrEmpty(filter.charging_public) ? +filter.charging_public : null,\r\n\t\t\tcharging_ac: notNullOrEmpty(filter.charging_ac) ? +filter.charging_ac : null,\r\n\t\t\tcharging_dc: notNullOrEmpty(filter.charging_dc) ? +filter.charging_dc : null,\r\n\t\t\tcharging_ionity: notNullOrEmpty(filter.charging_ionity) ? +filter.charging_ionity : null,\r\n\t\t\townershipperiod: notNullOrEmpty(filter.ownershipperiod) ? +filter.ownershipperiod : null,\r\n\t\t\tbatterylevel: filter.batterylevel === '80' ? 80 : filter.batterylevel === '100' ? 100 : null,\r\n\t\t\tchargingPrice: notNullOrEmpty(filter.chargingPrice) ? +filter.chargingPrice : null,\r\n\t\t\tfuelPrice: notNullOrEmpty(filter.fuelPrice) ? +filter.fuelPrice : null,\r\n\t\t\tdrivingEnvironment: filter.drivingEnvironment?.toString() ?? null,\r\n\t\t\tdrivingStyle: filter.drivingStyle?.toString() ?? null,\r\n\t\t\toccupancy: filter.occupancy?.toString() ?? null,\r\n\t\t\tseason: filter.season?.toString() ?? null,\r\n\t\t\ttemperature: notNullOrEmpty(filter.temperature) ? +filter.temperature : null\r\n\t\t};\r\n\t\treturn result;\r\n\t}, []);\r\n\r\n\tconst updateSearch = useCallback((update: (oldFilter: EmobilityFilter) => EmobilityFilter) => {\r\n\t\tconst oldFilter: EmobilityFilter = querystring.parse(window.location.search.substr(1));\r\n\t\tconst newFilter = update(oldFilter);\r\n\t\tconst search = querystring.stringify(removeNullOrUndefined(newFilter));\r\n\t\twindow.history.pushState(null, null, window.location.pathname + '?' + search);\r\n\t}, []);\r\n\r\n\tconst actions = useMemo(() => ({\r\n\t\tonEngineChange: (mbv, salesgroup, actioncode) => updateSearch(old => ({ ...old, mbv, salesgroup, actioncode })),\r\n\t\tonChargingPreferenceChange: (charging_home, charging_public) => updateSearch(old => ({ ...old, charging_home, charging_public })),\r\n\t\tonChargingChange: (charging_ac, charging_dc, charging_ionity) => updateSearch(old => ({ ...old, charging_ac, charging_dc, charging_ionity })),\r\n\t\tonFuelconsumptionChange: (fuelconsumption) => updateSearch(old => ({ ...old, fuelconsumption })),\r\n\t\tonMileageChange: (mileage) => updateSearch(old => ({ ...old, mileage })),\r\n\t\tonOwnershipperiodChange: (ownershipperiod) => updateSearch(old => ({ ...old, ownershipperiod })),\r\n\t\tonBatterylevelChange: (batterylevel) => updateSearch(old => ({ ...old, batterylevel })),\r\n\t\tonChargingPriceChange: (chargingPrice) => updateSearch(old => ({ ...old, chargingPrice })),\r\n\t\tonFuelPriceChange: (fuelPrice) => updateSearch(old => ({ ...old, fuelPrice })),\r\n\t\tonDrivingEnvironmentChange: (drivingEnvironment) => updateSearch(old => ({ ...old, drivingEnvironment })),\r\n\t\tonDrivingStyleChange: (drivingStyle) => updateSearch(old => ({ ...old, drivingStyle })),\r\n\t\tonOccupancyChange: (occupancy) => updateSearch(old => ({ ...old, occupancy })),\r\n\t\tonSeasonChange: (season) => updateSearch(old => ({ ...old, season })),\r\n\t\tonTemperatureChange: (temperature) => updateSearch(old => ({ ...old, temperature }))\r\n\t}), [updateSearch]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{children}\r\n\t\t\r\n\t);\r\n};\r\n","import { Theme } from '@mui/material';\r\nimport React from 'react';\r\nimport SwiperCore, { Navigation, Scrollbar } from 'swiper';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport 'swiper/swiper-bundle.min.css';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst navButtonCommon = (theme: Theme) => ({\r\n\tbackground: '#4a4a4a',\r\n\twidth: 55,\r\n\theight: 55,\r\n\ttop: 76,\r\n\tmarginTop: 0,\r\n\t[theme.breakpoints.up('lg')]: {\r\n\t\ttop: '50%',\r\n\t\ttransform: 'translateY(-50%)'\r\n\t},\r\n\t'&::after': {\r\n\t\tfontSize: '24px',\r\n\t\tcolor: '#ffffff'\r\n\t}\r\n});\r\n\r\nSwiperCore.use([Navigation, Scrollbar]);\r\n\r\ntype StylesProps = { activeSlideEffects: boolean, noScrollbar: boolean };\r\n\r\nconst useStyles = makeStyles({ name: 'Swiper' })((theme, { activeSlideEffects, noScrollbar }) => ({\r\n\troot: {\r\n\t\t'&.swiper-container-horizontal': {\r\n\t\t\toverflow: 'visible',\r\n\t\t\tpaddingBottom: noScrollbar ? 0 : 30,\r\n\t\t\t'& .swiper-wrapper': {\r\n\t\t\t\ttransition: 'all 500ms ease 0s !important'\r\n\t\t\t},\r\n\t\t\t'& .swiper-scrollbar': {\r\n\t\t\t\tbottom: 0,\r\n\t\t\t\tleft: '50%',\r\n\t\t\t\ttransform: 'translateX(-50%)',\r\n\t\t\t\twidth: 130,\r\n\t\t\t\theight: 10,\r\n\t\t\t\tbackground: 'rgba(0,0,0,0.03)',\r\n\t\t\t\t'& .swiper-scrollbar-drag': {\r\n\t\t\t\t\tbackground: theme.palette.scrollbar.dark\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t'& .swiper-button-prev': {\r\n\t\t\t...navButtonCommon(theme),\r\n\t\t\tleft: 0\r\n\t\t},\r\n\t\t'& .swiper-button-next': {\r\n\t\t\t...navButtonCommon(theme),\r\n\t\t\tright: 0\r\n\t\t}\r\n\t},\r\n\tslide: {\r\n\t\t'&.swiper-slide': {\r\n\t\t\theight: 'unset',\r\n\t\t\ttransition: 'all 0.5s',\r\n\t\t\topacity: activeSlideEffects ? 0.8 : 1,\r\n\t\t\ttransform: activeSlideEffects ? 'scaleY(0.968) !important' : 'unset',\r\n\t\t\t'&.swiper-slide-active': {\r\n\t\t\t\topacity: 1,\r\n\t\t\t\ttransform: 'scaleY(1) !important',\r\n\t\t\t\tboxShadow: activeSlideEffects ? '0px 4px 16px rgba(0, 0, 0, 0.15)' : 'none'\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type SkodaSwiperProps = React.ComponentProps & {\r\n\tchildren: React.ReactElement[];\r\n\tactiveSlideEffects?: boolean;\r\n\tclasses?: Partial['classes']>\r\n};\r\n\r\nexport const SkodaSwiper: React.FC = (props) => {\r\n\tconst { children, className, classes, activeSlideEffects, ...other } = props;\r\n\r\n\tlet { classes: styles, cx } = useStyles({ activeSlideEffects, noScrollbar: props.scrollbar === false }, { props: { classes } });\r\n\r\n\tconst slides = children.map(item =>\r\n\t\t{item});\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{slides}\r\n\t\t\r\n\t);\r\n};\r\n\r\nSkodaSwiper.defaultProps = {\r\n\tactiveSlideEffects: true,\r\n\tspaceBetween: 10\r\n} as SkodaSwiperProps;\r\n","import { debounce, Grid, GridSize, GridSpacing, useMediaQuery } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Breakpoint } from '@mui/material/styles';\r\nimport React, { createRef, FunctionComponent, useLayoutEffect, useMemo, useState } from 'react';\r\nimport { useResponsive } from '../../utils/customHooks';\r\nimport { SkodaSwiper, SkodaSwiperProps } from '../swiper';\r\n\r\nexport type TilesContainerProps = {\r\n\tchildren: React.ReactElement[];\r\n\tmodeBreakpoint?: Breakpoint;\r\n\tgridModeProps?: Omit;\r\n\tswiperModeProps?: Omit;\r\n};\r\n\r\nexport const TilesContainer: FunctionComponent = (props) => {\r\n\tconst { children, modeBreakpoint, gridModeProps, swiperModeProps } = props;\r\n\tconst theme = useTheme();\r\n\tconst gridMode = useMediaQuery(theme.breakpoints.up(modeBreakpoint ?? 'sm'));\r\n\r\n\tif (gridMode) {\r\n\t\treturn ;\r\n\t} else {\r\n\t\treturn ;\r\n\t}\r\n};\r\n\r\ntype DesktopTilesContainerProps = {\r\n\tspacing?: GridSpacing;\r\n\tchildren: React.ReactElement[];\r\n\tsameRowHeight?: boolean;\r\n\tclassName?: string;\r\n\tgridSizes?: {\r\n\t\txs?: GridSize;\r\n\t\tsm?: GridSize;\r\n\t\tmd?: GridSize;\r\n\t\tlg?: GridSize;\r\n\t\txl?: GridSize;\r\n\t};\r\n};\r\n\r\nconst DesktopTilesContainer: React.FC = (props) => {\r\n\tconst { children, gridSizes, spacing, className, sameRowHeight } = props;\r\n\tconst r = useResponsive();\r\n\tconst resolvedSpacing = spacing ?? r({ xs: 4, sm: 5, md: 7, lg: 6, xl: 7 }) ?? 5;\r\n\tconst refsMemo = useMemo(() => children.map(c => createRef()), [children]);\r\n\tconst [itemHeight, setItemHeight] = useState(0);\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tif (!itemHeight && sameRowHeight) {\r\n\t\t\tconst max = refsMemo.reduce((prev, curr) => {\r\n\t\t\t\tconst itemHeight = curr.current?.getBoundingClientRect()?.height ?? 0;\r\n\t\t\t\treturn prev < itemHeight ? itemHeight : prev;\r\n\t\t\t}, 0);\r\n\t\t\tsetItemHeight(max);\r\n\t\t}\r\n\t}, [refsMemo, itemHeight, sameRowHeight]);\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tif (sameRowHeight) {\r\n\t\t\tconst handleResize = () => setItemHeight(0);\r\n\t\t\tconst debounceHandleResize = debounce(handleResize, 1000);\r\n\t\t\twindow.addEventListener('resize', debounceHandleResize);\r\n\t\t\treturn () => window.removeEventListener('resize', debounceHandleResize);\r\n\t\t}\r\n\t}, [sameRowHeight]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{children.map((tile, index) =>\r\n\t\t\t\t\r\n\t\t\t\t\t{tile}\r\n\t\t\t\t)}\r\n\t\t\r\n\t);\r\n};\r\n","export const toolCodes = {\r\n\tMspTariffCalculator: 'MspTariffCalculator',\r\n\tChargingCalculator: 'ChargingCalculator',\r\n\tChargeMap: 'ChargeMap',\r\n\tTcoCalculator: 'TcoCalculator',\r\n\tRangeCalculator: 'RangeCalculator',\r\n\tFuelSavingsCalculator: 'FuelSavingsCalculator'\r\n};\r\n\r\nexport const commonNamespace = 'SkodaAuto.Marvin.K2Tools.Common';\r\nexport const ctaType = 'eMobility tools';","import { ButtonBase } from '@mui/material';\r\nimport { withStyles } from 'tss-react/mui';\r\n\r\nexport const Tile = withStyles(ButtonBase, (theme) => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tjustifyContent: 'flex-start',\r\n\t\talignItems: 'flex-start',\r\n\t\tbackground: theme.palette.background.paper,\r\n\t\ttextAlign: 'left',\r\n\t\tborderRadius: 4,\r\n\t\ttransition: 'box-shadow 0.3s ease-in-out',\r\n\t\tboxShadow: '0px 4px 16px rgba(0, 0, 0, 0)',\r\n\t\t'&:hover': {\r\n\t\t\tboxShadow: '0px 4px 16px rgba(0, 0, 0, 0.15)'\r\n\t\t},\r\n\t\tpadding: '22px 25px',\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tpadding: '20px 20px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tpadding: '25px 16px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tpadding: '20px 25px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tpadding: '24px 24px'\r\n\t\t}\r\n\t}\r\n}));\r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { icons } from '../../assets/emobilityIcons';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { toolCodes } from './constants';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityToolIcon' })(() => ({\r\n\troot: {\r\n\t\twidth: 130\r\n\t}\r\n}));\r\n\r\nexport type EmobilityToolIconProps = {\r\n\ttoolCode: string;\r\n\tclassName?: string;\r\n};\r\n\r\nexport const EmobilityToolIcon: React.FC = (props) => {\r\n\tconst { toolCode, className } = props;\r\n\tconst src = resolveSrc(toolCode);\r\n\r\n\tconst { classes, cx } = useStyles();\r\n\r\n\treturn notNullOrEmpty(src)\r\n\t\t?
\r\n\t\t: null;\r\n};\r\n\r\nconst resolveSrc = (toolCode: string) => {\r\n\tswitch (toolCode) {\r\n\t\tcase toolCodes.TcoCalculator: return icons.tcoCalculator;\r\n\t\tcase toolCodes.ChargeMap: return icons.chargeMap;\r\n\t\tcase toolCodes.ChargingCalculator: return icons.chargingCalculator;\r\n\t\tcase toolCodes.RangeCalculator: return icons.rangeCalculator;\r\n\t\tcase toolCodes.MspTariffCalculator: return icons.mspTariffCalculator;\r\n\t\tcase toolCodes.FuelSavingsCalculator: return icons.fuelSavingsCalculator;\r\n\t\tdefault: return null;\r\n\t}\r\n};\r\n","var img = \"data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cmask id='mask0_343_8563' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='48' y='15' width='37' height='70'%3e%3crect x='48' y='15' width='37' height='70' fill='%23C4C4C4'/%3e%3c/mask%3e%3cg mask='url(%23mask0_343_8563)'%3e%3crect x='50' y='15' width='35' height='70' fill='%23E4E4E4' fill-opacity='0.8'/%3e%3cpath d='M63.3188 62.4348L64.807 58.9565H61V60.116L63.3188 62.4348Z' fill='%23161718'/%3e%3cpath d='M70.8554 77.5072V78.9936C70.8554 80.4139 69.7041 81.5652 68.2838 81.5652H64.1517C62.7314 81.5652 61.5801 80.4139 61.5801 78.9936V76.4336L62.2612 76.6956C62.4195 76.7565 62.5789 76.8145 62.7395 76.8684C63.9923 77.291 65.307 77.5072 66.6317 77.5072H69.696H70.8554Z' fill='%23464748'/%3e%3cpath d='M91.1453 77.5075H70.8554H69.696H66.6317C65.307 77.5075 63.9923 77.2913 62.7395 76.8687C62.5789 76.8148 62.4195 76.7568 62.2612 76.6959L61.5801 76.4339V75.1922V65.7875L62.6409 63.4536H63.9146H98.0861H99.3598L100.421 65.7875V75.1922V76.4339L99.7395 76.6959C99.5812 76.7568 99.4218 76.8148 99.2612 76.8687C98.0085 77.2913 96.6937 77.5075 95.369 77.5075H92.3047H91.1453Z' fill='%23161718'/%3e%3cpath d='M69.1161 67.0725L62.7393 65.9131V66.9131V68.2319L69.6958 68.8116L69.1161 67.0725Z' fill='%23464748'/%3e%3cpath d='M62.7393 69.9712L70.2755 70.551L69.6958 68.8118L66.2175 68.522L62.7393 69.9712Z' fill='%239E9FA0'/%3e%3cpath d='M62.7393 68.2319V69.9711L66.2175 68.5218L62.7393 68.2319Z' fill='%237C7D7E'/%3e%3cpath d='M67.3769 75.1883V73.4492H62.7393V74.6086L67.3769 75.1883Z' fill='%237C7D7E'/%3e%3cpath d='M67.377 73.4492V75.1883L69.1161 75.7837H92.8842L94.6233 75.1883V73.4492L81.0001 73.7391L67.377 73.4492Z' fill='%23464748'/%3e%3cpath d='M72.3047 71.1302L70.8555 67.0723H78.3917L79.5511 68.2317H82.4497L83.6091 67.0723H91.1453L89.696 71.1302L88.8265 71.7099H73.1743L72.3047 71.1302Z' fill='%23464748'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M81 52C77.6232 52 74.3502 52.1456 71.9229 52.2909C70.7084 52.3636 69.705 52.4363 69.0041 52.4909C68.654 52.5181 68.3792 52.5409 68.1919 52.5569C68.0986 52.5649 68.0267 52.5712 67.978 52.5755L67.9229 52.5804L67.9038 52.5821L67.5682 52.6129L63.1676 62.2939L62.6406 63.4533H63.9142H98.0858H99.3595L98.8319 62.2939L94.4319 52.6129L94.0963 52.5821L94.0771 52.5804L94.0221 52.5755C93.9734 52.5712 93.9015 52.5649 93.8082 52.5569C93.6209 52.5409 93.3461 52.5181 92.996 52.4909C92.2951 52.4363 91.2916 52.3636 90.0771 52.2909C87.6499 52.1456 84.3769 52 81 52ZM93.6557 53.7078C93.4737 53.6921 93.2209 53.6713 92.9056 53.6469C92.2111 53.5924 91.2146 53.5205 90.0082 53.4481C87.5943 53.3037 84.3462 53.1594 81.0001 53.1594C77.654 53.1594 74.4059 53.3037 71.9919 53.4481C70.7856 53.5205 69.789 53.5924 69.0946 53.6469C68.7792 53.6713 68.5264 53.6921 68.3444 53.7078L64.4412 62.2939H97.5589L93.6557 53.7078Z' fill='%23161718'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M93.6559 53.7076C93.4739 53.6919 93.2211 53.6711 92.9058 53.6467C92.2113 53.5922 91.2147 53.5203 90.0084 53.4479C87.5944 53.3035 84.3463 53.1592 81.0002 53.1592C77.6542 53.1592 74.406 53.3035 71.9921 53.4479C70.7858 53.5203 69.7892 53.5922 69.0947 53.6467C68.7794 53.6711 68.5266 53.6919 68.3446 53.7076L64.4414 62.2937H97.5591L93.6559 53.7076Z' fill='%237D7D7D'/%3e%3cpath d='M92.9058 53.6467C93.2211 53.6711 93.4739 53.6919 93.6559 53.7076L97.5591 62.2937H64.4414L68.3446 53.7076C68.5266 53.6919 68.7794 53.6711 69.0947 53.6467C69.7892 53.5922 70.7858 53.5203 71.9921 53.4479C74.406 53.3035 77.6542 53.1592 81.0002 53.1592C84.3463 53.1592 87.5944 53.3035 90.0084 53.4479C91.2147 53.5203 92.2113 53.5922 92.9058 53.6467Z' fill='%237C7D7E'/%3e%3c/g%3e%3cmask id='mask1_343_8563' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='15' y='15' width='37' height='70'%3e%3crect x='15' y='15' width='37' height='70' fill='%23C4C4C4'/%3e%3c/mask%3e%3cg mask='url(%23mask1_343_8563)'%3e%3crect x='15' y='15' width='35' height='70' fill='%2378FAAE'/%3e%3cpath d='M35.1934 58.9565L36.6809 62.4348L38.9997 60.116V58.9565H35.1934Z' fill='%239E9FA0'/%3e%3cpath d='M38.4199 78.9936C38.4199 80.4139 37.2686 81.5652 35.8483 81.5652H31.7161C30.2958 81.5652 29.1445 80.4139 29.1445 78.9936V77.5072H30.304H33.3683C34.6929 77.5072 36.0077 77.291 37.2605 76.8684C37.4211 76.8145 37.5805 76.7565 37.7387 76.6956L38.4199 76.4336V78.9936Z' fill='%23161718'/%3e%3cpath d='M29.1453 77.5075H8.85544H7.69602H4.63167C3.30703 77.5075 1.99225 77.2913 0.739498 76.8687C0.578918 76.8148 0.419498 76.7568 0.261237 76.6959L-0.419922 76.4339V75.1922V65.7875L0.640947 63.4536H1.91457H36.0862H37.3598L38.4206 65.7875V75.1922V76.4339L37.7395 76.6959C37.5812 76.7568 37.4218 76.8148 37.2612 76.8687C36.0085 77.2913 34.6937 77.5075 33.3691 77.5075H30.3047H29.1453Z' fill='%23D8D8D8'/%3e%3cpath d='M30.8844 67.0725L37.2612 65.9131V68.2319L30.3047 68.8116L30.8844 67.0725Z' fill='%23303132'/%3e%3cpath d='M29.7246 70.551L37.2608 69.9712L33.7826 68.522L30.3043 68.8118L29.7246 70.551Z' fill='%237C7D7E'/%3e%3cpath d='M37.2605 69.9706V68.2314L33.7822 68.5213L37.2605 69.9706Z' fill='%230E3A2F'/%3e%3cpath d='M32.623 73.4492V75.1883L36.9709 74.6086V73.4492H32.623Z' fill='%23646464'/%3e%3cpath d='M5.37695 73.4492V75.1883L7.11608 75.7837H30.8842L32.6233 75.1883V73.4492L19.0001 73.7391L5.37695 73.4492Z' fill='%23303132'/%3e%3cpath d='M10.3038 71.1302L8.85449 67.0723H16.3907L17.5501 68.2317H20.4487L21.6081 67.0723H29.1443L27.6951 71.1302L26.8255 71.7099H11.1733L10.3038 71.1302Z' fill='%230E3A2F'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M19 52C15.6232 52 12.3502 52.1456 9.92294 52.2909C8.70845 52.3636 7.70497 52.4363 7.0041 52.4909C6.65396 52.5181 6.37917 52.5409 6.19193 52.5569C6.09859 52.5649 6.02671 52.5712 5.97801 52.5755L5.92294 52.5804L5.90381 52.5821L5.56816 52.6129L1.16758 62.2939L0.640625 63.4533H1.91425H36.0858H37.3595L36.8319 62.2939L32.4319 52.6129L32.0963 52.5821L32.0771 52.5804L32.0221 52.5755C31.9734 52.5712 31.9015 52.5649 31.8082 52.5569C31.6209 52.5409 31.3461 52.5181 30.996 52.4909C30.2951 52.4363 29.2916 52.3636 28.0771 52.2909C25.6499 52.1456 22.3769 52 19 52ZM31.6558 53.7078C31.4738 53.6921 31.221 53.6713 30.9056 53.6469C30.2111 53.5924 29.2146 53.5205 28.0083 53.4481C25.5943 53.3037 22.3462 53.1594 19.0001 53.1594C15.654 53.1594 12.4059 53.3037 9.99202 53.4481C8.78564 53.5205 7.78912 53.5924 7.09463 53.6469C6.77927 53.6713 6.52651 53.6921 6.34448 53.7078L2.44129 62.2939H35.559L31.6558 53.7078Z' fill='%23464748'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M31.6559 53.7076C31.4739 53.6919 31.2211 53.6711 30.9058 53.6467C30.2113 53.5922 29.2147 53.5203 28.0084 53.4479C25.5944 53.3035 22.3463 53.1592 19.0002 53.1592C15.6542 53.1592 12.406 53.3035 9.99213 53.4479C8.78575 53.5203 7.78923 53.5922 7.09474 53.6467C6.77938 53.6711 6.52662 53.6919 6.34459 53.7076L2.44141 62.2937H35.5591L31.6559 53.7076Z' fill='%237D7D7D'/%3e%3cpath d='M30.9058 53.6467C31.2211 53.6711 31.4739 53.6919 31.6559 53.7076L35.5591 62.2937H2.44141L6.34459 53.7076C6.52662 53.6919 6.77938 53.6711 7.09474 53.6467C7.78923 53.5922 8.78575 53.5203 9.99213 53.4479C12.406 53.3035 15.6542 53.1592 19.0002 53.1592C22.3463 53.1592 25.5944 53.3035 28.0084 53.4479C29.2147 53.5203 30.2113 53.5922 30.9058 53.6467Z' fill='%237C7D7E'/%3e%3c/g%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M29.8723 25.0813C31.8459 24.8267 33.8489 25.2248 35.5702 26.2134L36.0682 25.3463C34.157 24.2486 31.9341 23.807 29.7444 24.0895C27.5546 24.372 25.5194 25.363 23.9549 26.9096C22.3903 28.4562 21.384 30.4721 21.0931 32.6445C20.8022 34.817 21.2431 37.0237 22.3469 38.9219C23.4507 40.82 25.1552 42.3031 27.1953 43.142C29.2353 43.9809 31.4974 44.1289 33.6308 43.5634C35.7642 42.9978 37.6505 41.75 38.9963 40.0125C40.2472 38.3977 40.9661 36.4439 41.0614 34.4166C42.6023 34.1815 43.796 32.8537 43.796 31.2544V29.9048V29.4048H43.296H42.6151V26.5297H41.6151V29.4048H39.8913V26.5307H38.8913V29.4048H37.8484H37.3484V29.9048V31.2544C37.3484 32.8458 38.5304 34.1684 40.0603 34.4131C39.9666 36.2191 39.322 37.9591 38.2058 39.4002C36.995 40.9631 35.297 42.0871 33.3745 42.5967C31.452 43.1064 29.4135 42.9729 27.5756 42.2172C25.7377 41.4614 24.2039 40.1261 23.2114 38.4192C22.2189 36.7125 21.8229 34.7293 22.0843 32.7773C22.3457 30.8252 23.25 29.0125 24.6579 27.6208C26.0659 26.2289 27.8987 25.3359 29.8723 25.0813ZM41.6151 30.4048H39.8913V30.5795H38.8913V30.4048H38.3484V31.2544C38.3484 32.4586 39.346 33.4537 40.5722 33.4537C41.7984 33.4537 42.796 32.4586 42.796 31.2544V30.4048H42.6151V30.5795H41.6151V30.4048ZM28.5813 33.6746L31.3051 29.6257L32.1348 30.1839L29.9352 33.4537H33.0818H34.0208L33.4967 34.2327L30.7729 38.2816L29.9432 37.7234L32.1429 34.4537H28.9962H28.0572L28.5813 33.6746Z' fill='%2300271D'/%3e%3cpath d='M63.793 43L64.793 42H69.207L70.207 43H71V40.125H63V43H63.793Z' fill='%23263E31'/%3e%3cpath d='M71 25H63V38.875H71V25ZM69.5 29.125H64.5V27.875H69.5V29.125Z' fill='%23263E31'/%3e%3cpath d='M71.5 43.5H70L69 42.5H65L64 43.5H62.5V40.125H62V44H64.207L65.207 43H68.793L69.793 44H72V40.125H71.5V43.5Z' fill='%23263E31'/%3e%3cpath d='M62 38.875H62.5V24.5H71.5V38.875H72V24H62V38.875Z' fill='%23263E31'/%3e%3cpath d='M63 25H71V38.875H71.5V24.5H62.5V38.875H63V25Z' fill='%23263E31'/%3e%3cpath d='M71 43H70.207L69.207 42H64.793L63.793 43H63V40.125H62.5V43.5H64L65 42.5H69L70 43.5H71.5V40.125H71V43Z' fill='%23263E31'/%3e%3cpath d='M73.1465 26.8535L75 28.707V40.5C75 40.6326 74.9473 40.7598 74.8536 40.8536C74.7598 40.9473 74.6326 41 74.5 41C74.3674 41 74.2402 40.9473 74.1464 40.8536C74.0527 40.7598 74 40.6326 74 40.5V31H73V40.5C73 40.8978 73.158 41.2794 73.4393 41.5607C73.7206 41.842 74.1022 42 74.5 42C74.8978 42 75.2794 41.842 75.5607 41.5607C75.842 41.2794 76 40.8978 76 40.5V28.293L73.8535 26.1465L73.1465 26.8535Z' fill='%23263E31'/%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cg id='Illustration=Charge map'%3e%3cg id='Mask Group'%3e%3cmask id='mask0_312_7221' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='46' y='159' width='208' height='96'%3e%3cpath id='Rectangle 1' d='M225.658 161.105C225.266 159.853 224.107 159 222.794 159H77.2056C75.8934 159 74.7335 159.853 74.3421 161.105L46.2171 251.105C45.6134 253.037 47.0566 255 49.0806 255H250.919C252.943 255 254.387 253.037 253.783 251.105L225.658 161.105Z' fill='%23E28D8D'/%3e%3c/mask%3e%3cg mask='url(%23mask0_312_7221)'%3e%3cg id='Group 4391'%3e%3crect id='Rectangle 1_2' width='36.1862' height='70.8688' rx='1' transform='matrix(-0.464469 -2.96383 -2.99984 0.0312836 256.518 258.668)' fill='%23D8D8D8'/%3e%3crect id='Rectangle 2' width='45.8651' height='3' rx='1' transform='matrix(-1.21749 2.74185 2.88934 0.807272 251.868 103.557)' fill='%239E9FA0'/%3e%3crect id='Rectangle 9' width='45.8651' height='3' rx='1' transform='matrix(-1.21749 2.74185 2.88934 0.807272 279.223 111)' fill='%239E9FA0'/%3e%3cpath id='Rectangle 4' d='M163.969 153.061C163.419 153.141 162.903 153.372 162.477 153.728L-0.541189 289.932C-1.81531 290.996 -1.98247 292.893 -0.914147 294.164L1.01045 296.454C2.07655 297.722 3.96895 297.886 5.23727 296.82L170.768 157.682C173.079 155.739 171.395 151.983 168.406 152.417L163.969 153.061Z' fill='%239E9FA0'/%3e%3crect id='Rectangle 5' width='41.0493' height='3' rx='1' transform='matrix(-2.88916 -0.807925 -1.21696 2.74208 227.684 174.164)' fill='%239E9FA0'/%3e%3crect id='Rectangle 8' width='48.9203' height='3' rx='1' transform='matrix(-2.88916 -0.807925 -1.21696 2.74208 211.424 270.523)' fill='%239E9FA0'/%3e%3cpath id='Rectangle 6' d='M259.58 246.219C260.548 244.639 259.85 242.795 258.099 242.306L58.2156 186.41C56.7711 186.006 55.0992 186.677 54.3008 187.98L52.6891 190.612C51.7211 192.192 52.4187 194.036 54.1699 194.526L254.054 250.421C255.498 250.825 257.17 250.155 257.968 248.851L259.58 246.219Z' fill='%239E9FA0'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3cg id='Group 4389'%3e%3cpath id='Ellipse 184' d='M211.636 108.243C211.636 143.172 147.818 201 147.818 201C147.818 201 84 143.172 84 108.243C84 73.315 112.572 45 147.818 45C183.064 45 211.636 73.315 211.636 108.243Z' fill='%2378FAAE'/%3e%3cg id='eMobility/Recharging'%3e%3cg id='eMobility/eMobilityRecharging'%3e%3cpath id='eMobilityRecharging_40px' fill-rule='evenodd' clip-rule='evenodd' d='M141.19 74.3879C148.176 73.4866 155.265 74.896 161.356 78.3944L164.344 73.1914C157.114 69.0387 148.705 67.3686 140.422 68.4372C132.14 69.5058 124.44 73.2543 118.52 79.1065C112.599 84.9592 108.79 92.5889 107.689 100.813C106.588 109.038 108.257 117.391 112.435 124.575C116.612 131.759 123.062 137.371 130.78 140.544C138.497 143.718 147.053 144.277 155.123 142.138C163.193 139.999 170.33 135.278 175.424 128.703C179.968 122.836 182.658 115.786 183.185 108.442C188.932 107.127 193.27 102 193.27 95.8699V90.9205V87.9205H190.27H187.773V78.5468L181.773 78.5468V87.9205H177.784V78.5468L171.784 78.5468V87.9205H170.292H167.292V90.9205V95.8699C167.292 101.926 171.526 107.004 177.171 108.393C176.665 114.419 174.422 120.198 170.68 125.029C166.398 130.557 160.39 134.535 153.586 136.339C146.781 138.142 139.566 137.67 133.062 134.995C126.557 132.321 121.132 127.596 117.621 121.559C114.112 115.523 112.712 108.511 113.636 101.609C114.56 94.7078 117.757 88.297 122.738 83.3736C127.719 78.4497 134.205 75.2891 141.19 74.3879ZM173.292 93.9205V95.8699C173.292 99.632 176.418 102.769 180.281 102.769C184.144 102.769 187.27 99.632 187.27 95.8699V93.9205H173.292ZM135.339 104.094L145.328 89.2459L150.306 92.595L143.462 102.769H152.811H158.445L155.301 107.443L145.312 122.292L140.333 118.943L147.178 108.769H137.828H132.194L135.339 104.094Z' fill='%2300271D'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg viewBox='0 0 100 100' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3e %3ctitle%3eEMobility tool L%3c/title%3e %3cg id='EMobility-tool-L' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3e %3cpath d='M49%2c85 C68.3299662%2c85 84%2c69.3299662 84%2c50 C84%2c30.6700338 68.3299662%2c15 49%2c15 C29.6700338%2c15 14%2c30.6700338 14%2c50' id='Oval' stroke='%2300271D' stroke-width='3' transform='translate(49.000000%2c 50.000000) rotate(180.000000) translate(-49.000000%2c -50.000000) '%3e%3c/path%3e %3cg id='Group-2' transform='translate(74.500000%2c 32.500000) rotate(-20.000000) translate(-74.500000%2c -32.500000) translate(67.000000%2c 21.000000)'%3e %3cg id='Group' transform='translate(0.926183%2c 0.000000)'%3e %3cpolygon id='Rectangle' fill='%234C4C4C' transform='translate(6.894742%2c 3.103374) scale(-1%2c -1) rotate(172.000000) translate(-6.894742%2c -3.103374) ' points='3.11639985 2.30530016 10.1980913 1.24732897 10.6730849 3.93634537 3.52001463 4.95941975'%3e%3c/polygon%3e %3cpath d='M5.20284055%2c4.88431865 C2.22185822%2c5.65628592 0.930397895%2c8.53860366 1.32845957%2c13.5312719 C1.72652125%2c18.5239401 4.12060625%2c21.1830471 8.51071458%2c21.5085929' id='Path-13' stroke='%234C4C4C' stroke-width='2' transform='translate(4.884417%2c 13.196456) scale(-1%2c -1) rotate(172.000000) translate(-4.884417%2c -13.196456) '%3e%3c/path%3e %3cpath d='M7.61161033%2c3.65993493 C9.82575922%2c3.65560097 10.9328337%2c3.65343399 10.9328337%2c3.65343399 C12.6596851%2c9.0518857 12.8994358%2c14.8461135 11.6520859%2c21.0361174 L4.87066634%2c19.8707956 C4.87458686%2c17.8952159 5.59433298%2c16.4603414 7.02990469%2c15.5661722 C8.09056867%2c14.9055205 8.85549429%2c12.6551793 7.0414647%2c9.74098962 C6.39609111%2c8.70421431 6.58613965%2c6.67719609 7.61161033%2c3.65993493 Z' id='Rectangle-Copy-3' fill='%23D8D8D8' transform='translate(8.653721%2c 12.344776) scale(-1%2c 1) rotate(-172.000000) translate(-8.653721%2c -12.344776) '%3e%3c/path%3e %3c/g%3e %3cpolygon id='Path-14' fill='%234C4C4C' transform='translate(11.353472%2c 21.229394) scale(-1%2c -1) rotate(172.000000) translate(-11.353472%2c -21.229394) ' points='8.83564606 19.9837495 8.84057444 22.4672007 12.8446107 22.4750382 13.8712978 19.9936062'%3e%3c/polygon%3e %3c/g%3e %3cg id='Group-3' transform='translate(18.000000%2c 19.000000)' fill='%23646464'%3e %3crect id='Rectangle' x='30' y='0' width='2' height='5' rx='1'%3e%3c/rect%3e %3cpath d='M3%2c29 C3.55228475%2c29 4%2c29.4477153 4%2c30 L4%2c33 C4%2c33.5522847 3.55228475%2c34 3%2c34 C2.44771525%2c34 2%2c33.5522847 2%2c33 L2%2c30 C2%2c29.4477153 2.44771525%2c29 3%2c29 Z' id='Rectangle' transform='translate(3.000000%2c 31.500000) rotate(-90.000000) translate(-3.000000%2c -31.500000) '%3e%3c/path%3e %3cpath d='M60%2c29 C60.5522847%2c29 61%2c29.4477153 61%2c30 L61%2c33 C61%2c33.5522847 60.5522847%2c34 60%2c34 C59.4477153%2c34 59%2c33.5522847 59%2c33 L59%2c30 C59%2c29.4477153 59.4477153%2c29 60%2c29 Z' id='Rectangle' transform='translate(60.000000%2c 31.500000) rotate(-90.000000) translate(-60.000000%2c -31.500000) '%3e%3c/path%3e %3crect id='Rectangle' x='30' y='56' width='2' height='5' rx='1'%3e%3c/rect%3e %3c/g%3e %3cpath d='M24.318276%2c33.6160254 C24.8705607%2c33.6160254 25.318276%2c34.0637407 25.318276%2c34.6160254 L25.318276%2c37.6160254 C25.318276%2c38.1683102 24.8705607%2c38.6160254 24.318276%2c38.6160254 C23.7659912%2c38.6160254 23.318276%2c38.1683102 23.318276%2c37.6160254 L23.318276%2c34.6160254 C23.318276%2c34.0637407 23.7659912%2c33.6160254 24.318276%2c33.6160254 Z' id='Rectangle' fill='%23646464' transform='translate(24.318276%2c 36.116025) rotate(-60.000000) translate(-24.318276%2c -36.116025) '%3e%3c/path%3e %3cpath d='M73.681724%2c62.1160254 C74.2340088%2c62.1160254 74.681724%2c62.5637407 74.681724%2c63.1160254 L74.681724%2c66.1160254 C74.681724%2c66.6683102 74.2340088%2c67.1160254 73.681724%2c67.1160254 C73.1294393%2c67.1160254 72.681724%2c66.6683102 72.681724%2c66.1160254 L72.681724%2c63.1160254 C72.681724%2c62.5637407 73.1294393%2c62.1160254 73.681724%2c62.1160254 Z' id='Rectangle' fill='%23646464' transform='translate(73.681724%2c 64.616025) rotate(-60.000000) translate(-73.681724%2c -64.616025) '%3e%3c/path%3e %3crect id='Rectangle' fill='%23646464' transform='translate(35.066987%2c 73.498711) rotate(30.000000) translate(-35.066987%2c -73.498711) ' x='34.0669873' y='70.9987113' width='2' height='5' rx='1'%3e%3c/rect%3e %3cpath d='M34.3839746%2c22.818276 C34.9362593%2c22.818276 35.3839746%2c23.2659912 35.3839746%2c23.818276 L35.3839746%2c26.818276 C35.3839746%2c27.3705607 34.9362593%2c27.818276 34.3839746%2c27.818276 C33.8316898%2c27.818276 33.3839746%2c27.3705607 33.3839746%2c26.818276 L33.3839746%2c23.818276 C33.3839746%2c23.2659912 33.8316898%2c22.818276 34.3839746%2c22.818276 Z' id='Rectangle' fill='%23646464' transform='translate(34.383975%2c 25.318276) rotate(-30.000000) translate(-34.383975%2c -25.318276) '%3e%3c/path%3e %3cpath d='M62.8839746%2c72.181724 C63.4362593%2c72.181724 63.8839746%2c72.6294393 63.8839746%2c73.181724 L63.8839746%2c76.181724 C63.8839746%2c76.7340088 63.4362593%2c77.181724 62.8839746%2c77.181724 C62.3316898%2c77.181724 61.8839746%2c76.7340088 61.8839746%2c76.181724 L61.8839746%2c73.181724 C61.8839746%2c72.6294393 62.3316898%2c72.181724 62.8839746%2c72.181724 Z' id='Rectangle' fill='%23646464' transform='translate(62.883975%2c 74.681724) rotate(-30.000000) translate(-62.883975%2c -74.681724) '%3e%3c/path%3e %3crect id='Rectangle' fill='%23646464' transform='translate(25.001289%2c 63.066987) rotate(60.000000) translate(-25.001289%2c -63.066987) ' x='24.0012887' y='60.5669873' width='2' height='5' rx='1'%3e%3c/rect%3e %3cpolygon id='Path-15' fill='%2378FAAE' transform='translate(50.000000%2c 49.000000) rotate(-360.000000) translate(-50.000000%2c -49.000000) ' points='55.9028777 29 39 52.6850045 49.9115489 52.6850045 44.17813 69 61 45.5227252 49.9115489 45.5227252'%3e%3c/polygon%3e %3cpath d='M83.9659457%2c50 C83.9659457%2c46.1270781 83.1439638%2c43.1978313 81.5%2c41.2122597' id='Path-17' stroke='%234C4C4C' stroke-width='3'%3e%3c/path%3e %3c/g%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M28 62C28 62 35.2601 62 40.2514 62C48.2427 62 48.2427 51 40.292 51.0012L36.1676 51' stroke='%2378FAAE' stroke-width='4'/%3e%3cpath d='M37.9991 62C37.9991 62 30.8384 62 25.9155 62C14.0336 62 13.4991 80.998 25.8755 80.998L49.9434 81' stroke='%2378FAAE' stroke-width='4'/%3e%3cmask id='mask0_312_7006' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='48' y='15' width='37' height='70'%3e%3crect x='48' y='15' width='37' height='70' fill='%23C4C4C4'/%3e%3c/mask%3e%3cg mask='url(%23mask0_312_7006)'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M55.1001 79.0566C55.1001 79.0566 52.2942 70.5871 56.6449 67.6495C60.9955 64.7119 69.0288 62.1308 70.1352 62.1308C71.2416 62.1308 85.483 53.0847 89.0104 52.418C92.5377 51.7513 102.012 51.2373 107.24 51.2373C112.469 51.2373 125.074 52.3284 126.551 53.1644C128.029 54.0004 131.352 59.3629 131.352 60.3477C131.352 61.3324 131.695 66.7387 132.363 67.6495C133.03 68.5603 134 69.5573 134 71.98C134 74.4028 133.82 77.9095 133.091 78.4831C132.363 79.0566 55.1001 79.0566 55.1001 79.0566Z' fill='%23D8D8D8'/%3e%3cmask id='mask1_312_7006' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='54' y='51' width='80' height='29'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M55.1001 79.0566C55.1001 79.0566 52.2942 70.5871 56.6449 67.6495C60.9955 64.7119 69.0288 62.1308 70.1352 62.1308C71.2416 62.1308 85.483 53.0847 89.0104 52.418C92.5377 51.7513 102.012 51.2373 107.24 51.2373C112.469 51.2373 125.074 52.3284 126.551 53.1644C128.029 54.0004 131.352 59.3629 131.352 60.3477C131.352 61.3324 131.695 66.7387 132.363 67.6495C133.03 68.5603 134 69.5573 134 71.98C134 74.4028 133.82 77.9095 133.091 78.4831C132.363 79.0566 55.1001 79.0566 55.1001 79.0566Z' fill='white'/%3e%3c/mask%3e%3cg mask='url(%23mask1_312_7006)'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M54 65.7651H61.4554L56.9841 70.2413H54V65.7651Z' fill='%23D8D8D8'/%3e%3cmask id='mask2_312_7006' style='mask-type:alpha' maskUnits='userSpaceOnUse' x='54' y='65' width='8' height='6'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M54 65.7651H61.4554L56.9841 70.2413H54V65.7651Z' fill='white'/%3e%3c/mask%3e%3cg mask='url(%23mask2_312_7006)'%3e%3cpath d='M50.7529 65.0938H63.6779L60.1529 68.5404H50.7529V65.0938Z' fill='%23464748'/%3e%3cpath d='M60.2312 70.264V66.8174H55.4921L51.9377 69.1143L50.7529 70.264H60.2312Z' fill='%23464748'/%3e%3cpath d='M60.2311 68.5407L61.9545 66.8174H58.5078L60.2311 68.5407Z' fill='%239E9FA0'/%3e%3c/g%3e%3c/g%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M79.2881 61.0577C79.2881 60.4141 87.4581 56.0305 91.259 54.9452C94.2235 54.1841 101.632 54.1841 105.295 54.1841C108.959 54.1841 120.394 54.1812 121.516 54.9452C122.638 55.7091 124.463 57.9204 124.463 58.8962C124.463 59.8721 124.463 62.6055 124.463 62.6055H81.6534C81.6534 62.6055 79.2881 61.7014 79.2881 61.0577Z' fill='%23464748'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M64.9109 79.7236H55.3134L54.7051 77.0107H133.514L132.648 79.7236H64.9109Z' fill='%230E3A2F'/%3e%3cpath d='M77.2712 77.8753C77.2712 76.7842 77.0567 75.7026 76.6387 74.6942C76.2208 73.6859 75.6087 72.7699 74.8365 71.9977C74.0643 71.2255 73.1482 70.6134 72.1399 70.1954C71.1316 69.7774 70.0499 69.563 68.9588 69.563C67.8677 69.563 66.7861 69.7774 65.7777 70.1954C64.7694 70.6134 63.8534 71.2255 63.0812 71.9977C62.309 72.7699 61.6969 73.6859 61.2789 74.6942C60.8609 75.7026 60.6465 76.7842 60.6465 77.8753H62.6428C62.6428 77.0461 62.807 76.2251 63.1246 75.4583C63.4421 74.6929 63.9063 73.9967 64.4926 73.4091C65.0802 72.8228 65.7764 72.3586 66.5418 72.0411C67.3086 71.7235 68.1296 71.5593 68.9588 71.5593C69.788 71.5593 70.6091 71.7235 71.3759 72.0411C72.1413 72.3586 72.8375 72.8228 73.4251 73.4091C74.0114 73.9967 74.4755 74.6929 74.7931 75.4583C75.1106 76.2251 75.2748 77.0461 75.2748 77.8753H77.2712Z' fill='%230E3A2F'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M68.9588 85.0002C72.8931 85.0002 76.0837 81.8096 76.0837 77.8754C76.0837 73.9411 72.8931 70.7505 68.9588 70.7505C65.0246 70.7505 61.834 73.9411 61.834 77.8754C61.834 81.8096 65.0246 85.0002 68.9588 85.0002Z' fill='%23464748'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M68.9589 81.9446C71.2063 81.9446 73.0281 80.1228 73.0281 77.8754C73.0281 75.628 71.2063 73.8062 68.9589 73.8062C66.7115 73.8062 64.8896 75.628 64.8896 77.8754C64.8896 80.1228 66.7115 81.9446 68.9589 81.9446Z' fill='white'/%3e%3c/g%3e%3cpath d='M40.1813 34.3327C42.5451 30.4882 42.7605 25.5365 40.3055 21.375C36.7093 15.2787 28.7433 13.1901 22.5141 16.7098C16.2849 20.2295 14.1504 28.0253 17.7474 34.1217L28.9951 53.2104L40.1813 34.3327Z' fill='%2378FAAE'/%3e%3ccircle cx='29.0264' cy='28.0264' r='3.47368' fill='%230E3A2F'/%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg viewBox='0 0 100 100' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3e %3cg id='MSP-L' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3e %3crect id='Rectangle' fill='%230E3A2E' x='17' y='17' width='66' height='66' rx='11'%3e%3c/rect%3e %3cpolygon id='Path' fill='%2378FAAE' fill-rule='nonzero' points='51 36 64 49 51 49'%3e%3c/polygon%3e %3cpolygon id='Path' fill='%23439A6F' fill-rule='nonzero' points='51 62 64 49 51 49'%3e%3c/polygon%3e %3cpolygon id='Path' fill='%235DCA8E' fill-rule='nonzero' points='51 49 38 36 51 36'%3e%3c/polygon%3e %3cpolygon id='Path' fill='%23296A4E' fill-rule='nonzero' points='51 49 38 62 51 62'%3e%3c/polygon%3e %3c/g%3e%3c/svg%3e\";\n export default img;","var img = \"data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M28.3794 67.7647C29.0851 67.9289 29.791 67.4894 29.9552 66.7837L33.1979 52.8434C34.5001 48.9999 23.0001 51.4999 34.5001 50.9999C34.9705 51.1094 35.0001 51.9999 34.9024 53.2399L31.6597 67.1802C31.2765 68.8276 29.6303 69.8524 27.983 69.4692C26.3356 69.086 25.2894 67.5317 25.519 66.5445C25.519 66.5445 26.4841 66.5538 27.2235 66.941C27.4714 67.2968 27.6738 67.6006 28.3794 67.7647Z' fill='%237C7D7E'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M49.6955 18.1877C54.6374 17.5501 59.6528 18.5471 63.9628 21.0224L65.4569 18.4209C60.5773 15.6185 54.9021 14.4911 49.3116 15.2124C43.7211 15.9336 38.5249 18.4636 34.5303 22.4125C30.5354 26.3616 27.9658 31.509 27.2229 37.0567C26.48 42.6046 27.606 48.2395 30.4245 53.0866C33.2429 57.9334 37.5951 61.7201 42.8036 63.8618C48.0119 66.0035 53.7871 66.3814 59.2337 64.9375C64.6805 63.4936 69.4966 60.3078 72.9331 55.8715C76.0881 51.7985 77.9178 46.8811 78.1966 41.7723C82.1143 41.0819 85.1245 37.6706 85.1245 33.5712V30.157V28.657H83.6245H81.5616V21.5616H78.5616V28.657H74.5616V21.5616H71.5616V28.657H69.8434H68.3434V30.157V33.5712C68.3434 37.6431 71.3133 41.036 75.1924 41.758C74.9197 46.2044 73.3131 50.4821 70.5614 54.0343C67.5304 57.9472 63.2788 60.7616 58.465 62.0377C53.651 63.3139 48.5466 62.9796 43.9445 61.0873C39.3427 59.195 35.5026 55.8515 33.0179 51.5785C30.5333 47.3058 29.542 42.3413 30.1963 37.4549C30.8507 32.5685 33.1145 28.0305 36.6393 24.546C40.1644 21.0613 44.7536 18.8253 49.6955 18.1877ZM71.3434 31.657V33.5712C71.3434 36.4857 73.7598 38.8997 76.734 38.8997C79.7082 38.8997 82.1245 36.4857 82.1245 33.5712V31.657H71.3434ZM46.2045 39.5625L53.095 29.3197L55.5842 30.9943L50.266 38.8997H57.7849H60.6018L59.0295 41.237L52.1389 51.4797L49.6498 49.8052L54.968 41.8997H47.4491H44.6321L46.2045 39.5625Z' fill='%2300271D'/%3e%3cpath d='M20.2529 70.2976L23.4573 58.3372L35.4174 61.5423L43.7571 75.9871L28.5926 84.7424L20.2529 70.2976Z' fill='%2378FAAE'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M35.7839 61.064L44.5172 76.1905L28.3891 85.5021L19.6558 70.3756L23.064 57.6557L35.7839 61.064ZM23.8509 59.0187L20.8499 70.2186L28.7963 83.9821L42.9973 75.7832L35.0509 62.0197L23.8509 59.0187Z' fill='%2378FAAE'/%3e%3cpath d='M28.7401 61.839C29.3265 62.8548 28.9786 64.1535 27.9627 64.74C26.9469 65.3264 25.6483 64.9785 25.0618 63.9627C24.4753 62.9468 24.8233 61.6482 25.8391 61.0617C26.8549 60.4752 28.1536 60.8232 28.7401 61.839Z' fill='%2359BC87'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M29.8623 72.3689C30.8397 72.3689 31.4517 71.7203 31.4517 70.5793C31.4517 69.4283 30.8581 68.7891 29.8623 68.7891C28.9126 68.7891 28.2823 69.4283 28.2734 70.5793C28.2734 71.7203 28.8854 72.3689 29.8623 72.3689ZM29.2781 75.328H30.191L34.3283 68.8987H33.4243L29.2781 75.328ZM29.2598 70.5793C29.2598 71.1451 29.4517 71.5289 29.8623 71.5289C30.2734 71.5289 30.4653 71.1451 30.4653 70.5793C30.4653 69.9674 30.3101 69.6291 29.8623 69.6291C29.4606 69.6291 29.2598 69.9674 29.2598 70.5793ZM33.7709 75.4649C34.7389 75.4649 35.3603 74.8256 35.3603 73.6746C35.3603 72.5242 34.7573 71.885 33.7709 71.885C32.8124 71.885 32.1821 72.5242 32.1821 73.6746C32.1821 74.8162 32.7846 75.4649 33.7709 75.4649ZM33.1684 73.6746C33.1684 74.241 33.3604 74.6248 33.7709 74.6248C34.1731 74.6248 34.374 74.241 34.374 73.6746C34.374 73.0632 34.2093 72.7161 33.7709 72.7161C33.3604 72.7161 33.1684 73.0632 33.1684 73.6746Z' fill='%232D5540'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M31.9073 51.2194C31.1954 51.0851 30.5085 51.5538 30.3742 52.2657L27.7197 63.3299C27.6302 63.8045 27.1723 64.117 26.6976 64.0275C26.223 63.9379 25.9105 63.48 26.0001 63.0054L28.6545 51.9412C28.9682 50.2791 30.5699 49.1861 32.2319 49.4998C33.8939 49.8135 35.5001 50.4998 34.8248 53.4318C34.8248 53.4318 34.7551 53.3556 34.0001 52.9998C33.5001 51.4998 32.6193 51.3538 31.9073 51.2194Z' fill='%237C7D7E'/%3e%3c/svg%3e\";\n export default img;","import { ButtonBaseProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { SkodaLink } from '../buttons';\r\nimport { Tile } from '../tile';\r\nimport { EmobilityToolIcon } from './icons';\r\n\r\nconst useStyles = makeStyles<{ size: 'small' | 'large' }>({ name: 'EmobilityNavigationTile' })((theme, props) => ({\r\n\troot: {\r\n\t\twidth: '100%',\r\n\t\theight: '100%',\r\n\t\talignItems: 'center',\r\n\t\tpadding: 24,\r\n\t\tpaddingTop: 40,\r\n\t\tminHeight: 280\r\n\t},\r\n\ticon: {\r\n\t\theight: props.size === 'small' ? 116 : 140,\r\n\t\tmarginTop: props.size === 'small' ? -16 : -20,\r\n\t\tmarginBottom: props.size === 'small' ? -16 : -20\r\n\t},\r\n\tpanelTitle: {\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tjustifyContent: 'center',\r\n\t\tflexGrow: 1\r\n\t},\r\n\ttitle: {\r\n\t\ttextAlign: 'center',\r\n\t\tfontSize: '24px',\r\n\t\tlineHeight: '28px',\r\n\t\tfontWeight: 'bold',\r\n\t\tmarginTop: props.size === 'small' ? 22 : 28,\r\n\t\tmarginBottom: props.size === 'small' ? 22 : 28\r\n\t},\r\n\tlinkRoot: {},\r\n\tlinkIcon: {}\r\n}));\r\n\r\nexport type EmobilityNavigationTileClasses = Partial['classes']>;\r\n\r\nexport type EmobilityNavigationTileProps = Omit & {\r\n\thref: string;\r\n\ttoolCode: string;\r\n\ttitle: string;\r\n\tsize?: 'small' | 'large'\r\n\ttextButton?: string;\r\n\tclasses?: EmobilityNavigationTileClasses;\r\n\tonClick?: (toolCode: string, href: string, label: string) => void;\r\n};\r\n\r\nexport const EmobilityNavigationTile: React.FC = (props) => {\r\n\tconst { toolCode, title, textButton, children, classes, size, href, onClick, ...other } = props;\r\n\tconst { classes: styles, cx } = useStyles({ size }, { props });\r\n\r\n\treturn (\r\n\t\t onClick?.(toolCode, href, title)}\r\n\t\t\t{...other}>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{title}\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t{textButton}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","import { GridSize } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { useBuildEmobilityClgLink, useResponsive } from '../../utils/customHooks';\r\nimport { Prefixer } from '../../utils/utilityTypes';\r\nimport { TilesContainer } from '../tilesContainer';\r\nimport { commonNamespace, ctaType } from './constants';\r\nimport { EmobilityNavigationTile, EmobilityNavigationTileClasses } from './emobilityNavigationTile';\r\n\r\ntype MappedTileClassNames = Prefixer;\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityNavigation' })((theme) => ({\r\n\troot: {\r\n\r\n\t},\r\n\tslide: {\r\n\t\tmaxWidth: 320,\r\n\t\tmarginLeft: 5,\r\n\t\tmarginRight: 5,\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tmaxWidth: 400\r\n\t\t},\r\n\t\t'&:first-child': {\r\n\t\t\tmarginLeft: 0\r\n\t\t},\r\n\t\t'&:last-child': {\r\n\t\t\tmarginRight: 0\r\n\t\t}\r\n\t}\r\n}));\r\n\r\ntype ClickActionPayload = {\r\n\ttoolCode: string;\r\n\tctaType: string;\r\n\teventLabel: string;\r\n\thref: string;\r\n};\r\n\r\nexport type EmobilityNavigationClasses = Partial['classes']> & MappedTileClassNames;\r\n\r\nexport type EmobilityNavigationProps = {\r\n\ttoolCodes: string[];\r\n\tresourceProvider: (code: string, defaultText: string, namespace: string) => string;\r\n\tclgEndpoint: string;\r\n\tbid: string;\r\n\tculture: string;\r\n\tdealer?: string;\r\n\tonTileClick?: (payload: ClickActionPayload) => void;\r\n\tclasses?: EmobilityNavigationClasses;\r\n};\r\n\r\nexport const EmobilityNavigation = (props: EmobilityNavigationProps) => {\r\n\tconst { toolCodes, resourceProvider, clgEndpoint, bid, culture, dealer, onTileClick, classes } = props;\r\n\tconst { slide, root, ...tileClasses } = classes ?? {};\r\n\tconst buildClgEmobilityLink = useBuildEmobilityClgLink();\r\n\r\n\tlet { classes: styles } = useStyles(undefined, { props });\r\n\r\n\tconst r = useResponsive();\r\n\tconst toolCodesCount = toolCodes?.length ?? 0;\r\n\tconst toolCodesCountValid = toolCodesCount === 2 || toolCodesCount === 3;\r\n\r\n\tif (!toolCodesCountValid) {\r\n\t\tconsole.error('Invalid number of tool, navigation wont render. Provide 2 or 3 tool in toolCodes list.');\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst handleClick = (toolCode: string, href: string, eventLabel: string) => {\r\n\t\tonTileClick?.({ toolCode, ctaType, eventLabel, href });\r\n\t\twindow.open(href, '_blank');\r\n\t};\r\n\r\n\tconst gridSize = Math.max(12 / toolCodes.length, 4) as GridSize;\r\n\tconst tileSize = r<'small' | 'large'>({ xs: 'small', md: toolCodes.length >= 3 ? 'small' : 'large' });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{toolCodes.map(toolCode =>\r\n\t\t\t\t)}\r\n\t\t\r\n\t);\r\n};\r\n\r\nconst resolveTileClasses = (classes: MappedTileClassNames): EmobilityNavigationTileClasses => ({\r\n\troot: classes?.tileRoot,\r\n\ticon: classes?.tileIcon,\r\n\tpanelTitle: classes?.tilePanelTitle,\r\n\ttitle: classes?.tileTitle,\r\n\tlinkRoot: classes?.tileLinkRoot,\r\n\tlinkIcon: classes?.tileLinkIcon\r\n});\r\n","import { Fab, Typography } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { EmobilityPreviewStepProps } from './emobilityPreviewStep';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityPreview' })(theme => ({\r\n\troot: {\r\n\t\tbackground: theme.palette.background.paper,\r\n\t\tborder: '1px solid ' + theme.palette.divider,\r\n\t\tpadding: 28,\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tpadding: 40\r\n\t\t}\r\n\t},\r\n\tlegend: {\r\n\t\tborder: 'unset',\r\n\t\twidth: 'unset',\r\n\t\tmargin: 0,\r\n\t\tdisplay: 'none',\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tdisplay: 'block'\r\n\t\t}\r\n\t},\r\n\ttitle: {\r\n\t\tcolor: theme.palette.text.primary,\r\n\t\t'&.inner': {\r\n\t\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\t\tdisplay: 'none'\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tcontent: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'center',\r\n\t\tgap: 30\r\n\t},\r\n\tpanelSteps: {\r\n\t\tdisplay: 'flex',\r\n\t\tgap: 30,\r\n\t\tflexWrap: 'wrap',\r\n\t\tmarginBottom: 20\r\n\t},\r\n\tstepWrapper: {\r\n\t\tminWidth: 230,\r\n\t\tflex: 1\r\n\t}\r\n}));\r\n\r\nexport type EmobilityPreviewProps = {\r\n\tchildren: React.ReactElement[];\r\n\ttitle?: string;\r\n\tlabelButton: string;\r\n\tonOpenClick?: () => void;\r\n\tclasses?: Partial['classes']>\r\n};\r\n\r\nexport const EmobilityPreview = (props: EmobilityPreviewProps) => {\r\n\tconst { children, title, labelButton, onOpenClick } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { formatString } from '../../utils/common';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityPreviewStep' })(theme => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tgap: 20,\r\n\t\tcolor: theme.palette.text.primary\r\n\t},\r\n\tindex: {\r\n\t\tflexShrink: 0,\r\n\t\twidth: 26,\r\n\t\theight: 26,\r\n\t\tborderRadius: '13px',\r\n\t\tborder: '1.7px solid ' + theme.palette.primary.main,\r\n\t\tcolor: theme.palette.primary.main,\r\n\t\tfontWeight: theme.typography.fontWeightBold,\r\n\t\tboxSizing: 'border-box',\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tjustifyContent: 'center'\r\n\t},\r\n\tstepContent: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tjustifyContent: 'space-between',\r\n\t\tgap: 20\r\n\t},\r\n\ttitle: {\r\n\t\tminHeight: 26,\r\n\t\tfontSize: '18px',\r\n\t\tlineHeight: '24px'\r\n\t},\r\n\ttext: {\r\n\t\tfontSize: '16px',\r\n\t\tlineHeight: '24px',\r\n\t\t'& b': {\r\n\t\t\tfontSize: '18px',\r\n\t\t\tlineHeight: '24px'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type EmobilityPreviewStepProps = {\r\n\tindex: number;\r\n\ttitle: string;\r\n\ttext: string;\r\n\tparams: string[];\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const EmobilityPreviewStep: React.FC = (props) => {\r\n\tconst { index, title, text, params } = props;\r\n\tconst { classes: styles } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t{index}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
{title}
\r\n\t\t\t\t
'' + param + '')) }} />\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};","import { Dialog } from '@mui/material';\r\nimport React, { useState } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { CloseButton } from '../buttons';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityPreviewWrapper' })(theme => ({\r\n\tpaper: {\r\n\t\tbackground: theme.palette.background.default\r\n\t},\r\n\tclose: {\r\n\t\tposition: 'absolute',\r\n\t\tright: 20,\r\n\t\ttop: 20\r\n\t}\r\n}));\r\n\r\nexport type EmobilityPreviewWrapperProps = {\r\n\tchildren: React.ReactElement<{ onOpenClick?: () => void }>;\r\n\tcontent: React.ReactElement;\r\n\tclasses?: Partial
['classes']>;\r\n};\r\n\r\nexport const EmobilityPreviewWrapper = (props: EmobilityPreviewWrapperProps) => {\r\n\tconst { children, content } = props;\r\n\tconst [isPreviewOpen, setIsPreviewOpen] = useState(false);\r\n\tconst { classes: styles } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{React.cloneElement(children, {\r\n\t\t\t\tonOpenClick: () => {\r\n\t\t\t\t\tchildren.props.onOpenClick?.();\r\n\t\t\t\t\tsetIsPreviewOpen(true);\r\n\t\t\t\t}\r\n\t\t\t})}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","// Generated by CoffeeScript 1.12.2\n(function() {\n var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - nodeLoadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n moduleLoadTime = getNanoSeconds();\n upTime = process.uptime() * 1e9;\n nodeLoadTime = moduleLoadTime - upTime;\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _raf = require('raf');\n\nvar _raf2 = _interopRequireDefault(_raf);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ANIMATION_DURATION = 300;\n\nvar AnimatedNumber = function (_Component) {\n _inherits(AnimatedNumber, _Component);\n\n function AnimatedNumber(props) {\n _classCallCheck(this, AnimatedNumber);\n\n var _this = _possibleConstructorReturn(this, (AnimatedNumber.__proto__ || Object.getPrototypeOf(AnimatedNumber)).call(this, props));\n\n _this.state = {\n currentValue: props.initialValue\n };\n return _this;\n }\n\n _createClass(AnimatedNumber, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.prepareTween(this.props);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n\n if (this.state.currentValue === nextProps.value) {\n return;\n }\n\n if (this.tweenHandle) {\n this.endTween();\n }\n\n this.prepareTween(nextProps);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.endTween();\n }\n }, {\n key: 'prepareTween',\n value: function prepareTween() {\n var _this2 = this;\n\n this.tweenHandle = (0, _raf2.default)(function (timestamp) {\n _this2.tweenValue(timestamp, true);\n });\n }\n }, {\n key: 'endTween',\n value: function endTween() {\n _raf2.default.cancel(this.tweenHandle);\n this.setState(_extends({}, this.state, {\n currentValue: this.props.value\n }));\n }\n }, {\n key: 'ensureSixtyFps',\n value: function ensureSixtyFps(timestamp) {\n var currentTime = this.state.currentTime;\n\n\n return !currentTime || timestamp - currentTime > 16;\n }\n }, {\n key: 'tweenValue',\n value: function tweenValue(timestamp, start) {\n\n if (!this.ensureSixtyFps(timestamp)) {\n this.tweenHandle = (0, _raf2.default)(this.tweenValue.bind(this));\n return;\n }\n\n var _props = this.props,\n value = _props.value,\n duration = _props.duration;\n var currentValue = this.state.currentValue;\n\n var currentTime = timestamp;\n var startTime = start ? timestamp : this.state.startTime;\n var fromValue = start ? currentValue : this.state.fromValue;\n var newValue = void 0;\n\n if (currentTime - startTime >= duration) {\n newValue = value;\n } else {\n newValue = fromValue + (value - fromValue) * ((currentTime - startTime) / duration);\n }\n\n if (newValue === value) {\n this.endTween();\n return;\n }\n\n this.setState({\n currentValue: newValue,\n startTime: startTime ? startTime : currentTime,\n fromValue: fromValue, currentTime: currentTime\n });\n this.tweenHandle = (0, _raf2.default)(this.tweenValue.bind(this));\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n formatValue = _props2.formatValue,\n value = _props2.value,\n className = _props2.className,\n frameStyle = _props2.frameStyle,\n stepPrecision = _props2.stepPrecision;\n var _state = this.state,\n currentValue = _state.currentValue,\n fromValue = _state.fromValue;\n var style = this.props.style;\n\n var adjustedValue = currentValue;\n var direction = value - fromValue;\n\n if (currentValue !== value) {\n if (stepPrecision > 0) {\n adjustedValue = Number(currentValue.toFixed(stepPrecision));\n } else if (direction < 0 && stepPrecision === 0) {\n adjustedValue = Math.floor(currentValue);\n } else if (direction > 0 && stepPrecision === 0) {\n adjustedValue = Math.ceil(currentValue);\n }\n }\n\n var perc = Math.abs((adjustedValue - fromValue) / (value - fromValue) * 100);\n\n var currStyle = frameStyle(perc);\n\n if (style && currStyle) {\n style = _extends({}, style, currStyle);\n } else if (currStyle) {\n style = currStyle;\n }\n\n return _react2.default.createElement(this.props.component, _extends({}, filterKnownProps(this.props), { className: className, style: style }), formatValue(adjustedValue));\n }\n }]);\n\n return AnimatedNumber;\n}(_react.Component);\n\nAnimatedNumber.propTypes = {\n component: _propTypes2.default.any,\n formatValue: _propTypes2.default.func,\n value: _propTypes2.default.number,\n initialValue: _propTypes2.default.number,\n duration: _propTypes2.default.number,\n frameStyle: _propTypes2.default.func,\n stepPrecision: _propTypes2.default.number,\n style: _propTypes2.default.object,\n className: _propTypes2.default.string\n};\nAnimatedNumber.defaultProps = {\n component: 'span',\n formatValue: function formatValue(n) {\n return n;\n },\n initialValue: 0,\n duration: ANIMATION_DURATION,\n frameStyle: function frameStyle() {\n return {};\n },\n value: 0\n};\nexports.default = AnimatedNumber;\n\n\nfunction filterKnownProps(props) {\n var sanitized = {};\n var propNames = Object.keys(props);\n var validProps = Object.keys(AnimatedNumber.propTypes);\n\n propNames.filter(function (p) {\n return validProps.indexOf(p) < 0;\n }).forEach(function (p) {\n sanitized[p] = props[p];\n });\n\n return sanitized;\n};","'use strict';\n\nvar _AnimatedNumber = require('./AnimatedNumber');\n\nvar _AnimatedNumber2 = _interopRequireDefault(_AnimatedNumber);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _AnimatedNumber2.default;","import { LinearProgress } from '@mui/material';\r\nimport React from 'react';\r\nimport { useStyles } from 'tss-react/mui';\r\nimport './linearProgressDelayed.scss';\r\n\r\nexport type LinearProgressDelayedProps = {\r\n\tloading: boolean;\r\n\tclassName?: string;\r\n};\r\n\r\nexport const LinearProgressDelayed: React.FC = ({ loading, className }) => {\r\n\tconst { cx } = useStyles();\r\n\treturn ;\r\n};\r\n","import React from 'react';\r\nimport AnimatedNumber from 'react-animated-number';\r\nimport { Cx } from 'tss-react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { SkodaCheckboxCheckerIcon } from '../../components/icons';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { ImageLoader } from '../imageLoader';\r\nimport { LinearProgressDelayed } from '../linearProgressDelayed';\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityResultPanel' })(theme => ({\r\n\troot: {\r\n\t\tpadding: '32px 20px',\r\n\t\tbackground: theme.palette.background.paper,\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tposition: 'relative',\r\n\t\tzIndex: 0\r\n\t},\r\n\tresultLabel: {\r\n\t\tfontSize: '18px',\r\n\t\tlineHeight: '18px',\r\n\t\tmarginBottom: '8px'\r\n\t},\r\n\tresult: {\r\n\t\tfontSize: '33px',\r\n\t\tlineHeight: '40px',\r\n\t\tmarginBottom: '24px',\r\n\t\tfontWeight: 'bold',\r\n\t\tdisplay: 'block',\r\n\t\t'&.nobonus': {\r\n\t\t\tmarginBottom: '50px'\r\n\t\t}\r\n\t},\r\n\tpanelContent: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tmargin: '-7.5px 0'\r\n\t},\r\n\tpanelBonuses: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tpadding: '7.5px 0',\r\n\t\tmargin: -7\r\n\t},\r\n\tbonus: {\r\n\t\tpadding: 7,\r\n\t\tdisplay: 'flex',\r\n\t\tfontSize: '16px',\r\n\t\tlineHeight: '24px'\r\n\t},\r\n\tchecker: {\r\n\t\tmarginRight: '10px',\r\n\t\tcolor: theme.palette.bulletPoints\r\n\t},\r\n\timage: {\r\n\t\talignSelf: 'center',\r\n\t\tmarginTop: 'calc(-17.507% - 5px)',\r\n\t\tmarginBottom: 'calc(-11.298% - 5px)',\r\n\t\tpadding: '7.5px 0',\r\n\t\twidth: 'calc(100% + 40px)',\r\n\t\theight: 'auto',\r\n\t\tzIndex: -1\r\n\t},\r\n\tpanelButtonAndNote: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'center',\r\n\t\tpaddingTop: 30,\r\n\t\tmargin: -8\r\n\t},\r\n\tcontainerNote: {\r\n\t\tflexGrow: 1,\r\n\t\tpadding: 8\r\n\t},\r\n\tcontainerButton: {\r\n\t\tflexShrink: 0,\r\n\t\tpadding: 8\r\n\t},\r\n\tdividerFooter: {\r\n\t\theight: 1,\r\n\t\twidth: '100%',\r\n\t\tmarginTop: 32,\r\n\t\tbackground: '#E0E3E6',\r\n\t\tmarginBottom: 24\r\n\t},\r\n\tloader: {\r\n\t\tposition: 'absolute',\r\n\t\ttop: '0px',\r\n\t\tleft: '0px',\r\n\t\tright: '0px'\r\n\t}\r\n}));\r\n\r\nexport type EmobilityResultPanelProps = {\r\n\tresult: number;\r\n\tbonuses: string[];\r\n\timage: string;\r\n\tdummy: string;\r\n\tformatResult?: (value: number) => string;\r\n\tnote?: React.ReactNode;\r\n\tbutton?: React.ReactNode;\r\n\tfooter?: React.ReactNode;\r\n\tcalculating: boolean;\r\n\tclasses?: Partial['classes']>;\r\n\tresultRef?: React.LegacyRef;\r\n\tresultLabel?: React.ReactNode;\r\n};\r\n\r\nexport const EmobilityResultPanel: React.FC = (props) => {\r\n\tconst { result, formatResult, bonuses, image, dummy, note, button, footer, calculating, resultRef, resultLabel } = props;\r\n\tlet { classes, cx } = useStyles(undefined, { props });\r\n\r\n\tif (!notNullOrEmpty(bonuses))\r\n\t\tclasses = addNoBonusClass(classes, cx);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{(resultLabel) &&\r\n\t\t\t\t
\r\n\t\t\t\t\t{resultLabel}\r\n\t\t\t\t}\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t{notNullOrEmpty(bonuses) &&\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{bonuses.map((text, index) =>\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{text}\r\n\t\t\t\t\t\t\t
)}\r\n\t\t\t\t\t
}\r\n\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t{(button || note) &&\r\n\t\t\t\t
\r\n\t\t\t\t\t{note &&
{note}
}\r\n\t\t\t\t\t{button &&
{button}
}\r\n\t\t\t\t
}\r\n\r\n\t\t\t{footer &&
}\r\n\r\n\t\t\t{footer}\r\n\r\n\t\t\t
\r\n\r\n\t\t
\r\n\t);\r\n};\r\n\r\nconst addNoBonusClass = (styles: ReturnType['classes'], cx: Cx) =>\r\n\tObject.keys(styles).reduce((prev, curr) => ({ ...prev, [curr]: cx(styles[curr], 'nobonus') }), {} as ReturnType['classes']);\r\n","import { EmobilityResultPanel } from './emobilityResultPanel';\r\nimport { withStyles } from 'tss-react/mui';\r\nimport { CSSObject } from 'tss-react';\r\n\r\nexport const ResponsiveEmobilityResultPanel = withStyles(EmobilityResultPanel, theme => ({\r\n\troot: {\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tpadding: 32\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tpaddingBottom: 40\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tpadding: 48,\r\n\t\t\tpaddingBottom: 41\r\n\t\t}\r\n\t},\r\n\tresult: {\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\t'&.nobonus': {\r\n\t\t\t\tmarginBottom: 85\r\n\t\t\t}\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tfontSize: '38px',\r\n\t\t\tlineHeight: '48px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: '44px',\r\n\t\t\tlineHeight: '52px',\r\n\t\t\tmarginBottom: 32,\r\n\t\t\t'&.nobonus': {\r\n\t\t\t\tmarginBottom: 100\r\n\t\t\t}\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\t'&.nobonus': {\r\n\t\t\t\tmarginBottom: 85\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tpanelContent: {\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tmargin: 0\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tmargin: '-24px 0'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tmargin: 0\r\n\t\t}\r\n\t},\r\n\tpanelBonuses: {\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tpadding: 0\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmargin: -5\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tpadding: '24px 0'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tpadding: 0\r\n\t\t}\r\n\t},\r\n\tbonus: {\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tpadding: 5,\r\n\t\t\tfontSize: '18px',\r\n\t\t\tlineHeight: '28px'\r\n\t\t}\r\n\t},\r\n\tchecker: {\r\n\t\tmarginRight: '10px'\r\n\t},\r\n\timage: {\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tpadding: 0,\r\n\t\t\tmarginTop: 'calc(-17.507% - 10px)',\r\n\t\t\tmarginBottom: 'calc(-11.298% - 10px)',\r\n\t\t\twidth: 'calc(100% + 64px)'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tpadding: '24px 0'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tpadding: 0,\r\n\t\t\twidth: '726px',\r\n\t\t\tmarginRight: '-48px',\r\n\t\t\tmarginLeft: 'auto',\r\n\t\t\tmarginTop: '-182px',\r\n\t\t\tmarginBottom: '-83px',\r\n\t\t\t'&.nobonus': {\r\n\t\t\t\twidth: '100%',\r\n\t\t\t\tmarginTop: 'calc(-17.507%)',\r\n\t\t\t\tmarginBottom: 'calc(-11.298%)',\r\n\t\t\t\tmarginLeft: 0,\r\n\t\t\t\tmarginRight: 0\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tpanelButtonAndNote: {\r\n\t\t[theme.breakpoints.up('sm')]: {\r\n\t\t\tpaddingTop: 60,\r\n\t\t\tflexDirection: 'row',\r\n\t\t\tjustifyContent: 'center'\r\n\t\t} as CSSObject,\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tpaddingTop: 33\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tpaddingTop: 68\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tpaddingTop: 80,\r\n\t\t\t'&.nobonus': {\r\n\t\t\t\tpaddingTop: 30\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tcontainerNote: {\r\n\r\n\t},\r\n\tcontainerButton: {\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmarginLeft: 'auto'\r\n\t\t}\r\n\t},\r\n\tdividerFooter: {\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tmargin: '32px 0'\r\n\t\t}\r\n\t},\r\n\tloader: {\r\n\r\n\t},\r\n\tresultLabel: {\r\n\r\n\t}\r\n}));\r\n","import { withStyles } from 'tss-react/mui';\r\nimport { PageSection } from '../pageSection';\r\n\r\nexport const StickyPanel = withStyles(PageSection, (theme) => ({\r\n\tpaddingWrapper: {\r\n\t\tbackground: theme.palette.background.paper,\r\n\t\tpaddingTop: 11,\r\n\t\tpaddingBottom: 9,\r\n\t\tboxShadow: '0px 4px 16px rgb(0 0 0 / 15%)'\r\n\t},\r\n\tmaxWidthWrapper: {\r\n\r\n\t}\r\n}));\r\n","import { Slide } from '@mui/material';\r\nimport React, { HTMLAttributes } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { useOnScreen } from '../../utils/customHooks';\r\nimport { LinearProgressDelayed } from '../linearProgressDelayed';\r\nimport { StickyPanel } from './stickyPanel';\r\n\r\nconst useStyles = makeStyles({ name: 'StickyWrapper' })(theme => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column'\r\n\t},\r\n\tpaddingWrapper: {\r\n\t\tzIndex: 1,\r\n\t\tleft: '0',\r\n\t\tright: '0',\r\n\t\torder: 0,\r\n\t\ttop: 0,\r\n\t\t'&.sticky': {\r\n\t\t\tposition: 'sticky'\r\n\t\t},\r\n\t\t'&.fixed': {\r\n\t\t\tposition: 'fixed'\r\n\t\t}\r\n\t},\r\n\tmaxWidthWrapper: {\r\n\r\n\t},\r\n\tlinearProgress: {\r\n\t\tposition: 'absolute',\r\n\t\tleft: 0,\r\n\t\tright: 0,\r\n\t\tbottom: 0,\r\n\t\ttransform: 'translateY(100%)'\r\n\t}\r\n}));\r\n\r\nexport type StickyWrapperClasses = Partial['classes']>;\r\n\r\nexport type StickyWrapperProps = React.PropsWithChildren & {\r\n\tstickyPanelContent: React.ReactNode;\r\n\tdetailElement: E;\r\n\tclasses?: StickyWrapperClasses;\r\n\tloading?: boolean;\r\n\tmode?: 'fixed' | 'sticky';\r\n\thideAfterDetail?: boolean;\r\n}>;\r\n\r\nexport const StickyWrapper = (props: StickyWrapperProps) => {\r\n\tconst { stickyPanelContent, children, detailElement, classes, loading, mode, hideAfterDetail, className, ...other } = props;\r\n\tconst [detailVisible, detailPosition] = useOnScreen(detailElement);\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props: { classes } });\r\n\r\n\tconst hideSticky = detailVisible || (hideAfterDetail && detailPosition === 'aboveTop');\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{stickyPanelContent}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{children}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nStickyWrapper.defaultProps = {\r\n\tmode: 'fixed',\r\n\thideAfterDetail: false\r\n};\r\n","import { useMediaQuery } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React from 'react';\r\nimport AnimatedNumber from 'react-animated-number';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { StickyWrapper, StickyWrapperProps } from '../stickyPanel';\r\n\r\nexport type EmobilityResultStickyWrapperProps =\r\n\tOmit, 'stickyPanelContent'> &\r\n\t{ contentProps: EmobilityResultStickyContentProps };\r\n\r\nexport const EmobilityResultStickyWrapper = (props: EmobilityResultStickyWrapperProps) => {\r\n\tconst theme = useTheme();\r\n\tconst desktop = useMediaQuery(theme.originalBreakpoints.up('md'));\r\n\r\n\tif (desktop) {\r\n\t\tconst { contentProps, classes, detailElement, loading, color, mode, hideAfterDetail, ...other } = props;\r\n\t\treturn ;\r\n\t} else {\r\n\t\tconst { contentProps, ...other } = props;\r\n\t\treturn } />;\r\n\t}\r\n};\r\n\r\nEmobilityResultStickyWrapper.defaultProps = {\r\n\thideAfterDetail: true\r\n};\r\n\r\nconst useStyles = makeStyles({ name: 'EmobilityResultSticky' })(theme => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tjustifyContent: 'space-between',\r\n\t\tmargin: -10\r\n\t},\r\n\titem: {\r\n\t\tpadding: 10,\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\t'&.left': {\r\n\r\n\t\t},\r\n\t\t'&.right': {\r\n\t\t\ttextAlign: 'end'\r\n\t\t}\r\n\t},\r\n\tlabel: {\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px'\r\n\t},\r\n\tmodel: {\r\n\t\tfontSize: '16px',\r\n\t\tlineHeight: '24px'\r\n\t},\r\n\tresult: {\r\n\t\tfontSize: '20px',\r\n\t\tlineHeight: '24px',\r\n\t\tfontWeight: 'bold'\r\n\t}\r\n}));\r\n\r\ntype EmobilityResultStickyContentClasses = Partial['classes']>;\r\n\r\ntype EmobilityResultStickyContentProps = {\r\n\tclasses?: EmobilityResultStickyContentClasses;\r\n\tlabelModel: string;\r\n\tlabelResult: string;\r\n\tmodel: string;\r\n\tresult: number;\r\n\tformatResult?: (value: number) => string;\r\n};\r\n\r\nconst EmobilityResultStickyContent: React.FC = (props) => {\r\n\tconst { labelModel, labelResult, model, result, formatResult } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t{labelModel}\r\n\t\t\t\t{model}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
{labelResult}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n","import React, { HTMLAttributes } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'Loader' })(theme => ({\r\n\troot: {\r\n\t\tposition: 'fixed',\r\n\t\ttop: '0',\r\n\t\tleft: '0',\r\n\t\tbottom: '0',\r\n\t\tright: '0',\r\n\t\tbackground: theme.palette.background.default,\r\n\t\tzIndex: 1\r\n\t},\r\n\tspinner: {\r\n\t\tposition: 'absolute',\r\n\t\ttop: '50%',\r\n\t\tleft: '50%',\r\n\t\ttransform: 'translate(-50%, -50%)',\r\n\t\t'& rect': {\r\n\t\t\tfill: theme.palette.primary.main\r\n\t\t}\r\n\t}\r\n}));\r\n\r\ntype LoaderProps = HTMLAttributes & {\r\n\tclasses?: Partial['classes']>;\r\n}\r\n\r\nexport const Loader: React.FC = (props) => {\r\n\tconst { classes, className, ...other } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props: { classes } });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n","import React, { FunctionComponent } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'ImageContainer' })(theme => ({\r\n\troot: {\r\n\t\tbackgroundSize: 'cover',\r\n\t\tbackgroundPosition: 'center',\r\n\t\tbackgroundRepeat: 'no-repeat'\r\n\t}\r\n}));\r\n\r\nexport type ImageContainerProps = {\r\n\tsrc: string;\r\n\tclassName?: string;\r\n};\r\n\r\nexport const ImageContainer: FunctionComponent = (props: ImageContainerProps) => {\r\n\tlet { classes: styles, cx } = useStyles();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t
\r\n\t);\r\n};\r\n","import { Dialog, DialogProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { CloseButton } from '../../buttons';\r\nimport { ImageContainer } from '../../imageContainer';\r\nimport { SkodaScrollbars } from '../../scrollbars';\r\n\r\nconst useStyles = makeStyles({ name: 'DesktopImageDialog' })(theme => ({\r\n\tpaper: {\r\n\t\twidth: '100%',\r\n\t\tmaxWidth: 'unset',\r\n\t\theight: '100%',\r\n\t\tmaxHeight: 'unset',\r\n\t\tmargin: 0,\r\n\t\toverflow: 'hidden',\r\n\t\tflexDirection: 'row',\r\n\t\talignItems: 'stretch'\r\n\t},\r\n\tpanelImage: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexBasis: '50%',\r\n\t\tposition: 'relative'\r\n\t},\r\n\timage: {\r\n\t\tposition: 'absolute',\r\n\t\ttop: 0,\r\n\t\tbottom: 0,\r\n\t\tleft: 0,\r\n\t\tright: 0\r\n\t},\r\n\tpanelContent: {\r\n\t\tboxSizing: 'border-box',\r\n\t\tflexBasis: '50%',\r\n\t\tpadding: '30px 60px 45px 120px',\r\n\t\t[theme.originalBreakpoints.up('md')]: {\r\n\t\t\tpadding: '130px 30px 70px 70px'\r\n\t\t},\r\n\t\t[theme.originalBreakpoints.up('lg')]: {\r\n\t\t\tpadding: '130px 90px 130px 130px'\r\n\t\t}\r\n\t},\r\n\tpaddingRight: {\r\n\t\tpaddingRight: 60,\r\n\t\t[theme.originalBreakpoints.up('md')]: {\r\n\t\t\tpaddingRight: 40\r\n\t\t},\r\n\t\t[theme.originalBreakpoints.up('lg')]: {\r\n\t\t\tpaddingRight: 30\r\n\t\t}\r\n\t},\r\n\tclose: {\r\n\t\tposition: 'absolute',\r\n\t\ttop: 20,\r\n\t\tright: 20,\r\n\t\t[theme.originalBreakpoints.up('md')]: {\r\n\t\t\ttop: 30,\r\n\t\t\tright: 30\r\n\t\t}\r\n\t},\r\n\tcontentWrapper: {\r\n\t\tposition: 'relative',\r\n\t\twidth: '100%',\r\n\t\theight: '100%'\r\n\t},\r\n\tscroll: {\r\n\t\tmaxHeight: '100%',\r\n\t\theight: 'auto',\r\n\t\tposition: 'absolute',\r\n\t\tleft: 0,\r\n\t\tright: 0,\r\n\t\ttop: '50%',\r\n\t\ttransform: 'translateY(-50%)'\r\n\t}\r\n}));\r\n\r\nexport type DesktopImageDialogClassKey = 'panelImage' | 'image' | 'panelContent' | 'paddingRight' | 'buttonClose';\r\nexport type DesktopImageDialogClasses = { [key in DesktopImageDialogClassKey]?: string };\r\nexport type DesktopImageDialogProps = DialogProps & {\r\n\tsrc: string;\r\n\totherClasses?: DesktopImageDialogClasses;\r\n};\r\n\r\nexport const ImageDialogDesktop: React.FC = (props) => {\r\n\tconst { src, open, onClose, classes, otherClasses, children, ...otherProps } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props: { classes: otherClasses } });\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n","import { Dialog, DialogProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { CloseButton } from '../../buttons';\r\nimport { ImageContainer } from '../../imageContainer';\r\n\r\nconst useStyles = makeStyles({ name: 'MobileImageDialog' })(theme => ({\r\n\tpaper: {\r\n\t\twidth: '100%',\r\n\t\tmaxWidth: 'unset',\r\n\t\theight: '100%',\r\n\t\tmaxHeight: 'unset',\r\n\t\tmargin: 0,\r\n\t\toverflow: 'auto',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'stretch'\r\n\t},\r\n\timageContainer: {\r\n\t\tpaddingTop: '88%',\r\n\t\t[theme.originalBreakpoints.up('sm')]: {\r\n\t\t\tpaddingTop: '62%'\r\n\t\t}\r\n\t},\r\n\tpanelContent: {\r\n\t\tboxSizing: 'border-box',\r\n\t\tflexBasis: '50%',\r\n\t\tpadding: '30px 45px 45px 45px',\r\n\t\t[theme.originalBreakpoints.up('sm')]: {\r\n\t\t\tpadding: '30px 120px 45px 120px'\r\n\t\t}\r\n\t},\r\n\tclose: {\r\n\t\tposition: 'absolute',\r\n\t\ttop: 15,\r\n\t\tright: 15,\r\n\t\t[theme.originalBreakpoints.up('sm')]: {\r\n\t\t\ttop: 20,\r\n\t\t\tright: 20\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type MobileImageDialogClassKey = 'panelContent' | 'buttonClose' | 'imageContainer';\r\nexport type MobileImageDialogClasses = { [key in MobileImageDialogClassKey]?: string };\r\nexport type MobileImageDialogProps = DialogProps & {\r\n\tsrc: string;\r\n\totherClasses?: MobileImageDialogClasses;\r\n};\r\n\r\nexport const ImageDialogMobile: React.FC = (props) => {\r\n\tconst { src, open, onClose, classes, otherClasses, children, ...otherProps } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props: { classes: otherClasses } });\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n","import React, { createContext, PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { CloseButton } from '../buttons';\r\nimport { PageSection, PageSectionProps } from '../pageSection';\r\n\r\nconst useStyles = makeStyles({ name: 'InPageDialog' })(theme => ({\r\n\tpaddingWrapper: {\r\n\t\tpaddingTop: 40,\r\n\t\tpaddingBottom: 40\r\n\t},\r\n\tmaxWidthWrapper: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\talignItems: 'stretch'\r\n\t},\r\n\thead: {\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tmarginBottom: 20\r\n\t},\r\n\ttitle: {\r\n\t\tmarginRight: 10,\r\n\t\tfontSize: 28,\r\n\t\tfontWeight: 'bold',\r\n\t\tletterSpacing: 0.25,\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tfontSize: 42\r\n\t\t}\r\n\t},\r\n\tcloseButton: {\r\n\t\tmarginLeft: 'auto',\r\n\t\talignSelf: 'flex-start',\r\n\t\tflexShrink: 0\r\n\t}\r\n}));\r\n\r\nexport type InPageDialogClasses = {\r\n\thead?: string;\r\n\ttitle?: string;\r\n\tcloseButton?: string;\r\n};\r\n\r\nexport type InPageDialogProps = PropsWithChildren<{\r\n\tisOpen: boolean;\r\n\tonClose: () => void;\r\n\ttitle?: string;\r\n\tclasses?: InPageDialogClasses;\r\n\tpageSectionProps?: PageSectionProps;\r\n}>;\r\n\r\nexport const InPageDialog: React.FC = (props) => {\r\n\tconst { isOpen, children, onClose, title, pageSectionProps } = props;\r\n\r\n\tlet { classes: styles, cx } = useStyles(undefined, {props});\r\n\r\n\tif (!isOpen)\r\n\t\treturn null;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{title && title.length &&\r\n\t\t\t\t\t\t{title}}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t{children}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\ntype InPageDialogContextProps = {\r\n\tref: React.MutableRefObject,\r\n\topen: () => void;\r\n\tclose: () => void;\r\n};\r\n\r\nconst InPageDialogContext = createContext({\r\n\tref: null,\r\n\topen: () => { },\r\n\tclose: () => { }\r\n});\r\n\r\nexport const InPageDialogProvider = (props: PropsWithChildren) => {\r\n\tconst ref = useRef();\r\n\tconst [isOpen, setIsOpen] = useState(false);\r\n\tconst inPageDialogContextValue = ({\r\n\t\tref: ref,\r\n\t\topen: () => setIsOpen(true),\r\n\t\tclose: () => setIsOpen(false)\r\n\t});\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nconst InPageDialogBase = (props: PropsWithChildren) => {\r\n\tconst { children } = props;\r\n\tconst { ref, open, close } = useContext(InPageDialogContext);\r\n\r\n\tuseEffect(() => {\r\n\t\topen();\r\n\t\treturn () => close();\r\n\t}, [open, close]);\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\tchildren, ref.current\r\n\t);\r\n};\r\n","import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined';\r\nimport RemoveCircleOutlineOutlinedIcon from '@mui/icons-material/RemoveCircleOutlineOutlined';\r\nimport { IconButton } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'PlusMinus' })((theme) => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'row',\r\n\t\talignItems: 'center',\r\n\t\tjustifyContent: 'space-between',\r\n\t\tgap: 2,\r\n\t\tmargin: -9\r\n\t},\r\n\tbutton: {\r\n\t\tpadding: 9,\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: 'transparent'\r\n\t\t}\r\n\t},\r\n\tbuttonIncrease: {\r\n\r\n\t},\r\n\tbuttonDecrease: {\r\n\r\n\t}\r\n}));\r\n\r\nexport type IncrementDecrementProps = React.HTMLAttributes & {\r\n\tdisableIncrease?: boolean;\r\n\tdisableDecrease?: boolean;\r\n\tonIncrease?: () => void;\r\n\tonDecrease?: () => void;\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const IncrementDecrement: React.FC = (props) => {\r\n\tconst { classes, className, children, onIncrease, onDecrease, disableDecrease, disableIncrease, ...other } = props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props: { classes } });\r\n\r\n\treturn (\r\n\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t{children}\r\n\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t
\r\n\t);\r\n};\r\n","import { SvgIconProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'ShareButtonLink' })((theme) => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tgap: 17,\r\n\t\tpaddingLeft: 25,\r\n\t\tpaddingRight: 25,\r\n\t\tpaddingTop: 12,\r\n\t\tpaddingBottom: 12\r\n\t},\r\n\ticon: {\r\n\t\twidth: 22\r\n\t},\r\n\tlabel: {\r\n\t\tfontSize: 16,\r\n\t\tlineHeight: '24px'\r\n\t}\r\n}));\r\n\r\nexport type ShareButtonLinkProps = {\r\n\tIcon: React.ComponentType;\r\n\tlabel?: string;\r\n\tclasses?: Partial['classes']>\r\n};\r\n\r\nexport const ShareButtonLink = (props: ShareButtonLinkProps) => {\r\n\tconst { Icon, label } = props;\r\n\tlet { classes: styles } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t{label && {label}}\r\n\t\t
\r\n\t);\r\n};\r\n","import { CircularProgress, Fab, FabProps } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React, { createRef, useEffect, useState } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'LoadingFab' })(theme => ({\r\n\troot: {\r\n\t\tposition: 'relative'\r\n\t},\r\n\tspinner: {\r\n\t\tposition: 'absolute'\r\n\t}\r\n}));\r\n\r\nexport type LoadingFabProps = {\r\n\tloading: boolean;\r\n\tclasses: Partial['classes']>;\r\n} & Omit;\r\n\r\nexport const LoadingFab: React.FC = (props) => {\r\n\tconst { loading, href, children, disabled, classes, className, ...other } = props;\r\n\tconst theme = useTheme();\r\n\tconst fabRef = createRef();\r\n\tconst [fabSize, setFabSize] = useState(0);\r\n\tlet { classes: styles, cx } = useStyles(undefined, { props });\r\n\r\n\tconst progressThickness = (theme.components?.MuiCircularProgress?.defaultProps?.thickness ?? 3.6);\r\n\tconst progressSize = (theme.components?.MuiCircularProgress?.defaultProps?.size as number ?? 40);\r\n\tconst fixedThickness = progressThickness * (progressSize / fabSize);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (fabRef.current)\r\n\t\t\tsetFabSize(fabRef.current.getBoundingClientRect().width);\r\n\t}, [fabRef]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{children}\r\n\t\t\t{loading &&\r\n\t\t\t\t}\r\n\t\t\r\n\t);\r\n};\r\n","import { makeStyles } from 'tss-react/mui';\r\n\r\nexport const useStyles = makeStyles({ name: 'MessageBox' })(theme => ({\r\n\tpaper: {\r\n\t\tboxSizing: 'border-box',\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tbackgroundColor: theme.palette.background.paper,\r\n\t\tmargin: '15px',\r\n\t\tpadding: '30px 30px 50px 50px',\r\n\t\tmaxWidth: '724px',\r\n\t\tboxShadow: '0px 11px 15px -7px rgba(0,0,0,0.2), 0px 24px 38px 3px rgba(0,0,0,0.14), 0px 9px 46px 8px rgba(0,0,0,0.12);',\r\n\t\t[theme.originalBreakpoints.only('xs')]: {\r\n\t\t\twidth: '100%',\r\n\t\t\tmaxWidth: 'unset',\r\n\t\t\tmaxHeight: '100%',\r\n\t\t\tmargin: '0',\r\n\t\t\tmarginTop: 'auto'\r\n\t\t}\r\n\t},\r\n\tbuttonClose: {\r\n\t\tmarginLeft: 'auto',\r\n\t\tflexShrink: 0\r\n\t},\r\n\tscrollbars: {\r\n\t\theight: '100%',\r\n\t\t[theme.originalBreakpoints.up('sm')]: {\r\n\t\t\theight: 'auto',\r\n\t\t\tmaxHeight: '300px'\r\n\t\t},\r\n\t\t'& .os-content-glue': {\r\n\t\t\tmarginBottom: '1px !important'\r\n\t\t}\r\n\t},\r\n\theader: {\r\n\t\tfontWeight: 'bold',\r\n\t\tlineHeight: 1.22,\r\n\t\tcolor: theme.palette.text.primary,\r\n\t\twordWrap: 'break-word',\r\n\t\tpaddingLeft: '0',\r\n\t\tpaddingRight: '0',\r\n\t\tfontSize: '30px',\r\n\t\tmarginBottom: '26px',\r\n\t\tmarginTop: '10px',\r\n\t\t[theme.originalBreakpoints.up('sm')]: {\r\n\t\t\tmarginBottom: '44px',\r\n\t\t\tfontSize: '36px'\r\n\t\t}\r\n\t},\r\n\tbuttonConfirm: {\r\n\t\tmargin: '35px 15px 0px 15px'\r\n\t},\r\n\tcontent: {\r\n\t\tpaddingRight: 20,\r\n\t\tfontSize: '16px',\r\n\t\ttextAlign: 'justify',\r\n\t\tlineHeight: 1.63,\r\n\t\t'& a': {\r\n\t\t\tcolor: theme.palette.primary.main\r\n\t\t}\r\n\t}\r\n}));\r\n","import * as React from 'react';\r\nimport { PageOverlayProps } from './pageOverlay';\r\n\r\nexport interface IPageOverlayContext {\r\n\tonVisibilityChanged: (visible: boolean, properties?: PageOverlayProps) => void\r\n\tresize: () => void\r\n}\r\n\r\nexport const PageOverlayContext = React.createContext(null);","import { Paper, PaperProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles({ name: 'PlusCard' })(theme => ({\r\n\troot: {\r\n\t\tpadding: '36px 40px',\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tgap: 8,\r\n\t\talignItems: 'center',\r\n\t\tboxShadow: 'none',\r\n\t\tboxSizing: 'border-box',\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tpadding: '46px 65px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tpadding: '46px 120px'\r\n\t\t}\r\n\t},\r\n\ticon: {\r\n\t\theight: 70,\r\n\t\tmarginBottom: 10\r\n\t},\r\n\ttitle: {\r\n\t\tfontWeight: 700,\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px',\r\n\t\ttextAlign: 'center',\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '20px'\r\n\t\t}\r\n\t},\r\n\tdescription: {\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px',\r\n\t\ttextAlign: 'center',\r\n\t\toverflow: 'hidden',\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '20px'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type PlusCardProps = PaperProps & {\r\n\ticon: string;\r\n\ttitle: string;\r\n\tdescription: string;\r\n}\r\n\r\nexport const PlusCard = (props: PlusCardProps) => {\r\n\tconst { icon, title, description, className, ...other } = props;\r\n\tconst { classes, cx } = useStyles();\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t{title}\r\n\t\t\t{description}\r\n\t\t\r\n\t);\r\n};","import React, { useMemo } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { useResponsive } from '../../utils/customHooks';\r\nimport { SkodaSwiper, SkodaSwiperProps } from '../swiper';\r\nimport { PlusCardProps } from './plusCard';\r\n\r\nexport type PlusCardsProps = SkodaSwiperProps & {\r\n\tchildren: React.ReactElement[];\r\n};\r\n\r\nconst useStyles = makeStyles({ name: 'PlusCards' })(theme => ({\r\n\troot: {\r\n\t\t'&.swiper-container-horizontal': {\r\n\t\t\toverflow: 'hidden'\r\n\t\t}\r\n\t},\r\n\tslide: {\r\n\t\twidth: 280,\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\twidth: 'unset'\r\n\t\t}\r\n\t},\r\n\tplusCard: {\r\n\t\theight: '100%'\r\n\t}\r\n}));\r\n\r\nexport const PlusCards: React.FC = (props) => {\r\n\tconst { children, className, ...other } = props;\r\n\tconst { classes, cx } = useStyles();\r\n\r\n\tconst responsive = useResponsive();\r\n\r\n\tconst slidesPerView = responsive({\r\n\t\txs: 'auto' as 'auto',\r\n\t\tmd: 3\r\n\t});\r\n\r\n\tconst spaceBetween = responsive({\r\n\t\txs: 30,\r\n\t\tlg: 48\r\n\t});\r\n\r\n\tconst enrichedChildren = useMemo(() => React.Children\r\n\t\t.map(children, (child: React.ReactElement) =>\r\n\t\t\tReact.cloneElement(child, { ...child.props, className: cx(child.props.className, classes.plusCard) }))\r\n\t\t.filter(child => child.props.title?.length && child.props.icon?.length),\r\n\t\t[children, classes, cx]);\r\n\r\n\tconst navigation = useMemo(() => {\r\n\t\treturn slidesPerView === 'auto'\r\n\t\t\t? enrichedChildren.length > 1\r\n\t\t\t: slidesPerView < enrichedChildren.length;\r\n\t}, [slidesPerView, enrichedChildren]);\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\nPlusCards.defaultProps = {\r\n\tactiveSlideEffects: false,\r\n\tscrollbar: false\r\n};\r\n","import { Menu, MenuItem, MenuProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { ShareButtonLink } from '../shareButtonLink';\r\nimport { ShareLinkItem } from '../types';\r\n\r\nconst useStyles = makeStyles({ name: 'ShareButtonDesktopMenu' })((theme) => ({\r\n\tmenuPaper: {\r\n\t\tmarginTop: 8\r\n\t},\r\n\tmenuList: {\r\n\t\tpadding: 0\r\n\t},\r\n\tmenuItem: {\r\n\t\tpadding: 0\r\n\t},\r\n\tlink: {\r\n\t\twidth: '100%'\r\n\t}\r\n}));\r\n\r\nexport type ShareButtonDesktopMenuProps = Omit & {\r\n\tonClose: () => void;\r\n\titems: ShareLinkItem[];\r\n};\r\n\r\nexport const ShareButtonDesktopMenu: React.FC = (props) => {\r\n\tconst { onClose, items, ...other } = props;\r\n\r\n\tconst { classes } = useStyles();\r\n\r\n\tconst closeMenu = () => {\r\n\t\tonClose?.();\r\n\t};\r\n\r\n\tconst createMenuItem = (shareLinkItem: ShareLinkItem) => {\r\n\t\treturn shareLinkItem.createShareLink(, classes.link);\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n","import { Menu, MenuItem, MenuProps, PaperProps, Slide } from '@mui/material';\r\nimport { TransitionProps } from '@mui/material/transitions';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { ConfirmButton, MobileSelectMenu } from '../../responsiveSelect/mobileSelect';\r\nimport { ShareButtonLink } from '../shareButtonLink';\r\nimport { MobileMenuStylesProps, ShareLinkItem } from '../types';\r\n\r\nconst useStyles = makeStyles({ name: 'ShareButtonMobileMenu' })((theme, props) => ({\r\n\tmenuList: {\r\n\t\tpadding: 0,\r\n\t\tdisplay: props.centerMenuItems && 'grid',\r\n\t\tjustifyContent: props.centerMenuItems && 'center'\r\n\t},\r\n\tmenuItem: {\r\n\t\tpadding: 0\r\n\t},\r\n\tconfirmButton: {\r\n\t\tmarginBottom: 15\r\n\t},\r\n\tlinkLabel: {\r\n\t\tfontSize: 18,\r\n\t\tlineHeight: '28px'\r\n\t},\r\n\tlinkRoot: {\r\n\t\tgap: 41\r\n\t}\r\n}));\r\n\r\nexport type ShareButtonMobileMenuProps = Omit & {\r\n\ttextCancel: string;\r\n\ttextConfirm: string;\r\n\tonClose: () => void;\r\n\tcenterMenuItems: boolean;\r\n\titems: ShareLinkItem[];\r\n};\r\n\r\nexport const ShareButtonMobileMenu: React.FC = (props) => {\r\n\tconst { textCancel, textConfirm, onClose, centerMenuItems, items, ...other } = props;\r\n\r\n\tconst { classes, cx } = useStyles({ centerMenuItems });\r\n\r\n\tconst [selectedIndex, setSelectedIndex] = React.useState(-1);\r\n\r\n\tconst closeMenu = () => {\r\n\t\tonClose?.();\r\n\t\tsetSelectedIndex(-1);\r\n\t};\r\n\r\n\tconst confirmButtonBase = ;\r\n\r\n\tconst confirmButton = selectedIndex !== -1 ? items[selectedIndex].createShareLink(confirmButtonBase, classes.confirmButton) : confirmButtonBase;\r\n\r\n\tconst createMenuItem = (shareLinkItem: ShareLinkItem) => {\r\n\t\treturn ;\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n","import { Email } from '@mui/icons-material';\r\nimport { ButtonBase, ButtonBaseProps, useMediaQuery } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React from 'react';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { EmailShareButton, FacebookShareButton, LinkedinShareButton, TwitterShareButton } from 'react-share';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { notNullOrEmpty } from '../../utils/common';\r\nimport { CopyLinkIcon, FacebookIcon, LinkedinIcon, ShareButtonIcon, TwitterIcon } from '../icons';\r\nimport { ShareButtonDesktopMenu } from './shareButtonDesktopMenu';\r\nimport { ShareButtonMobileMenu } from './shareButtonMobileMenu';\r\nimport { CopyUrlProps, EmailProps, FacebookProps, LinkedinProps, ShareLinkItem, StylesProps, TwitterProps } from './types';\r\n\r\nconst useStyles = makeStyles({ name: 'ShareButton' })((theme, props) => ({\r\n\tbutton: {\r\n\t\twidth: 44,\r\n\t\theight: 44,\r\n\t\tborderRadius: 22,\r\n\t\tbackgroundColor: props.darkBackground ? '#F3F3F31F' : '#1617180F',\r\n\t\tcolor: props.darkBackground ? theme.palette.skodaColors['neutrals-white'] : theme.palette.text.primary\r\n\t}\r\n}));\r\n\r\nexport type ShareButtonProps = ButtonBaseProps & {\r\n\turl?: string;\r\n\tcopyUrlProps?: CopyUrlProps;\r\n\tfacebookProps?: FacebookProps;\r\n\ttwitterProps?: TwitterProps;\r\n\tlinkedinProps?: LinkedinProps;\r\n\temailProps?: EmailProps;\r\n\tdarkBackground?: boolean;\r\n\ttextConfirm: string;\r\n\ttextCancel: string;\r\n};\r\n\r\nexport const ShareButton: React.FC = (props) => {\r\n\tconst { url, copyUrlProps, facebookProps, twitterProps, linkedinProps, emailProps,\r\n\t\tdarkBackground, textConfirm, textCancel,\r\n\t\tclassName, onClick, ...other } = props;\r\n\r\n\tconst { classes, cx } = useStyles({ darkBackground });\r\n\r\n\tconst buttonRef = React.useRef();\r\n\tconst [menuOpen, setMenuOpen] = React.useState(false);\r\n\r\n\tconst _url = notNullOrEmpty(url) ? url : window.location.href;\r\n\r\n\tconst getUrl = (additionalUrlParameters: string) => {\r\n\t\tif (notNullOrEmpty(additionalUrlParameters)) {\r\n\t\t\treturn _url.includes('?') ? `${_url}&${additionalUrlParameters}` : `${_url}?${additionalUrlParameters}`;\r\n\t\t}\r\n\r\n\t\treturn _url;\r\n\t};\r\n\tconst addStylesToOptionProps = (optionalProps: any, className: string) => ({ ...optionalProps, className: cx(optionalProps?.className, className) });\r\n\r\n\tconst theme = useTheme();\r\n\tconst isDesktop = useMediaQuery(theme.originalBreakpoints.up('sm'));\r\n\r\n\tconst emptyLabels = !copyUrlProps?.label && !facebookProps?.label && !twitterProps?.label && !linkedinProps?.label && !emailProps?.label;\r\n\r\n\tconst createCopyUrlShareLink = (child: React.ReactNode, className: string) => {\r\n\t\treturn (\r\n\t\t\t copyUrlProps?.onClick?.()}>\r\n\t\t\t\t\r\n\t\t\t\t\t{child}\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst createFacebookShareLink = (child: React.ReactNode, className: string) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{child}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst createTwitterShareLink = (child: React.ReactNode, className: string) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{child}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst createLinkedinShareLink = (child: React.ReactNode, className: string) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{child}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst createEmailShareLink = (child: React.ReactNode, className: string) => {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{child}\r\n\t\t\t\r\n\t\t);\r\n\t};\r\n\r\n\tconst shareLinkItems = [\r\n\t\t...!copyUrlProps?.hide ? [{ Icon: CopyLinkIcon, label: copyUrlProps?.label, createShareLink: createCopyUrlShareLink }] : [],\r\n\t\t...!facebookProps?.hide ? [{ Icon: FacebookIcon, label: facebookProps?.label, createShareLink: createFacebookShareLink }] : [],\r\n\t\t...!twitterProps?.hide ? [{ Icon: TwitterIcon, label: twitterProps?.label, createShareLink: createTwitterShareLink }] : [],\r\n\t\t...!linkedinProps?.hide ? [{ Icon: LinkedinIcon, label: linkedinProps?.label, createShareLink: createLinkedinShareLink }] : [],\r\n\t\t...!emailProps?.hide ? [{ Icon: Email, label: emailProps?.label, createShareLink: createEmailShareLink }] : []\r\n\t] as ShareLinkItem[];\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t { onClick?.(e); setMenuOpen(true); }}\r\n\t\t\t\tclassName={cx(className, classes.button)}\r\n\t\t\t\t{...other}>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{isDesktop\r\n\t\t\t\t? setMenuOpen(false)}\r\n\t\t\t\t\titems={shareLinkItems} />\r\n\t\t\t\t: setMenuOpen(false)}\r\n\t\t\t\t\ttextCancel={textCancel}\r\n\t\t\t\t\ttextConfirm={textConfirm}\r\n\t\t\t\t\tcenterMenuItems={emptyLabels}\r\n\t\t\t\t\titems={shareLinkItems} />}\r\n\t\t\r\n\t);\r\n};\r\n","import ArrowLeftIcon from '@mui/icons-material/ArrowLeft';\r\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\r\nimport { SliderThumb, SliderTypeMap } from '@mui/material';\r\nimport React, { PropsWithChildren } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\ntype SliderThumbProps = PropsWithChildren['thumb']>;\r\n\r\nexport const ThumbComponent: React.FC = (props) => {\r\n\tconst { children, ...other } = props;\r\n\tconst { classes } = useStyles();\r\n\treturn (\r\n\t\t\r\n\t\t\t{children}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nconst useStyles = makeStyles({ name: { ThumbComponent } })(() => ({\r\n\tarrowLeft: {\r\n\t\tmarginRight: -8\r\n\t},\r\n\tarrowRight: {\r\n\t\tmarginLeft: -8\r\n\t}\r\n}));\r\n","import React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\n\r\nconst useStyles = makeStyles()((theme) => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tflexDirection: 'column',\r\n\t\tgap: 8,\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tflexDirection: 'row',\r\n\t\t\tgap: 32\r\n\t\t}\r\n\t},\r\n\timg: {\r\n\t\twidth: 32,\r\n\t\theight: 32,\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\twidth: 40,\r\n\t\t\theight: 40\r\n\t\t}\r\n\t},\r\n\ttext: {\r\n\t\tfontWeight: 300,\r\n\t\tletterSpacing: '0.02em',\r\n\t\tfontSize: 10,\r\n\t\tlineHeight: '14px',\r\n\t\ttextAlign: 'center',\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tfontSize: 16,\r\n\t\t\tlineHeight: '24px',\r\n\t\t\ttextAlign: 'start'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tfontSize: 18,\r\n\t\t\tlineHeight: '28px',\r\n\t\t\ttextAlign: 'start'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type SkodaAdvantagesItemProps = {\r\n\ticonUrl: string;\r\n\ticonAltText: string;\r\n\ttext: string;\r\n\tclasses?: Partial['classes']>;\r\n}\r\n\r\nexport const SkodaAdvantagesItem = (props: SkodaAdvantagesItemProps) => {\r\n\tconst { iconUrl, iconAltText, text } = props;\r\n\tconst { classes } = useStyles(undefined, { props });\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t

\r\n\t\t\t
{text}\r\n\t\t
\r\n\t);\r\n};","import { SliderProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { IconTooltipProps } from '../tooltip';\r\n\r\nconst useStyles = makeStyles({ name: 'SliderWrapper' })(theme => ({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column'\r\n\t},\r\n\tlabel: {\r\n\t\tmarginBottom: 16,\r\n\t\tfontSize: '16px',\r\n\t\tlineHeight: '24px'\r\n\t},\r\n\tvalue: {\r\n\t\tmarginBottom: 20,\r\n\t\tfontSize: '20px',\r\n\t\tlineHeight: '24px',\r\n\t\tfontWeight: 'bold'\r\n\t},\r\n\tpanelMinMax: {\r\n\t\tdisplay: 'flex',\r\n\t\tjustifyContent: 'space-between',\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '16px',\r\n\t\tmarginTop: 12\r\n\t}\r\n}));\r\n\r\nexport type SliderWrapperProps = React.DetailedHTMLProps, HTMLDivElement> & {\r\n\tchildren: React.ReactElement;\r\n\tlabel: string;\r\n\tlabelMin?: string;\r\n\tlabelMax?: string;\r\n\ttooltip?: React.ReactElement;\r\n\tformatValue?: (value: number) => string;\r\n\tclasses?: Partial['classes']>;\r\n};\r\n\r\nexport const SliderWrapper: React.FC = (props: SliderWrapperProps) => {\r\n\tconst { children, label, tooltip, labelMin, labelMax, formatValue, className, classes, ...other } = props;\r\n\tconst { value, min, max } = props.children.props;\r\n\tconst { classes: styles, cx } = useStyles(undefined, { props: { classes } });\r\n\r\n\tconst valueText = formatValue?.(value) ?? value;\r\n\tconst minValueText = labelMin ?? formatValue?.(min) ?? min;\r\n\tconst maxValueText = labelMax ?? formatValue?.(max) ?? max;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t{label}\r\n\t\t\t\t{tooltip &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{'\\u00A0'}\r\n\t\t\t\t\t\t{tooltip}\r\n\t\t\t\t\t}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t{valueText}\r\n\t\t\t
\r\n\t\t\t{children}\r\n\t\t\t
\r\n\t\t\t\t{minValueText}\r\n\t\t\t\t{maxValueText}\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n","import { Slider, SliderProps } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport React, { useMemo } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { ThumbComponent } from './thumb';\r\n\r\ntype StylesProps = {\r\n\trailBackground: string;\r\n}\r\n\r\nconst useStyles = makeStyles({ name: 'RangeSlider' })((theme, { railBackground }) => ({\r\n\trail: {\r\n\t\tbackground: railBackground,\r\n\t\topacity: 1\r\n\t},\r\n\ttrack: {\r\n\t\tdisplay: 'none'\r\n\t}\r\n}));\r\n\r\nexport type SkodaSliderProps = Omit & {\r\n\tmin: number;\r\n\tmax: number;\r\n\tvalue: number | number[];\r\n\tonChange?: (value: number | number[]) => void;\r\n\tonChangeCommitted?: (value: number | number[]) => void;\r\n\tcolors?: string[];\r\n};\r\n\r\nexport const SkodaSlider: React.FC = (props) => {\r\n\tconst { colors, onChange, onChangeCommitted, classes, ...other } = props;\r\n\r\n\tconst theme = useTheme();\r\n\tconst railColors = colors ?? theme.Skoda?.settings?.skodaSlider?.colors;\r\n\r\n\tconst railBackground = useMemo(() =>\r\n\t\tgetRailGradient(props.min, props.max, props.value, railColors),\r\n\t\t[props.min, props.max, props.value, railColors]);\r\n\r\n\tconst { classes: styles } = useStyles({ railBackground }, { props });\r\n\r\n\treturn onChange?.(val)}\r\n\t\tonChangeCommitted={(_, val) => onChangeCommitted?.(val)}\r\n\t\tcomponents={{ Thumb: ThumbComponent }}\r\n\t\tclasses={{ ...styles }}\r\n\t\t{...other} />;\r\n};\r\n\r\nconst getRailGradient = (min: number, max: number, value: number | number[], colors: string[]) => {\r\n\tconst valuesArr = Array.isArray(value) ? value : [value];\r\n\tconst range = max - min;\r\n\tconst percentages = valuesArr.map(val => (val - min) / range);\r\n\tconst postions = percentages.map(perc => `calc(${perc * 100}% + (${40 * (0.5 - perc)}px))`);\r\n\treturn `linear-gradient(to right,${getGradientFragments(colors, postions)})`;\r\n};\r\n\r\nconst getGradientFragments = (c: string[], p: string[]) => {\r\n\tlet res = `${c[0]} 0%`;\r\n\tfor (let i = 0; i < p.length; i++) {\r\n\t\tres += `, ${c[i]} ${p[i]}, ${c[i + 1]} ${p[i]}`;\r\n\t}\r\n\treturn res;\r\n};\r\n","import { useTheme } from '@mui/material/styles';\r\nimport React, { CSSProperties } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { SkodaSliderProps } from '../skodaSlider';\r\n\r\nconst useStyles = makeStyles({ name: 'RangeSliderWrapper' })(theme => ({\r\n\tpanelValues: {\r\n\t\tdisplay: 'flex',\r\n\t\tmarginLeft: 20,\r\n\t\tmarginRight: 20,\r\n\t\tmarginBottom: 12,\r\n\t\ttransition: 'opacity 1s',\r\n\t\t'&.disabled': {\r\n\t\t\topacity: 0.5\r\n\t\t}\r\n\t},\r\n\tvalueFragment: {\r\n\t\ttextAlign: 'center',\r\n\t\tfontWeight: 'bold',\r\n\t\tdisplay: 'flex',\r\n\t\tjustifyContent: 'center'\r\n\t},\r\n\tbubble: {\r\n\t\tfontSize: 12,\r\n\t\tlineHeight: '16px',\r\n\t\tpadding: '8px 12px',\r\n\t\tbackground: theme.palette.background.paper,\r\n\t\tborderColor: theme.palette.background.paper,\r\n\t\tborderRadius: 2,\r\n\t\tposition: 'relative',\r\n\t\t'&:after': {\r\n\t\t\tcontent: '\"\"',\r\n\t\t\tposition: 'absolute',\r\n\t\t\ttop: '100%',\r\n\t\t\tleft: '50%',\r\n\t\t\ttransform: 'translateX(-50%)',\r\n\t\t\tborderTop: '10px solid',\r\n\t\t\tborderTopColor: 'inherit',\r\n\t\t\tborderLeft: '9px solid transparent',\r\n\t\t\tborderRight: '9px solid transparent'\r\n\t\t}\r\n\t},\r\n\tlegendPanel: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexWrap: 'wrap',\r\n\t\tmargin: '-6px -12px',\r\n\t\tmarginTop: 4,\r\n\t\ttransition: 'opacity 1s',\r\n\t\t'&.disabled': {\r\n\t\t\topacity: 0.5\r\n\t\t},\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmargin: '-8px -12px',\r\n\t\t\tmarginTop: 18\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tmargin: '-8px -8px',\r\n\t\t\tmarginTop: 22\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tmargin: '-8px -12px',\r\n\t\t\tmarginTop: 22\r\n\t\t}\r\n\t},\r\n\tlegendItem: {\r\n\t\tdisplay: 'flex',\r\n\t\talignItems: 'center',\r\n\t\tmargin: '6px 12px',\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmargin: '8px 12px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tmargin: '8px 8px'\r\n\t\t},\r\n\t\t[theme.breakpoints.up('xl')]: {\r\n\t\t\tmargin: '8px 12px'\r\n\t\t}\r\n\t},\r\n\tcolorIndicator: {\r\n\t\twidth: 12,\r\n\t\theight: 12,\r\n\t\tborderRadius: 2,\r\n\t\tmarginRight: 10\r\n\t},\r\n\tlegendText: {\r\n\t\tfontSize: 12,\r\n\t\tlineHeight: '16px',\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: 14,\r\n\t\t\tlineHeight: '20px'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\nexport type SkodaSliderWrapperProps = {\r\n\tchildren: React.ReactElement;\r\n\tshowDiffs?: boolean;\r\n\tformatDiffs?: (val: number) => string;\r\n\tlegend?: string[];\r\n\tstyle?: CSSProperties;\r\n};\r\n\r\nexport const SkodaSliderWrapper = (props: SkodaSliderWrapperProps) => {\r\n\tconst { children, showDiffs, formatDiffs, legend, ...other } = props;\r\n\tconst { min, max, value, colors, disabled } = props.children.props;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{showDiffs &&\r\n\t\t\t\t
}\r\n\t\t\t{children}\r\n\t\t\t{legend && legend.length &&\r\n\t\t\t\t
}\r\n\t\t
\r\n\t);\r\n};\r\n\r\ntype PercentagePanelProps = {\r\n\tmin: number;\r\n\tmax: number;\r\n\tvalue: number | number[];\r\n\tformatDiffs?: (val: number) => string;\r\n\tdisabled?: boolean;\r\n};\r\n\r\nconst PercentagePanel: React.FC = (props) => {\r\n\tconst { min, max, value, formatDiffs, disabled } = props;\r\n\r\n\tlet { classes: styles, cx } = useStyles();\r\n\r\n\tconst points = Array.isArray(value) ? [min, ...value, max] : [min, value, max];\r\n\tlet ranges: { from: number; to: number }[] = [];\r\n\tfor (let i = 0; i < points.length - 1; i++) {\r\n\t\tranges = [...ranges, ({ from: points[i], to: points[i + 1] })];\r\n\t}\r\n\r\n\tconst diffs = ranges.map(range => range.to - range.from);\r\n\tconst sliderRange = max - min;\r\n\tconst percs = diffs.map(diff => diff / sliderRange);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{diffs.map((diff, index) =>\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{formatDiffs ? formatDiffs(diff) : diff}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t
\r\n\t);\r\n};\r\n\r\ntype LegendProps = {\r\n\tnames: string[];\r\n\tcolors?: string[];\r\n\tdisabled?: boolean;\r\n};\r\n\r\nconst Legend: React.FC = (props) => {\r\n\tconst { colors, names, disabled } = props;\r\n\tconst theme = useTheme();\r\n\r\n\tlet { classes: styles, cx } = useStyles();\r\n\r\n\tconst legendColors = colors ?? theme.Skoda.settings.skodaSlider.colors;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{names.map((name, index) =>\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
{name}\r\n\t\t\t\t
)}\r\n\t\t
\r\n\t);\r\n};\r\n","import { withStyles } from 'tss-react/mui';\r\nimport { SliderWrapper } from './sliderWrapper';\r\n\r\nexport const ResponsiveSliderWrapper = withStyles(SliderWrapper, (theme) => ({\r\n\troot: {\r\n\r\n\t},\r\n\tlabel: {\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: '18px',\r\n\t\t\tlineHeight: '28px'\r\n\t\t}\r\n\t},\r\n\tvalue: {\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tfontSize: '24px',\r\n\t\t\tlineHeight: '28px',\r\n\t\t\tmarginBottom: '24px'\r\n\t\t}\r\n\t},\r\n\tpanelMinMax: {\r\n\t\t[theme.breakpoints.up('md')]: {\r\n\t\t\tmarginTop: 24\r\n\t\t},\r\n\t\t[theme.breakpoints.up('lg')]: {\r\n\t\t\tfontSize: '14px',\r\n\t\t\tlineHeight: '20px',\r\n\t\t\tmarginTop: 30\r\n\t\t}\r\n\t}\r\n}));\r\n","import { makeStyles } from 'tss-react/mui';\r\n\r\nexport const useStyles = makeStyles({ name: 'EmobilityPreview' })(theme => ({\r\n\troot: {\r\n\t\ttextAlign: 'left',\r\n\t\twhiteSpace: 'nowrap',\r\n\t\tscrollBehavior: 'smooth',\r\n\t\toverflow: 'hidden',\r\n\t\t'&.static-mode': {\r\n\t\t\ttextAlign: 'center'\r\n\t\t},\r\n\t\t'&.scroll-mode': {\r\n\t\t\tpadding: '0 50% 0px 50%'\r\n\t\t}\r\n\t},\r\n\ttab: {\r\n\t\tdisplay: 'inline-block',\r\n\t\tposition: 'relative',\r\n\t\tcursor: 'pointer',\r\n\t},\r\n\ttabLine: {\r\n\t\theight: '1px',\r\n\t\tbackground: theme.palette.formControlLabel,\r\n\t\twidth: '100%'\r\n\t},\r\n\ttabInner: {\r\n\t\tWebkitTouchCallout: 'none',\r\n\t\tWebkitUserSelect: 'none',\r\n\t\tKhtmlUserSelect: 'none',\r\n\t\tMozUserSelect: 'none',\r\n\t\tmsUserSelect: 'none',\r\n\t\tuserSelect: 'none',\r\n\t\tmargin:' 0px 15px 0px 15px',\r\n\t\t'&.lastTab': {\r\n\t\t\tmarginRight: 0\r\n\t\t},\r\n\t\t'&.firstTab': {\r\n\t\t\tmarginLeft: 0\r\n\t\t}\r\n\t},\r\n\tlabel: {\r\n\t\tdisplay: 'block',\r\n\t\tpadding: '8px 5px 8px 5px',\r\n\t\tfontSize: '16px',\r\n\t\tfontWeight: 'bold',\r\n\t\tletterSpacing: '0.57px',\r\n\t\tlineHeight: 'normal',\r\n\t\tcolor: theme.palette.formControlLabel,\r\n\t\t'&.active': {\r\n\t\t\tcolor: theme.palette.text.primary\r\n\t\t}\r\n\t},\r\n\tindicator: {\r\n\t\twidth: '100%',\r\n\t\theight: '3px',\r\n\t\t'&.active': {\r\n\t\t\tbackground: theme.palette.primary.main\r\n\t\t}\r\n\t}\r\n}));\r\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","var weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport default weakMemoize;\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport weakMemoize from '@emotion/weak-memoize';\nimport memoize from '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = element.parent === children[0]; // in nested rules comments become children of the \"auto-inserted\" rule\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? children[0].children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar isBrowser = typeof document !== 'undefined';\nvar getServerStylisCache = isBrowser ? undefined : weakMemoize(function () {\n return memoize(function () {\n var cache = {};\n return function (name) {\n return cache[name];\n };\n });\n});\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if (isBrowser && key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n if (isBrowser) {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n if (isBrowser) {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n } else {\n var _finalizingPlugins = [stringify];\n\n var _serializer = middleware(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins));\n\n var _stylis = function _stylis(styles) {\n return serialize(compile(styles), _serializer);\n }; // $FlowFixMe\n\n\n var serverStylisCache = getServerStylisCache(stylisPlugins)(key);\n\n var getRules = function getRules(selector, serialized) {\n var name = serialized.name;\n\n if (serverStylisCache[name] === undefined) {\n serverStylisCache[name] = _stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n }\n\n return serverStylisCache[name];\n };\n\n _insert = function _insert(selector, serialized, sheet, shouldCache) {\n var name = serialized.name;\n var rules = getRules(selector, serialized);\n\n if (cache.compat === undefined) {\n // in regular mode, we don't set the styles on the inserted cache\n // since we don't need to and that would be wasting memory\n // we return them so that they are rendered in a style tag\n if (shouldCache) {\n cache.inserted[name] = true;\n }\n\n if ( // using === development instead of !== production\n // because if people do ssr in tests, the source maps showing up would be annoying\n process.env.NODE_ENV === 'development' && serialized.map !== undefined) {\n return rules + serialized.map;\n }\n\n return rules;\n } else {\n // in compat mode, we put the styles on the inserted cache so\n // that emotion-server can pull out the styles\n // except when we don't want to cache it which was in Global but now\n // is nowhere but we don't want to do a major right now\n // and just in case we're going to leave the case here\n // it's also not affecting client side bundle size\n // so it's really not a big deal\n if (shouldCache) {\n cache.inserted[name] = rules;\n } else {\n return rules;\n }\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.breakpointKeys = void 0;\nexports.default = createBreakpoints;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nconst _excluded = [\"values\", \"unit\", \"step\"];\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nconst breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nexports.breakpointKeys = breakpointKeys;\n\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || []; // Sort in ascending order\n\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return (0, _extends2.default)({}, acc, {\n [obj.key]: obj.val\n });\n }, {});\n}; // Keep in mind that @media is inclusive by the CSS specification.\n\n\nfunction createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n\n },\n unit = 'px',\n step = 5\n } = breakpoints,\n other = (0, _objectWithoutPropertiesLoose2.default)(breakpoints, _excluded);\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n\n return up(key);\n }\n\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n\n return (0, _extends2.default)({\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit\n }, other);\n}","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { Palette } from '@mui/material';\r\nimport { alpha, CSSInterpolation } from '@mui/material/styles';\r\n\r\nexport const fabRoot = (): CSSInterpolation => ({\r\n\tzIndex: 'unset',\r\n\twidth: 44,\r\n\theight: 44,\r\n\tborderRadius: 22,\r\n\t'&.Mui-disabled': {\r\n\t\topacity: 0.7\r\n\t},\r\n\t'&.MuiFab-sizeSmall': {\r\n\t\twidth: 40,\r\n\t\theight: 40,\r\n\t\tborderRadius: 20\r\n\t},\r\n\t'&.MuiFab-sizeMedium': {\r\n\t\twidth: 42,\r\n\t\theight: 42,\r\n\t\tborderRadius: 21\r\n\t}\r\n});\r\n\r\nexport const fabExtended = (palette: Palette): CSSInterpolation => ({\r\n\twidth: 'unset',\r\n\t'&.MuiFab-sizeSmall': {\r\n\t\twidth: 'unset',\r\n\t\tfontSize: '12px',\r\n\t\tlineHeight: '12px'\r\n\t},\r\n\t'&.MuiFab-sizeMedium': {\r\n\t\twidth: 'unset',\r\n\t\tfontSize: '14px',\r\n\t\tlineHeight: '14px'\r\n\t},\r\n\tfontWeight: 'bold',\r\n\tfontSize: '16px',\r\n\tlineHeight: '16px',\r\n\tpaddingLeft: 24,\r\n\tpaddingRight: 24,\r\n\ttextDecoration: 'none !important',\r\n\ttextTransform: 'none',\r\n\tletterSpacing: 0.75\r\n});\r\n\r\nexport const fabSecondary = (palette: Palette): CSSInterpolation => ({\r\n\tboxShadow: 'none',\r\n\tborder: '1.5px solid ' + palette.text.primary,\r\n\tcolor: palette.text.primary,\r\n\tbackgroundColor: 'transparent',\r\n\t'&:active': {\r\n\t\tboxShadow: 'none'\r\n\t},\r\n\t'&:hover': {\r\n\t\tbackgroundColor: alpha(palette.text.primary, 0.06),\r\n\t\tborderColor: palette.text.primary\r\n\t},\r\n\t'&.Mui-disabled': {\r\n\t\tborder: 'none',\r\n\t\topacity: 'unset',\r\n\t\tbackground: '#d8d8d8',\r\n\t\tcolor: '#9E9FA0'\r\n\t},\r\n\t'&:not(.btn)': {\r\n\t\tcolor: palette.text.primary,\r\n\t\t'&.Mui-disabled': {\r\n\t\t\tcolor: '#9E9FA0'\r\n\t\t},\r\n\t\t'&:hover': {\r\n\t\t\tcolor: palette.text.primary,\r\n\t\t\ttextDecoration: 'none'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const fabPrimary = (palette: Palette): CSSInterpolation => ({\r\n\tcolor: '#161718',\r\n\tboxShadow: 'none',\r\n\tbackground: palette.secondary.main,\r\n\t'&.Mui-disabled': {\r\n\t\topacity: 'unset',\r\n\t\tbackground: '#d8d8d8',\r\n\t\tcolor: '#9E9FA0'\r\n\t},\r\n\t'&:hover': {\r\n\t\tbackgroundColor: palette.secondary.light,\r\n\t\tcolor: '#161718'\r\n\t},\r\n\t'&:active': {\r\n\t\tboxShadow: 'none'\r\n\t},\r\n\t'&:not(.btn)': {\r\n\t\tcolor: '#161718',\r\n\t\t'&.Mui-disabled': {\r\n\t\t\tcolor: '#9E9FA0'\r\n\t\t},\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: palette.secondary.light,\r\n\t\t\tcolor: '#161718',\r\n\t\t\ttextDecoration: 'none'\r\n\t\t}\r\n\t}\r\n});\r\n","import { Palette } from '@mui/material';\r\n\r\nexport const menuItemRoot = (palette: Palette) => ({\r\n\t'&:hover': {\r\n\t\tbackgroundColor: palette.background.selected,\r\n\t\tcolor: palette.mode === 'dark'\r\n\t\t\t? palette.skodaColors['neutrals-white']\r\n\t\t\t: palette.skodaColors['neutrals-chrome900']\r\n\t},\r\n\t'&:focus': {\r\n\t\tbackgroundColor: 'unset',\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: palette.background.selected\r\n\t\t}\r\n\t},\r\n\t'&.Mui-selected': {\r\n\t\tbackgroundColor: palette.background.selected,\r\n\t\tcolor: palette.text.primary,\r\n\t\tfontWeight: undefined,\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: palette.background.selected\r\n\t\t},\r\n\t\t'&:focus': {\r\n\t\t\tbackgroundColor: palette.background.selected,\r\n\t\t\t'&:hover': {\r\n\t\t\t\tbackgroundColor: palette.background.selected\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const menuItemRootDark = (palette: Palette) => ({\r\n\tcolor: 'rgba(256,256,256,0.5)',\r\n\t'&:hover': {\r\n\t\tbackgroundColor: 'unset',\r\n\t\tcolor: palette.skodaColors['neutrals-white']\r\n\t},\r\n\t'&:focus': {\r\n\t\tbackgroundColor: 'unset'\r\n\t},\r\n\t'&.Mui-selected': {\r\n\t\tbackgroundColor: 'unset',\r\n\t\tcolor: palette.skodaColors['neutrals-white'],\r\n\t\tfontWeight: 'bold',\r\n\t\t'&:hover': {\r\n\t\t\tbackgroundColor: 'unset'\r\n\t\t}\r\n\t}\r\n});\r\n","import { Palette } from '@mui/material';\r\n\r\nexport const sliderOverrides = (palette: Palette) => ({\r\n\troot: {\r\n\t\theight: 8,\r\n\t\tpaddingTop: 16,\r\n\t\tpaddingBottom: 16,\r\n\t\tmarginRight: 40,\r\n\t\twidth: 'unset',\r\n\t\tdisplay: 'block',\r\n\t\ttransition: 'opacity 1s',\r\n\t\t'&.Mui-disabled': {\r\n\t\t\topacity: 0.5\r\n\t\t},\r\n\t\t'@media (pointer: coarse)': {\r\n\t\t\tpaddingTop: 16,\r\n\t\t\tpaddingBottom: 16\r\n\t\t}\r\n\t},\r\n\tthumb: {\r\n\t\twidth: 40,\r\n\t\theight: 40,\r\n\t\tmarginLeft: 0,\r\n\t\tborderRadius: 20,\r\n\t\tbackgroundColor: palette.primary.main,\r\n\t\tcolor: '#ffffff',\r\n\t\tboxShadow: 'none',\r\n\t\ttransform: 'translate(0, -50%)',\r\n\t\t'&:focus, &:hover, &.Mui-focusVisible, &.Mui-active': {\r\n\t\t\tboxShadow: 'none'\r\n\t\t},\r\n\t\t'&.Mui-disabled': {\r\n\t\t\twidth: 40,\r\n\t\t\theight: 40,\r\n\t\t\tmarginLeft: 0\r\n\t\t},\r\n\t\t'&:before': {\r\n\t\t\tboxShadow: 'none'\r\n\t\t}\r\n\t},\r\n\trail: {\r\n\t\theight: 8,\r\n\t\tborderRadius: 4,\r\n\t\twidth: 'unset',\r\n\t\tleft: 0,\r\n\t\tright: -40,\r\n\t\tcolor: '#C4C6C7'\r\n\t},\r\n\ttrack: {\r\n\t\theight: 8,\r\n\t\tborderRadius: 4,\r\n\t\tborderTopRightRadius: 0,\r\n\t\tborderBottomRightRadius: 0,\r\n\t\tcolor: palette.secondary.main,\r\n\t\tborder: 'none'\r\n\t},\r\n\tthumbColorSecondary: {\r\n\t\tbackgroundColor: palette.primary.main,\r\n\t\t'&:focus, &:hover, &$active': {\r\n\t\t\tboxShadow: 'none'\r\n\t\t}\r\n\t}\r\n});\r\n","import { Palette } from '@mui/material';\r\n\r\nexport const tooltipOverrides = (palette: Palette) => ({\r\n\ttooltip: {\r\n\t\tbackgroundColor: palette.tertiary.main,\r\n\t\tcolor: '#FFFFFF',\r\n\t\tborderRadius: 8,\r\n\t\tboxShadow: palette.mode === 'light'\r\n\t\t\t? '0 0 5px 0 rgba(74, 74, 74, 0.3), 0 30px 40px 0 rgba(74, 74, 74, 0.3)'\r\n\t\t\t: 'none',\r\n\t\tpadding: 18,\r\n\t\tmaxWidth: 350,\r\n\t\tfontSize: 12\r\n\t},\r\n\tarrow: {\r\n\t\tcolor: palette.tertiary.main\r\n\t}\r\n});\r\n\r\n","import { PaletteMode, PaletteOptions, SimplePaletteColorOptions } from '@mui/material';\r\nimport tokens from '@skodaflow/web-tokens/src/tokens.json';\r\n\r\nconst skodaColors = tokens['flow-colors'];\r\n\r\nexport const createPaletteDark = (): PaletteOptions => ({\r\n\tmode: 'dark' as PaletteMode,\r\n\tskodaColors,\r\n\tsecondary: { main: '#78FAAE', light: '#A8FFCC' } as SimplePaletteColorOptions,\r\n\tprimary: { main: '#419468' },\r\n\ttertiary: { main: '#0E3A2F' },\r\n\terror: { main: '#E82B37' },\r\n\taction: { disabled: skodaColors['neutrals-chrome200'] },\r\n\ttext: {\r\n\t\tprimary: skodaColors['neutrals-white'],\r\n\t\tsecondary: skodaColors['neutrals-chrome300'],\r\n\t\tdisabled: skodaColors['neutrals-chrome500']\r\n\t},\r\n\tbackground: {\r\n\t\tdefault: skodaColors['neutrals-chrome800'],\r\n\t\tpaper: skodaColors['neutrals-chrome700'],\r\n\t\tselected: 'rgba(0, 0, 0, 0.055)'\r\n\t},\r\n\tformControlLabel: '#b8b8b8',\r\n\tdropdownIcon: skodaColors['neutrals-white'],\r\n\tskodaLinkIcon: skodaColors['neutrals-white'],\r\n\tcloseButton: {\r\n\t\tbackground: '#E4E4E4',\r\n\t\tcolor: skodaColors.text\r\n\t},\r\n\tscrollbar: {\r\n\t\tdark: '#C4C6C7',\r\n\t\tlight: '#C4C6C7'\r\n\t},\r\n\tbulletPoints: skodaColors['neutrals-white'],\r\n\tchip: {\r\n\t\tbackgroundPrimary: '#E8FFF1',\r\n\t\tbackgroundSecondary: 'rgba(22, 23, 24, 0.06)',\r\n\t\tcolorPrimary: '#419468',\r\n\t\tcolorSecondary: skodaColors['neutrals-white'],\r\n\t\tcolorPrimaryHover: '#59BC87',\r\n\t\tcolorSecondaryHover: skodaColors['neutrals-chrome500']\r\n\t}\r\n});\r\n","import { PaletteMode } from '@mui/material';\r\nimport tokens from '@skodaflow/web-tokens/src/tokens.json';\r\n\r\nconst skodaColors = tokens['flow-colors'];\r\n\r\nexport const createPaletteLight = () => ({\r\n\tmode: 'light' as PaletteMode,\r\n\tskodaColors,\r\n\tsecondary: { main: '#78FAAE', light: '#A8FFCC' },\r\n\tprimary: { main: '#419468' },\r\n\ttertiary: { main: '#0E3A2F' },\r\n\terror: { main: '#E82B37' },\r\n\taction: { disabled: skodaColors['neutrals-chrome200'] },\r\n\ttext: {\r\n\t\tprimary: skodaColors.text,\r\n\t\tsecondary: '#464748',\r\n\t\tdisabled: skodaColors['neutrals-chrome200']\r\n\t},\r\n\tbackground: {\r\n\t\tdefault: '#f2f2f2',\r\n\t\tpaper: skodaColors.background,\r\n\t\tselected: 'rgba(0, 0, 0, 0.055)'\r\n\t},\r\n\tformControlLabel: '#7C7D7E',\r\n\tdropdownIcon: skodaColors.text,\r\n\tskodaLinkIcon: skodaColors.text,\r\n\tcloseButton: {\r\n\t\tbackground: '#E4E4E4',\r\n\t\tcolor: skodaColors.text\r\n\t},\r\n\tscrollbar: {\r\n\t\tdark: '#C4C6C7',\r\n\t\tlight: '#C4C6C788'\r\n\t},\r\n\tbulletPoints: skodaColors.text,\r\n\tchip: {\r\n\t\tbackgroundPrimary: '#E8FFF1',\r\n\t\tbackgroundSecondary: 'rgba(22, 23, 24, 0.06)',\r\n\t\tcolorPrimary: '#419468',\r\n\t\tcolorSecondary: skodaColors.text,\r\n\t\tcolorPrimaryHover: '#59BC87',\r\n\t\tcolorSecondaryHover: '#5A5B5C'\r\n\t}\r\n});\r\n","import { Breakpoints, Palette, PaletteMode, ThemeOptions } from '@mui/material';\r\nimport { createTheme, Direction } from '@mui/material/styles';\r\nimport { typographyClasses } from '@mui/material/Typography';\r\nimport createBreakpoints from '@mui/system/createTheme/createBreakpoints';\r\nimport deepmerge from 'deepmerge';\r\nimport React from 'react';\r\nimport { SkodaAnimatedCheckboxIcon, SkodaExpandMoreIcon, SkodaRadioAnimatedIcon } from '../components/icons';\r\nimport { SkodaSelectMenu } from '../components/scrollbars/scrollbars';\r\nimport { fabExtended, fabPrimary, fabRoot, fabSecondary } from './components/fab';\r\nimport { menuItemRoot, menuItemRootDark } from './components/menuItem';\r\nimport { sliderOverrides } from './components/slider';\r\nimport { tooltipOverrides } from './components/tooltip';\r\nimport { resolvePalette } from './palette';\r\nimport './themeExtensions';\r\n\r\nexport const defaultSkodaBreakpoints = createBreakpoints({\r\n\tvalues: {\r\n\t\txs: 0,\r\n\t\tsm: 576,\r\n\t\tmd: 992,\r\n\t\tlg: 1200,\r\n\t\txl: 1920\r\n\t}\r\n});\r\n\r\nconst createBaseSkodaTheme = (palette: Palette, breakpoints: Breakpoints, originalBreakpoints: Breakpoints, direction: Direction): ThemeOptions => ({\r\n\tbreakpoints,\r\n\toriginalBreakpoints,\r\n\tpalette,\r\n\tdirection,\r\n\ttypography: {\r\n\t\thtmlFontSize:\r\n\t\t\t+window.getComputedStyle(document.documentElement).fontSize\r\n\t\t\t\t.replace('px', ''),\r\n\t\tfontFamily: 'inherit',\r\n\t\tallVariants: {\r\n\t\t\tcolor: palette.text.primary\r\n\t\t},\r\n\t\th1: {\r\n\t\t\tfontWeight: 'bold',\r\n\t\t\tpadding: 0,\r\n\t\t\tmargin: 0,\r\n\t\t\ttextTransform: 'none',\r\n\t\t\tfontSize: '33px',\r\n\t\t\tlineHeight: '40px',\r\n\t\t\t[breakpoints.up('md')]: {\r\n\t\t\t\tfontSize: '44px',\r\n\t\t\t\tlineHeight: '52px'\r\n\t\t\t},\r\n\t\t\t[`&.${typographyClasses.gutterBottom}`]: {\r\n\t\t\t\tmarginBottom: 50\r\n\t\t\t}\r\n\t\t},\r\n\t\th2: {\r\n\t\t\tfontWeight: 'bold',\r\n\t\t\tpadding: 0,\r\n\t\t\tmargin: 0,\r\n\t\t\ttextTransform: 'none',\r\n\t\t\tfontSize: '28px',\r\n\t\t\tlineHeight: '36px',\r\n\t\t\t[breakpoints.up('md')]: {\r\n\t\t\t\tfontSize: '32px',\r\n\t\t\t\tlineHeight: '38px'\r\n\t\t\t},\r\n\t\t\t[breakpoints.up('lg')]: {\r\n\t\t\t\tfontSize: '36px',\r\n\t\t\t\tlineHeight: '44px'\r\n\t\t\t},\r\n\t\t\t[`&.${typographyClasses.gutterBottom}`]: {\r\n\t\t\t\tmarginBottom: 40,\r\n\t\t\t\t[breakpoints.up('lg')]: {\r\n\t\t\t\t\tmarginBottom: 56\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\th3: {\r\n\t\t\tfontWeight: 'bold',\r\n\t\t\tpadding: 0,\r\n\t\t\tmargin: 0,\r\n\t\t\ttextTransform: 'none',\r\n\t\t\tfontSize: '28px',\r\n\t\t\tlineHeight: '36px',\r\n\t\t\t[`&.${typographyClasses.gutterBottom}`]: {\r\n\t\t\t\tmarginBottom: 28\r\n\t\t\t}\r\n\t\t},\r\n\t\tfontWeightRegular: 200,\r\n\t\tfontWeightLight: 200,\r\n\t\tfontWeightMedium: 300,\r\n\t\tfontWeightBold: 700\r\n\t},\r\n\tcomponents: {\r\n\t\tMuiSlider: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\t...sliderOverrides(palette),\r\n\t\t\t\tthumbSizeSmall: {\r\n\t\t\t\t\twidth: 16,\r\n\t\t\t\t\theight: 16,\r\n\t\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\t\twidth: 16,\r\n\t\t\t\t\t\theight: 16,\r\n\t\t\t\t\t\tmarginLeft: 0\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tsizeSmall: {\r\n\t\t\t\t\tpaddingTop: 6,\r\n\t\t\t\t\tpaddingBottom: 6,\r\n\t\t\t\t\tmarginRight: 16,\r\n\t\t\t\t\theight: 4,\r\n\t\t\t\t\t'@media (pointer: coarse)': {\r\n\t\t\t\t\t\tpaddingTop: 6,\r\n\t\t\t\t\t\tpaddingBottom: 6\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'& .MuiSlider-rail': {\r\n\t\t\t\t\t\tright: -16,\r\n\t\t\t\t\t\theight: 4\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'& .MuiSlider-track': {\r\n\t\t\t\t\t\theight: 4\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiDialog: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tcolor: palette.text.primary,\r\n\t\t\t\t\tfontWeight: 200,\r\n\t\t\t\t\t'& ::selection': {\r\n\t\t\t\t\t\tbackground: palette.primary.main,\r\n\t\t\t\t\t\tcolor: '#ffffff'\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&::selection': {\r\n\t\t\t\t\t\tbackground: palette.primary.main,\r\n\t\t\t\t\t\tcolor: '#ffffff'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiFab: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: fabRoot(),\r\n\t\t\t\textended: fabExtended(palette),\r\n\t\t\t\tsecondary: fabSecondary(palette),\r\n\t\t\t\tprimary: fabPrimary(palette)\r\n\t\t\t},\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tfocusRipple: false\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiSelect: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\ticon: {\r\n\t\t\t\t\tcolor: palette.dropdownIcon,\r\n\t\t\t\t\ttop: '50%',\r\n\t\t\t\t\ttransform: 'translateY(-50%)',\r\n\t\t\t\t\ttransitionDuration: '0.15s',\r\n\t\t\t\t\ttransitionProperty: 'transform'\r\n\t\t\t\t},\r\n\t\t\t\ticonFilled: {\r\n\t\t\t\t\tright: '21px',\r\n\t\t\t\t\ttop: '65%'\r\n\t\t\t\t},\r\n\t\t\t\ticonOpen: {\r\n\t\t\t\t\ttransform: 'translateY(-50%) rotate(180deg)'\r\n\t\t\t\t},\r\n\t\t\t\tselect: {\r\n\t\t\t\t\t'&:focus': {\r\n\t\t\t\t\t\tbackgroundColor: 'unset'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tfilled: {\r\n\t\t\t\t\t'&.MuiSelect-filled': {\r\n\t\t\t\t\t\tpaddingRight: 64\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tIconComponent: SkodaExpandMoreIcon,\r\n\t\t\t\tMenuProps: {\r\n\t\t\t\t\tPaperProps: {\r\n\t\t\t\t\t\tcomponent: SkodaSelectMenu\r\n\t\t\t\t\t} as any,\r\n\t\t\t\t\tanchorOrigin: {\r\n\t\t\t\t\t\tvertical: 'bottom',\r\n\t\t\t\t\t\thorizontal: 'left'\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttransformOrigin: {\r\n\t\t\t\t\t\tvertical: -10,\r\n\t\t\t\t\t\thorizontal: 'left'\r\n\t\t\t\t\t},\r\n\t\t\t\t\tMenuListProps: {\r\n\t\t\t\t\t\tdisablePadding: true\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tautoFocus: false,\r\n\t\t\t\tvariant: 'standard'\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiPopover: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\tpaper: {\r\n\t\t\t\t\tmaxHeight: 250\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiMenuItem: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\t...menuItemRoot(palette),\r\n\t\t\t\t\t'&.dark': {\r\n\t\t\t\t\t\t...menuItemRootDark(palette)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tautoFocus: false\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiInputBase: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tfontWeight: 'inherit',\r\n\t\t\t\t\tfontSize: '18px',\r\n\t\t\t\t\t'&.MuiInput-root.Mui-disabled': {\r\n ':before': {\r\n borderBottomStyle: 'solid',\r\n\t\t\t\t\t\t\tborderColor: palette.action.disabled\r\n }\r\n },\r\n\t\t\t\t\t'&.MuiFilledInput-root.Mui-disabled': {\r\n ':before': {\r\n borderBottomStyle: 'solid',\r\n\t\t\t\t\t\t\tborderColor: palette.action.disabled\r\n }\r\n }\r\n\t\t\t\t},\r\n\t\t\t\tinput: {\r\n\t\t\t\t\tpaddingBottom: 15,\r\n\t\t\t\t\tpaddingTop: 15\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiInputLabel: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tfontWeight: 'inherit',\r\n\t\t\t\t\tfontSize: '18px'\r\n\t\t\t\t},\r\n\t\t\t\tformControl: {\r\n\t\t\t\t\tcolor: palette.formControlLabel\r\n\t\t\t\t},\r\n\t\t\t\tfilled: {\r\n\t\t\t\t\ttransform: 'translate(16px, 26px) scale(1)',\r\n\t\t\t\t\t'&.MuiInputLabel-shrink': {\r\n\t\t\t\t\t\ttransform: 'translate(16px, 12px) scale(0.777)'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tstandard: {\r\n\t\t\t\t\ttransform: 'translate(0, 26px) scale(1)',\r\n\t\t\t\t\t'&.MuiInputLabel-shrink': {\r\n\t\t\t\t\t\ttransform: 'translate(0, -1.5px) scale(0.777)'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiFormControl: {\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tvariant: 'standard'\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiTextField: {\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tvariant: 'standard'\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiFilledInput: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tbackgroundColor: palette.background.paper,\r\n\t\t\t\t\tborderTopLeftRadius: 0,\r\n\t\t\t\t\tborderTopRightRadius: 0,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: palette.background.paper\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&.Mui-focused': {\r\n\t\t\t\t\t\tbackgroundColor: palette.background.paper\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:before': {\r\n\t\t\t\t\t\tborderBottom: '1px solid ' + palette.text.primary\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tinput: {\r\n\t\t\t\t\tpaddingLeft: 16,\r\n\t\t\t\t\tpaddingRight: 16\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiInput: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\t'&:before': {\r\n\t\t\t\t\t\tborderBottom: '1px solid ' + palette.text.primary\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tformControl: {\r\n\t\t\t\t\t'label + &': {\r\n\t\t\t\t\t\tmarginTop: 11\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiButtonBase: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\toutline: 'none !important'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tdisableRipple: true\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiButton: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\ttextTransform: 'none'\r\n\t\t\t\t},\r\n\t\t\t\ttextPrimary: {\r\n\t\t\t\t\tcolor: palette.primary.main\r\n\t\t\t\t},\r\n\t\t\t\ttextSecondary: {\r\n\t\t\t\t\tcolor: palette.text.primary\r\n\t\t\t\t},\r\n\t\t\t\toutlinedSecondary: {\r\n\t\t\t\t\tcolor: palette.text.primary,\r\n\t\t\t\t\tborderColor: palette.text.primary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tborderColor: palette.text.primary\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiSwitch: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\twidth: 76,\r\n\t\t\t\t\theight: 48\r\n\t\t\t\t},\r\n\t\t\t\tswitchBase: {\r\n\t\t\t\t\ttop: 1,\r\n\t\t\t\t\tleft: 1,\r\n\t\t\t\t\tpadding: 14,\r\n\t\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\t\ttransform: 'translateX(27px)',\r\n\t\t\t\t\t\t'& + .MuiSwitch-track': {\r\n\t\t\t\t\t\t\topacity: 1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\ttrack: {\r\n\t\t\t\t\tborderRadius: 12,\r\n\t\t\t\t\topacity: 1,\r\n\t\t\t\t\tbackground: palette.text.disabled\r\n\t\t\t\t},\r\n\t\t\t\tthumb: {\r\n\t\t\t\t\twidth: 18,\r\n\t\t\t\t\theight: 18,\r\n\t\t\t\t\tboxShadow: 'none',\r\n\t\t\t\t\tcolor: palette.background.paper\r\n\t\t\t\t},\r\n\t\t\t\tcolorPrimary: {\r\n\t\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\t\t\t'& + .MuiSwitch-track': {\r\n\t\t\t\t\t\t\t\tbackgroundColor: palette.primary.main,\r\n\t\t\t\t\t\t\t\topacity: 0.5\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcolorSecondary: {\r\n\t\t\t\t\t'&.Mui-disabled': {\r\n\t\t\t\t\t\t'&.Mui-checked': {\r\n\t\t\t\t\t\t\t'& + .MuiSwitch-track': {\r\n\t\t\t\t\t\t\t\topacity: 0.12\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiSvgIcon: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tverticalAlign: 'middle'\r\n\t\t\t\t},\r\n\t\t\t\tfontSizeSmall: {\r\n\t\t\t\t\tfontSize: '22px'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiIconButton: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tfontSize: '27px',\r\n\t\t\t\t\t[breakpoints.up('xl')]: {\r\n\t\t\t\t\t\tfontSize: '31px'\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'@media (hover: hover)': {\r\n\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\tcolor: palette.primary.main\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:active': {\r\n\t\t\t\t\t\tcolor: palette.primary.main\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcolorPrimary: {\r\n\t\t\t\t\t'@media (hover: hover)': {\r\n\t\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\t\tcolor: palette.primary.main\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'&:active': {\r\n\t\t\t\t\t\tcolor: palette.primary.main\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tsizeSmall: {\r\n\t\t\t\t\tfontSize: '24px',\r\n\t\t\t\t\t[breakpoints.up('xl')]: {\r\n\t\t\t\t\t\tfontSize: '28px'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiPaper: {\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tsquare: true\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiCheckbox: {\r\n\t\t\tdefaultProps: {\r\n\t\t\t\ticon: ,\r\n\t\t\t\tcheckedIcon: ,\r\n\t\t\t\tindeterminateIcon: \r\n\t\t\t},\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tfontSize: '27px'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiRadio: {\r\n\t\t\tdefaultProps: {\r\n\t\t\t\ticon: ,\r\n\t\t\t\tcheckedIcon: \r\n\t\t\t}\r\n\t\t},\r\n\t\tMuiTooltip: {\r\n\t\t\tstyleOverrides: tooltipOverrides(palette)\r\n\t\t},\r\n\t\tMuiChip: {\r\n\t\t\tdefaultProps: {\r\n\t\t\t\tvariant: 'filled',\r\n\t\t\t\tcolor: 'primary',\r\n\t\t\t\tclickable: true\r\n\t\t\t},\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\theight: 32,\r\n\t\t\t\t\t'&:active': {\r\n\t\t\t\t\t\tboxShadow: 'none'\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tlabel: {\r\n\t\t\t\t\tfontSize: '16px',\r\n\t\t\t\t\tlineHeight: '20px',\r\n\t\t\t\t\tpaddingLeft: 16,\r\n\t\t\t\t\tpaddingRight: 16,\r\n\t\t\t\t\tfontWeight: 400\r\n\t\t\t\t},\r\n\t\t\t\tcolorPrimary: {\r\n\t\t\t\t\tbackgroundColor: palette.chip.backgroundPrimary,\r\n\t\t\t\t\tcolor: palette.chip.colorPrimary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: palette.chip.backgroundPrimary,\r\n\t\t\t\t\t\tcolor: palette.chip.colorPrimaryHover\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcolorSecondary: {\r\n\t\t\t\t\tbackgroundColor: palette.chip.backgroundSecondary,\r\n\t\t\t\t\tcolor: palette.chip.colorSecondary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tbackgroundColor: palette.chip.backgroundSecondary,\r\n\t\t\t\t\t\tcolor: palette.chip.colorSecondaryHover\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\toutlinedPrimary: {\r\n\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\tcolor: palette.chip.colorPrimary,\r\n\t\t\t\t\tborderColor: palette.chip.colorPrimary\r\n\t\t\t\t},\r\n\t\t\t\toutlinedSecondary: {\r\n\t\t\t\t\tbackgroundColor: 'transparent',\r\n\t\t\t\t\tcolor: palette.chip.colorSecondary,\r\n\t\t\t\t\tborderColor: palette.chip.colorSecondary\r\n\t\t\t\t},\r\n\t\t\t\tdeleteIconColorPrimary: {\r\n\t\t\t\t\tcolor: palette.chip.colorPrimary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: palette.chip.colorPrimaryHover\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tdeleteIconColorSecondary: {\r\n\t\t\t\t\tcolor: palette.chip.colorSecondary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: palette.chip.colorSecondaryHover\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tdeleteIconOutlinedColorPrimary: {\r\n\t\t\t\t\tcolor: palette.chip.colorPrimary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: palette.chip.colorPrimaryHover\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tdeleteIconOutlinedColorSecondary: {\r\n\t\t\t\t\tcolor: palette.chip.colorSecondary,\r\n\t\t\t\t\t'&:hover': {\r\n\t\t\t\t\t\tcolor: palette.chip.colorSecondaryHover\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tspacing: [0, 4, 8, 12, 15, 20, 24, 30, 40, 60, 80],\r\n\tSkoda: {\r\n\t\tsettings: {\r\n\t\t\theaderBanner: {\r\n\t\t\t\tcolor: '#232526'\r\n\t\t\t},\r\n\t\t\tskodaSlider: {\r\n\t\t\t\tcolors: [palette.secondary.main, '#84B5A6', '#3A6558', '#2A5548']\r\n\t\t\t},\r\n\t\t\tbannerConfigurator: {\r\n\t\t\t\tcolors: palette.mode === 'light'\r\n\t\t\t\t\t? [palette.skodaColors['neutrals-white'], '#DBDBDB', '#D9D9D9']\r\n\t\t\t\t\t: [palette.skodaColors['neutrals-chrome900'], palette.skodaColors['neutrals-chrome800'], palette.skodaColors['neutrals-chrome900']]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport const createSkodaTheme = (\r\n\tmode: PaletteMode,\r\n\tthemeOverride?: (baseSkodaTheme: ThemeOptions) => ThemeOptions,\r\n\tbreakpoints?: Breakpoints,\r\n\toriginalBreakpoints?: Breakpoints,\r\n\tdirection?: Direction) => {\r\n\tconst palette = resolvePalette(mode);\r\n\tconst baseTheme = createBaseSkodaTheme(\r\n\t\tpalette,\r\n\t\tbreakpoints ?? defaultSkodaBreakpoints,\r\n\t\toriginalBreakpoints ?? defaultSkodaBreakpoints,\r\n\t\tdirection ?? \"ltr\");\r\n\treturn createTheme(themeOverride\r\n\t\t? deepmerge(baseTheme, themeOverride(baseTheme), { arrayMerge: (dest, source, opts) => source })\r\n\t\t: baseTheme);\r\n};\r\n","import { PaletteMode } from '@mui/material';\r\nimport { createTheme } from '@mui/material/styles';\r\nimport { createPaletteDark } from './dark';\r\nimport { createPaletteLight } from './light';\r\n\r\nexport const resolvePalette = (mode: PaletteMode) => {\r\n\tconst paletteOptions = mode === 'dark' ? createPaletteDark() : createPaletteLight();\r\n\tconst { palette } = createTheme({ palette: paletteOptions });\r\n\treturn palette;\r\n};\r\n","(function(e,r){typeof exports===\"object\"&&typeof module!==\"undefined\"?r(exports):typeof define===\"function\"&&define.amd?define([\"exports\"],r):(e=e||self,r(e.stylis={}))})(this,(function(e){\"use strict\";var r=\"-ms-\";var a=\"-moz-\";var c=\"-webkit-\";var n=\"comm\";var t=\"rule\";var s=\"decl\";var i=\"@page\";var u=\"@media\";var o=\"@import\";var l=\"@charset\";var f=\"@viewport\";var p=\"@supports\";var h=\"@document\";var v=\"@namespace\";var b=\"@keyframes\";var d=\"@font-face\";var w=\"@counter-style\";var m=\"@font-feature-values\";var g=\"@layer\";var k=Math.abs;var $=String.fromCharCode;var x=Object.assign;function E(e,r){return M(e,0)^45?(((r<<2^M(e,0))<<2^M(e,1))<<2^M(e,2))<<2^M(e,3):0}function y(e){return e.trim()}function T(e,r){return(e=r.exec(e))?e[0]:e}function A(e,r,a){return e.replace(r,a)}function O(e,r,a){return e.indexOf(r,a)}function M(e,r){return e.charCodeAt(r)|0}function C(e,r,a){return e.slice(r,a)}function R(e){return e.length}function S(e){return e.length}function z(e,r){return r.push(e),e}function N(e,r){return e.map(r).join(\"\")}function P(e,r){return e.filter((function(e){return!T(e,r)}))}e.line=1;e.column=1;e.length=0;e.position=0;e.character=0;e.characters=\"\";function j(r,a,c,n,t,s,i,u){return{value:r,root:a,parent:c,type:n,props:t,children:s,line:e.line,column:e.column,length:i,return:\"\",siblings:u}}function U(e,r){return x(j(\"\",null,null,\"\",null,null,0,e.siblings),e,{length:-e.length},r)}function _(e){while(e.root)e=U(e.root,{children:[e]});z(e,e.siblings)}function F(){return e.character}function I(){e.character=e.position>0?M(e.characters,--e.position):0;if(e.column--,e.character===10)e.column=1,e.line--;return e.character}function L(){e.character=e.position2||V(e.character)>3?\"\":\" \"}function q(r){while(L())switch(V(e.character)){case 0:z(ee(e.position-1),r);break;case 2:z(G(e.character),r);break;default:z($(e.character),r)}return r}function J(r,a){while(--a&&L())if(e.character<48||e.character>102||e.character>57&&e.character<65||e.character>70&&e.character<97)break;return K(r,Y()+(a<6&&D()==32&&L()==32))}function Q(r){while(L())switch(e.character){case r:return e.position;case 34:case 39:if(r!==34&&r!==39)Q(e.character);break;case 40:if(r===41)Q(r);break;case 92:L();break}return e.position}function X(r,a){while(L())if(r+e.character===47+10)break;else if(r+e.character===42+42&&D()===47)break;return\"/*\"+K(a,e.position-1)+\"*\"+$(r===47?r:L())}function ee(r){while(!V(D()))L();return K(r,e.position)}function re(e){return B(ae(\"\",null,null,null,[\"\"],e=W(e),0,[0],e))}function ae(e,r,a,c,n,t,s,i,u){var o=0;var l=0;var f=s;var p=0;var h=0;var v=0;var b=1;var d=1;var w=1;var m=0;var g=\"\";var x=n;var E=t;var y=c;var T=g;while(d)switch(v=m,m=L()){case 40:if(v!=108&&M(T,f-1)==58){if(O(T+=A(G(m),\"&\",\"&\\f\"),\"&\\f\",k(o?i[o-1]:0))!=-1)w=-1;break}case 34:case 39:case 91:T+=G(m);break;case 9:case 10:case 13:case 32:T+=Z(v);break;case 92:T+=J(Y()-1,7);continue;case 47:switch(D()){case 42:case 47:z(ne(X(L(),Y()),r,a,u),u);break;default:T+=\"/\"}break;case 123*b:i[o++]=R(T)*w;case 125*b:case 59:case 0:switch(m){case 0:case 125:d=0;case 59+l:if(w==-1)T=A(T,/\\f/g,\"\");if(h>0&&R(T)-f)z(h>32?te(T+\";\",c,a,f-1,u):te(A(T,\" \",\"\")+\";\",c,a,f-2,u),u);break;case 59:T+=\";\";default:z(y=ce(T,r,a,o,l,n,i,g,x=[],E=[],f,t),t);if(m===123)if(l===0)ae(T,r,y,y,x,t,f,i,E);else switch(p===99&&M(T,3)===110?100:p){case 100:case 108:case 109:case 115:ae(e,y,y,c&&z(ce(e,y,y,0,0,n,i,g,n,x=[],f,E),E),n,E,f,i,c?x:E);break;default:ae(T,y,y,y,[\"\"],E,0,i,E)}}o=l=h=0,b=w=1,g=T=\"\",f=s;break;case 58:f=1+R(T),h=v;default:if(b<1)if(m==123)--b;else if(m==125&&b++==0&&I()==125)continue;switch(T+=$(m),m*b){case 38:w=l>0?1:(T+=\"\\f\",-1);break;case 44:i[o++]=(R(T)-1)*w,w=1;break;case 64:if(D()===45)T+=G(L());p=D(),l=f=R(g=T+=ee(Y())),m++;break;case 45:if(v===45&&R(T)==2)b=0}}return t}function ce(e,r,a,c,n,s,i,u,o,l,f,p){var h=n-1;var v=n===0?s:[\"\"];var b=S(v);for(var d=0,w=0,m=0;d0?v[g]+\" \"+$:A($,/&\\f/g,v[g])))o[m++]=x;return j(e,r,a,n===0?t:u,o,l,f,p)}function ne(e,r,a,c){return j(e,r,a,n,$(F()),C(e,2,-2),0,c)}function te(e,r,a,c,n){return j(e,r,a,s,C(e,0,c),C(e,c+1,-1),c,n)}function se(e,n,t){switch(E(e,n)){case 5103:return c+\"print-\"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return c+e+e;case 4789:return a+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return c+e+a+e+r+e+e;case 5936:switch(M(e,n+11)){case 114:return c+e+r+A(e,/[svh]\\w+-[tblr]{2}/,\"tb\")+e;case 108:return c+e+r+A(e,/[svh]\\w+-[tblr]{2}/,\"tb-rl\")+e;case 45:return c+e+r+A(e,/[svh]\\w+-[tblr]{2}/,\"lr\")+e}case 6828:case 4268:case 2903:return c+e+r+e+e;case 6165:return c+e+r+\"flex-\"+e+e;case 5187:return c+e+A(e,/(\\w+).+(:[^]+)/,c+\"box-$1$2\"+r+\"flex-$1$2\")+e;case 5443:return c+e+r+\"flex-item-\"+A(e,/flex-|-self/g,\"\")+(!T(e,/flex-|baseline/)?r+\"grid-row-\"+A(e,/flex-|-self/g,\"\"):\"\")+e;case 4675:return c+e+r+\"flex-line-pack\"+A(e,/align-content|flex-|-self/g,\"\")+e;case 5548:return c+e+r+A(e,\"shrink\",\"negative\")+e;case 5292:return c+e+r+A(e,\"basis\",\"preferred-size\")+e;case 6060:return c+\"box-\"+A(e,\"-grow\",\"\")+c+e+r+A(e,\"grow\",\"positive\")+e;case 4554:return c+A(e,/([^-])(transform)/g,\"$1\"+c+\"$2\")+e;case 6187:return A(A(A(e,/(zoom-|grab)/,c+\"$1\"),/(image-set)/,c+\"$1\"),e,\"\")+e;case 5495:case 3959:return A(e,/(image-set\\([^]*)/,c+\"$1\"+\"$`$1\");case 4968:return A(A(e,/(.+:)(flex-)?(.*)/,c+\"box-pack:$3\"+r+\"flex-pack:$3\"),/s.+-b[^;]+/,\"justify\")+c+e+e;case 4200:if(!T(e,/flex-|baseline/))return r+\"grid-column-align\"+C(e,n)+e;break;case 2592:case 3360:return r+A(e,\"template-\",\"\")+e;case 4384:case 3616:if(t&&t.some((function(e,r){return n=r,T(e.props,/grid-\\w+-end/)}))){return~O(e+(t=t[n].value),\"span\",0)?e:r+A(e,\"-start\",\"\")+e+r+\"grid-row-span:\"+(~O(t,\"span\",0)?T(t,/\\d+/):+T(t,/\\d+/)-+T(e,/\\d+/))+\";\"}return r+A(e,\"-start\",\"\")+e;case 4896:case 4128:return t&&t.some((function(e){return T(e.props,/grid-\\w+-start/)}))?e:r+A(A(e,\"-end\",\"-span\"),\"span \",\"\")+e;case 4095:case 3583:case 4068:case 2532:return A(e,/(.+)-inline(.+)/,c+\"$1$2\")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(R(e)-1-n>6)switch(M(e,n+1)){case 109:if(M(e,n+4)!==45)break;case 102:return A(e,/(.+:)(.+)-([^]+)/,\"$1\"+c+\"$2-$3\"+\"$1\"+a+(M(e,n+3)==108?\"$3\":\"$2-$3\"))+e;case 115:return~O(e,\"stretch\",0)?se(A(e,\"stretch\",\"fill-available\"),n,t)+e:e}break;case 5152:case 5920:return A(e,/(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/,(function(a,c,n,t,s,i,u){return r+c+\":\"+n+u+(t?r+c+\"-span:\"+(s?i:+i-+n)+u:\"\")+e}));case 4949:if(M(e,n+6)===121)return A(e,\":\",\":\"+c)+e;break;case 6444:switch(M(e,M(e,14)===45?18:11)){case 120:return A(e,/(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/,\"$1\"+c+(M(e,14)===45?\"inline-\":\"\")+\"box$3\"+\"$1\"+c+\"$2$3\"+\"$1\"+r+\"$2box$3\")+e;case 100:return A(e,\":\",\":\"+r)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return A(e,\"scroll-\",\"scroll-snap-\")+e}return e}function ie(e,r){var a=\"\";for(var c=0;c-1)if(!e.return)switch(e.type){case s:e.return=se(e.value,e.length,i);return;case b:return ie([U(e,{value:A(e.value,\"@\",\"@\"+c)})],u);case t:if(e.length)return N(i=e.props,(function(n){switch(T(n,u=/(::plac\\w+|:read-\\w+)/)){case\":read-only\":case\":read-write\":_(U(e,{props:[A(n,/:(read-\\w+)/,\":\"+a+\"$1\")]}));_(U(e,{props:[n]}));x(e,{props:P(i,u)});break;case\"::placeholder\":_(U(e,{props:[A(n,/:(plac\\w+)/,\":\"+c+\"input-$1\")]}));_(U(e,{props:[A(n,/:(plac\\w+)/,\":\"+a+\"$1\")]}));_(U(e,{props:[A(n,/:(plac\\w+)/,r+\"input-$1\")]}));_(U(e,{props:[n]}));x(e,{props:P(i,u)});break}return\"\"}))}}function pe(e){switch(e.type){case t:e.props=e.props.map((function(r){return N(H(r),(function(r,a,c){switch(M(r,0)){case 12:return C(r,1,R(r));case 0:case 40:case 43:case 62:case 126:return r;case 58:if(c[++a]===\"global\")c[a]=\"\",c[++a]=\"\\f\"+C(c[a],a=1,-1);case 32:return a===1?\"\":r;default:switch(a){case 0:e=r;return S(c)>1?\"\":r;case a=S(c)-1:case 2:return a===2?r+e+e:r+e;default:return r}}}))}))}}e.CHARSET=l;e.COMMENT=n;e.COUNTER_STYLE=w;e.DECLARATION=s;e.DOCUMENT=h;e.FONT_FACE=d;e.FONT_FEATURE_VALUES=m;e.IMPORT=o;e.KEYFRAMES=b;e.LAYER=g;e.MEDIA=u;e.MOZ=a;e.MS=r;e.NAMESPACE=v;e.PAGE=i;e.RULESET=t;e.SUPPORTS=p;e.VIEWPORT=f;e.WEBKIT=c;e.abs=k;e.alloc=W;e.append=z;e.assign=x;e.caret=Y;e.char=F;e.charat=M;e.combine=N;e.comment=ne;e.commenter=X;e.compile=re;e.copy=U;e.dealloc=B;e.declaration=te;e.delimit=G;e.delimiter=Q;e.escaping=J;e.filter=P;e.from=$;e.hash=E;e.identifier=ee;e.indexof=O;e.lift=_;e.match=T;e.middleware=oe;e.namespace=pe;e.next=L;e.node=j;e.parse=ae;e.peek=D;e.prefix=se;e.prefixer=fe;e.prev=I;e.replace=A;e.ruleset=ce;e.rulesheet=le;e.serialize=ie;e.sizeof=S;e.slice=K;e.stringify=ue;e.strlen=R;e.substr=C;e.token=V;e.tokenize=H;e.tokenizer=q;e.trim=y;e.whitespace=Z;Object.defineProperty(e,\"__esModule\",{value:true})}));\n//# sourceMappingURL=stylis.js.map\n","import createCache from '@emotion/cache';\r\nimport { CacheProvider } from '@emotion/react';\r\nimport { Breakpoint, debounce, PaletteMode, ThemeOptions, ThemeProvider as MuiThemeProvider, useMediaQuery } from '@mui/material';\r\nimport { Breakpoints, Direction } from '@mui/material/styles';\r\nimport createBreakpoints from '@mui/system/createTheme/createBreakpoints';\r\nimport React, { useCallback, useLayoutEffect, useMemo, useState } from 'react';\r\nimport { useMeasure, useWindowSize } from 'react-use';\r\nimport { TssCacheProvider } from 'tss-react';\r\nimport { createSkodaTheme } from '../../theme';\r\nimport { defaultSkodaBreakpoints } from '../../theme/theme';\r\nimport rtlPlugin from 'stylis-plugin-rtl';\r\nimport { prefixer } from 'stylis';\r\n\r\nexport const muiCache = createCache({\r\n\t'key': 'mui',\r\n\t'prepend': true\r\n});\r\n\r\nexport const muiCacheRtl = createCache({\r\n\t'key': 'muirtl',\r\n\t'prepend': true,\r\n\t'stylisPlugins': [prefixer, rtlPlugin],\r\n});\r\n\r\nexport const tssCache = createCache({\r\n\t'key': 'skoda'\r\n});\r\n\r\nexport type ThemeProviderProps = {\r\n\t/** \r\n\t * Base theme override function.\r\n\t */\r\n\tthemeOverride?: (baseSkodaTheme: ThemeOptions) => ThemeOptions;\r\n\r\n\t/** \r\n\t * Breakpoints.\r\n\t */\r\n\tbreakpoints?: Breakpoints;\r\n\r\n\t/**\r\n\t * Set true to make breakpoints dynamic relative to container.\r\n\t */\r\n\tdynamicBreakpoints?: boolean;\r\n\r\n\t/**\r\n\t * Use dark, light palette.\r\n\t * Uses preferred mode if not defined\r\n\t */\r\n\tmode?: PaletteMode;\r\n\r\n\t/**\r\n\t * Direction - ltr or rtl\r\n\t */\r\n\tdirection?: Direction;\r\n\r\n\t/**\r\n\t * content\r\n\t */\r\n\tchildren?: React.ReactNode;\r\n};\r\n\r\n/**\r\n * Skoda theme provider.\r\n */\r\nexport const ThemeProvider: React.FC = (props) => {\r\n\tconst { dynamicBreakpoints, ...other } = props;\r\n\treturn dynamicBreakpoints\r\n\t\t? \r\n\t\t: ;\r\n};\r\n\r\nconst ThemeProviderDynamicBreakpoints: React.FC> = (props) => {\r\n\tconst { themeOverride, breakpoints, children, mode, direction } = props;\r\n\tconst preferredMode = useMediaQuery('(prefers-color-scheme: dark)') ? 'dark' : 'light';\r\n\tconst [relativeBreakpoints, setRelativeBreakpoints] = useState(breakpoints);\r\n\tconst createdTheme = useMemo(() => createSkodaTheme(mode ?? preferredMode, themeOverride, relativeBreakpoints, breakpoints, direction),\r\n\t\t[themeOverride, relativeBreakpoints, breakpoints, mode, preferredMode, direction]);\r\n\r\n\tconst [containerRef, { width: containerWidth }] = useMeasure();\r\n\tconst { width: windowWidth } = useWindowSize();\r\n\r\n\tconst handleResize = useCallback((window: number, container: number) => {\r\n\t\tconst difference = window - container;\r\n\t\tconst newValues = breakpoints.keys.reduce((prev, curr) => ({ ...prev, [curr]: breakpoints.values[curr] + difference }), {} as { [key in Breakpoint]: number });\r\n\t\tconst newRelativeBreakpoints = createBreakpoints({ values: newValues });\r\n\t\tsetRelativeBreakpoints(newRelativeBreakpoints);\r\n\t}, [setRelativeBreakpoints, breakpoints]);\r\n\r\n\tconst debounceHandleResize = useMemo(() => debounce(handleResize, 250), [handleResize]);\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\tdebounceHandleResize(windowWidth, containerWidth);\r\n\t}, [windowWidth, containerWidth, debounceHandleResize]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nconst ThemeProviderStaticBreakpoints: React.FC> = (props) => {\r\n\tconst { themeOverride, breakpoints, children, mode, direction } = props;\r\n\tconst preferredMode = useMediaQuery('(prefers-color-scheme: dark)') ? 'dark' : 'light';\r\n\tconst createdTheme = useMemo(() => createSkodaTheme(mode ?? preferredMode, themeOverride, breakpoints, breakpoints, direction),\r\n\t\t[themeOverride, breakpoints, mode, preferredMode, direction]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{children}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nThemeProvider.defaultProps = {\r\n\tbreakpoints: defaultSkodaBreakpoints\r\n};\r\n","import { Tooltip, TooltipProps } from '@mui/material';\r\nimport React from 'react';\r\nimport { useTooltipOpenChange } from '../../../utils/customHooks';\r\n\r\nexport type DesktopTooltipProps = Omit & {\r\n\tonOpen?: () => void;\r\n\tonClose?: () => void;\r\n\tAnchorComponent: React.ComponentType;\r\n\tAnchorComponentProps?: AnchorProps;\r\n\tchildren: React.ReactNode;\r\n};\r\n\r\nexport function DesktopTooltip(props: DesktopTooltipProps) {\r\n\tconst { classes, onOpen, onClose, AnchorComponent, AnchorComponentProps, children, ...other } = props;\r\n\r\n\tconst { onOpen: onOpenFixed, onClose: onCloseFixed } = useTooltipOpenChange({\r\n\t\tonOpen: onOpen,\r\n\t\tonClose: onClose\r\n\t});\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","import { ClassNameMap, Dialog, DialogClassKey, Fab, FabClassKey, SvgIconClassKey } from '@mui/material';\r\nimport React, { PropsWithChildren, useState } from 'react';\r\nimport { makeStyles } from 'tss-react/mui';\r\nimport { CloseButton } from '../../buttons';\r\n\r\nconst useStylesStandard = makeStyles({ name: 'MobileTooltipStandard' })(theme => ({\r\n\tpaper: {\r\n\t\tboxSizing: 'border-box',\r\n\t\tbackgroundColor: theme.palette.tertiary.main,\r\n\t\tcolor: '#ffffff',\r\n\t\twidth: '100%',\r\n\t\tmaxWidth: 'unset',\r\n\t\tmaxHeight: '70%',\r\n\t\tmargin: 0,\r\n\t\tborderRadius: 0,\r\n\t\tmarginTop: 'auto',\r\n\t\ttextAlign: 'center',\r\n\t\tpadding: 40\r\n\t},\r\n\tbuttonWrapper: {\r\n\t\tmarginTop: 'auto',\r\n\t\tpaddingTop: 36,\r\n\t\ttextAlign: 'center'\r\n\t},\r\n\tbuttonCloseRoot: {\r\n\t\tmarginLeft: 'auto',\r\n\t\tmarginRight: 'auto',\r\n\t\tcolor: '#ffffff',\r\n\t\tborder: '1px solid rgba(255,255,255,0.2)',\r\n\t\t'&:hover': {\r\n\t\t\tborderColor: theme.palette.skodaColors['neutrals-white']\r\n\t\t},\r\n\t\t'&:not(.btn)': {\r\n\t\t\tcolor: '#ffffff'\r\n\t\t},\r\n\t\t'&:not(.btn):hover': {\r\n\t\t\tcolor: '#ffffff'\r\n\t\t}\r\n\t},\r\n\tcloseButtonExtended: {\r\n\t\tdisplay: 'none'\r\n\t}\r\n}));\r\n\r\nconst useStylesExtended = makeStyles({ name: 'MobileTooltipExtended' })(theme => ({\r\n\tpaper: {\r\n\t\tboxSizing: 'border-box',\r\n\t\tbackgroundColor: '#f3f3f3',\r\n\t\twidth: '100%',\r\n\t\tmaxWidth: 'unset',\r\n\t\theight: '100%',\r\n\t\tmaxHeight: 'unset',\r\n\t\tmargin: 0,\r\n\t\tborderRadius: 0,\r\n\t\tpadding: 40\r\n\t},\r\n\tbuttonWrapper: {\r\n\t\tmarginTop: 'auto',\r\n\t\tpaddingTop: 36,\r\n\t\ttextAlign: 'center'\r\n\t},\r\n\tbuttonCloseRoot: {\r\n\t\tmarginLeft: 'auto',\r\n\t\tmarginRight: 'auto'\r\n\t},\r\n\tcloseButtonExtended: {\r\n\t\tposition: 'absolute',\r\n\t\talignSelf: 'flex-end'\r\n\t}\r\n}));\r\n\r\nexport type MobileTooltipVariant = 'standard' | 'extended';\r\n\r\nexport type MobileTooltipClasses = {\r\n\tdialogClasses?: Partial>,\r\n\tbuttonCloseClasses?: Partial>,\r\n\ticonClasses?: Partial>\r\n};\r\n\r\nexport type MobileTooltipProps = {\r\n\tonOpen?: () => void;\r\n\tonClose?: () => void;\r\n\tAnchorComponent: React.ComponentType;\r\n\tAnchorComponentProps?: AnchorProps;\r\n\ttextClose: string;\r\n\tvariant?: MobileTooltipVariant;\r\n\tclasses?: MobileTooltipClasses;\r\n};\r\n\r\nexport function MobileTooltip(props: PropsWithChildren>) {\r\n\tconst { onOpen, onClose, AnchorComponent, AnchorComponentProps, classes, textClose, variant, children } = props;\r\n\tconst [isOpen, setIsOpen] = useState(false);\r\n\r\n\tlet { classes: stylesStandard, cx } = useStylesStandard();\r\n\tlet { classes: stylesExtended } = useStylesExtended();\r\n\r\n\tconst styles = variant === 'standard' ? stylesStandard : stylesExtended;\r\n\r\n\tconst handleOpen = (e: React.MouseEvent) => {\r\n\t\te.preventDefault();\r\n\t\tsetIsOpen(true);\r\n\t\tonOpen?.();\r\n\t};\r\n\r\n\tconst handleClose = () => {\r\n\t\tsetIsOpen(false);\r\n\t\tonClose?.();\r\n\t};\r\n\r\n\tconst dialogClasses = {\r\n\t\t...classes?.dialogClasses,\r\n\t\tpaper: cx(styles.paper, classes?.dialogClasses?.paper)\r\n\t};\r\n\r\n\tconst buttonCloseClasses = {\r\n\t\t...classes?.buttonCloseClasses,\r\n\t\troot: cx(styles.buttonCloseRoot, classes?.buttonCloseClasses?.root)\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t handleOpen(e)} />\r\n\t\t\t