{"version":3,"file":"coopse.script.5942.c0511c7a.chunk.js","mappings":"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","sources":["webpack:///../../packages/components/src/Badge/Badge.module.scss","webpack:///./src/microApps/cnc/hooks/tracking/useCncNavigationTracking.ts","webpack:///./src/microApps/common/components/atoms/RawHtml/RawHtml.tsx","webpack:///./src/microApps/common/hooks/useCncFlyInState.ts","webpack:///./src/microApps/common/hooks/useHtmlScriptParser.ts","webpack:///./src/microApps/common/selectors/uiSelectors.ts","webpack:///./src/microApps/common/tracking/contextAware/personalizationEvents.ts","webpack:///./src/microApps/common/tracking/ga4/user/ga4UserEvents.ts","webpack:///./src/microApps/ecommerce/components/ItemGrid/ItemGrid.tsx","webpack:///./src/microApps/ecommerce/contexts/useRouterContext.tsx","webpack:///./src/microApps/ecommerce/hooks/useReactRouting.ts","webpack:///../../packages/components/src/Badge/AnimatedBadge.tsx","webpack:///../../packages/components/src/Badge/Badge.tsx","webpack:///../../packages/components/src/Badge/Badge.utils.ts","webpack:///../../packages/components/src/Badge/BadgePositioning.tsx","webpack:///../../packages/components/src/Icon/AccessibleIcon.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"BadgePositioning\":\"qQ6hw97v\",\"Badge\":\"FAkyjvah\",\"Badge-wide\":\"jeYf0ayb\",\"Badge--animated\":\"szszpBkW\",\"is-updating\":\"tTyJ1LjB\",\"pulseGreen\":\"XYseNCfi\",\"is-active\":\"CKEBzLcU\",\"AsIcon\":\"wULzSkan\",\"Badge--xsmall\":\"kTOj5dQE\",\"Badge--small\":\"PiEpAH2p\",\"Badge--medium\":\"MPIK3bR5\",\"Badge--red\":\"g4BlKIVG\",\"Badge--white\":\"VDx9_fIq\",\"Badge--greenLight2\":\"bI8Rjrwa\",\"Badge--ctaGreen\":\"ubS4zBBP\"};","import { useCallback } from 'react';\n\nimport { useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport { uiSelectors } from '../../../common/selectors/uiSelectors';\nimport gaTracking from '../../../common/tracking/tracking';\n\nexport const useNavigationTracking = () => {\n const currentStep = useAppSelector(uiSelectors.cnc.selectCurrentStep);\n\n const sendGaGoBackTrackingEvent = useCallback(() => {\n if (currentStep) {\n gaTracking.cnc.header.navigationGoBack(currentStep);\n }\n }, [currentStep]);\n\n const sendGaCloseTrackingEvent = useCallback(() => {\n if (currentStep) {\n gaTracking.cnc.header.navigationClose(currentStep);\n }\n }, [currentStep]);\n\n return { sendGaGoBackTrackingEvent, sendGaCloseTrackingEvent };\n};\n","import DOMPurify, { type Config } from 'dompurify';\nimport type { FC } from 'react';\n\nimport useHtmlScriptParser from '../../../hooks/useHtmlScriptParser';\n\ninterface DangerousHtmlWrapper {\n dangerouslySetInnerHTML?: {\n __html: string;\n };\n}\n\ninterface RawHtmlProps {\n html: string;\n renderWrapper?: FC<React.PropsWithChildren<DangerousHtmlWrapper>>;\n sanitizeOptions?: Config;\n parseScripts?: boolean;\n className?: string;\n}\n\nconst sanitizer = DOMPurify.sanitize;\n\nconst RawHtml = ({\n html,\n renderWrapper,\n sanitizeOptions,\n className,\n parseScripts = false,\n}: React.PropsWithChildren<RawHtmlProps>) => {\n const scriptsContainerRef = useHtmlScriptParser(html, parseScripts);\n\n if (!renderWrapper)\n return (\n <>\n <div\n className={className}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: sanitizeOptions\n ? sanitizer(html, sanitizeOptions).toString()\n : sanitizer(html).toString(),\n }}\n />\n <div style={{ display: 'none' }} ref={scriptsContainerRef} />\n </>\n );\n\n return (\n <>\n {renderWrapper({\n dangerouslySetInnerHTML: {\n __html: sanitizeOptions\n ? sanitizer(html, sanitizeOptions).toString()\n : sanitizer(html).toString(),\n },\n })}\n <div style={{ display: 'none' }} ref={scriptsContainerRef} />\n </>\n );\n};\n\nexport default RawHtml;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from 'react';\n\nimport type { IApiStore } from '../../../models/ecommerce/store/storeModel';\nimport { useNavigationTracking } from '../../cnc/hooks/tracking/useCncNavigationTracking';\nimport { storeSelectors } from '../selectors/storeSelectors';\nimport type { AppThunk } from '../store';\nimport { cncUiActions } from '../store/slices/ui/cncUiSlice';\nimport { unsyncedCartItemsActions } from '../store/slices/unsyncedCartItemsSlice';\nimport type {\n StoreChangeNotificationType,\n WeeklyMenuModalType,\n} from '../store/structureDefinitions/modalState';\nimport { FlyInType } from '../store/structureDefinitions/modalState';\nimport { CncStep } from '../store/structureDefinitions/uiState';\nimport { useTopLevelModal } from './useModal';\nimport { useAppDispatch, useAppSelector } from './useThunkDispatch';\n\nexport type MiniCartNotificationType =\n | StoreChangeNotificationType.deliveryTimeslotSelected\n | StoreChangeNotificationType.pickupTimeslotSelected\n | WeeklyMenuModalType.addToCart;\n\nexport type MiniCartStepNavigationParams = {\n notification: MiniCartNotificationType;\n};\n\nexport type TimeslotsStepNavigationParams = {\n expressStore?: IApiStore;\n};\n\ntype NavigateSetPayload<TParam> =\n | { step: CncStep.MiniCart; param?: MiniCartStepNavigationParams }\n | { step: CncStep.TimeSlots; param?: TimeslotsStepNavigationParams }\n | { step: Exclude<CncStep, CncStep.MiniCart | CncStep.TimeSlots>; param?: TParam };\n\nexport const dispatchNavigateTo =\n <TOutgoingParams>(\n arg: NavigateSetPayload<TOutgoingParams>,\n previewPostalCode: string | null,\n ): AppThunk =>\n (dispatch, getState) => {\n const hasActiveStoreSelection = storeSelectors.hasActiveStoreSelection(getState());\n if (hasActiveStoreSelection || previewPostalCode || arg.step === CncStep.Map) {\n dispatch(cncUiActions.navigateTo({ step: arg.step, param: arg.param }));\n } else {\n dispatch(\n cncUiActions.navigateTo({ step: CncStep.PostalCodeSelector, param: arg.param }),\n );\n }\n };\n\nexport const dispatchSetTo =\n <TOutgoingParams>(arg: NavigateSetPayload<TOutgoingParams>): AppThunk =>\n (dispatch, getState) => {\n const hasActiveStoreSelection = storeSelectors.hasActiveStoreSelection(getState());\n if (!hasActiveStoreSelection) {\n dispatch(cncUiActions.setTo({ step: CncStep.PostalCodeSelector, param: arg.param }));\n return;\n }\n dispatch(cncUiActions.setTo({ step: arg.step, param: arg.param }));\n };\n\nexport const useCncFlyInState = <TIncomingParams = any, TOutgoingParams = any>() => {\n const dispatch = useAppDispatch();\n const { sendGaCloseTrackingEvent } = useNavigationTracking();\n\n const reloadOnClose = useAppSelector((state) => state.ui.cnc.reloadOnClose);\n const previewPostalCode = useAppSelector((state) => state.ui.cnc.previewPostalCode);\n\n const navigationParams: TIncomingParams = useAppSelector(\n (state) => state.ui.cnc.currentStepNavigationParams,\n );\n\n const { isOpen, close } = useTopLevelModal(FlyInType.CncFlyIn);\n\n const afterClose = useCallback(() => {\n sendGaCloseTrackingEvent();\n dispatch(unsyncedCartItemsActions.removeUnsyncedCartItems());\n if (reloadOnClose) {\n window.location.reload();\n }\n }, [dispatch, reloadOnClose, sendGaCloseTrackingEvent]);\n\n const navigateTo = useCallback(\n (args: NavigateSetPayload<TOutgoingParams>) => {\n dispatch(dispatchNavigateTo(args, previewPostalCode));\n },\n [dispatch, previewPostalCode],\n );\n\n const setTo = useCallback(\n (args: NavigateSetPayload<TOutgoingParams>) => {\n dispatch(dispatchSetTo(args));\n },\n [dispatch],\n );\n\n const initCnc = useCallback(() => {\n dispatch(\n dispatchSetTo({\n step: CncStep.MiniCart,\n }),\n );\n }, [dispatch]);\n\n const forceReloadOnClose = useCallback(() => {\n dispatch(cncUiActions.forceReloadOnClose(true));\n }, [dispatch]);\n\n return {\n isOpen,\n close,\n afterClose,\n navigateTo,\n setTo,\n initCnc,\n forceReloadOnClose,\n navigationParams,\n };\n};\n","import { useEffect, useRef } from 'react';\n\nimport { SyncronQueue } from '../api/SyncronQueue';\n\nconst createScriptElement = (scriptElement: HTMLScriptElement) => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n // pass all attributes from original script tag\n Array.from(scriptElement.attributes).forEach((attr) => {\n script.setAttribute(attr.name, attr.value);\n });\n\n if (scriptElement.innerHTML) {\n script.append(scriptElement.innerHTML);\n }\n\n return script;\n};\n\nconst useHtmlScriptParser = (html: string, enabled: boolean) => {\n const queue = useRef(new SyncronQueue());\n const scriptsContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (enabled) {\n const template = document.createElement('div');\n template.innerHTML = html;\n const scriptsFromRawHtml = Array.from(template.getElementsByTagName('script'));\n\n // we need to create new elements so browser parses them\n const scriptElements = scriptsFromRawHtml.map((script) => createScriptElement(script));\n\n // all scripts dynamically added to the DOM are ALWAYS asynchronous\n // that means that inline scripts that wait for their external ones will fail when added instantly to DOM as they were not loaded yet\n // so resolve scripts in a queue in the order they were added in html string\n const promises = scriptElements.map((exScript) => () => {\n const promise = new Promise((resolve, reject) => {\n if (exScript.src) {\n // eslint-disable-next-line no-param-reassign\n exScript.onload = () => {\n resolve(`${exScript.src} loaded`);\n };\n\n // eslint-disable-next-line no-param-reassign\n exScript.onerror = reject;\n scriptsContainerRef.current?.append(exScript);\n } else {\n scriptsContainerRef.current?.append(exScript);\n resolve('inline script loaded');\n }\n });\n\n return promise;\n });\n\n promises.forEach((func) => queue.current.run(func));\n }\n }, [html, enabled]);\n\n return scriptsContainerRef;\n};\n\nexport default useHtmlScriptParser;\n","import type { RootState } from '../store/structureDefinitions/cartState';\n\nconst selectCurrentStep = (state: RootState) =>\n state.ui.cnc.stepTrail && !!state.ui.cnc.stepTrail.length\n ? state.ui.cnc.stepTrail[state.ui.cnc.stepTrail.length - 1]\n : null;\n\nconst selectPreviousStep = (state: RootState) =>\n state.ui.cnc.stepTrail && state.ui.cnc.stepTrail.length > 1\n ? state.ui.cnc.stepTrail[state.ui.cnc.stepTrail.length - 2]\n : null;\n\nconst selectStepNavigationParam = (state: RootState) => state.ui.cnc.currentStepNavigationParams;\n\nconst cncSelectors = {\n selectCurrentStep,\n selectPreviousStep,\n selectStepNavigationParam,\n};\n\nexport const uiSelectors = {\n cnc: cncSelectors,\n};\n","/* eslint-disable no-console */\nimport trackingFlow from '../../flow/trackingFlow';\nimport { failSilently } from '../utils/failSilently';\n\nconst trackRecipeClick = failSilently(\n (identifier: string) => {\n trackingFlow.recipeClick({ recipeId: identifier });\n },\n () => console.error('Failed to track recipe click'),\n);\n\nconst trackAddToCart = failSilently(\n (productData: ProductTrackingData[]) => trackingFlow.addToCart(productData),\n () => console.error('Failed to track addToCart'),\n);\n\nconst trackAddToCartBulk = failSilently(\n (productData: ProductTrackingData[]) => {\n trackingFlow.addToCart(productData);\n },\n () => console.error('Failed to track addToCartBulk'),\n);\n\nconst trackPurchase = failSilently(\n (purchaseData: PurchaseTrackingData) => {\n trackingFlow.purchase({\n orderId: purchaseData.transactionId,\n revenue: purchaseData.totalValue,\n products: purchaseData.cartItems.map((product) => ({\n productId: product.identifier,\n quantity: product.quantity,\n itemPrice: product.price / (product.quantity || 1),\n })),\n });\n },\n () => console.error('Failed to track purchase'),\n);\n\nconst trackRemoveFromCart = failSilently(\n (productData: ProductTrackingData) => {\n trackingFlow.removeFromCart(productData);\n },\n () => console.error('Failed to track removeFromCart'),\n);\n\nconst trackSlotClick = failSilently(\n (productId: string, slotId: string | undefined) => {\n if (slotId) {\n trackingFlow.slotClick({ productId, slotId });\n }\n },\n () => console.error('Failed to track slot click'),\n);\n\nconst trackCartItemQuantityUpdate = failSilently(\n (productData: ProductTrackingData) => {\n trackingFlow.addToCart([productData]);\n },\n () => console.error('Failed to track cart item quantity update'),\n);\n\nconst trackUserLogin = failSilently(\n () => {\n trackingFlow.login();\n },\n () => console.error('Failed to track user login'),\n);\n\nexport const personalizationTracking = {\n trackAddToCart,\n trackAddToCartBulk,\n trackSlotClick,\n trackRemoveFromCart,\n trackCartItemQuantityUpdate,\n trackPurchase,\n trackUserLogin,\n trackRecipeClick,\n};\n","import { failSilently } from '../../utils/failSilently';\nimport { sendGA4Event } from '../shared/sendGa4Event';\n\nconst addAddress = () => {\n const event: UserProfileEvent = {\n event: 'user_profile',\n type: 'add adress',\n event_key: 'user_profile_add',\n };\n\n sendGA4Event(event);\n};\n\nconst editAddress = () => {\n const event: UserProfileEvent = {\n event: 'user_profile',\n type: 'edit adress',\n event_key: 'user_profile_edit',\n };\n\n sendGA4Event(event);\n};\n\nconst addContactInfo = () => {\n const event: UserProfileEvent = {\n event: 'user_profile',\n type: 'add contact info',\n event_key: 'user_profile_add',\n };\n\n sendGA4Event(event);\n};\n\nconst login = (method: LoginMethodEventType, status: LoginMethodStatus) => {\n const event: LoginEvent = {\n event: 'login',\n status,\n method,\n };\n\n sendGA4Event(event);\n};\n\nconst logout = () => {\n const event: LogoutEvent = {\n event: 'logout',\n };\n\n sendGA4Event(event);\n};\n\nconst signup = (\n type: SignupMethodEventType,\n customerType: SignupCustomerType,\n method: SignupMethodType,\n) => {\n const event: SignupEvent = {\n event: 'sign_up',\n type,\n customer_type: customerType,\n method,\n };\n\n sendGA4Event(event);\n};\n\nconst accountRemoved = () => {\n const event: AccountRemovedEvent = {\n event: 'remove_account',\n };\n\n sendGA4Event(event);\n};\n\nconst connectMembership = (\n status: ConnectMembershipStatusType,\n method: ConnectMembershipMethodEventType,\n) => {\n const event: ConnectMembershipEvent = {\n event: 'connect_membership',\n status,\n method,\n };\n\n sendGA4Event(event);\n};\n\nconst accountSettingsInteraction = (clickText: string) => {\n const event: AccountSettingsInteractionEvent = {\n event: 'interaction',\n click_text: clickText,\n page_type: 'account settings',\n };\n sendGA4Event(event);\n};\n\nexport default {\n address: {\n add: failSilently(addAddress),\n edit: failSilently(editAddress),\n },\n contactInfo: {\n add: failSilently(addContactInfo),\n },\n login: failSilently(login),\n logout: failSilently(logout),\n signup: failSilently(signup),\n accountRemoved: failSilently(accountRemoved),\n connectMembership: failSilently(connectMembership),\n navigation: {\n accountSettingsInteraction: failSilently(accountSettingsInteraction),\n },\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\n\nexport const calculateRowFromIndex = (index: number, elementsInRow: number) => {\n const row = Math.trunc(index / elementsInRow);\n const rowPosition = index % elementsInRow;\n\n return {\n row,\n rowPosition,\n };\n};\n\nexport interface ItemGridProps<TItem> {\n cellsInRow: number;\n styles?: React.CSSProperties;\n gridClasses?: string;\n itemClasses?: string;\n noDefaultClasses?: boolean;\n items?: TItem[];\n renderItem: (item: TItem, index: number) => React.ReactNode;\n itemUniqueKey: (item: TItem, index: number) => string;\n renderAtRowStart?: (row: number) => React.ReactNode;\n renderAtRowEnd?: (row: number) => React.ReactNode;\n renderLast?: () => React.ReactNode;\n ariaLabel?: string;\n}\n\nconst ItemGrid = <T,>(props: ItemGridProps<T>, ref?: React.Ref<HTMLUListElement>) => {\n if (!props.items) {\n return null;\n }\n\n return (\n // Voiceover needs explicit role for ul elements, otherwise it might not treat it as a list landmark when list-style: none is used in CSS\n // eslint-disable-next-line jsx-a11y/no-redundant-roles\n <ul\n ref={ref}\n role=\"list\"\n aria-label={props.ariaLabel}\n className={classNames('Grid Grid-items', props.gridClasses)}\n style={props.styles}\n >\n {props.items.map((item, index, array) => (\n // eslint-disable-next-line react/no-array-index-key\n <React.Fragment key={props.itemUniqueKey(item, index)}>\n {index % props.cellsInRow === 0 &&\n props.renderAtRowStart &&\n props.renderAtRowStart(calculateRowFromIndex(index, props.cellsInRow).row)}\n <li\n className={classNames(\n 'Grid-cell',\n props.noDefaultClasses ? null : `u-size1of${props.cellsInRow}`,\n props.itemClasses,\n )}\n >\n {props.renderItem(item, index)}\n </li>\n\n {((index + 1) % props.cellsInRow === 0 || index === array.length - 1) && // append block after full row end OR after last item in a partially empty row\n props.renderAtRowEnd &&\n props.renderAtRowEnd(calculateRowFromIndex(index, props.cellsInRow).row)}\n </React.Fragment>\n ))}\n {props.renderLast && props.renderLast()}\n </ul>\n );\n};\n\nexport default React.forwardRef(ItemGrid);\n","import type { FC } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\n\ninterface IRouterContext {}\n\nconst RouterContext = createContext<IRouterContext | null>(null);\n\nconst useRouterContext = () => {\n const routerContext = useContext(RouterContext);\n return routerContext;\n};\n\ninterface RouterContextProviderProps {}\n\nconst RouterContextProvider: FC<React.PropsWithChildren<RouterContextProviderProps>> = ({\n children,\n}) => {\n const contextValue = useMemo(() => ({}), []);\n\n return <RouterContext.Provider value={contextValue}>{children}</RouterContext.Provider>;\n};\n\nexport { RouterContextProvider, useRouterContext };\n","import { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useRouterContext } from '../contexts/useRouterContext';\n\ntype Path = string;\n\nexport interface AppHistoryState {\n noScroll?: boolean;\n}\n\ninterface RouteState {\n state?: AppHistoryState;\n search?: string;\n}\n\nconst isPath = (arg: Path | RouteState): arg is Path => {\n return typeof arg === 'string';\n};\n\nconst useReactRouting = () => {\n const navigate = useNavigate();\n const routerContext = useRouterContext();\n const isReactRouted = routerContext !== null;\n\n const pushPath = useCallback(\n (path: string, isRedirect: boolean = false) => {\n if (!path.startsWith('/')) {\n window.location.href = path;\n return;\n }\n\n if (isRedirect) {\n window.location.href = path;\n return;\n }\n\n if (!isReactRouted) {\n window.location.href = path;\n return;\n }\n\n navigate(path);\n },\n [isReactRouted, navigate],\n );\n\n const prepareLocation = useCallback(\n (location: RouteState) => {\n const newLocationState = { ...location };\n\n if (routerContext) {\n newLocationState.state = {\n ...location.state,\n };\n } else {\n newLocationState.state = {};\n }\n\n return newLocationState;\n },\n [routerContext],\n );\n\n const pushLocation = useCallback(\n (location: RouteState) => {\n const newLocation = prepareLocation(location);\n navigate(newLocation);\n },\n [navigate, prepareLocation],\n );\n\n const push = useCallback(\n (path: Path | RouteState, isRedirect: boolean = false) => {\n if (isPath(path)) {\n pushPath(path, isRedirect);\n return;\n }\n\n pushLocation(path);\n },\n [pushLocation, pushPath],\n );\n\n const replace = useCallback(\n (location: Path | RouteState) => {\n if (isPath(location)) {\n navigate(location);\n return;\n }\n\n const newLocation = prepareLocation(location);\n navigate(newLocation);\n },\n [navigate, prepareLocation],\n );\n\n const goBack = useCallback(() => {\n navigate(-1);\n }, [navigate]);\n\n return {\n push,\n pushLocation,\n replace,\n goBack,\n };\n};\n\nexport default useReactRouting;\n","/* eslint-disable react/jsx-props-no-spreading */\n\n'use client';\n\nimport type * as React from 'react';\nimport { useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport type { CSSTransitionProps } from 'react-transition-group/CSSTransition';\n\nimport Badge from './Badge';\nimport styles from './Badge.module.scss';\nimport type { BadgeProps } from './Badge.types';\n\nconst AnimatedBadge = (\n props: React.PropsWithChildren<BadgeProps> & {\n animationProps: CSSTransitionProps;\n },\n) => {\n const isUpdatingAndActive = [styles['is-updating'], styles['is-active']].join(' ');\n const isActive = styles['is-active'];\n\n const transitionRef = useRef(null);\n\n const { key, ...animProps } = props.animationProps;\n\n return (\n <CSSTransition\n nodeRef={transitionRef}\n key={key}\n timeout={0}\n {...animProps}\n classNames={{\n appear: isUpdatingAndActive,\n appearActive: isUpdatingAndActive,\n appearDone: isActive,\n enter: isUpdatingAndActive,\n enterActive: isUpdatingAndActive,\n enterDone: isActive,\n }}\n >\n <Badge ref={transitionRef} {...props} className={styles['Badge--animated']} />\n </CSSTransition>\n );\n};\n\nexport default AnimatedBadge;\n","/* eslint-disable react/jsx-props-no-spreading */\n\nimport * as React from 'react';\n\nimport { Icon } from '../Icon';\nimport type { BadgeProps } from './Badge.types';\nimport { getBadgeClasses } from './Badge.utils';\n\nconst Badge = React.forwardRef<HTMLDivElement, React.PropsWithChildren<BadgeProps>>(\n (props, ref) => {\n const classes = getBadgeClasses(props);\n\n return (\n <div\n ref={ref}\n className={classes}\n style={{\n top: props.top,\n right: props.right,\n bottom: props.bottom,\n left: props.left,\n transform: [\n props.offsetX !== undefined && `translateX(${props.offsetX})`,\n props.offsetY !== undefined && `translateY(${props.offsetY})`,\n ]\n .filter(Boolean)\n .join(' '),\n }}\n >\n {props.leftIcon && (\n <Icon icon={props.leftIcon} aria-hidden style={{ marginRight: 4 }} />\n )}\n {props.children}\n </div>\n );\n },\n);\n\nexport default Badge;\n","import classNames from 'classnames';\n\nimport styles from './Badge.module.scss';\nimport type { BadgeColor, BadgeProps, BadgeSize } from './Badge.types';\n\nexport const getBadgeClasses = (props: BadgeProps): string => {\n return classNames(\n props.className,\n styles.Badge,\n props.wide ? styles['Badge-wide'] : '',\n getSizeClass(props.size),\n getColorClass(props.color),\n );\n};\n\nconst getSizeClass = (size: BadgeSize): string => {\n switch (size) {\n case 'xsmall':\n return styles['Badge--xsmall'];\n case 'small':\n return styles['Badge--small'];\n case 'medium':\n default:\n return styles['Badge--medium'];\n }\n};\n\nconst getColorClass = (color: BadgeColor): string => {\n switch (color) {\n case 'white':\n return styles['Badge--white'];\n case 'ctaGreen':\n return styles['Badge--ctaGreen'];\n case 'greenLight2':\n return styles['Badge--greenLight2'];\n default:\n return styles['Badge--ctaGreen'];\n }\n};\n","import classNames from 'classnames';\nimport type * as React from 'react';\n\nimport styles from './Badge.module.scss';\n\nconst BadgePositioning = (props: React.PropsWithChildren<{ className?: string }>) => {\n return (\n <div className={classNames(props.className, styles.BadgePositioning)}>{props.children}</div>\n );\n};\n\nexport default BadgePositioning;\n","'use client';\n\n/* eslint-disable react/jsx-props-no-spreading */\nimport { AccessibleIcon as RadixAccessibleIcon } from '@radix-ui/react-accessible-icon';\nimport type { ComponentProps } from 'react';\n\nimport Icon from './Icon';\n\nconst AccessibleIcon = (props: ComponentProps<typeof Icon> & { label: string }) => {\n const { label, ...iconProps } = props;\n return (\n <RadixAccessibleIcon label={label}>\n <Icon {...iconProps} />\n </RadixAccessibleIcon>\n );\n};\n\nexport default AccessibleIcon;\n"],"names":["useNavigationTracking","currentStep","cnc","selectCurrentStep","sendGaGoBackTrackingEvent","useCallback","header","navigationGoBack","sendGaCloseTrackingEvent","navigationClose","sanitizer","sanitize","html","renderWrapper","sanitizeOptions","className","parseScripts","scriptsContainerRef","useHtmlScriptParser","dangerouslySetInnerHTML","__html","toString","style","display","ref","dispatchSetTo","arg","dispatch","getState","hasActiveStoreSelection","setTo","step","param","PostalCodeSelector","useCncFlyInState","reloadOnClose","state","ui","previewPostalCode","navigationParams","currentStepNavigationParams","isOpen","close","CncFlyIn","afterClose","removeUnsyncedCartItems","window","location","reload","navigateTo","args","Map","dispatchNavigateTo","initCnc","MiniCart","forceReloadOnClose","enabled","queue","useRef","useEffect","template","document","createElement","innerHTML","Array","from","getElementsByTagName","map","script","scriptElement","setAttribute","attributes","forEach","attr","name","value","append","createScriptElement","exScript","Promise","resolve","reject","src","onload","onerror","current","func","run","uiSelectors","stepTrail","length","selectPreviousStep","selectStepNavigationParam","trackRecipeClick","identifier","recipeClick","recipeId","console","error","trackAddToCart","productData","addToCart","trackAddToCartBulk","trackPurchase","purchaseData","purchase","orderId","transactionId","revenue","totalValue","products","cartItems","product","productId","quantity","itemPrice","price","trackRemoveFromCart","removeFromCart","personalizationTracking","trackSlotClick","slotId","slotClick","trackCartItemQuantityUpdate","trackUserLogin","login","address","add","failSilently","event","type","event_key","edit","contactInfo","method","status","logout","signup","customerType","customer_type","accountRemoved","connectMembership","navigation","accountSettingsInteraction","clickText","click_text","page_type","calculateRowFromIndex","index","elementsInRow","row","Math","trunc","rowPosition","props","items","role","ariaLabel","gridClasses","styles","item","array","cellsInRow","renderAtRowStart","noDefaultClasses","itemClasses","renderItem","renderAtRowEnd","itemUniqueKey","renderLast","RouterContext","createContext","useRouterContext","useContext","RouterContextProvider","children","contextValue","useMemo","Provider","isPath","navigate","routerContext","isReactRouted","pushPath","path","isRedirect","startsWith","href","prepareLocation","newLocationState","pushLocation","newLocation","push","replace","goBack","isUpdatingAndActive","join","isActive","transitionRef","animationProps","key","animProps","nodeRef","timeout","classNames","appear","appearActive","appearDone","enter","enterActive","enterDone","Badge","classes","top","right","bottom","left","transform","undefined","offsetX","offsetY","filter","Boolean","leftIcon","icon","marginRight","getBadgeClasses","wide","getSizeClass","size","getColorClass","color","BadgePositioning","label","iconProps"],"sourceRoot":""}