{"version":3,"mappings":"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","names":["useIsFetching","arg1","arg2","arg3","filters","options","parseFilterArgs","queryClient","useQueryClient","queryCache","useSyncExternalStore","React.useCallback","onStoreChange","notifyManager","TryItOn","FindYourNuance","ColorPrefix","SizePrefix","MiscellaneousPrefix","SeeAll","openCustomGiftCardModal","productId","listName","data","_CustomizeProduct","default","createModal","__vitePreload","n","open","content","jsx","CustomGiftCard","addCustomGiftCard","params","trackingInfo","GA4TrackingObject","addToCartTypeEventCategoryMapper","eventCategory","eventParams","push","param_name","param_value","GA4Tracking","createActionTracking","eventAction","AddCustomGiftCardButton","children","restProps","t","useTranslation","ButtonWithSpinner","CustomizeProduct","AddCustomGiftCardButtonCompact","ButtonWithIcon","Icon","AddCustomGiftCardButton$1","Object","assign","Compact","addDigitalProduct","response","AddDigitalProduct","track","dataLayerDto","location","href","redirectUrl","AddDigitalProductButton","BuyNowDigitalProduct","AddDigitalProductButtonCompact","AddDigitalProductButton$1","openMinimumBuyConfirmModal","html","htmlModal","Promise","all","_BasketAddMinimumBuy","isQuickSearchContext","layout","component","DefaultLayout","addMinimumQuantityProduct","mediator","publish","minimumSalesQuantity","serverSideTrackingModel","serverSideTracking","eventType","AddMinimumQuantityProductButton","minimumQuantity","format","BuyBundleNow","BuyNow","AddMinimumQuantityProductButtonCompact","AddMinimumQuantityProductButton$1","context","eventCategoryToContext","eventName","category","MedicalReadMoreButton","Button","productNavigationLink","url","MedicalReadMore","MedicalReadMoreButtonCompact","MedicalReadMoreButton$1","getEventLabelByContext","eventLabel","type","contextEventLabel","isClient","getProductListParams","useOpenFindInStoreCallback","toggle","useFindInStoreQuickView","isOpen","regimeQuickViewIsOpen","useRegimeQuickView","findationQuickViewIsOpen","useFindationQuickView","useSlides","onClickHandler","useCallback","_GetSelectedProduct","then","FindInStoreProvider","findInStoreResult","StoreListQuickView","productInfo","FindInStoreButton","FindInStore","FindInStoreButtonCompact","FindInStoreButton$1","StyledQuickView","styled","QuickView","withConfig","displayName","componentId","breakpoint","up","sizes","md","PreorderButton","useQuickView","loadQuickView","setLoadQuickView","useState","customerNotification","jsxs","Fragment","Preorder","NotificationForm","PreorderButtonCompact","PreorderButton$1","useOpenStockNotificationCallback","useNotificationFormQuickView","isPreorder","notificationModel","StockNotificationButton","BackInStockNotification","StockNotificationButtonCompact","StockNotificationButton$1","OpenLoginModal","_LoginInfo","theme","minWidth","maxWidth","backgroundColor","ColorNeutralWhite","ColorClubMatasPlus5","ColorAdvice5","LoginInfo","modal","customTheme","toast","error","i18next","GeneralExceptionError","GoToProductReviewSection","isAuthenticated","loginParams","infoType","level","mode","returnUrl","openWriteReview","WriteReviewButton","WriteReview","WriteReviewButtonCompact","WriteReviewButton$1","ReadMoreButton","ReadMore","ReadMoreButtonCompact","ReadMoreButton$1","SoldOutButton","SoldOut","SoldOutButtonCompact","SoldOutButton$1","SubscriptionProductButton","Subscribe","SubscriptionProductButtonCompact","SubscriptionProductButton$1","ModifacePDPButton","props","productHasVariants","onClickCallback","openModiface","loadModiface","useEffect","handleSplashClick","event","target","closest","addEventListener","removeEventListener","InlineButtonWithSpinner","createVariantPickerStore","initProps","createStore","set","setModel","state","model","VariantPickerContext","createContext","useVariantPickerStore","store","useContext","Error","useStore","SelectionCallbackContext","SelectedItemProvider","isPDPRequest","PDPSelectedId","setPDPSelectedItem","PLPSelectedId","setPLPSelectedItem","useGetVariantPickerForPlpQuery","id","refetchOnMount","refetchOnWindowFocus","initialData","onSuccess","useGetVariantColorPickerForPdpQuery","onSelectionCallback","Label","label","Input","input","Content","div","Spacing16","SubText","span","em","ColorNeutralDarkGrey","StyledSplashRenderer","SplashRenderer","StyledSwatchRenderer","SwatchRenderer","selectedStyling","$size","Name","Typography","Body","$unavailable","css","VerticalItem","item","radioGroupName","name","isSelected","splash","unitPrice","unavailable","onCheckedCallback","showUnitPrice","linkAction","undefined","containerPadding","Spacing24","lg","Spacing40","containerMargin","sliderPadding","Headline","Spacing8","useGetPrefixByCategory","isVariantPicker","ChosenColorPrefix","ChosenSizePrefix","ChosenMiscellaneousPrefix","SectionHeader","variantPickerButtonText","prefix","useVariantPickerQuickView","InlineButton","GetVariantColorPickerForPdp","res","variantPickerModel","UAEventTracking","Wrapper","$showBorder","ColorNeutralGrey4","StyledPriceModule","HorizontalPriceModule","EditButton","ListHeader","variant","layoutType","price","editCallback","Edit","priceLabel","isOnDiscount","ActiveSectionContext","activeSectionIndex","totalSectionAmount","setActiveSectionIndex","VariantList","ul","removeListStyling","VerticalList","variants","sectionIndex","selectedItem","find","isActive","map","index","VerticalLine","VerticalSelection","sections","HorizontalItem","StyledHorizontalItem","HorizontalScrollContainer","ScrollSnapSlider","hover","customScrollbar","scrollSnapSliderOptions","autoplay","draggable","loop","HorizontalList","ref","slider","useScrollSnapSlider","ScrollSnapSliderContext","HorizontalSelection","TrackingParamsContext","useCloseVariantPickerQuickview","prevValue","StyledActionFooter","ActionFooter","CustomBuyNow","openPowerstep","usePowerstep","AddProduct","useAddProduct","trackingParams","powerstepEnabled","useFeatureToggles","pop","closeVariantPickerQuickview","buttonClick","showPowerstepOnAddToBasket","success","AddToBasket","position","setTimeout","CustomBackInStockNotification","CustomFindInStore","CTAButton","action","externalProductId","quickViewIsOpen","productActionButtonModel","trackingContext","isSubscriptionContext","isSubscribable","bundleInfo","fromPowerstep","addToBasketType","requireLoginForCheckout","recommendationPlacement","ProductActionRenderer","Footer","actions","hasMoreChoices","showSelectButton","includes","xs","xl","LinkActionButton","SelectButton","ScrollContainer","TopContainer","Spacing72","imageOverlayStyle","ProductImage","Image","WithScaling","TopLinkStyling","StyledInlineButton","InlineLinkActionButton","StyledModifacePDPButton","SpinnerOverlay","zIndex","backdrop","trackModifaceClick","checkForMoreChoices","length","getSelectedVariantById","VariantPicker","isLoading","setIsLoading","variantPickerStore","useRef","image","isModifaceEnabled","current","getState","isPdpLoading","GetVariantColorPickerForPdpQueryKey","isPlpLoading","GetVariantPickerForPlpQueryKey","setHasMoreChoices","activeSplash","setTotalSectionAmount","debouncedRequest","useDebouncedCallback","MoreDetails","Spinner","useOpenVariantPickerCallback","setPowerstepMediatorState","useMediatorState","PowerstepMediatorAtom","GetVariantPickerForPlp","productIds","VariantPickerButton","OpenVariantPicker","VariantPickerButtonCompact","VariantPickerButton$1","defaultActionComponents","AddProductButton","BuyMinimumNow","Favorite","More","compactActionComponents","overriddenActionComponents","mergedActionComponents","componentToRender","componentProps","React","createElement","SvgInfo","React.createElement","VariantPickerQuickView","AbsoluteQuickViewHeader","DefaultQuickViewHeader"],"ignoreList":[0],"sources":["../../../node_modules/.pnpm/@tanstack+react-query@4.29.3_react-dom@18.2.0_react@18.3.1__react@18.3.1/node_modules/@tanstack/react-query/build/lib/useIsFetching.mjs","../../../wwwdev/scripts/autogen/translation-keys/trans-website-modiface.ts","../../../wwwdev/scripts/autogen/translation-keys/trans-website-product-productvariants-variantsection.ts","../../../wwwdev/scripts/autogen/translation-keys/trans-website-product-productvariants-variantpickerbutton.ts","../../../wwwdev/esm/components/generic/productCTA/components/AddCustomGiftCard/action.tsx","../../../wwwdev/esm/components/generic/productCTA/components/AddCustomGiftCard/AddCustomGiftCardButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/AddDigitalProduct/action.ts","../../../wwwdev/esm/components/generic/productCTA/components/AddDigitalProduct/AddDigitalProductButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/AddMinimumQuantityProduct/action.tsx","../../../wwwdev/esm/components/generic/productCTA/components/AddMinimumQuantityProduct/AddMinimumQuantityProductButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/MedicalReadMore/MedicalReadMoreButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/OpenFindInStore/action.ts","../../../wwwdev/esm/components/generic/productCTA/components/OpenFindInStore/FindInStoreButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/OpenPreorder/PreorderButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/OpenStockNotification/StockNotificationButton.tsx","../../../wwwdev/esm/components/login/shared/helpers.tsx","../../../wwwdev/esm/components/generic/productCTA/components/OpenWriteReview/action.ts","../../../wwwdev/esm/components/generic/productCTA/components/OpenWriteReview/WriteReviewButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/ReadMore/ReadMoreButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/SoldOutProduct/SoldOutButton.tsx","../../../wwwdev/esm/components/generic/productCTA/components/SubscriptionProduct/SubscriptionProductButton.tsx","../../../wwwdev/esm/components/modiface/modifacePDPButton.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/shared/store.ts","../../../wwwdev/esm/components/product/Variants/VariantPicker/shared/context/selectionCallback.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/VerticalItem.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/shared/styles.ts","../../../wwwdev/esm/components/product/Variants/VariantSection/SectionHeader.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/ListHeader.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/shared/context/activeSection.ts","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/VerticalList.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/VerticalSelection.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/HorizontalItem.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/HorizontalList.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/HorizontalSelection.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/shared/context/TrackingParams.ts","../../../wwwdev/esm/components/product/Variants/VariantPicker/shared/hooks/useCloseVariantPickerQuickview.ts","../../../wwwdev/esm/components/product/Variants/VariantPicker/components/Footer.tsx","../../../wwwdev/esm/components/product/Variants/VariantPicker/VariantPicker.tsx","../../../wwwdev/esm/components/generic/productCTA/components/VariantPicker/VariantPickerButton.tsx","../../../wwwdev/esm/components/generic/productCTA/shared/productActionComponents.ts","../../../wwwdev/esm/components/generic/productCTA/ProductActionRenderer.tsx","../../../wwwdev/svg/svgr/icons/Info.svg?react","../../../wwwdev/esm/components/product/Variants/VariantPicker/VariantPickerQuickView.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport { parseFilterArgs, notifyManager } from '@tanstack/query-core';\nimport { useSyncExternalStore } from './useSyncExternalStore.mjs';\nimport { useQueryClient } from './QueryClientProvider.mjs';\n\nfunction useIsFetching(arg1, arg2, arg3) {\n const [filters, options = {}] = parseFilterArgs(arg1, arg2, arg3);\n const queryClient = useQueryClient({\n context: options.context\n });\n const queryCache = queryClient.getQueryCache();\n return useSyncExternalStore(React.useCallback(onStoreChange => queryCache.subscribe(notifyManager.batchCalls(onStoreChange)), [queryCache]), () => queryClient.isFetching(filters), () => queryClient.isFetching(filters));\n}\n\nexport { useIsFetching };\n//# sourceMappingURL=useIsFetching.mjs.map\n","/* eslint-disable */\r\n/// This file is auto generated - do not edit manually\r\nexport * as ShortGuide from './trans-website-modiface-shortguide';\r\nexport * as Guide from './trans-website-modiface-guide';\r\nexport * as Errors from './trans-website-modiface-errors';\r\n\r\nexport const TryItOn = 'Website.Modiface.TryItOn';\r\nexport const FindYourNuance = 'Website.Modiface.FindYourNuance';\r\nexport const TryProduct = 'Website.Modiface.TryProduct';\r\nexport const Colors = 'Website.Modiface.Colors';\r\nexport const ChooseAndClose = 'Website.Modiface.ChooseAndClose';\r\nexport const SaveImage = 'Website.Modiface.SaveImage';\r\nexport const CameraButtonText = 'Website.Modiface.CameraButtonText';\r\nexport const UploadButtonText = 'Website.Modiface.UploadButtonText';\r\nexport const Loading = 'Website.Modiface.Loading';\r\nexport const ActivateCamera = 'Website.Modiface.ActivateCamera';\r\nexport const GuideLetsDoIt = 'Website.Modiface.GuideLetsDoIt';\r\nexport const GuideNext = 'Website.Modiface.GuideNext';\r\nexport const GuideText = 'Website.Modiface.GuideText';\r\nexport const Disclaimer = 'Website.Modiface.Disclaimer';\r\n","/* eslint-disable */\r\n/// This file is auto generated - do not edit manually\r\nexport const ColorPrefix = 'Website.Product.ProductVariants.VariantSection.ColorPrefix';\r\nexport const SizePrefix = 'Website.Product.ProductVariants.VariantSection.SizePrefix';\r\nexport const MiscellaneousPrefix = 'Website.Product.ProductVariants.VariantSection.MiscellaneousPrefix';\r\n","/* eslint-disable */\r\n/// This file is auto generated - do not edit manually\r\nexport const SeeAll = 'Website.Product.ProductVariants.VariantPickerButton.SeeAll';\r\n","import {\r\n _CustomizeProductParams,\r\n CustomDigitalGiftCardActionModel,\r\n _CustomizeProduct\r\n} from 'autogen/swagger/all';\r\nimport CustomGiftCard from 'components/customizeProduct/customGiftCard';\r\nimport { GA4Tracking, addToCartTypeEventCategoryMapper } from 'modules/tracking/GA4';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport { ProductActionProps } from '../../shared/types';\r\n\r\nexport async function openCustomGiftCardModal({ productId, listName }: _CustomizeProductParams) {\r\n try {\r\n // backend need to check the customizeProduct endpoint. it says it returns the base model which is why we are casting it to the correct model here\r\n const data = (await _CustomizeProduct({ productId, listName })) as CustomDigitalGiftCardActionModel;\r\n\r\n const { default: createModal } = await import(/* webpackChunkName: \"modal\" */ 'modules/modal');\r\n const modal = createModal();\r\n await modal({ open: true, content: });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\nexport default async function addCustomGiftCard({ params, trackingInfo }: ProductActionProps['CustomizeProduct']) {\r\n try {\r\n await openCustomGiftCardModal(params);\r\n\r\n const GA4TrackingObject = addToCartTypeEventCategoryMapper(trackingInfo.eventCategory);\r\n\r\n GA4TrackingObject.eventParams?.push({\r\n param_name: 'is_digital_product',\r\n param_value: true\r\n });\r\n\r\n GA4Tracking(GA4TrackingObject);\r\n\r\n createActionTracking(trackingInfo, { eventCategory: 'none', eventAction: 'customizeProduct' });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n","import { CustomizeProduct } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { ButtonWithIcon, ButtonWithSpinner } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { ProductActionProps } from '../../shared/types';\r\nimport addCustomGiftCard from './action';\r\n\r\nexport function AddCustomGiftCardButton({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['CustomizeProduct']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n addCustomGiftCard({ params, trackingInfo })} type=\"button\" {...restProps}>\r\n {children || t(CustomizeProduct)}\r\n \r\n );\r\n}\r\n\r\nexport function AddCustomGiftCardButtonCompact({\r\n params,\r\n trackingInfo,\r\n ...restProps\r\n}: ProductActionProps['BuyMinimumNow']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n }\r\n onClick={() => addCustomGiftCard({ params, trackingInfo })}\r\n type=\"button\"\r\n aria-label={t(CustomizeProduct)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(AddCustomGiftCardButton, {\r\n Compact: AddCustomGiftCardButtonCompact\r\n});\r\n","import { AddDigitalProduct } from 'autogen/swagger/all';\r\nimport track from 'modules/tracking/dataLayer';\r\nimport { GA4Tracking, addToCartTypeEventCategoryMapper } from 'modules/tracking/GA4';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport { ProductActionProps } from '../../shared/types';\r\n\r\nexport default async function addDigitalProduct({ params, trackingInfo }: ProductActionProps['BuyNowDigitalProduct']) {\r\n const response = await AddDigitalProduct(params);\r\n\r\n const GA4TrackingObject = addToCartTypeEventCategoryMapper(trackingInfo.eventCategory);\r\n\r\n GA4TrackingObject.eventParams?.push({ param_name: 'is_digital_product', param_value: true });\r\n\r\n GA4Tracking(GA4TrackingObject);\r\n\r\n createActionTracking(trackingInfo, { eventCategory: 'none', eventAction: 'buyDigitalProduct' });\r\n track(response.dataLayerDto);\r\n\r\n window.location.href = (response as any).redirectUrl;\r\n}\r\n","import { BuyNowDigitalProduct } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { ButtonWithIcon, ButtonWithSpinner } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { ProductActionProps } from '../../shared/types';\r\nimport addDigitalProduct from './action';\r\n\r\nexport function AddDigitalProductButton({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['BuyNowDigitalProduct']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n addDigitalProduct({ params, trackingInfo })} {...restProps}>\r\n {children || t(BuyNowDigitalProduct)}\r\n \r\n );\r\n}\r\n\r\nexport function AddDigitalProductButtonCompact({\r\n params,\r\n trackingInfo,\r\n ...restProps\r\n}: ProductActionProps['BuyMinimumNow']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n }\r\n onClick={() => addDigitalProduct({ params, trackingInfo })}\r\n type=\"button\"\r\n aria-label={t(BuyNowDigitalProduct)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(AddDigitalProductButton, {\r\n Compact: AddDigitalProductButtonCompact\r\n});\r\n","import { _BasketAddMinimumBuyParams, _BasketAddMinimumBuy } from 'autogen/swagger/all';\r\nimport serverSideTracking from 'components/shared/productItem/shared/helpers';\r\nimport mediator from 'modules/mediator';\r\nimport DefaultLayout from 'modules/modal/layouts/defaultLayout';\r\nimport { GA4Tracking, addToCartTypeEventCategoryMapper } from 'modules/tracking/GA4';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport { ProductActionProps } from '../../shared/types';\r\n\r\nexport async function openMinimumBuyConfirmModal(params: Omit<_BasketAddMinimumBuyParams, 'isQuickSearchContext'>) {\r\n try {\r\n const [html, { default: htmlModal }] = await Promise.all([\r\n _BasketAddMinimumBuy({ ...params, isQuickSearchContext: false }),\r\n import(/* webpackChunkName: \"htmlModal\" */ 'modules/modal/htmlModal')\r\n ]);\r\n\r\n const modal = htmlModal({\r\n layout: { component: }\r\n });\r\n\r\n await modal({ open: true, html });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\nexport default async function addMinimumQuantityProduct({ params, trackingInfo }: ProductActionProps['BuyMinimumNow']) {\r\n mediator.publish('closeModal');\r\n await openMinimumBuyConfirmModal(params);\r\n\r\n const GA4TrackingObject = addToCartTypeEventCategoryMapper(trackingInfo.eventCategory);\r\n\r\n if (params.minimumSalesQuantity) {\r\n GA4TrackingObject.eventParams?.push(\r\n {\r\n param_name: 'add_to_cart_quantity',\r\n param_value: params.minimumSalesQuantity\r\n },\r\n { param_name: 'is_minimum_quantity', param_value: true }\r\n );\r\n }\r\n\r\n GA4Tracking(GA4TrackingObject);\r\n\r\n createActionTracking(trackingInfo, { eventCategory: 'none', eventAction: 'buyBundleNow' });\r\n\r\n if (trackingInfo.serverSideTrackingModel) {\r\n serverSideTracking(trackingInfo.serverSideTrackingModel.data, trackingInfo.serverSideTrackingModel.eventType);\r\n }\r\n}\r\n","import { BuyBundleNow, BuyNow } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { ButtonWithIcon, ButtonWithSpinner } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { format } from 'modules/helpers/strings';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { ProductActionProps } from '../../shared/types';\r\nimport addMinimumQuantityProduct from './action';\r\n\r\nexport function AddMinimumQuantityProductButton({\r\n params,\r\n trackingInfo,\r\n minimumQuantity,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['BuyMinimumNow']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n addMinimumQuantityProduct({ params, trackingInfo })}\r\n type=\"button\"\r\n {...restProps}\r\n >\r\n {children || (minimumQuantity && format(t(BuyBundleNow))(minimumQuantity)) || t(BuyNow)}\r\n \r\n );\r\n}\r\n\r\nexport function AddMinimumQuantityProductButtonCompact({\r\n params,\r\n trackingInfo,\r\n minimumQuantity,\r\n ...restProps\r\n}: ProductActionProps['BuyMinimumNow']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n }\r\n onClick={() => addMinimumQuantityProduct({ params, trackingInfo })}\r\n type=\"button\"\r\n aria-label={minimumQuantity ? format(t(BuyBundleNow))(minimumQuantity) : t(BuyNow)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(AddMinimumQuantityProductButton, {\r\n Compact: AddMinimumQuantityProductButtonCompact\r\n});\r\n","import { MedicalReadMore } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithIcon } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { GA4Tracking } from 'modules/tracking/GA4/GA4Tracking';\r\nimport eventCategoryToContext from 'modules/tracking/GA4/helpers/eventCategoryToContext';\r\nimport type { TrackingCategory } from 'modules/tracking/UAEventTracking';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { ProductActionProps } from '../../shared/types';\r\n\r\nfunction track(eventCategory: TrackingCategory) {\r\n const context = eventCategoryToContext(eventCategory);\r\n\r\n if (context) {\r\n GA4Tracking({\r\n eventName: 'read_more',\r\n context,\r\n category: 'ecommerce',\r\n eventParams: [{ param_name: 'read_more_type', param_value: 'medical_description' }]\r\n });\r\n }\r\n}\r\n\r\nexport function MedicalReadMoreButton({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['MedicalReadMore']) {\r\n const { t } = useTranslation();\r\n const { eventCategory } = trackingInfo;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function MedicalReadMoreButtonCompact({\r\n params,\r\n trackingInfo,\r\n ...restProps\r\n}: ProductActionProps['MedicalReadMore']) {\r\n const { eventCategory } = trackingInfo;\r\n\r\n return (\r\n }\r\n onClick={() => track(eventCategory)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(MedicalReadMoreButton, {\r\n Compact: MedicalReadMoreButtonCompact\r\n});\r\n","/* eslint-disable import/prefer-default-export */\r\nimport { IProductActionTrackingContext } from '../../shared/types';\r\n\r\nexport function getEventLabelByContext({\r\n eventCategory = 'none',\r\n eventAction = 'findInStore',\r\n eventLabel,\r\n type\r\n}: IProductActionTrackingContext) {\r\n let contextEventLabel;\r\n\r\n switch (type) {\r\n case 'Page':\r\n contextEventLabel = 'pdp';\r\n break;\r\n default:\r\n contextEventLabel = eventLabel;\r\n }\r\n\r\n return { eventAction, eventCategory, eventLabel: contextEventLabel };\r\n}\r\n","import { _GetSelectedProduct, type FindStoreResult } from 'autogen/swagger/all';\r\nimport { FindInStore } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { ButtonWithIcon, ButtonWithSpinner } from 'components/Button';\r\nimport useFindationQuickView from 'components/Findation/hooks/useFindationQuickView';\r\nimport Icon from 'components/Icon';\r\nimport useRegimeQuickView from 'components/product/regime/components/RegimeQuickView/components/RegimeQuickViewButton/hooks/useRegimeQuickView';\r\nimport { useSlides } from 'components/quickView';\r\nimport { FindInStoreProvider } from 'components/storeList/components/FindInStoreQuickView';\r\nimport useFindInStoreQuickView from 'components/storeList/shared/hooks';\r\nimport StoreListQuickView from 'components/storeList/storeListQuickview';\r\nimport isClient from 'helpers/isClient';\r\nimport type { EventParamDecorated } from 'modules/tracking/GA4';\r\nimport { GA4Tracking } from 'modules/tracking/GA4/GA4Tracking';\r\nimport { useCallback } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport type { IProductActionTrackingContext, ProductActionProps } from '../../shared/types';\r\nimport { getEventLabelByContext } from './action';\r\n\r\nfunction track(trackingInfo) {\r\n if (!isClient) return;\r\n\r\n GA4Tracking(({ getProductListParams, eventCategoryToContext }) => {\r\n const context = eventCategoryToContext(trackingInfo.eventCategory);\r\n const eventParams: EventParamDecorated[] = [];\r\n\r\n if (context === 'product_list') {\r\n eventParams.push(...getProductListParams());\r\n }\r\n\r\n return {\r\n eventName: 'find_in_store',\r\n context,\r\n category: 'ecommerce',\r\n eventParams\r\n };\r\n });\r\n\r\n createActionTracking(trackingInfo, { eventCategory: 'none', eventAction: 'findInStore' }, getEventLabelByContext);\r\n}\r\n\r\nexport function useOpenFindInStoreCallback({\r\n productId,\r\n trackingInfo\r\n}: {\r\n productId: number;\r\n trackingInfo: IProductActionTrackingContext;\r\n}) {\r\n const [, toggle] = useFindInStoreQuickView();\r\n const [{ isOpen: regimeQuickViewIsOpen }] = useRegimeQuickView();\r\n const [{ isOpen: findationQuickViewIsOpen }] = useFindationQuickView();\r\n const { push } = useSlides();\r\n\r\n const onClickHandler = useCallback(async () => {\r\n await _GetSelectedProduct({ productId }).then((data) => {\r\n if (regimeQuickViewIsOpen || findationQuickViewIsOpen) {\r\n push(() => (\r\n \r\n {(findInStoreResult: FindStoreResult | undefined) =>\r\n data && \r\n }\r\n \r\n ));\r\n } else {\r\n toggle({\r\n isOpen: true,\r\n productId,\r\n productInfo: data\r\n });\r\n }\r\n });\r\n\r\n track(trackingInfo);\r\n }, [productId, toggle, trackingInfo, push, regimeQuickViewIsOpen, findationQuickViewIsOpen]);\r\n\r\n return onClickHandler;\r\n}\r\n\r\nfunction FindInStoreButton({ params, trackingInfo, children, ...restProps }: ProductActionProps['FindInStore']) {\r\n const { t } = useTranslation();\r\n const { productId } = params;\r\n const onClickHandler = useOpenFindInStoreCallback({ productId, trackingInfo });\r\n\r\n return (\r\n \r\n {children || t(FindInStore)}\r\n \r\n );\r\n}\r\n\r\nfunction FindInStoreButtonCompact({ params, trackingInfo, ...restProps }: ProductActionProps['FindInStore']) {\r\n const { productId } = params;\r\n const { t } = useTranslation();\r\n const onClickHandler = useOpenFindInStoreCallback({ productId, trackingInfo });\r\n\r\n return (\r\n }\r\n onClick={onClickHandler}\r\n variant=\"secondary\"\r\n type=\"button\"\r\n aria-label={t(FindInStore)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(FindInStoreButton, {\r\n Compact: FindInStoreButtonCompact\r\n});\r\n","import { Preorder } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithIcon } from 'components/Button';\r\nimport QuickView, { useQuickView } from 'components/quickView';\r\nimport React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport styled from 'styled-components';\r\nimport { breakpoint, sizes } from 'variables';\r\nimport NotificationForm from 'components/product/notification';\r\nimport type { ProductActionProps } from '../../shared/types';\r\nimport Icon from 'components/Icon';\r\n\r\nconst StyledQuickView = styled(QuickView)`\r\n // && for specificity\r\n && {\r\n ${breakpoint.up(sizes.md)} {\r\n min-width: 480px;\r\n width: 480px;\r\n }\r\n }\r\n`;\r\n\r\nexport function PreorderButton({ params, trackingInfo, children, ...restProps }: ProductActionProps['Preorder']) {\r\n const { t } = useTranslation();\r\n const { toggle } = useQuickView('NotificationForm');\r\n const [loadQuickView, setLoadQuickView] = useState(false);\r\n const { customerNotification } = params;\r\n\r\n return (\r\n <>\r\n {\r\n setLoadQuickView(true);\r\n toggle(true);\r\n }}\r\n variant=\"secondary\"\r\n type=\"button\"\r\n {...restProps}\r\n >\r\n {children || t(Preorder)}\r\n \r\n\r\n {loadQuickView && customerNotification && (\r\n setLoadQuickView(false)}>\r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport function PreorderButtonCompact({ params, ...restProps }: ProductActionProps['Preorder']) {\r\n const { toggle } = useQuickView('NotificationForm');\r\n const [loadQuickView, setLoadQuickView] = useState(false);\r\n const { t } = useTranslation();\r\n const { customerNotification } = params;\r\n\r\n return (\r\n <>\r\n }\r\n onClick={() => {\r\n setLoadQuickView(true);\r\n toggle(true);\r\n }}\r\n variant=\"secondary\"\r\n type=\"button\"\r\n aria-label={t(Preorder)}\r\n {...restProps}\r\n />\r\n\r\n {loadQuickView && customerNotification && (\r\n setLoadQuickView(false)}>\r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default Object.assign(PreorderButton, {\r\n Compact: PreorderButtonCompact\r\n});\r\n","import { _GetSelectedProduct } from 'autogen/swagger/all';\r\nimport { BackInStockNotification } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithIcon } from 'components/Button';\r\nimport useFindationQuickView from 'components/Findation/hooks/useFindationQuickView';\r\nimport Icon from 'components/Icon';\r\nimport NotificationForm from 'components/product/notification';\r\nimport useNotificationFormQuickView from 'components/product/notification/shared/hooks/useNotificationFormQuickView';\r\nimport { useSlides } from 'components/quickView';\r\nimport isClient from 'helpers/isClient';\r\nimport { eventCategoryToContext } from 'modules/tracking/GA4';\r\nimport { GA4Tracking } from 'modules/tracking/GA4/GA4Tracking';\r\nimport { useCallback } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { IProductActionTrackingContext, ProductActionProps } from '../../shared/types';\r\n\r\nfunction track(trackingInfo: ProductActionProps['BackInStockNotification']['trackingInfo']) {\r\n if (!isClient) return;\r\n\r\n const { eventCategory } = trackingInfo;\r\n\r\n const context = eventCategoryToContext(eventCategory);\r\n\r\n GA4Tracking({\r\n eventName: 'notification_request',\r\n context,\r\n category: 'ecommerce',\r\n eventParams: [{ param_name: 'notification_type', param_value: 'back_in_stock' }]\r\n });\r\n}\r\n\r\nexport function useOpenStockNotificationCallback({\r\n productId,\r\n trackingInfo\r\n}: {\r\n productId: number;\r\n trackingInfo: IProductActionTrackingContext;\r\n}) {\r\n const [, toggle] = useNotificationFormQuickView();\r\n const [{ isOpen: findationQuickViewIsOpen }] = useFindationQuickView();\r\n const { push } = useSlides();\r\n\r\n const onClickHandler = useCallback(async () => {\r\n await _GetSelectedProduct({ productId }).then((data) => {\r\n if (findationQuickViewIsOpen) {\r\n push(() => data && );\r\n } else {\r\n toggle({\r\n isOpen: true,\r\n notificationModel: { ...data, isPreorder: false }\r\n });\r\n }\r\n });\r\n\r\n track(trackingInfo);\r\n }, [productId, toggle, trackingInfo, push, findationQuickViewIsOpen]);\r\n\r\n return onClickHandler;\r\n}\r\n\r\nexport function StockNotificationButton({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['BackInStockNotification']) {\r\n const { t } = useTranslation();\r\n const { productId } = params;\r\n const onClickHandler = useOpenStockNotificationCallback({ productId, trackingInfo });\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n}\r\n\r\nexport function StockNotificationButtonCompact({\r\n params,\r\n trackingInfo,\r\n ...restProps\r\n}: ProductActionProps['BackInStockNotification']) {\r\n const { productId } = params;\r\n const onClickHandler = useOpenStockNotificationCallback({ productId, trackingInfo });\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <>\r\n }\r\n onClick={onClickHandler}\r\n variant=\"secondary\"\r\n type=\"button\"\r\n aria-label={t(BackInStockNotification)}\r\n {...restProps}\r\n />\r\n \r\n );\r\n}\r\n\r\nexport default Object.assign(StockNotificationButton, {\r\n Compact: StockNotificationButtonCompact\r\n});\r\n","import { _LoginInfo, type _LoginInfoParams } from 'autogen/swagger/all';\r\nimport { GeneralExceptionError } from 'autogen/translation-keys/trans-website-shared-error';\r\nimport { ColorAdvice5, ColorClubMatasPlus5, ColorNeutralWhite } from 'autogen/design-tokens/tokens';\r\nimport toast from 'components/Toast';\r\nimport i18next from 'i18next';\r\n\r\nexport default async function OpenLoginModal(params: _LoginInfoParams) {\r\n try {\r\n const response = await _LoginInfo(params);\r\n\r\n const theme = { minWidth: 'unset', maxWidth: '375px', backgroundColor: ColorNeutralWhite };\r\n\r\n switch (response.type) {\r\n case 'MatasPlusQuickSignup':\r\n case 'MatasPlusMixedSignup':\r\n theme.backgroundColor = ColorClubMatasPlus5;\r\n break;\r\n case 'BestForYou':\r\n theme.backgroundColor = ColorAdvice5;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const { default: LoginInfo } = await import(/* webpackChunkName: \"loginInfo\" */ 'components/login/loginInfo');\r\n const { default: createModal } = await import(/* webpackChunkName: \"modal\" */ 'modules/modal');\r\n const modal = createModal();\r\n\r\n return modal({\r\n open: true,\r\n layout: { customTheme: theme },\r\n content: \r\n });\r\n } catch (error) {\r\n console.error(error);\r\n toast.error(i18next.t(GeneralExceptionError));\r\n }\r\n}\r\n","import type { _LoginInfoParams } from 'autogen/swagger/all';\r\nimport OpenLoginModal from 'components/login/shared/helpers';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport type { ProductActionProps } from '../../shared/types';\r\nimport type { LinkAction } from 'components/shared/Routing/components/LinkAction/shared/types';\r\n\r\nasync function GoToProductReviewSection({\r\n productId,\r\n productNavigationLink,\r\n isAuthenticated\r\n}: {\r\n productId: number;\r\n productNavigationLink: LinkAction;\r\n isAuthenticated?: boolean;\r\n}) {\r\n if (!isAuthenticated) {\r\n const loginParams: _LoginInfoParams = {\r\n productId,\r\n infoType: 'WriteReview',\r\n level: 'Soft',\r\n mode: 'Standard',\r\n returnUrl: productNavigationLink.url // should be replaced with productReviewUrl look at GetProductReviewUrl()\r\n };\r\n\r\n return OpenLoginModal(loginParams);\r\n }\r\n\r\n // TODO nkr NAvigationLink er det her rigtigt?\r\n window.location.href = productNavigationLink.url; // should be replaced with productReviewUrl look at GetProductReviewUrl()\r\n}\r\n\r\nexport default async function openWriteReview({ params, trackingInfo }: ProductActionProps['WriteReview']) {\r\n await GoToProductReviewSection(params);\r\n createActionTracking(trackingInfo, { eventCategory: 'none', eventAction: 'writeReview' });\r\n}\r\n","import { WriteReview } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { ButtonWithIcon, ButtonWithSpinner } from 'components/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { ProductActionProps } from '../../shared/types';\r\nimport openWriteReview from './action';\r\nimport Icon from 'components/Icon';\r\n\r\nexport function WriteReviewButton({ params, trackingInfo, children, ...restProps }: ProductActionProps['WriteReview']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n openWriteReview({ params, trackingInfo })} type=\"button\" {...restProps}>\r\n {children || t(WriteReview)}\r\n \r\n );\r\n}\r\n\r\nexport function WriteReviewButtonCompact({ params, trackingInfo, ...restProps }: ProductActionProps['WriteReview']) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n }\r\n onClick={() => openWriteReview({ params, trackingInfo })}\r\n type=\"button\"\r\n aria-label={t(WriteReview)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(WriteReviewButton, {\r\n Compact: WriteReviewButtonCompact\r\n});\r\n","import { ReadMore } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithIcon } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { eventCategoryToContext } from 'modules/tracking/GA4';\r\nimport { GA4Tracking } from 'modules/tracking/GA4/GA4Tracking';\r\nimport type { TrackingCategory } from 'modules/tracking/UAEventTracking';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { ProductActionProps } from '../../shared/types';\r\n\r\nfunction track(eventCategory: TrackingCategory) {\r\n const context = eventCategoryToContext(eventCategory);\r\n\r\n if (context) {\r\n GA4Tracking({\r\n eventName: 'read_more',\r\n context,\r\n category: 'ecommerce',\r\n eventParams: [{ param_name: 'read_more_type', param_value: 'description' }]\r\n });\r\n }\r\n}\r\n\r\nexport function ReadMoreButton({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['MedicalReadMore']) {\r\n const { t } = useTranslation();\r\n const { eventCategory } = trackingInfo;\r\n\r\n // TODO nkr NavigationLink Update later\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function ReadMoreButtonCompact({ params, trackingInfo, ...restProps }: ProductActionProps['ReadMore']) {\r\n const { eventCategory } = trackingInfo;\r\n\r\n // TODO nkr NavigationLink\r\n return (\r\n }\r\n {...restProps}\r\n onClick={() => track(eventCategory)}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(ReadMoreButton, {\r\n Compact: ReadMoreButtonCompact\r\n});\r\n","import { SoldOut } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithIcon } from 'components/Button';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { GA4Tracking } from 'modules/tracking/GA4/GA4Tracking';\r\nimport { eventCategoryToContext } from 'modules/tracking/GA4';\r\nimport type { IProductAction, ProductActionProps } from '../../shared/types';\r\nimport Icon from 'components/Icon';\r\n\r\nfunction track(trackingInfo: IProductAction['trackingInfo']) {\r\n GA4Tracking({\r\n eventName: 'sold_out',\r\n context: eventCategoryToContext(trackingInfo.eventCategory),\r\n category: 'ecommerce'\r\n });\r\n}\r\n\r\nexport function SoldOutButton({ params, trackingInfo, children, ...restProps }: ProductActionProps['SoldOut']) {\r\n const { t } = useTranslation();\r\n\r\n // TODO nkr NavigationLink\r\n return (\r\n track(trackingInfo)}\r\n {...restProps}\r\n >\r\n {children || t(SoldOut)}\r\n \r\n );\r\n}\r\n\r\nexport function SoldOutButtonCompact({ params, trackingInfo, ...restProps }: ProductActionProps['SoldOut']) {\r\n // TODO nkr NavigationLink\r\n return (\r\n }\r\n onClick={() => track(trackingInfo)}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(SoldOutButton, {\r\n Compact: SoldOutButtonCompact\r\n});\r\n","import { Subscribe } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithIcon } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { eventCategoryToContext } from 'modules/tracking/GA4';\r\nimport { GA4Tracking } from 'modules/tracking/GA4/GA4Tracking';\r\nimport getProductListParams from 'modules/tracking/GA4/helpers/getProductListParams';\r\nimport { useTranslation } from 'react-i18next';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport type { IProductActionTrackingContext, ProductActionProps } from '../../shared/types';\r\n\r\nfunction track(trackingInfo: IProductActionTrackingContext) {\r\n const context = eventCategoryToContext(trackingInfo.eventCategory);\r\n\r\n GA4Tracking({\r\n eventName: 'link_click',\r\n context,\r\n category: 'navigation',\r\n eventParams: [\r\n {\r\n param_name: 'link_type',\r\n param_value: 'internal'\r\n },\r\n { param_name: 'subscription_toggle', param_value: true },\r\n ...(context === 'product_list' ? getProductListParams() : [])\r\n ]\r\n });\r\n\r\n createActionTracking(trackingInfo, { eventCategory: 'none', eventAction: 'subscribeButton' });\r\n}\r\n\r\nexport function SubscriptionProductButton({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['Subscribe']) {\r\n const { t } = useTranslation();\r\n\r\n // TODO nkr NavigationLink\r\n return (\r\n track(trackingInfo)}\r\n {...restProps}\r\n >\r\n {children || t(Subscribe)}\r\n \r\n );\r\n}\r\n\r\nexport function SubscriptionProductButtonCompact({\r\n params,\r\n trackingInfo,\r\n ...restProps\r\n}: ProductActionProps['Subscribe']) {\r\n // TODO nkr NavigationLink\r\n return (\r\n track(trackingInfo)}\r\n icon={}\r\n {...restProps}\r\n />\r\n );\r\n}\r\n\r\nexport default Object.assign(SubscriptionProductButton, {\r\n Compact: SubscriptionProductButtonCompact\r\n});\r\n","import { useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { InlineButtonWithSpinner } from 'components/generic/InlineButton';\r\nimport { FindYourNuance, TryItOn } from 'autogen/translation-keys/trans-website-modiface';\r\nimport loadModiface from './utilities/loadModiface';\r\n\r\nexport type ModifaceButton = {\r\n productId: number;\r\n productHasVariants: boolean;\r\n onClickCallback?: () => void;\r\n};\r\n\r\nfunction ModifacePDPButton(props: ModifaceButton) {\r\n const { productId, productHasVariants, onClickCallback, ...restProps } = props;\r\n const { t } = useTranslation();\r\n const openModiface = loadModiface(productId);\r\n\r\n useEffect(() => {\r\n function handleSplashClick(event): void {\r\n const { target } = event;\r\n if (target.closest('.js-modifaceModal')) {\r\n openModiface('splash');\r\n }\r\n }\r\n document.addEventListener('click', handleSplashClick);\r\n\r\n return (): void => {\r\n document.removeEventListener('click', handleSplashClick);\r\n };\r\n }, []);\r\n\r\n return (\r\n {\r\n await openModiface('pdpButton');\r\n if (onClickCallback) onClickCallback();\r\n }}\r\n {...restProps}\r\n >\r\n {productHasVariants ? t(FindYourNuance) : t(TryItOn)}\r\n \r\n );\r\n}\r\n\r\nexport default ModifacePDPButton;\r\n","import type { VariantPickerModel } from 'autogen/swagger/all';\r\nimport { createContext, useContext } from 'react';\r\nimport { createStore, useStore } from 'zustand';\r\n\r\ntype VariantPickerStoreProps = {\r\n model: VariantPickerModel;\r\n};\r\n\r\ntype VariantPickerState = VariantPickerStoreProps & {\r\n setModel: (id: VariantPickerModel) => void;\r\n};\r\n\r\nexport const createVariantPickerStore = (initProps: VariantPickerStoreProps) => {\r\n return createStore()((set) => ({\r\n ...initProps,\r\n setModel: (model) => set((state) => ({ ...state, model }))\r\n }));\r\n};\r\n\r\nexport type VariantPickerStore = ReturnType;\r\n\r\nexport const VariantPickerContext = createContext(null);\r\n\r\nexport function useVariantPickerStore() {\r\n const store = useContext(VariantPickerContext);\r\n if (!store) throw new Error('Missing VariantPickerContext.Provider in the tree');\r\n return useStore(store);\r\n}\r\n","/* eslint-disable import/prefer-default-export */\r\nimport type { VariantPickerModel } from 'autogen/swagger/all';\r\nimport { useGetVariantColorPickerForPdpQuery, useGetVariantPickerForPlpQuery } from 'autogen/swagger/all/hooks';\r\nimport { type ReactNode, createContext, useState } from 'react';\r\nimport { useVariantPickerStore } from '../store';\r\n\r\ntype SelectionCallbackContextType = (productId: number) => void;\r\nexport const SelectionCallbackContext = createContext({} as SelectionCallbackContextType);\r\n\r\nfunction SelectedItemProvider({\r\n model,\r\n isPDPRequest,\r\n children\r\n}: {\r\n model: VariantPickerModel;\r\n isPDPRequest: boolean;\r\n children: ReactNode;\r\n}) {\r\n const [PDPSelectedId, setPDPSelectedItem] = useState(model.productId);\r\n const [PLPSelectedId, setPLPSelectedItem] = useState(model.productId);\r\n const { setModel } = useVariantPickerStore();\r\n\r\n useGetVariantPickerForPlpQuery(\r\n { id: PLPSelectedId },\r\n {\r\n refetchOnMount: false,\r\n refetchOnWindowFocus: false,\r\n initialData: model,\r\n onSuccess: (data) => {\r\n setModel(data);\r\n }\r\n }\r\n );\r\n\r\n useGetVariantColorPickerForPdpQuery(\r\n { id: PDPSelectedId },\r\n {\r\n refetchOnMount: false,\r\n refetchOnWindowFocus: false,\r\n initialData: model,\r\n onSuccess: (data) => {\r\n setModel(data);\r\n }\r\n }\r\n );\r\n\r\n function onSelectionCallback(productId: number) {\r\n if (isPDPRequest) {\r\n setPDPSelectedItem(productId);\r\n } else {\r\n setPLPSelectedItem(productId);\r\n }\r\n }\r\n\r\n return (\r\n {children}\r\n );\r\n}\r\n\r\nexport default SelectedItemProvider;\r\n","import type { VariantPickerListItem } from 'autogen/swagger/all';\r\nimport SplashRenderer from 'components/shared/Splash/SplashRenderer';\r\nimport { useContext } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { Typography } from 'components/generic/typography';\r\nimport { em } from 'modules/helpers/style';\r\nimport { ColorNeutralDarkGrey, Spacing16 } from 'autogen/design-tokens/tokens';\r\nimport SwatchRenderer from '../../Swatches/SwatchRenderer';\r\nimport { SelectionCallbackContext } from '../shared/context/selectionCallback';\r\nimport { selectedStyling } from '../../Swatches/shared/styles';\r\n\r\n// #region Styles\r\nconst Label = styled.label`\r\n display: flex;\r\n margin: 0;\r\n`;\r\n\r\nconst Input = styled.input`\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n`;\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n align-items: center;\r\n flex: 0 0 100%;\r\n gap: ${Spacing16};\r\n`;\r\n\r\nconst SubText = styled.span`\r\n font-size: ${em(10, 12)};\r\n color: ${ColorNeutralDarkGrey};\r\n`;\r\n\r\nconst StyledSplashRenderer = styled(SplashRenderer)`\r\n margin-left: auto;\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst StyledSwatchRenderer = styled(SwatchRenderer)`\r\n flex-shrink: 0;\r\n\r\n ${Input}:focus + div > & {\r\n ${selectedStyling({ $size: 'lg' })}\r\n }\r\n`;\r\n\r\nconst Name = styled(Typography.Body)<{ $unavailable: boolean }>`\r\n ${({ $unavailable }) =>\r\n $unavailable &&\r\n css`\r\n opacity: 0.5;\r\n `}\r\n`;\r\n// #endregion Styles\r\n\r\ntype VerticalItemProps = {\r\n item: VariantPickerListItem;\r\n radioGroupName: string;\r\n};\r\n\r\nexport default function VerticalItem({ item, radioGroupName }: VerticalItemProps): JSX.Element {\r\n const { name, isSelected, splash, unitPrice, category, unavailable } = item;\r\n const onCheckedCallback = useContext(SelectionCallbackContext);\r\n const showUnitPrice = unitPrice && category !== 'Color';\r\n\r\n return (\r\n \r\n );\r\n}\r\n","/* eslint-disable import/prefer-default-export */\r\nimport { Spacing24, Spacing40 } from 'autogen/design-tokens/tokens';\r\nimport { css } from 'styled-components';\r\nimport { breakpoint, sizes } from 'variables';\r\n\r\nconst containerPadding = css`\r\n padding-left: ${Spacing24};\r\n padding-right: ${Spacing24};\r\n\r\n ${breakpoint.up(sizes.lg)} {\r\n padding-left: ${Spacing40};\r\n padding-right: ${Spacing40};\r\n }\r\n`;\r\n\r\nconst containerMargin = css`\r\n margin-left: ${Spacing24};\r\n margin-right: ${Spacing24};\r\n\r\n ${breakpoint.up(sizes.lg)} {\r\n margin-left: ${Spacing40};\r\n margin-right: ${Spacing40};\r\n }\r\n`;\r\n\r\nconst sliderPadding = css`\r\n scroll-padding-inline-start: ${Spacing24};\r\n scroll-padding-inline-end: ${Spacing24};\r\n\r\n ${breakpoint.up(sizes.lg)} {\r\n scroll-padding-inline-start: ${Spacing40};\r\n scroll-padding-inline-end: ${Spacing40};\r\n }\r\n`;\r\n\r\nexport { containerPadding, containerMargin, sliderPadding };\r\n","import { Spacing8 } from 'autogen/design-tokens/tokens';\r\nimport { GetVariantColorPickerForPdp, type VariantPickerListItem } from 'autogen/swagger/all';\r\nimport {\r\n ColorPrefix,\r\n MiscellaneousPrefix,\r\n SizePrefix\r\n} from 'autogen/translation-keys/trans-website-product-productvariants-variantsection';\r\nimport {\r\n ChosenColorPrefix,\r\n ChosenMiscellaneousPrefix,\r\n ChosenSizePrefix\r\n} from 'autogen/translation-keys/trans-website-productvariantpicker';\r\nimport { Typography } from 'components/generic/typography';\r\nimport type { HTMLAttributes } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport styled from 'styled-components';\r\nimport useVariantPickerQuickView from '../VariantPicker/shared/hooks/useVariantPickerQuickView';\r\nimport InlineButton from 'components/generic/InlineButton';\r\nimport { GA4Tracking } from 'modules/tracking/GA4';\r\nimport UAEventTracking from 'modules/tracking/UAEventTracking';\r\nimport { SeeAll } from 'autogen/translation-keys/trans-website-product-productvariants-variantpickerbutton';\r\n\r\n// #region Styles\r\nconst Headline = styled(Typography.Body)`\r\n display: flex;\r\n justify-content: space-between;\r\n margin: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nconst Name = styled.span`\r\n font-weight: bold;\r\n margin-left: ${Spacing8};\r\n`;\r\n\r\nfunction useGetPrefixByCategory(category: VariantPickerListItem['category'], isVariantPicker: boolean) {\r\n const { t } = useTranslation();\r\n\r\n switch (category) {\r\n case 'Color':\r\n return isVariantPicker ? t(ChosenColorPrefix) : t(ColorPrefix);\r\n case 'Size':\r\n return isVariantPicker ? t(ChosenSizePrefix) : t(SizePrefix);\r\n case 'Miscellaneous':\r\n default:\r\n return isVariantPicker ? t(ChosenMiscellaneousPrefix) : t(MiscellaneousPrefix);\r\n }\r\n}\r\n\r\ntype SectionHeaderProps = VariantPickerListItem &\r\n HTMLAttributes & {\r\n isVariantPicker?: boolean;\r\n variantPickerButtonText?: string;\r\n };\r\n\r\nexport default function SectionHeader({\r\n category,\r\n name,\r\n isVariantPicker = false,\r\n productId,\r\n variantPickerButtonText,\r\n ...restProps\r\n}: SectionHeaderProps) {\r\n const prefix = useGetPrefixByCategory(category, isVariantPicker);\r\n const [, toggle] = useVariantPickerQuickView();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n
\r\n {prefix}\r\n {name}\r\n
\r\n {!isVariantPicker && !!variantPickerButtonText && (\r\n {\r\n await GetVariantColorPickerForPdp({ id: productId }).then((res) => {\r\n toggle({\r\n isOpen: true,\r\n variantPickerModel: res,\r\n isPDPRequest: true\r\n });\r\n\r\n GA4Tracking({\r\n eventName: 'open_variant_picker',\r\n context: 'product_page',\r\n category: 'ecommerce'\r\n });\r\n\r\n UAEventTracking({\r\n eventCategory: 'productPage',\r\n eventAction: 'show Variant Drawer',\r\n eventLabel: t(SeeAll)\r\n });\r\n });\r\n }}\r\n >\r\n {t(SeeAll)}\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","import type { VariantLayoutType, VariantPickerListItem, VariantPickerModel } from 'autogen/swagger/all';\r\nimport type { HTMLAttributes } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { ColorNeutralGrey4, Spacing16, Spacing24 } from 'autogen/design-tokens/tokens';\r\nimport { SplashRenderer } from 'components';\r\nimport InlineButton from 'components/generic/InlineButton';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Edit } from 'autogen/translation-keys/trans-website-shared';\r\nimport { containerMargin } from './shared/styles';\r\nimport SectionHeader from '../../VariantSection/SectionHeader';\r\nimport { HorizontalPriceModule } from 'components/generic/productPrice';\r\n\r\n// #region Styles\r\nconst Wrapper = styled.div<{ $showBorder: boolean }>`\r\n display: flex;\r\n align-items: center;\r\n gap: ${Spacing24};\r\n\r\n ${({ $showBorder }) =>\r\n $showBorder &&\r\n css`\r\n border-bottom: 1px solid ${ColorNeutralGrey4};\r\n padding-top: ${Spacing16};\r\n padding-bottom: ${Spacing16};\r\n `}\r\n\r\n ${containerMargin};\r\n`;\r\n\r\nconst StyledPriceModule = styled(HorizontalPriceModule)`\r\n white-space: nowrap;\r\n margin-left: auto;\r\n`;\r\n\r\nconst StyledSplashRenderer = styled(SplashRenderer)`\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst EditButton = styled(InlineButton)`\r\n margin-left: auto;\r\n`;\r\n// #endregion Styles\r\n\r\ntype ListHeaderProps = {\r\n variant: VariantPickerListItem;\r\n layoutType: VariantLayoutType;\r\n price?: VariantPickerModel['price'];\r\n editCallback?: undefined | (() => void);\r\n} & HTMLAttributes;\r\n\r\nexport default function ListHeader({ variant, layoutType, price, editCallback, ...restProps }: ListHeaderProps) {\r\n const { splash } = variant;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n\r\n {splash && layoutType === 'Horizontal' && }\r\n\r\n {layoutType === 'Vertical' && (\r\n <>\r\n {editCallback ? (\r\n {t(Edit)}\r\n ) : (\r\n <>\r\n {price && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import { createContext } from 'react';\r\n\r\nconst ActiveSectionContext = createContext<{\r\n activeSectionIndex: number;\r\n totalSectionAmount: number | null;\r\n setActiveSectionIndex: (number: number) => void;\r\n}>({\r\n activeSectionIndex: 0,\r\n totalSectionAmount: null,\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n setActiveSectionIndex: () => {}\r\n});\r\n\r\nexport default ActiveSectionContext;\r\n","import type { VariantPickerListItem, VariantPickerModel } from 'autogen/swagger/all';\r\nimport { useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport { removeListStyling } from 'modules/helpers/mixins';\r\nimport { Spacing16, Spacing24 } from 'autogen/design-tokens/tokens';\r\nimport VerticalLine from './VerticalItem';\r\nimport ListHeader from './ListHeader';\r\nimport { containerPadding } from './shared/styles';\r\nimport ActiveSectionContext from '../shared/context/activeSection';\r\n\r\n// #region Styles\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${Spacing24};\r\n`;\r\n\r\nconst VariantList = styled.ul`\r\n ${removeListStyling}\r\n ${containerPadding}\r\n\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${Spacing16};\r\n margin-bottom: ${Spacing24};\r\n`;\r\n\r\n// #endregion Styles\r\n\r\nexport default function VerticalList({\r\n variants,\r\n price,\r\n sectionIndex\r\n}: {\r\n variants: VariantPickerListItem[];\r\n price: VariantPickerModel['price'];\r\n sectionIndex: number;\r\n}) {\r\n const selectedItem = variants.find((item) => item.isSelected);\r\n const { activeSectionIndex, setActiveSectionIndex } = useContext(ActiveSectionContext);\r\n const isActive = sectionIndex === activeSectionIndex;\r\n\r\n return (\r\n \r\n {selectedItem && (\r\n {\r\n setActiveSectionIndex(sectionIndex);\r\n }\r\n : undefined\r\n }\r\n />\r\n )}\r\n\r\n {isActive && (\r\n \r\n {variants.map((variant, index) => (\r\n
  • \r\n \r\n
  • \r\n ))}\r\n
    \r\n )}\r\n
    \r\n );\r\n}\r\n","import type { VariantPickerModel } from 'autogen/swagger/all';\r\nimport styled from 'styled-components';\r\nimport React, { useContext } from 'react';\r\nimport VerticalList from './VerticalList';\r\nimport ActiveSectionContext from '../shared/context/activeSection';\r\n\r\n// #region Styles\r\nconst Wrapper = styled.div``;\r\n\r\n// #endregion Styles\r\n\r\ntype VerticalSelectionProps = Pick;\r\n\r\nexport default function VerticalSelection({ sections, price }: VerticalSelectionProps) {\r\n const { activeSectionIndex } = useContext(ActiveSectionContext);\r\n\r\n return (\r\n \r\n {sections.map(({ variants }, index) => {\r\n if (index <= activeSectionIndex) {\r\n return (\r\n // eslint-disable-next-line react/no-array-index-key\r\n \r\n );\r\n }\r\n })}\r\n \r\n );\r\n}\r\n","import type { VariantPickerListItem } from 'autogen/swagger/all';\r\nimport React, { type HTMLAttributes, useContext } from 'react';\r\nimport styled from 'styled-components';\r\nimport SwatchRenderer from '../../Swatches/SwatchRenderer';\r\nimport { SelectionCallbackContext } from '../shared/context/selectionCallback';\r\n\r\n// #region Styles\r\nconst Label = styled.label`\r\n display: flex;\r\n margin: 0;\r\n`;\r\n\r\nconst Input = styled.input`\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n`;\r\n// #endregion Styles\r\n\r\ntype HorizontalItemProps = {\r\n item: VariantPickerListItem;\r\n radioGroupName: string;\r\n};\r\n\r\nexport default function HorizontalItem({\r\n item,\r\n radioGroupName,\r\n ...restProps\r\n}: HorizontalItemProps & HTMLAttributes): JSX.Element {\r\n const { isSelected } = item;\r\n const onCheckedCallback = useContext(SelectionCallbackContext);\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { VariantPickerListItem } from 'autogen/swagger/all';\r\nimport styled from 'styled-components';\r\nimport { Spacing16, Spacing8 } from 'autogen/design-tokens/tokens';\r\nimport { customScrollbar } from 'modules/helpers/mixins';\r\nimport ScrollSnapSlider, {\r\n IOptions,\r\n ScrollSnapSliderContext,\r\n useScrollSnapSlider\r\n} from 'components/generic/ScrollSnapSlider';\r\nimport { hover } from 'variables';\r\nimport HorizontalItem from './HorizontalItem';\r\nimport { containerPadding, sliderPadding } from './shared/styles';\r\nimport ListHeader from './ListHeader';\r\n\r\n// #region Styles\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${Spacing16};\r\n`;\r\n\r\nconst StyledHorizontalItem = styled(HorizontalItem)`\r\n scroll-snap-align: start;\r\n`;\r\n\r\nconst HorizontalScrollContainer = styled(ScrollSnapSlider)`\r\n position: relative;\r\n gap: ${Spacing8};\r\n padding-bottom: ${Spacing8};\r\n\r\n ${containerPadding}\r\n ${sliderPadding}\r\n\r\n ${hover('hover')} {\r\n padding-bottom: 0;\r\n ${customScrollbar}\r\n }\r\n`;\r\n\r\n// #endregion Styles\r\n\r\nconst scrollSnapSliderOptions: IOptions = {\r\n autoplay: false,\r\n draggable: true,\r\n loop: false\r\n};\r\n\r\nexport default function HorizontalList({ variants }: { variants: VariantPickerListItem[] }) {\r\n const { ref, slider } = useScrollSnapSlider(scrollSnapSliderOptions);\r\n const selectedItem = variants.find((item) => item.isSelected);\r\n\r\n return (\r\n \r\n {selectedItem && }\r\n \r\n \r\n {variants.map((variant, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n}\r\n","import type { VariantPickerModel } from 'autogen/swagger/all';\r\nimport styled from 'styled-components';\r\nimport { Spacing16, Spacing24 } from 'autogen/design-tokens/tokens';\r\nimport { HorizontalPriceModule } from 'components/generic/productPrice';\r\nimport HorizontalList from './HorizontalList';\r\nimport { containerMargin } from './shared/styles';\r\n\r\n// #region Styles\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n gap: ${Spacing16};\r\n padding-top: ${Spacing24};\r\n padding-bottom: ${Spacing24};\r\n`;\r\n\r\nconst StyledPriceModule = styled(HorizontalPriceModule)`\r\n padding-bottom: ${Spacing16};\r\n\r\n ${containerMargin}\r\n`;\r\n\r\n// #endregion Styles\r\n\r\ntype HorizontalSelectionProps = Pick;\r\n\r\nexport default function HorizontalSelection({ price, sections }: HorizontalSelectionProps) {\r\n return (\r\n \r\n {sections.map(({ variants }, index) => (\r\n // eslint-disable-next-line react/no-array-index-key\r\n \r\n ))}\r\n\r\n \r\n \r\n );\r\n}\r\n","import type { EventParamDecorated } from 'modules/tracking/GA4';\r\nimport { createContext } from 'react';\r\n\r\nconst TrackingParamsContext = createContext(null);\r\n\r\nexport default TrackingParamsContext;\r\n","import useVariantPickerQuickView from './useVariantPickerQuickView';\r\n\r\nexport default function useCloseVariantPickerQuickview() {\r\n const [, toggle] = useVariantPickerQuickView();\r\n\r\n return () => {\r\n toggle((prevValue) => ({\r\n isOpen: false,\r\n variantPickerModel: prevValue.variantPickerModel,\r\n isPDPRequest: prevValue.isPDPRequest\r\n }));\r\n };\r\n}\r\n","import type { ProductAction, VariantPickerModel } from 'autogen/swagger/all';\r\nimport { BackInStockNotification, BuyNow, FindInStore } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { Button, ButtonWithSpinner } from 'components/Button';\r\nimport ProductActionRenderer from 'components/generic/productCTA/ProductActionRenderer';\r\nimport { useAddProduct } from 'components/generic/productCTA/components/AddProduct/action';\r\nimport type { IProductActionButton, ProductActionProps } from 'components/generic/productCTA/shared/types';\r\nimport usePowerstep from 'components/powerstep/shared/hooks/usePowerstep';\r\nimport ActionFooter from 'components/quickView/components/ActionFooter';\r\nimport { useTranslation } from 'react-i18next';\r\nimport styled from 'styled-components';\r\nimport { useContext } from 'react';\r\nimport { SelectButton } from 'autogen/translation-keys/trans-website-productvariantpicker';\r\nimport { useOpenStockNotificationCallback } from 'components/generic/productCTA/components/OpenStockNotification/StockNotificationButton';\r\nimport { useOpenFindInStoreCallback } from 'components/generic/productCTA/components/OpenFindInStore/FindInStoreButton';\r\nimport ActiveSectionContext from '../shared/context/activeSection';\r\nimport toast from 'components/Toast';\r\nimport { AddToBasket } from 'autogen/translation-keys/trans-website-basket';\r\nimport LinkActionButton from 'components/Button/LinkActionButton';\r\nimport TrackingParamsContext from '../shared/context/TrackingParams';\r\nimport useFeatureToggles from 'hooks/user/useFeatureToggles';\r\nimport useRegimeQuickView from 'components/product/regime/components/RegimeQuickView/components/RegimeQuickViewButton/hooks/useRegimeQuickView';\r\nimport { useSlides } from 'components/quickView';\r\nimport useVariantPickerQuickView from '../shared/hooks/useVariantPickerQuickView';\r\nimport useCloseVariantPickerQuickview from '../shared/hooks/useCloseVariantPickerQuickview';\r\n\r\nconst StyledActionFooter = styled(ActionFooter)`\r\n flex: 0 0 auto;\r\n`;\r\n\r\ntype CTAButtonProps = {\r\n action: ProductAction;\r\n productId: VariantPickerModel['productId'];\r\n externalProductId: VariantPickerModel['externalProductId'];\r\n linkAction: VariantPickerModel['linkAction'];\r\n};\r\n\r\nfunction CustomBuyNow({ params, trackingInfo, children, ...restProps }: ProductActionProps['BuyNow']) {\r\n const { t } = useTranslation();\r\n const [openPowerstep] = usePowerstep();\r\n const AddProduct = useAddProduct();\r\n const trackingParams = useContext(TrackingParamsContext);\r\n const { powerstepEnabled } = useFeatureToggles();\r\n const [{ isOpen: regimeQuickViewIsOpen }] = useRegimeQuickView();\r\n const { pop } = useSlides();\r\n const closeVariantPickerQuickview = useCloseVariantPickerQuickview();\r\n\r\n async function buttonClick() {\r\n const response = await AddProduct({ params, trackingInfo }, trackingParams ? trackingParams : undefined);\r\n if (params.showPowerstepOnAddToBasket && powerstepEnabled) {\r\n openPowerstep([params.productId]);\r\n } else {\r\n toast.success(t(AddToBasket), {\r\n position: 'top-right'\r\n });\r\n }\r\n\r\n if (response?.success && regimeQuickViewIsOpen) {\r\n setTimeout(() => {\r\n pop();\r\n }, 1000);\r\n }\r\n\r\n closeVariantPickerQuickview();\r\n }\r\n\r\n return (\r\n \r\n {children || t(BuyNow)}\r\n \r\n );\r\n}\r\n\r\nfunction CustomBackInStockNotification({\r\n params,\r\n trackingInfo,\r\n children,\r\n ...restProps\r\n}: ProductActionProps['BackInStockNotification']) {\r\n const { t } = useTranslation();\r\n const { productId } = params;\r\n const onClickHandler = useOpenStockNotificationCallback({ productId, trackingInfo });\r\n const closeVariantPickerQuickview = useCloseVariantPickerQuickview();\r\n\r\n return (\r\n {\r\n await onClickHandler();\r\n closeVariantPickerQuickview();\r\n }}\r\n variant=\"primary\"\r\n type=\"button\"\r\n size=\"lg\"\r\n {...restProps}\r\n >\r\n {children || t(BackInStockNotification)}\r\n \r\n );\r\n}\r\n\r\nfunction CustomFindInStore({ params, trackingInfo, children, ...restProps }: ProductActionProps['FindInStore']) {\r\n const { t } = useTranslation();\r\n const { productId } = params;\r\n const onClickHandler = useOpenFindInStoreCallback({ productId, trackingInfo });\r\n const closeVariantPickerQuickview = useCloseVariantPickerQuickview();\r\n\r\n return (\r\n {\r\n await onClickHandler();\r\n closeVariantPickerQuickview();\r\n }}\r\n variant=\"primary\"\r\n type=\"button\"\r\n size=\"lg\"\r\n {...restProps}\r\n >\r\n {children || t(FindInStore)}\r\n \r\n );\r\n}\r\n\r\nfunction CTAButton({ action, productId, externalProductId, linkAction }: CTAButtonProps) {\r\n const [{ isOpen: quickViewIsOpen }] = useRegimeQuickView();\r\n const productActionButtonModel: IProductActionButton['model'] = {\r\n action,\r\n trackingContext: { eventCategory: 'variantPicker', type: 'Page' },\r\n productId,\r\n externalProductId,\r\n productNavigationLink: linkAction,\r\n isSubscriptionContext: undefined,\r\n isSubscribable: undefined,\r\n minimumSalesQuantity: undefined,\r\n bundleInfo: undefined,\r\n listName: undefined,\r\n fromPowerstep: false,\r\n addToBasketType: 'Default',\r\n requireLoginForCheckout: undefined,\r\n recommendationPlacement: undefined,\r\n variants: undefined,\r\n showPowerstepOnAddToBasket: !quickViewIsOpen\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\ntype FooterProps = {\r\n actions: VariantPickerModel['actions'];\r\n productId: VariantPickerModel['productId'];\r\n linkAction: VariantPickerModel['linkAction'];\r\n hasMoreChoices: boolean;\r\n isPDPRequest?: boolean;\r\n};\r\n\r\nexport default function Footer({ actions, productId, linkAction, isPDPRequest, hasMoreChoices }: FooterProps) {\r\n const { activeSectionIndex, totalSectionAmount, setActiveSectionIndex } = useContext(ActiveSectionContext);\r\n const showSelectButton =\r\n hasMoreChoices &&\r\n totalSectionAmount !== null &&\r\n totalSectionAmount > 1 &&\r\n activeSectionIndex + 1 < totalSectionAmount;\r\n const { t } = useTranslation();\r\n\r\n if (isPDPRequest && actions.includes('BuyNow')) {\r\n return (\r\n \r\n \r\n {t(SelectButton)}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {showSelectButton ? (\r\n {\r\n setActiveSectionIndex(activeSectionIndex + 1);\r\n }}\r\n size=\"lg\"\r\n >\r\n {t(SelectButton)}\r\n \r\n ) : (\r\n actions.map((action) => (\r\n \r\n ))\r\n )}\r\n \r\n );\r\n}\r\n","import { ColorNeutralDarkGrey, Spacing16, Spacing24, Spacing72 } from 'autogen/design-tokens/tokens';\r\nimport type { VariantPickerModel } from 'autogen/swagger/all';\r\nimport { MoreDetails } from 'autogen/translation-keys/trans-website-shared';\r\nimport InlineButton from 'components/generic/InlineButton';\r\nimport imageOverlayStyle from 'components/shared/style/imageOverlay';\r\nimport { customScrollbar } from 'modules/helpers/mixins';\r\nimport { useTranslation } from 'react-i18next';\r\nimport styled, { css } from 'styled-components';\r\nimport { breakpoint, sizes, zIndex } from 'variables';\r\nimport Spinner from 'modules/shared/circleSpinner';\r\nimport ModifacePDPButton from 'components/modiface/modifacePDPButton';\r\nimport Image from 'components/generic/Image';\r\nimport { GA4Tracking } from 'modules/tracking/GA4';\r\nimport { GetVariantColorPickerForPdpQueryKey, GetVariantPickerForPlpQueryKey } from 'autogen/swagger/all/hooks';\r\nimport { useIsFetching } from '@tanstack/react-query';\r\nimport { useEffect, useRef, useState } from 'react';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\nimport VerticalSelection from './components/VerticalSelection';\r\nimport HorizontalSelection from './components/HorizontalSelection';\r\nimport { containerMargin } from './components/shared/styles';\r\nimport useVariantPickerQuickView from './shared/hooks/useVariantPickerQuickView';\r\nimport SelectionCallbackContext from './shared/context/selectionCallback';\r\nimport Footer from './components/Footer';\r\nimport TrackingParamsContext from './shared/context/TrackingParams';\r\nimport ActiveSectionContext from './shared/context/activeSection';\r\nimport { createVariantPickerStore, VariantPickerContext } from './shared/store';\r\nimport InlineLinkActionButton from 'components/generic/InlineButton/InlineLinkActionButton';\r\n\r\n// #region Styles\r\nconst Wrapper = styled.div`\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1;\r\n max-width: 100%;\r\n`;\r\n\r\nconst ScrollContainer = styled.div`\r\n flex: 0 1 100%;\r\n overflow: auto;\r\n -webkit-overflow-scrolling: touch;\r\n\r\n ${customScrollbar}\r\n`;\r\n\r\nconst TopContainer = styled.div`\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n padding-top: ${Spacing72};\r\n padding-bottom: ${Spacing16};\r\n gap: ${Spacing24};\r\n\r\n &:after {\r\n content: '';\r\n\r\n ${imageOverlayStyle}\r\n }\r\n`;\r\n\r\nconst ProductImage = styled(Image.WithScaling)`\r\n align-self: center;\r\n height: 136px;\r\n object-fit: contain;\r\n aspect-ratio: 1;\r\n\r\n ${breakpoint.up(sizes.lg)} {\r\n height: 206px;\r\n }\r\n`;\r\n\r\nconst TopLinkStyling = css`\r\n align-self: end;\r\n color: ${ColorNeutralDarkGrey};\r\n\r\n ${containerMargin}\r\n`;\r\n\r\nconst StyledInlineButton = styled(InlineLinkActionButton)`\r\n ${TopLinkStyling}\r\n`;\r\n\r\nconst StyledModifacePDPButton = styled(ModifacePDPButton)`\r\n ${TopLinkStyling}\r\n`;\r\n\r\nconst SpinnerOverlay = styled.div`\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: ${zIndex.backdrop};\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0, 0, 0, 0.3);\r\n\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\n// #endregion Styles\r\n\r\nfunction trackModifaceClick() {\r\n GA4Tracking({\r\n eventName: 'modiface_activated',\r\n category: 'advisory',\r\n context: 'variant_picker'\r\n });\r\n}\r\n\r\nfunction checkForMoreChoices(variantPickerModel?: VariantPickerModel, activeSectionIndex?: number): boolean {\r\n if (variantPickerModel && activeSectionIndex !== undefined) {\r\n const { sections } = variantPickerModel;\r\n\r\n return sections[activeSectionIndex + 1]?.variants?.length > 1;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getSelectedVariantById(activeSectionIndex: number, variantPickerModel?: VariantPickerModel) {\r\n if (!variantPickerModel) return undefined;\r\n\r\n return variantPickerModel.sections[activeSectionIndex].variants.find(\r\n (item) => item.productId === variantPickerModel.productId\r\n );\r\n}\r\n\r\nexport default function VariantPicker({\r\n model,\r\n isPDPRequest = false,\r\n ...restProps\r\n}: {\r\n model: VariantPickerModel;\r\n isPDPRequest?: boolean;\r\n}) {\r\n const [, toggle] = useVariantPickerQuickView();\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const variantPickerStore = useRef(createVariantPickerStore({ model }));\r\n\r\n const { productId, image, isModifaceEnabled, layoutType, price, sections, linkAction, actions } =\r\n variantPickerStore.current.getState().model;\r\n\r\n const { t } = useTranslation();\r\n const isPdpLoading = useIsFetching([GetVariantColorPickerForPdpQueryKey]);\r\n const isPlpLoading = useIsFetching([GetVariantPickerForPlpQueryKey]);\r\n\r\n const [activeSectionIndex, setActiveSectionIndex] = useState(0);\r\n const [hasMoreChoices, setHasMoreChoices] = useState(checkForMoreChoices(model, activeSectionIndex));\r\n const activeSplash = getSelectedVariantById(activeSectionIndex, model)?.splash;\r\n const [totalSectionAmount, setTotalSectionAmount] = useState(model?.sections.length || 1);\r\n const [debouncedRequest] = useDebouncedCallback(() => {\r\n setIsLoading(!!isPdpLoading || !!isPlpLoading);\r\n }, 150);\r\n\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: \r\n useEffect(() => {\r\n debouncedRequest();\r\n }, [isPdpLoading, isPlpLoading, debouncedRequest]);\r\n\r\n useEffect(() => {\r\n if (model) {\r\n setHasMoreChoices(checkForMoreChoices(model, activeSectionIndex));\r\n }\r\n }, [model, activeSectionIndex]);\r\n\r\n useEffect(() => {\r\n if (model) {\r\n const { layoutType } = model;\r\n setTotalSectionAmount(layoutType === 'Horizontal' ? null : model.sections.length);\r\n }\r\n }, [model]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {!isPDPRequest ? (\r\n {t(MoreDetails)}\r\n ) : (\r\n isModifaceEnabled && (\r\n {\r\n trackModifaceClick();\r\n toggle({ isOpen: false });\r\n }}\r\n />\r\n )\r\n )}\r\n \r\n\r\n
    \r\n \r\n {layoutType === 'Horizontal' ? (\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 {isLoading && (\r\n \r\n \r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import { GetVariantPickerForPlp } from 'autogen/swagger/all';\r\nimport { OpenVariantPicker } from 'autogen/translation-keys/trans-website-shared-buttons';\r\nimport { ButtonWithSpinner } from 'components/Button';\r\nimport Icon from 'components/Icon';\r\nimport { PowerstepMediatorAtom } from 'components/powerstep/shared/hooks/usePowerstep';\r\nimport VariantPicker from 'components/product/Variants/VariantPicker';\r\nimport useVariantPickerQuickView from 'components/product/Variants/VariantPicker/shared/hooks/useVariantPickerQuickView';\r\nimport useRegimeQuickView from 'components/product/regime/components/RegimeQuickView/components/RegimeQuickViewButton/hooks/useRegimeQuickView';\r\nimport { useSlides } from 'components/quickView';\r\nimport isClient from 'helpers/isClient';\r\nimport useMediatorState from 'hooks/globals/useMediatorAtom';\r\nimport { GA4Tracking, eventCategoryToContext } from 'modules/tracking/GA4';\r\nimport { useCallback } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport createActionTracking from '../../shared/helpers';\r\nimport type { IProductActionTrackingContext, ProductActionProps } from '../../shared/types';\r\n\r\nfunction track(trackingContext: IProductActionTrackingContext) {\r\n if (!isClient) return;\r\n\r\n const { eventCategory } = trackingContext;\r\n const context = eventCategoryToContext(eventCategory);\r\n\r\n GA4Tracking({\r\n eventName: 'open_variant_picker',\r\n context,\r\n category: 'ecommerce'\r\n });\r\n\r\n createActionTracking(trackingContext, { eventCategory: 'none', eventAction: 'show Variant Drawer' });\r\n}\r\n\r\nfunction useOpenVariantPickerCallback({ params }: ProductActionProps['VariantPicker']) {\r\n const { productId, trackingContext } = params;\r\n const [, toggle] = useVariantPickerQuickView();\r\n const [, setPowerstepMediatorState] = useMediatorState(PowerstepMediatorAtom);\r\n const [{ isOpen: quickViewIsOpen }] = useRegimeQuickView();\r\n const { push } = useSlides();\r\n\r\n const onClickHandler = useCallback(async () => {\r\n await GetVariantPickerForPlp({ id: productId }).then((res) => {\r\n if (quickViewIsOpen) {\r\n push(() => );\r\n } else {\r\n toggle({\r\n isOpen: true,\r\n variantPickerModel: res\r\n });\r\n }\r\n });\r\n\r\n // close powerstep\r\n setPowerstepMediatorState({ isOpen: false, productIds: [productId] });\r\n track(trackingContext);\r\n }, [quickViewIsOpen, push, toggle, setPowerstepMediatorState, trackingContext, productId]);\r\n\r\n return onClickHandler;\r\n}\r\n\r\nexport function VariantPickerButton(params: ProductActionProps['VariantPicker']): JSX.Element {\r\n const { ...restProps } = params;\r\n const { t } = useTranslation();\r\n const onClickHandler = useOpenVariantPickerCallback(params);\r\n\r\n return (\r\n \r\n {t(OpenVariantPicker)}\r\n \r\n );\r\n}\r\n\r\nexport function VariantPickerButtonCompact(params: ProductActionProps['VariantPicker']): JSX.Element {\r\n const { t } = useTranslation();\r\n const { ...restProps } = params;\r\n const onClickHandler = useOpenVariantPickerCallback(params);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Object.assign(VariantPickerButton, {\r\n Compact: VariantPickerButtonCompact\r\n});\r\n","import AddCustomGiftCardButton from '../components/AddCustomGiftCard/AddCustomGiftCardButton';\r\nimport AddDigitalProductButton from '../components/AddDigitalProduct/AddDigitalProductButton';\r\nimport AddMinimumQuantityProductButton from '../components/AddMinimumQuantityProduct/AddMinimumQuantityProductButton';\r\nimport AddProductButton from '../components/AddProduct/AddProductButton';\r\nimport MedicalReadMoreButton from '../components/MedicalReadMore/MedicalReadMoreButton';\r\nimport FindInStoreButton from '../components/OpenFindInStore/FindInStoreButton';\r\nimport PreorderButton from '../components/OpenPreorder/PreorderButton';\r\nimport StockNotificationButton from '../components/OpenStockNotification/StockNotificationButton';\r\nimport WriteReviewButton from '../components/OpenWriteReview/WriteReviewButton';\r\nimport ReadMoreButton from '../components/ReadMore/ReadMoreButton';\r\nimport SoldOutButton from '../components/SoldOutProduct/SoldOutButton';\r\nimport SubscriptionProductButton from '../components/SubscriptionProduct/SubscriptionProductButton';\r\nimport VariantPickerButton from '../components/VariantPicker';\r\nimport { DefaultProductActionComponents, IProductActionButton } from './types';\r\n\r\n/* Default - if new action is introduced in the backend, this will warn you that u need to support the action. */\r\nconst defaultActionComponents: DefaultProductActionComponents = {\r\n BuyNow: AddProductButton,\r\n BuyMinimumNow: AddMinimumQuantityProductButton,\r\n BuyNowDigitalProduct: AddDigitalProductButton,\r\n CustomizeProduct: AddCustomGiftCardButton,\r\n BackInStockNotification: StockNotificationButton,\r\n FindInStore: FindInStoreButton,\r\n WriteReview: WriteReviewButton,\r\n Preorder: PreorderButton,\r\n Favorite: ReadMoreButton,\r\n MedicalReadMore: MedicalReadMoreButton,\r\n More: ReadMoreButton,\r\n ReadMore: ReadMoreButton,\r\n SoldOut: SoldOutButton,\r\n Subscribe: SubscriptionProductButton,\r\n VariantPicker: VariantPickerButton\r\n};\r\n\r\n/* Compact - this is an override, so these are all optional and will be merged with the defaults above. */\r\nexport const compactActionComponents: IProductActionButton['overriddenActionComponents'] = {\r\n BuyNow: AddProductButton.Compact,\r\n BuyMinimumNow: AddMinimumQuantityProductButton.Compact,\r\n BuyNowDigitalProduct: AddDigitalProductButton.Compact,\r\n CustomizeProduct: AddCustomGiftCardButton.Compact,\r\n BackInStockNotification: StockNotificationButton.Compact,\r\n FindInStore: FindInStoreButton.Compact,\r\n WriteReview: WriteReviewButton.Compact,\r\n Preorder: PreorderButton.Compact,\r\n Favorite: ReadMoreButton.Compact,\r\n More: ReadMoreButton.Compact,\r\n ReadMore: ReadMoreButton.Compact,\r\n MedicalReadMore: MedicalReadMoreButton.Compact,\r\n SoldOut: SoldOutButton.Compact,\r\n Subscribe: SubscriptionProductButton.Compact,\r\n VariantPicker: VariantPickerButton.Compact\r\n};\r\n\r\nexport default defaultActionComponents;\r\n","/* eslint-disable no-param-reassign */\r\nimport React from 'react';\r\nimport type { IProductActionButton, IProductActionTrackingContext, ProductActionParams } from './shared/types';\r\nimport defaultActionComponents from './shared/productActionComponents';\r\n\r\nexport default function ProductActionRenderer({\r\n model,\r\n overriddenActionComponents,\r\n ...restProps\r\n}: IProductActionButton) {\r\n const { trackingContext, isSubscribable, isSubscriptionContext } = model;\r\n\r\n const mergedActionComponents = { ...defaultActionComponents, ...overriddenActionComponents };\r\n\r\n if (isSubscribable && isSubscriptionContext) {\r\n model.action = 'Subscribe';\r\n }\r\n\r\n // Get the Button we need to render\r\n const componentToRender = mergedActionComponents[model.action];\r\n\r\n // Prepare the props for the button\r\n const componentProps = {\r\n params: model,\r\n trackingInfo: trackingContext,\r\n ...restProps\r\n };\r\n\r\n if (!componentToRender) {\r\n console.error('unsupported product action');\r\n return null;\r\n }\r\n\r\n // create the button element with the appropriate props we prepared.\r\n return React.createElement<{\r\n params: ProductActionParams;\r\n trackingInfo: IProductActionTrackingContext;\r\n }>(componentToRender, componentProps);\r\n}\r\n","import * as React from \"react\";\nconst SvgInfo = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M12.0003 20.4C7.36114 20.4 3.60033 16.6392 3.60033 12C3.60033 7.36084 7.36114 3.60004 12.0003 3.60004C16.6395 3.60004 20.4003 7.36084 20.4003 12C20.4003 16.6392 16.6395 20.4 12.0003 20.4ZM2.40033 12C2.40033 17.302 6.6984 21.6 12.0003 21.6C17.3023 21.6 21.6003 17.302 21.6003 12C21.6003 6.6981 17.3023 2.40003 12.0003 2.40004C6.69839 2.40004 2.40033 6.6981 2.40033 12ZM12.0003 16.2C12.3317 16.2 12.6003 15.9314 12.6003 15.6L12.6003 12C12.6003 11.6687 12.3317 11.4 12.0003 11.4C11.669 11.4 11.4003 11.6687 11.4003 12L11.4003 15.6C11.4003 15.9314 11.669 16.2 12.0003 16.2ZM11.4003 8.40004C11.4003 8.73141 11.669 9.00004 12.0003 9.00004L12.0093 9.00004C12.3407 9.00004 12.6093 8.73141 12.6093 8.40004C12.6093 8.06866 12.3407 7.80004 12.0093 7.80004L12.0003 7.80004C11.669 7.80004 11.4003 8.06866 11.4003 8.40004Z\", fill: \"black\" }));\nexport default SvgInfo;\n","import QuickView from 'components/quickView';\r\nimport AbsoluteQuickViewHeader from 'components/quickView/components/QuickViewWithAbsoluteHeader/Header';\r\nimport { DefaultQuickViewHeader } from 'components/quickView/components/DefaultQuickViewComponents/Header';\r\nimport VariantPicker from './VariantPicker';\r\nimport useVariantPickerQuickView from './shared/hooks/useVariantPickerQuickView';\r\nimport useCloseVariantPickerQuickview from './shared/hooks/useCloseVariantPickerQuickview';\r\n\r\nexport default function VariantPickerQuickView() {\r\n const [{ isOpen, variantPickerModel, isPDPRequest }] = useVariantPickerQuickView();\r\n const closeVariantPickerQuickview = useCloseVariantPickerQuickview();\r\n\r\n if (!variantPickerModel) return null;\r\n\r\n const { image } = variantPickerModel;\r\n\r\n return (\r\n \r\n image ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n position=\"right\"\r\n >\r\n \r\n \r\n );\r\n}\r\n"],"file":"client/chunks/VariantPickerQuickView.4up476t4.js"}