\r\n {productPage.mainCategory}\r\n {productPage.displayName}\r\n \r\n {inStock ? (\r\n <>\r\n \r\n {inStockLabel}\r\n >\r\n ) : (\r\n <>\r\n \r\n {notInStockLabel}\r\n >\r\n )}\r\n \r\n \r\n \r\n {articleNumber && (\r\n <>\r\n \r\n {articleNumberLabel}{' '}\r\n {articleNumber}\r\n \r\n \r\n >\r\n )}\r\n {eanCode && (\r\n <>\r\n \r\n {eanCodeLabel}{' '}\r\n {eanCode}\r\n \r\n \r\n >\r\n )}\r\n {size && (\r\n <>\r\n \r\n {productSizeLabel}{' '}\r\n {size}\r\n \r\n \r\n >\r\n )}\r\n {recommendedPrice && (\r\n <>\r\n \r\n {recommendedPriceLabel}{' '}\r\n {recommendedPrice}\r\n \r\n \r\n >\r\n )}\r\n
\r\n {inStock && (\r\n <>\r\n \r\n \r\n {totalPrice}\r\n /{perPackageLabel}\r\n \r\n \r\n \r\n \r\n {quantityLabel}/{perPackageLabel}: \r\n \r\n \r\n {quantity}\r\n {pieceLabel}\r\n \r\n \r\n \r\n {unitPriceLabel}: \r\n \r\n {unitPrice}\r\n {currencyLabel}\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n setInputQuantity(inputQuantity - 1)}\r\n >\r\n \r\n \r\n onInputChange(e.target.value)}\r\n onBlur={e => onInputBlur(e.target.value)}\r\n />\r\n \r\n \r\n addToCart()}>\r\n \r\n {addToCartLabel}\r\n \r\n {isLoading && }\r\n {itemAdded && !isLoading && (\r\n \r\n {addedToCartLabel}\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n >\r\n )}\r\n \r\n \r\n );\r\n}\r\n\r\nconst StyledLoadingCircle = styled(LoadingCircle, {\r\n color: theme.white,\r\n height: theme.gamma,\r\n margin: { xy: 'auto' },\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n});\r\n\r\nconst ButtonText = styled.span({\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isloading=\"true\"]'], {\r\n visibility: 'hidden',\r\n opacity: 0,\r\n }),\r\n});\r\n\r\nconst Heading = styled.h1({\r\n padding: {\r\n bottom: theme.spacing(5),\r\n },\r\n font: {\r\n size: theme.psi,\r\n weight: theme.fontWeight.bold,\r\n },\r\n lineHeight: theme.lineHeight.tight,\r\n letterSpacing: theme.letterSpacing.wider,\r\n color: theme.black,\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n font: {\r\n size: '32px',\r\n },\r\n padding: { bottom: theme.zeta },\r\n }),\r\n});\r\n\r\nconst BrandAndCategory = styled.p({\r\n margin: { top: theme.spacing(6), bottom: theme.spacing(2) },\r\n color: theme.middleGray,\r\n textTransform: 'uppercase',\r\n font: {\r\n size: theme.beta,\r\n weight: theme.fontWeight.normal,\r\n },\r\n ...media(mediaQuery.mediaMinLarge, {\r\n marginTop: theme.spacing(8),\r\n fontSize: theme.gamma,\r\n }),\r\n});\r\n\r\nconst StockStatus = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n margin: { bottom: theme.spacing(8) },\r\n ...media(mediaQuery.mediaMinLarge, {\r\n marginBottom: theme.spacing(6),\r\n }),\r\n});\r\n\r\nconst StyledCheckIcon = styled(CheckIcon, {\r\n height: '18px',\r\n width: '18px',\r\n marginLeft: '8px',\r\n});\r\n\r\nconst ItemAddedText = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: theme.white,\r\n height: theme.gamma,\r\n margin: { xy: 'auto' },\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n});\r\n\r\nconst StockStatusCircle = styled.div({\r\n borderRadius: '50%',\r\n width: '8px',\r\n height: '8px',\r\n backgroundColor: theme.notInStockRed,\r\n marginRight: theme.spacing(2),\r\n ...pseudo([':nth-child(n)[data-instock=\"true\"]'], {\r\n backgroundColor: theme.inStockGreen,\r\n }),\r\n});\r\n\r\nconst StockStatusText = styled.span({\r\n color: theme.black,\r\n font: { size: theme.alpha, weight: theme.fontWeight.bold },\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst InformationListItem = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: { x: theme.spacing(4) },\r\n});\r\n\r\nconst ListItemTitle = styled.span({\r\n color: theme.middleGray,\r\n fontSize: theme.headerMainLink,\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst ListItem = styled.span({\r\n fontSize: theme.beta,\r\n color: theme.black,\r\n});\r\n\r\nconst StyledDivider = styled(Divider, {\r\n width: '100%',\r\n backgroundColor: theme.grayLine,\r\n margin: { y: theme.delta },\r\n ...media(theme.mediaQuery.mediaMaxMedium, {\r\n margin: { y: theme.delta },\r\n }),\r\n});\r\n\r\nconst PriceContainer = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: {\r\n top: theme.theta,\r\n bottom: theme.psi,\r\n },\r\n});\r\n\r\nconst MainPriceContainer = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n});\r\n\r\nconst QuantityPriceWrapper = styled.div({\r\n fontSize: '15px',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n ...pseudo(':not(:last-child)', { marginBottom: theme.spacing(3) }),\r\n});\r\n\r\nconst Price = styled.span({\r\n font: {\r\n size: theme.nearGreat,\r\n weight: theme.fontWeight.bold,\r\n },\r\n marginTop: theme.spacing(2),\r\n lineHeight: theme.lineHeight.tight,\r\n letterSpacing: theme.letterSpacing.wider,\r\n color: theme.black,\r\n});\r\n\r\nconst PerPackageText = styled.p({\r\n marginTop: theme.spacing(4),\r\n fontSize: '17px',\r\n marginLeft: '6px',\r\n});\r\n\r\nconst QuantityText = styled.span({ color: theme.middleGray });\r\n\r\nconst QuantityTextBold = styled.span({\r\n fontWeight: theme.fontWeight.bold,\r\n color: theme.black,\r\n});\r\n\r\nconst AddToCart = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst QuantitySelector = styled.div({\r\n backgroundColor: theme.white,\r\n borderRadius: '100px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '35%',\r\n alignItems: 'center',\r\n padding: { x: theme.spacing(5), y: '14px' },\r\n ...media(mediaQuery.mediaMinLarge, {\r\n padding: { y: '18px' },\r\n }),\r\n});\r\n\r\nconst MinusButton = styled.button({\r\n ':disabled': {\r\n cursor: 'default',\r\n opacity: 0.6,\r\n },\r\n});\r\n\r\nconst QuantityInput = styled.input({\r\n width: theme.spacing(7),\r\n backgroundColor: theme.white,\r\n textAlign: 'center',\r\n MozAppearance: 'textfield', // hide number arrows Firefox\r\n ...pseudo(['::-webkit-outer-spin-button', '::-webkit-inner-spin-button'], {\r\n WebkitAppearance: 'none', // hide number arrows Chrome, Safari, Edge, Opera\r\n margin: { xy: 0 },\r\n }),\r\n});\r\n\r\nconst StyledPlusIcon = styled(PlusToggleIcon, {\r\n height: '20px',\r\n width: '20px',\r\n fill: theme.black,\r\n});\r\n\r\nconst StyledMinusIcon = styled(MinusToggleIcon, {\r\n height: '20px',\r\n width: '20px',\r\n fill: theme.black,\r\n});\r\n\r\nconst AddToCartButton = styled(CtaButton, {\r\n position: 'relative',\r\n width: '65%',\r\n fontSize: theme.moreLarge,\r\n textAlign: 'center',\r\n lineHeight: '1.3em',\r\n padding: { x: theme.spacing(5), y: '15px' },\r\n marginLeft: theme.spacing(5),\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n padding: { y: theme.spacing(5) },\r\n }),\r\n});\r\n\r\nconst ProductAttrListWrapper = styled.div({\r\n whiteSpace: 'pre-line',\r\n textAlign: 'center',\r\n});\r\n\r\nconst AttrContainerWrapper = styled.div({\r\n width: '100%',\r\n ...media(theme.mediaQuery.mediaMinSmall, {\r\n padding: { x: theme.none },\r\n }),\r\n});\r\n\r\nexport default AttributeArea;\r\n","import React, { useState } from 'react';\r\nimport { styled, theme } from '../Theme';\r\nimport ImageModel from '../Assets/Models/ImageModel.interface';\r\nimport useMedia from '../Shared/Hooks/useMedia';\r\nimport { useAppSettingsData } from '../Shared/AppSettingsProvider/AppSettingsProvider';\r\nimport { pseudo, media } from '@glitz/core';\r\nimport Modal from '../Shared/Modal/Modal';\r\nimport ModalImage from '../Shared/Modal/Content/Image';\r\nimport { StyleOrStyleArray } from '@glitz/type';\r\n\r\ntype ProductImages = {\r\n image: ImageModel;\r\n};\r\n\r\nfunction ProductImagesContainer({ image }: ProductImages) {\r\n const [showModal, toggleModal] = useState(false);\r\n\r\n const {\r\n translations: { 'productPage/close': closeLabel },\r\n } = useAppSettingsData();\r\n\r\n const isSmall = useMedia(theme.mediaQuery.mediaMaxSmall);\r\n\r\n return (\r\n