{"version":3,"file":"coopse.script.7330.1c66e734.chunk.js","mappings":"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","sources":["webpack:///../../packages/icons/src/coopLogos/coop.svg","webpack:///../../packages/icons/src/stroke2/heart-filled.svg","webpack:///../../packages/icons/src/stroke2/heart.svg","webpack:///../../packages/icons/src/stroke2/home.svg","webpack:///./src/microApps/common/components/ButtonEpiLink/ButtonEpiLink.tsx","webpack:///./src/microApps/common/components/atoms/PageHead/PageHead.tsx","webpack:///./src/microApps/common/components/molecules/EmphasizedButton/EmphasizedButton.tsx","webpack:///./src/microApps/common/components/molecules/EmphasizedButton/EmphasizedButton.module.less","webpack:///./src/microApps/common/components/molecules/PageProperties/PageProperties.utils.ts","webpack:///./src/microApps/common/components/molecules/PageProperties/PageProperties.hooks.ts","webpack:///./src/microApps/common/components/molecules/PageProperties/PageProperties.tsx","webpack:///./src/microApps/myCoop/emailSubscriptions/api/consentSubscriptionsApi.ts","webpack:///./src/microApps/common/flow/consentAdobeSubscriptionFlow.ts","webpack:///./src/microApps/common/api/clients/directKimProxyAxiosClient.ts","webpack:///./src/microApps/common/api/finance/consentErrorInterceptor.ts","webpack:///./src/microApps/common/flow/kimProxyFlow.ts","webpack:///./src/microApps/common/api/finance/kimProxyApi.ts","webpack:///./src/microApps/common/hooks/useDocumentHeadIsPreparedForReactHelmet.ts","webpack:///./src/microApps/common/hooks/useQuerySearchParams.ts","webpack:///./src/microApps/common/hooks/useSavedInRef.ts","webpack:///./src/microApps/common/hooks/useSwiperOverflowClasses.ts","webpack:///./src/microApps/common/utils/metaUtils.ts","webpack:///./src/microApps/ecommerce/hooks/useGroupedProductsBlockState.ts","webpack:///./src/microApps/ecommerce/hooks/useProductTeaserContainer.ts","webpack:///./src/microApps/episerver/api/contentApiClient.ts","webpack:///./src/microApps/episerver/api/contentDeliveryApi.ts","webpack:///./src/microApps/episerver/components/base/EpiContentArea.tsx","webpack:///./src/microApps/episerver/components/blocks/EpiButtonLinkPropertyBlock/epiButtonLinkPropertyBlock.utils.ts","webpack:///./src/microApps/episerver/components/blocks/EpiButtonPropertyBlock/EpiButtonPropertyBlock.utils.ts","webpack:///./src/microApps/episerver/components/blocks/EpiHeadingPropertyBlock/EpiHeadingPropertyBlock.utils.ts","webpack:///./src/microApps/episerver/components/blocks/EpiImagePropertyBlock/epiImagePropertyBlock.utils.ts","webpack:///./src/microApps/episerver/components/blocks/EpiImageTextPropertyBlock/EpiImageTextPropertyBlock.utils.tsx","webpack:///./src/microApps/episerver/components/hooks/useCurrentEpiPage.ts","webpack:///./src/microApps/common/components/molecules/ItemGridWithGrouping/ItemGridWithGrouping.tsx","webpack:///./src/microApps/common/components/molecules/ItemGridWithGrouping/InGridItemsBlock.tsx","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/GroupedStoreOffersBlock.tsx","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/blocks/StoreOffersListBlock.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/CateringDoubleImageTextBlock/CateringDoubleImageTextBlock.tsx","webpack:///./src/microApps/myCoop/consentSubscriptions/components/WeeklyNewsletterSubscription/WeeklyNewsletterSubscription.module.less","webpack:///./src/microApps/myCoop/consentSubscriptions/components/WeeklyNewsletterSubscription/WeeklyNewsletterSubscription.tsx","webpack:///./src/microApps/storeAndOffers/api/drApi.ts","webpack:///./src/microApps/storeAndOffers/api/directDrAxiosClient.ts","webpack:///./src/microApps/storeAndOffers/hooks/useDrFlyerQuery.ts","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/DrAndNewsFlyer/DrAndNewsFlyer.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/DrAndNewsFlyer/DrAndNewsFlyer.module.less","webpack:///./src/microApps/myCoop/emailSubscriptions/components/WeeklyNewsletterSubscription.tsx","webpack:///./src/microApps/myCoop/emailSubscriptions/components/WeeklyNewsletterSubscription.module.less","webpack:///./src/microApps/myCoop/emailSubscriptions/hooks/useWeeklyNewsletterSubscriptionState.ts","webpack:///./src/microApps/myCoop/emailSubscriptions/hooks/useSubscribe.ts","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/DrAndNewsFlyerAdobe/DrAndNewsFlyerAdobe.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/DrAndNewsFlyerAdobe/DrAndNewsFlyerAdobe.module.less","webpack:///../../packages/icons/src/logos/facebook.color.svg","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/FacebookNewsFeed/FacebookNewsFeed.module.less","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/FacebookNewsFeed/FacebookNewsFeed.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/FacebookContainer/FacebookContainer.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/FindStoreButton.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/DropdownFullWidth.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/DropdownFullWidth.module.less","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/StoreFavoritesDropdownTrigger.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/StoreFavoritesDropdownTrigger.module.less","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/StoreFavoritesDropdownContent.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreFavoritesDropdownContent/StoreFavoritesDropdownContent.module.less","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/StoreInformation.module.less","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/Contact.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/FindStore.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/InStore.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/OpenHoursDetail.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/StoreInformationModal.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/ToggleFavoriteStoreButton.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/ToggleFavoriteStoreButton.module.scss","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StoreInformation/StoreInformation.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/components/StorePageHeader/StorePageHeader.tsx","webpack:///./src/microApps/storeAndOffers/pages/StorePage/StorePage.tsx","webpack:///./src/microApps/storeAndOffers/hooks/useStoreByIdQuery.ts","webpack:///./src/microApps/storeAndOffers/hooks/useStoreSettingsPageQuery.ts","webpack:///./src/microApps/storeAndOffers/hooks/useStoreConceptPageQuery.ts","webpack:///./src/microApps/storeAndOffers/hooks/useDkeOffersQuery.ts","webpack:///./src/microApps/storeAndOffers/pages/StorePage/StorePage.module.less","webpack:///./src/microApps/episerver/components/pages/EpiStorePage/EpiStorePage.tsx","webpack:///./src/microApps/member/consts.ts","webpack:///./src/microApps/member/hooks/useKimCustomerDataQuery.ts","webpack:///./src/microApps/member/memberQueries.ts","webpack:///./src/microApps/myCoop/consentSubscriptions/components/SubscriptionSwitch/SubscriptionSwitch.hooks.ts","webpack:///./src/microApps/myCoop/consentSubscriptions/hooks/useConsentQuery.ts","webpack:///./src/microApps/myCoop/emailSubscriptions/hooks/useEmailSubscriptionQuery.ts","webpack:///./src/microApps/myCoop/myCoopQueries.ts","webpack:///../../packages/components/src/Accordion/Accordion.module.scss","webpack:///../../packages/components/src/Accordion/Accordion.tsx","webpack:///../../packages/components/src/Button/IconButton.tsx","webpack:///../../packages/components/src/Checkbox/Checkbox.tsx","webpack:///../../packages/components/src/Checkbox/Checkbox.module.scss","webpack:///../../packages/components/src/Icon/AccessibleIcon.tsx","webpack:///../../packages/components/src/TextField/TextField.module.scss","webpack:///../../packages/components/src/TextField/TextField.tsx","webpack:///../../packages/components/src/TextInput/TextInput.tsx","webpack:///../../packages/utils/src/splitCustomObjectFromIntersection.ts"],"sourcesContent":["var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCoop = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 183 64\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Variant=Coop Green\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"layer\",\n d: \"M156.933 43.5162C149.832 43.5162 146.951 38.1727 146.951 32.2355C146.951 26.1994 149.881 20.8559 156.933 20.8559C164.035 20.8559 166.915 26.1994 166.915 32.2355C166.965 38.1727 164.035 43.5162 156.933 43.5162V43.5162ZM107.966 43.5162C100.864 43.5162 97.984 38.1727 97.984 32.2355C97.984 26.1994 100.914 20.8559 107.966 20.8559C115.068 20.8559 117.948 26.1994 117.948 32.2355C117.948 38.1727 115.068 43.5162 107.966 43.5162ZM61.7304 43.5162C54.6287 43.5162 51.7483 38.1727 51.7483 32.2355C51.7483 26.1994 54.6287 20.8559 61.7304 20.8559C68.8322 20.8559 71.7126 26.1994 71.7126 32.2355C71.7126 38.1727 68.8322 43.5162 61.7304 43.5162ZM156.933 11.0596C145.312 11.0596 135.876 15.9083 132.45 24.5667C129.023 15.9083 119.587 11.0596 107.966 11.0596C97.6364 11.0596 89.0448 14.8693 84.8235 21.796C80.6518 14.9187 72.0602 11.0596 61.7304 11.0596C47.0303 11.0596 35.8066 18.8274 35.8066 32.1861C35.8066 35.5505 36.5019 38.5685 37.8428 41.1908C37.6938 41.2403 37.4951 41.3392 37.3462 41.3887C36.7005 41.6361 35.9556 41.8835 35.161 42.1308C33.1249 42.6751 30.8404 42.972 28.5559 42.972C21.9011 42.972 15.892 38.8159 15.892 32.384C15.892 25.4078 21.0072 21.2517 27.662 21.2517C30.1948 21.3012 32.1813 21.4496 34.1678 22.1423C34.1678 22.1423 36.4522 17.1452 40.3259 14.2755C39.581 13.9292 38.7864 13.5829 37.9918 13.2365C34.5154 11.7522 30.4431 11.0596 25.8741 11.0596C11.1741 11.0596 0 18.8274 0 32.1861C0 45.4953 11.1741 53.2631 25.8741 53.2631C29.7478 53.2631 34.0684 52.7188 37.7931 51.6798C39.1837 51.3335 42.4614 50.245 44.8452 48.8597C49.3148 51.7293 55.175 53.2631 61.7304 53.2631C72.0602 53.2631 80.6518 49.4534 84.8731 42.5267C89.0944 49.4039 97.686 53.2631 108.016 53.2631C118.346 53.2631 126.888 49.4534 131.109 42.5761V63.9995H146.902V51.8777C149.981 52.7683 153.358 53.2631 156.983 53.2631C171.683 53.2631 182.857 45.5447 182.857 32.1861C182.857 18.8274 171.633 11.0596 156.933 11.0596Z\"\n }))));\n};\nexport default SvgCoop;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHeartFilled = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 22C11.8 22 11.7 22 11.5 21.9C11.4 21.8 8 19.8 5.5 17.6C2.5 14.8 1 12 1 9.2C1 5.8 3.8 3 7.3 3C9.1 3 10.8 3.8 12 5.1C13.2 3.8 14.9 3 16.7 3C20.2 3 23 5.8 23 9.2C23 12.2 21.6 14.8 18.5 17.6C16 19.8 12.7 21.8 12.5 21.9C12.4 22 12.2 22 12 22Z\"\n })));\n};\nexport default SvgHeartFilled;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHeart = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 22C11.8 22 11.7 22 11.5 21.9C11.4 21.8 8 19.8 5.5 17.6C2.5 14.8 1 12 1 9.2C1 5.8 3.8 3 7.3 3C9.1 3 10.8 3.8 12 5.1C13.2 3.8 14.9 3 16.7 3C20.2 3 23 5.8 23 9.2C23 12.2 21.6 14.8 18.5 17.6C16 19.8 12.7 21.8 12.5 21.9C12.4 22 12.2 22 12 22ZM7.3 5C4.9 5 3 6.9 3 9.2C3 11.4 4.3 13.8 6.8 16.1C8.6 17.7 10.9 19.2 12 19.9C13 19.3 15.4 17.7 17.2 16.1C19.8 13.8 21 11.6 21 9.2C21 6.9 19.1 5 16.7 5C15.1 5 13.6 5.9 12.9 7.3C12.6 7.9 11.5 7.9 11.1 7.3C10.4 5.9 8.9 5 7.3 5Z\"\n })));\n};\nexport default SvgHeart;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHome = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.82896 3.10508C5.16774 2.42752 5.86027 1.99951 6.61781 1.99951H17.3817C18.1393 1.99951 18.8318 2.42752 19.1706 3.10508L22.1706 9.10508C22.7378 10.2395 22.1174 11.5449 20.9998 11.9039V20.9995C20.9998 21.5518 20.5521 21.9995 19.9998 21.9995H3.99978C3.4475 21.9995 2.99978 21.5518 2.99978 20.9995V11.9039C1.88217 11.5449 1.26173 10.2395 1.82896 9.10508L4.82896 3.10508ZM4.99978 11.9995V19.9995H6.99978V14.9995C6.99978 14.4472 7.4475 13.9995 7.99978 13.9995H15.9998C16.5521 13.9995 16.9998 14.4472 16.9998 14.9995V19.9995H18.9998V11.9995H4.99978ZM14.9998 19.9995V15.9995H12.9998V19.9995H14.9998ZM10.9998 19.9995V15.9995H8.99978V19.9995H10.9998ZM17.3817 3.99951H6.61782L3.61781 9.99951H20.3817L17.3817 3.99951Z\"\n })));\n};\nexport default SvgHome;","/* eslint-disable react/jsx-props-no-spreading */\nimport { Button } from '@coop/components';\nimport * as React from 'react';\n\n/**\n * A Button that navigates to an Epi page\n * Will eventually provide SPA navigation for CMS links\n */\nconst ButtonEpiLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<typeof Button> & {\n linkUrl: string | undefined;\n target?: '_self' | '_blank';\n }\n>((props, ref) => {\n const { linkUrl, target, ...buttonProps } = props;\n\n if (!linkUrl) {\n return null;\n }\n\n const anchorRel = target?.includes('blank') ? 'noopener noreferrer' : undefined;\n\n return (\n <Button {...buttonProps} asChild>\n <a ref={ref} href={linkUrl} target={props.target} rel={anchorRel}>\n {props.children}\n </a>\n </Button>\n );\n});\n\nexport default ButtonEpiLink;\n","import type { FC } from 'react';\nimport Helmet from 'react-helmet';\n\nimport { isProductionEnvironment } from '../../../../../utility/environments';\nimport useDocumentHeadIsPreparedForReactHelmet from '../../../hooks/useDocumentHeadIsPreparedForReactHelmet';\nimport { getCanonical, getNextPage, getPrevPage } from '../../../utils/metaUtils';\nimport type { PageHeadData, PageHeadPagination } from './PageHead.types';\n\ninterface PageHeadProps {\n data: PageHeadData;\n pagination?: PageHeadPagination;\n}\n\nconst PageHead: FC<React.PropsWithChildren<PageHeadProps>> = (props) => {\n const link = { ...props.data.link };\n const meta = { ...props.data.meta };\n\n if (link && link.canonical) {\n link.canonical = getCanonical({\n path: link.canonical,\n page: props.pagination?.currentPage,\n });\n }\n\n let hasPrevPage = false;\n let hasNextPage = false;\n\n if (props.pagination) {\n hasPrevPage = props.pagination.currentPage !== 1;\n if (props.pagination.totalItems) {\n hasNextPage =\n props.pagination.pageSize * props.pagination.currentPage <=\n props.pagination.totalItems;\n }\n }\n\n if (hasPrevPage && link && props.pagination) {\n link.prevPage = getPrevPage(props.pagination.currentPage);\n }\n\n if (hasNextPage && link && props.pagination) {\n link.nextPage = getNextPage(props.pagination.currentPage);\n }\n\n const linkData =\n link &&\n Object.entries(link).filter(\n (item) => item[1] !== '' && item[1] !== undefined && item[1] !== null,\n );\n\n const metaData =\n meta &&\n Object.entries(meta).filter(\n (item) => item[1] !== '' && item[1] !== undefined && item[1] !== null,\n );\n\n let options: Parameters<typeof useDocumentHeadIsPreparedForReactHelmet>[0] = {\n link: linkData?.map(([key]) => ({ property: 'rel', value: key })),\n };\n\n if (metaData) {\n options = {\n ...options,\n meta: metaData.map(([key]) => ({ property: 'name', value: key })),\n };\n }\n\n const isDocumentHeadReadyForReactHelmet = useDocumentHeadIsPreparedForReactHelmet(options);\n\n return (\n // eslint-disable-next-line react/jsx-no-useless-fragment\n <>\n {isDocumentHeadReadyForReactHelmet && (\n <Helmet>\n {props.data.title && (\n <title>\n {props.data.title +\n (!isProductionEnvironment ? ' - NOT FOR COMMERCIAL USE' : '')}\n </title>\n )}\n {metaData?.map(([property, value]) => (\n <meta key={property} name={property} content={value} />\n ))}\n\n {linkData?.map(([property, value]) => (\n <link key={property} rel={property} href={value} />\n ))}\n\n {props.children}\n </Helmet>\n )}\n </>\n );\n};\n\nexport default PageHead;\n","import { Button } from '@coop/components';\nimport type { ButtonProps } from '@coop/components/src/Button/Button.types';\n\nimport styles from './EmphasizedButton.module.less';\n\nconst EmphasizedButton = (props: ButtonProps) => {\n return (\n <Button\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n size={48}\n className={styles.EmphasizedButton}\n >\n {props.children}\n </Button>\n );\n};\n\nexport default EmphasizedButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"EmphasizedButton\":\"r2Q8CPVL\"};","const defaultQueryKeys = ['page'];\n\n/**\n * Filter current query string to only contain certain keys that are relevant for GA's virtual page view\n * @param queryString The complete query string of a location\n * @param keys List of allowed query string keys\n */\nexport const getFilteredQueryStringForVirtualPageView = (\n queryString: string,\n keys: string[] = [],\n) => {\n const triggerKeys = [...defaultQueryKeys, ...keys];\n\n const searchParams = new URLSearchParams(queryString);\n\n const filteredSearchParams = Array.from(searchParams.entries())\n .filter(([key]) => triggerKeys.includes(key))\n .reduce((acc, [key, value]) => {\n acc.set(key, value.toString());\n return acc;\n }, new URLSearchParams());\n\n return filteredSearchParams.toString();\n};\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { useSavedInRef } from '../../../hooks/useSavedInRef';\nimport { useAppDispatch } from '../../../hooks/useThunkDispatch';\nimport { currentPageActions } from '../../../store/slices/currentPage/currentPageSlice';\nimport { getFilteredQueryStringForVirtualPageView } from './PageProperties.utils';\n\ninterface GaVirtualPageParams {\n pageTitle: string;\n canonicalUrl?: string;\n pageTypeName?: string;\n /**\n * Used to specify what key must have been changed in URL's query string to trigger Virtual Page View\n * By defualt, pagination's \"page\" is always a trigger, rest of the triggers are set on page-to-page basis\n */\n queryStringTriggers?: string[];\n}\n\nexport const useGaVirtualPageView = (options?: GaVirtualPageParams) => {\n const { search } = useLocation();\n const dispatch = useAppDispatch();\n\n const canonicalUrl =\n options &&\n options.canonicalUrl &&\n new URL(options.canonicalUrl, window.location.origin).toString();\n\n // used only in dependency array to trigger effect\n const triggerString = getFilteredQueryStringForVirtualPageView(\n search,\n (options && options.queryStringTriggers) || [],\n );\n\n const enable = !!options;\n\n const sendEvent = useSavedInRef(() => {\n if (canonicalUrl) {\n dispatch(\n currentPageActions.setPageGaData({\n canonicalUrl,\n gaPageTypeName: options && options.pageTypeName,\n title: options && options.pageTitle,\n queryString: window.location.search,\n }),\n );\n }\n });\n\n useEffect(() => {\n if (enable && canonicalUrl) {\n sendEvent.current();\n }\n }, [dispatch, enable, canonicalUrl, triggerString, sendEvent]);\n\n return {\n sendEvent,\n };\n};\n","import { type FC, useEffect } from 'react';\n\nimport { useAppDispatch } from '../../../hooks/useThunkDispatch';\nimport { currentPageActions } from '../../../store/slices/currentPage/currentPageSlice';\nimport type { PageHeadData, PageHeadPagination } from '../../atoms/PageHead';\nimport PageHead from '../../atoms/PageHead';\nimport { useGaVirtualPageView } from './PageProperties.hooks';\n\ninterface PagePropertiesProps {\n headData: PageHeadData;\n headPagination?: PageHeadPagination;\n pageTypeNameForAnalytics?: string;\n\n /** @see useGaVirtualPageView comments */\n virtualPageViewQueryStringTriggers?: string[];\n}\n\nconst PageProperties: FC<React.PropsWithChildren<PagePropertiesProps>> = (props) => {\n useGaVirtualPageView({\n canonicalUrl: props.headData.link?.canonical,\n pageTitle: props.headData.title,\n pageTypeName: props.pageTypeNameForAnalytics,\n queryStringTriggers: props.virtualPageViewQueryStringTriggers,\n });\n\n const dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(currentPageActions.setTitle(props.headData.title));\n }, [dispatch, props.headData.title]);\n\n return <PageHead data={props.headData} pagination={props.headPagination} />;\n};\n\nexport default PageProperties;\n","import getDirectAdobeCampaignAxiosClient from '../../../common/api/clients/directAdobeCampaignAxiosClient';\nimport type { CustomErrorInterceptor } from '../../../common/api/clients/localApiAxiosErrorInterceptors';\nimport { createDefaultException } from '../../../common/exceptions/exceptionUtils';\nimport type { EmailSubscriptionResponse } from '../models';\n\nconst baseUrl = '/external/ac/offers';\n\ntype EmailSubscriptionApiException = {\n status: number;\n title: string;\n};\n\nconst emailSubscriptionErrorInterceptor: CustomErrorInterceptor<EmailSubscriptionApiException> = (\n error,\n) => {\n const exception = createDefaultException(\n error.response.data.title,\n error.response.data.status.toString(),\n );\n return exception;\n};\n\nconst getSubscriptions = async (\n token?: string,\n neoId?: string,\n): Promise<EmailSubscriptionResponse | null> => {\n const url = `${baseUrl}/subscriptions`;\n\n try {\n const response = await getDirectAdobeCampaignAxiosClient(token, neoId, [\n emailSubscriptionErrorInterceptor,\n ]).get(url);\n\n return response.data;\n } catch (error) {\n const err = error as { code?: string };\n if (err.code && err.code === '404') {\n return null;\n }\n\n throw error;\n }\n};\n\nconst subscribe = async (services: string[], token?: string, neoId?: string, email?: string) => {\n const url = `${baseUrl}/subscriptions/services`;\n\n const axiosClient = await getDirectAdobeCampaignAxiosClient(token, neoId);\n const data = {\n email,\n services,\n };\n await axiosClient.post<void>(url, data);\n};\n\nconst unsubscribe = async (services: string[], token?: string, neoId?: string) => {\n const url = `${baseUrl}/subscriptions/services`;\n\n const axiosClient = await getDirectAdobeCampaignAxiosClient(token, neoId);\n await axiosClient.delete<void>(url, { data: services });\n};\n\nconst consentSubscriptionsApi = {\n getSubscriptions,\n subscribe,\n unsubscribe,\n};\n\nexport default consentSubscriptionsApi;\n","import { appConfig } from '../../../appConfig';\nimport consentSubscriptionsApi from '../../myCoop/emailSubscriptions/api/consentSubscriptionsApi';\nimport { getAuthToken } from '../api/auth/getAuthToken';\nimport { getNeoId } from '../utils/neoIdUtils';\n\nconst getSubscriptions = async (preferNeoId?: boolean) => {\n const neoId = (preferNeoId && getNeoId()) || undefined;\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n const response = await consentSubscriptionsApi.getSubscriptions(token, neoId);\n return response;\n};\n\nconst subscribe = async (services: string[], preferNeoId?: boolean, email?: string) => {\n const neoId = (preferNeoId && getNeoId()) || undefined;\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n const response = consentSubscriptionsApi.subscribe(services, token, neoId, email);\n return response;\n};\n\nconst unsubscribe = async (services: string[], preferNeoId?: boolean) => {\n const neoId = (preferNeoId && getNeoId()) || undefined;\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n const response = consentSubscriptionsApi.unsubscribe(services, token, neoId);\n return response;\n};\n\nexport const consentAdobeSubscriptionFlow = {\n getSubscriptions,\n subscribe,\n unsubscribe,\n};\n","import type { AxiosInstance } from 'axios';\n\nimport { appConfig } from '../../../../appConfig';\nimport axiosClientFactory from './clientFactory';\nimport type { CustomErrorInterceptor } from './localApiAxiosErrorInterceptors';\n\nconst getDirectKimProxyAxiosClient = <TApiError = unknown>(\n accessToken?: string,\n neoId?: string,\n errorInterceptors?: CustomErrorInterceptor<TApiError>[],\n): AxiosInstance => {\n const directKimProxyAxiosClient = axiosClientFactory.createDirectApiClient(\n {\n baseURL: appConfig.coopSettings.serviceAccess.kimProxyApiUrl,\n headers: {\n Accept: 'application/json',\n 'Ocp-Apim-Trace': 'true',\n 'Ocp-Apim-Subscription-Key':\n appConfig.coopSettings.serviceAccess.kimProxyApiSubscriptionKey,\n Authorization: neoId ? `adobe ${btoa(neoId)}` : `Bearer ${accessToken}`,\n },\n params: {\n 'api-version': appConfig.coopSettings.serviceAccess.kimProxyApiVersion,\n },\n },\n errorInterceptors,\n );\n\n return directKimProxyAxiosClient;\n};\n\nexport default getDirectKimProxyAxiosClient;\n","import { createDefaultException } from '../../exceptions/exceptionUtils';\nimport type { CustomErrorInterceptor } from '../clients/localApiAxiosErrorInterceptors';\n\ntype ConsentApiException = {\n code: '404';\n details: string;\n status: number;\n title: string;\n};\n\nconst consentErrorInterceptor: CustomErrorInterceptor<ConsentApiException> = (error) => {\n const exception = createDefaultException(\n error.response.data.details,\n error.response.data.status.toString(),\n );\n return exception;\n};\n\nexport default consentErrorInterceptor;\n","import { appConfig } from '../../../appConfig';\nimport { getAuthToken } from '../api/auth/getAuthToken';\nimport { kimProxyDirectApi } from '../api/finance/kimProxyApi';\n\nconst kimProxyFlow = {\n getCustomerData: async () => {\n const identity = await getAuthToken();\n const details = await kimProxyDirectApi.getCustomerData(identity.token);\n return details;\n },\n getCustomerDataFull: async () => {\n const identity = await getAuthToken();\n const details = await kimProxyDirectApi.getCustomerDataFull(identity.token);\n return details;\n },\n deleteCustomerDataCache: async () => {\n const identity = await getAuthToken();\n await kimProxyDirectApi.deleteCustomerDataCache(identity.token);\n },\n changeEmail: async (email: string) => {\n const identity = await getAuthToken();\n await kimProxyDirectApi.changeEmail(identity.token, email);\n return true;\n },\n getConsents: async (neoId?: string) => {\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n try {\n const details = await kimProxyDirectApi.getConsents(token, neoId);\n return details;\n } catch (error) {\n const err = error as { code?: string };\n if (err.code && err.code === '404') {\n // If there is no user found, return empty array\n return [];\n }\n\n throw error;\n }\n },\n subscribeConsents: async (services: string[], neoId?: string) => {\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n const response = kimProxyDirectApi.subscribeConsents(services, token, neoId);\n return response;\n },\n unsubscribeConsent: async (service: string, neoId?: string) => {\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n const response = kimProxyDirectApi.unsubscribeConsent(service, token, neoId);\n return response;\n },\n};\n\nexport default kimProxyFlow;\n","import type { Consent } from '../../models/kimProxy/consentData';\nimport type { CustomerData, CustomerDataMinimized } from '../../models/kimProxy/customerData';\nimport getDirectKimProxyAxiosClient from '../clients/directKimProxyAxiosClient';\nimport consentErrorInterceptor from './consentErrorInterceptor';\n\nexport const kimProxyDirectApi = {\n getCustomerData: async (token: string): Promise<CustomerDataMinimized> => {\n const kimCustomerDataUrl = '/customer/data/me/';\n\n const response =\n await getDirectKimProxyAxiosClient(token).get<CustomerDataMinimized>(\n kimCustomerDataUrl,\n );\n\n const resp = response.data;\n return resp;\n },\n getCustomerDataFull: async (token: string): Promise<CustomerData> => {\n const kimCustomerDataUrl = '/customer/data/me/';\n\n const response =\n await getDirectKimProxyAxiosClient(token).get<CustomerData>(kimCustomerDataUrl);\n\n const resp = response.data;\n return resp;\n },\n deleteCustomerDataCache: async (token: string) => {\n const kimCustomerDataClearCacheUrl = '/customer/data/me/cache';\n\n await getDirectKimProxyAxiosClient(token).delete<boolean>(kimCustomerDataClearCacheUrl);\n },\n changeEmail: async (token: string, email: string) => {\n const kimCustomerEmailUrl = '/customer/change-email';\n await getDirectKimProxyAxiosClient(token).post(kimCustomerEmailUrl, {\n email,\n });\n },\n getConsents: async (token?: string, neoId?: string): Promise<Consent[]> => {\n const response = await getDirectKimProxyAxiosClient(token, neoId, [\n consentErrorInterceptor,\n ]).get<Consent[]>('/consent');\n\n const resp = response.data;\n return resp;\n },\n subscribeConsents: async (serviceIds: string[], token?: string, neoId?: string) => {\n const response = await getDirectKimProxyAxiosClient(token, neoId).put('/consent/selected', {\n identifiers: serviceIds,\n });\n\n const resp = response.data;\n return resp;\n },\n unsubscribeConsent: async (serviceId: string, token?: string, neoId?: string) => {\n const response = await getDirectKimProxyAxiosClient(token, neoId).delete('/consent', {\n data: {\n id: serviceId,\n },\n });\n\n const resp = response.data;\n return resp;\n },\n};\n","import { useEffect, useState } from 'react';\n\ninterface ElementsToUpdate {\n [tag: string]: { property: string; value: string }[];\n}\n\n/**\n * React helmet only handles elements inside the head tag that contain data-react-helmet=\"true\"\n */\nconst useDocumentHeadIsPreparedForReactHelmet = (elementsToUpdateByTag: ElementsToUpdate) => {\n const [readyForReactHelmet, setReadyForReactHelmet] = useState(false);\n\n const stringifiedElements = JSON.stringify(elementsToUpdateByTag);\n\n useEffect(() => {\n const parsedElementsToUpdateByTag = JSON.parse(stringifiedElements) as ElementsToUpdate;\n if (parsedElementsToUpdateByTag) {\n const childrenOfHead = Array.from(document.getElementsByTagName('head')[0].children);\n\n childrenOfHead.forEach((child) => {\n const tagName = child?.tagName?.toLowerCase();\n\n parsedElementsToUpdateByTag[tagName]?.forEach((tagEl) => {\n if (child.getAttribute(tagEl.property) === tagEl.value) {\n child.setAttribute('data-react-helmet', 'true');\n }\n });\n });\n\n setReadyForReactHelmet(true);\n }\n }, [stringifiedElements]);\n\n return readyForReactHelmet;\n};\n\nexport default useDocumentHeadIsPreparedForReactHelmet;\n","import { useCallback } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport useReactRouting from '../../ecommerce/hooks/useReactRouting';\n\nexport const useQuerySearchParams = () => {\n return new URLSearchParams(useLocation().search);\n};\n\ntype QueryHistoryAction = 'push' | 'replace';\n\nexport const useQuerySearchParam = <TDefaultValue = null>(\n key: string,\n defaultValue: TDefaultValue,\n) => {\n const location = useLocation();\n const query = new URLSearchParams(location.search).get(key) || defaultValue;\n\n const { pushLocation, replace } = useReactRouting();\n\n const updateUrl = useCallback(\n (newVal: string | null, historyAction: QueryHistoryAction = 'push') => {\n const q = new URLSearchParams(location.search);\n\n if (newVal?.trim()) {\n q.set(key, newVal);\n } else {\n q.delete(key);\n }\n\n const newHistoryLocation = {\n search: q?.toString(),\n };\n\n if (historyAction === 'push') {\n pushLocation(newHistoryLocation);\n return;\n }\n\n if (historyAction === 'replace') {\n replace(newHistoryLocation);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [location, key],\n );\n\n return [query, updateUrl] as const;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useSavedInRef = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useLayoutEffect(() => {\n ref.current = value;\n });\n\n return ref;\n};\n","import classNames from 'classnames';\n\nimport { useIsMobile } from '../components/atoms/ResponsiveBreakpoints';\nimport { useIsInsideModalContext } from '../contexts/siteContext';\n\nexport const useSwiperOverflowClasses = (params?: {\n constrainedX?: boolean;\n constrainedY?: boolean;\n}) => {\n const isInsideModal = useIsInsideModalContext();\n\n const swiperIsXConstrained = isInsideModal || params?.constrainedX;\n const swiperIsYConstrained = !!params?.constrainedY;\n\n const isMobile = useIsMobile();\n\n // shadow must be the same size as space between slides, to not have cut shadows\n const classes = classNames(\n 'swiper-overflow',\n swiperIsYConstrained && 'swiper-overflow--constrainedY',\n isMobile ? 'swiper-overflow20' : 'swiper-overflow10', // mobila has 20, to overflow until the edge of the screen - 20 is the main content's padding\n swiperIsXConstrained && 'swiper-overflow--constrainedX',\n );\n\n return {\n spaceBetween: 10,\n mainSwiperClasses: classes,\n };\n};\n","import { addQueryParamsToUrl } from './urlUtils';\n\nexport const getRobotsContent = (noIndex?: boolean, noFollow?: boolean) => {\n if (noIndex && noFollow) {\n return 'NOINDEX,NOFOLLOW';\n }\n\n if (noIndex) {\n return 'NOINDEX';\n }\n\n if (noFollow) {\n return 'NOFOLLOW';\n }\n\n return undefined;\n};\n\nexport const getCanonical = ({ path, page }: { path: string; page?: number }) => {\n const url = new URL(path, window.location.origin).toString();\n\n return Number.isInteger(page) && page !== 1\n ? addQueryParamsToUrl(url, { page: String(page) })\n : url;\n};\n\nexport const getNextPage = (currentPage: number) => {\n const searchParams = new URLSearchParams();\n searchParams.set('page', (currentPage + 1).toString());\n\n const newUrl = `${\n window.location.origin + window.location.pathname\n }?${searchParams.toString()}`;\n\n return newUrl;\n};\n\nexport const getPrevPage = (currentPage: number) => {\n const searchParams = new URLSearchParams();\n const prevPage = currentPage - 1;\n if (prevPage > 1) {\n searchParams.set('page', prevPage.toString());\n } else {\n searchParams.delete('page');\n }\n const stringifiedParams = searchParams.toString();\n\n const newUrl =\n window.location.origin +\n window.location.pathname +\n (stringifiedParams ? `?${searchParams.toString()}` : '');\n\n return newUrl;\n};\n","import type { Reducer } from 'react';\nimport { useCallback, useReducer } from 'react';\n\ninterface GroupedProductBlock {\n row: number;\n activeBlock: {\n toggledFromRowIndex: number;\n groupId: string;\n } | null;\n}\n\ninterface GroupedProductBlocksState extends Array<GroupedProductBlock> {}\n\ninterface SetGroupedProductBlocksPayload {\n type: 'set';\n payload: Array<GroupedProductBlock>;\n}\n\ninterface CloseGroupedProductBlocksPayload {\n type: 'close';\n payload: {\n row: number;\n };\n}\n\ninterface ToggleGroupedProductBlocksPayload {\n type: 'toggle';\n payload: {\n row: number;\n groupId: string;\n toggledFromRowIndex: number;\n };\n}\ntype GroupedProductsActions =\n | ToggleGroupedProductBlocksPayload\n | SetGroupedProductBlocksPayload\n | CloseGroupedProductBlocksPayload;\n\nconst isSameRow = (item: GroupedProductBlock, row: number) => item.row === row;\n\nconst isSameRowPosition = (item: GroupedProductBlock, rowPosition: number) =>\n item.activeBlock?.toggledFromRowIndex === rowPosition;\n\nconst isSameGroup = (item: GroupedProductBlock, groupId: string) =>\n item.activeBlock?.groupId === groupId;\n\nconst getNewActiveBlock = (\n existingBlock: GroupedProductBlock,\n toggledBlockPayload: {\n row: number;\n groupId: string;\n toggledFromRowIndex: number;\n },\n) => {\n const newActiveBlock = {\n groupId: toggledBlockPayload.groupId,\n toggledFromRowIndex: toggledBlockPayload.toggledFromRowIndex,\n };\n\n const sameRow = isSameRow(existingBlock, toggledBlockPayload.row);\n if (!sameRow) return existingBlock.activeBlock;\n\n const sameRowPosition = isSameRowPosition(\n existingBlock,\n toggledBlockPayload.toggledFromRowIndex,\n );\n if (!sameRowPosition) return newActiveBlock;\n\n const sameGroup = isSameGroup(existingBlock, toggledBlockPayload.groupId);\n if (sameGroup) return null; // this is in fact a 'close' action - so clicking on the same group button while its block is already open\n\n return newActiveBlock;\n};\n\nconst reducer = (state: GroupedProductBlocksState, action: GroupedProductsActions) => {\n switch (action.type) {\n case 'set': {\n return [...action.payload];\n }\n case 'close': {\n return state.map((item) => ({\n ...item,\n activeBlock: isSameRow(item, action.payload.row) ? null : item.activeBlock,\n }));\n }\n case 'toggle': {\n const newState = state.map<GroupedProductBlock>((item) => ({\n ...item,\n activeBlock: getNewActiveBlock(item, action.payload),\n }));\n\n return newState;\n }\n default: {\n return [...state];\n }\n }\n};\n\nexport const useGroupedProductsBlockState = () => {\n const [state, dispatch] = useReducer<\n Reducer<GroupedProductBlocksState, GroupedProductsActions>\n >(reducer, []);\n\n const closeBlock = useCallback((row: number) => {\n dispatch({ type: 'close', payload: { row } });\n }, []);\n\n const toggleBlock = useCallback((row: number, groupId: string, toggledFromRowIndex: number) => {\n dispatch({\n type: 'toggle',\n payload: { row, groupId, toggledFromRowIndex },\n });\n }, []);\n\n const isBlockExpanded = useCallback(\n (groupId: string) => {\n return !!state.find((item) => item.activeBlock?.groupId === groupId)?.activeBlock;\n },\n [state],\n );\n\n const setBlocks = useCallback((blocks: { row: number }[]) => {\n dispatch({ type: 'set', payload: blocks.map((b) => ({ ...b, activeBlock: null })) });\n }, []);\n\n const getBlock = useCallback(\n (row: number) => {\n const foundBlock = state.find((b) => b.row === row);\n return foundBlock;\n },\n [state],\n );\n\n return {\n toggleBlock,\n setBlocks,\n getBlock,\n closeBlock,\n isBlockExpanded,\n };\n};\n","import classnames from 'classnames';\nimport { useMemo } from 'react';\nimport type { SwiperOptions } from 'swiper/types';\n\nimport type { SwiperBreakpointsCollection } from '../../../utility/coopSwiperBreakpoints';\nimport { CoopSwiperBreakpoints } from '../../../utility/coopSwiperBreakpoints';\nimport { useSwiperOverflowClasses } from '../../common/hooks/useSwiperOverflowClasses';\nimport { useBreakpointsSidebar } from './useBreakpoints';\n\nconst getProductTeaserContainerBreakpointAreaName = (\n containerType: 'grid' | 'list',\n hasBanner: boolean = false,\n): keyof SwiperBreakpointsCollection => {\n if (containerType === 'grid') {\n return CoopSwiperBreakpoints.AREA_NEW_PRODUCT_GRID;\n }\n\n if (hasBanner) {\n return CoopSwiperBreakpoints.AREA_NEW_PRODUCT_LIST_WITH_BANNER;\n }\n\n return CoopSwiperBreakpoints.AREA_NEW_PRODUCT_LIST;\n};\n\nexport const useVerticalProductTeaserContainer = (\n containerType: 'list' | 'grid',\n hasBanner: boolean = false,\n) => {\n const gridAdditionalClasses = classnames('Grid--gutterAxsm');\n\n const breakpointAreaName = getProductTeaserContainerBreakpointAreaName(\n containerType,\n hasBanner,\n );\n\n const { cellsInRow, breakpoints } = useBreakpointsSidebar(breakpointAreaName);\n\n const { mainSwiperClasses, spaceBetween } = useSwiperOverflowClasses();\n\n const swiperOptions: SwiperOptions = useMemo(\n () => ({ breakpoints, spaceBetween }),\n [breakpoints, spaceBetween],\n );\n return {\n gridAdditionalClasses,\n swiperOptions,\n swiperMainClass: mainSwiperClasses,\n cellsInRow,\n };\n};\n","import type { AxiosInstance, AxiosRequestConfig } from 'axios';\n\nimport axiosClientFactory from '../../common/api/clients/clientFactory';\n\nconst getDirectContentApiClient = (config?: AxiosRequestConfig): AxiosInstance => {\n const directContentClient = axiosClientFactory.createLocalApiClient({\n headers: {\n 'Accept-Language': 'sv',\n 'Content-Api': true, // important, thats how content api knows it should use its own routing for friendly url\n ...config?.headers,\n },\n ...config,\n });\n\n return directContentClient;\n};\n\nexport default getDirectContentApiClient;\n","import { ensureTrailingSlash } from '../../common/utils/urlUtils';\nimport getDirectContentApiClient from './contentApiClient';\n\nconst baseUrl = '/api/episerver/v3.0/content/';\n\nexport interface ContentParams<T> {\n expand?: (keyof T | '*')[];\n select?: (keyof T)[];\n depth: number;\n}\n\nexport interface GetChildParams<T> {\n /** must end with slash / */\n url?: string;\n contentReferenceId?: string;\n expand?: (keyof T | '*')[];\n select?: (keyof T)[];\n}\n\nexport const mapContentParams = <T>(params: ContentParams<T>) => ({\n ...params,\n select: params?.select?.map((s) => encodeURIComponent(s.toString())).join(','),\n expand: params?.expand?.map((s) => encodeURIComponent(s.toString())).join(','),\n});\n\nconst getContentByUrl = async <T extends IContent>(\n url: string,\n params: ContentParams<T> = { depth: 1 },\n): Promise<T> => {\n const client = getDirectContentApiClient({\n baseURL: '', // dont add default /api here, as this endpoint needs to have URL relative to the origin\n });\n\n const urlPath = ensureTrailingSlash(url);\n\n const response = await client.get<T>(`${urlPath}extended`, {\n params: mapContentParams<T>(params),\n });\n\n return response.data;\n};\n\nconst getContentExtended = async <T extends IContent>(\n contentReferenceId: string,\n params: ContentParams<T> = { depth: 1 },\n): Promise<T> => {\n const client = getDirectContentApiClient({ baseURL: baseUrl });\n const response = await client.get<T>(`${contentReferenceId}/extended`, {\n params: mapContentParams<T>(params),\n });\n return response.data;\n};\n\nconst getContent = async <T extends IContent>(\n contentReferenceId: string,\n params: ContentParams<T> = { depth: 1 },\n): Promise<T> => {\n const client = getDirectContentApiClient({ baseURL: baseUrl });\n const response = await client.get<T>(`${encodeURIComponent(contentReferenceId)}/extended`, {\n params: mapContentParams<T>(params),\n });\n return response.data;\n};\n\nconst getMultipleContents = async <T extends IContent>(\n contentReferenceIds: string[],\n params: ContentParams<T> = { depth: 1 },\n): Promise<T[]> => {\n const client = getDirectContentApiClient({ baseURL: baseUrl });\n\n const response = await client.get<T[]>(`multiple/extended`, {\n params: {\n ...mapContentParams<T>(params),\n references: `${contentReferenceIds.map((s) => encodeURIComponent(s)).join(',')}`,\n },\n });\n return response.data;\n};\n\nconst getChildren = async <T extends IContent>(props: GetChildParams<T>): Promise<T[]> => {\n const searchParams = new URLSearchParams();\n if (props.select)\n searchParams.set(\n 'select',\n props.select.map((s) => encodeURIComponent(s.toString())).join(','),\n );\n if (props.expand)\n searchParams.set(\n 'expand',\n props.expand.map((s) => encodeURIComponent(s.toString())).join(','),\n );\n\n const serializedParams = searchParams.toString();\n let requestUrl;\n if (props.url) {\n requestUrl = `${props.url}children${serializedParams ? `?${searchParams.toString()}` : ''}`;\n } else {\n requestUrl = `${baseUrl}${props.contentReferenceId}/children${\n serializedParams ? `?${searchParams.toString()}` : ''\n }`;\n }\n\n const client = getDirectContentApiClient({ baseURL: '' });\n const response = await client.get<T[]>(requestUrl);\n return response.data;\n};\n\ntype ContentMenuNodeType = 'Link' | 'Shortcut';\n\nexport interface ContentMenuNode {\n id: number;\n name: string;\n url: string;\n segmentUrl: string;\n ancestors: ContentMenuNode[];\n nodes: ContentMenuNode[];\n type: ContentMenuNodeType;\n}\n\nconst getMenu = async (\n contentReferenceId: string,\n depth: number = 1,\n withAncestors: boolean = false,\n withContainers: boolean = false,\n): Promise<ContentMenuNode> => {\n const searchParams = new URLSearchParams();\n searchParams.set('depth', depth.toString());\n searchParams.set('withAncestors', withAncestors.toString());\n searchParams.set('withContainers', withContainers.toString());\n const serializedParams = searchParams.toString();\n const url = `${contentReferenceId}/menu${\n serializedParams ? `?${searchParams.toString()}` : ''\n }`;\n\n const client = getDirectContentApiClient({ baseURL: baseUrl });\n const response = await client.get<ContentMenuNode>(url);\n return response.data;\n};\n\nconst getMenuByUrl = async (\n url: string,\n depth: number = 1,\n withAncestors: boolean = false,\n withContainers: boolean = false,\n): Promise<ContentMenuNode> => {\n const searchParams = new URLSearchParams();\n searchParams.set('depth', depth.toString());\n searchParams.set('withAncestors', withAncestors.toString());\n searchParams.set('withContainers', withContainers.toString());\n const serializedParams = searchParams.toString();\n const apiUrl = `${url}menu${serializedParams ? `?${searchParams.toString()}` : ''}`;\n\n const client = getDirectContentApiClient();\n const response = await client.get<ContentMenuNode>(apiUrl);\n return response.data;\n};\n\nexport const contentDeliveryApi = {\n getContentByUrl,\n getContent,\n getContentExtended,\n getMultipleContents,\n getChildren,\n getMenu,\n getMenuByUrl,\n};\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/jsx-no-useless-fragment */\nimport classNames from 'classnames';\n\nimport { getCssClassForDisplayOptionWithDefaultTag } from '../../epiUtils';\nimport EpiComponentLoader from './EpiComponentLoader';\n\ninterface EpiContentAreaProps {\n items: ContentAreaItem[];\n epiTag?: DisplayOption;\n itemCssClass?: string;\n /** If you pass renderItem function, you are responsible for generating item itself as well as it's Grid cell.\n * Use contentAreaItem, contentAreaItemClasses parameters to get access to default values for items.\n */\n renderItem?: (\n componentProps: IContent,\n contentAreaItem: ContentAreaItem,\n contentAreaItemClasses: string,\n ) => React.ReactNode;\n}\n\nconst EpiContentArea = ({ items, epiTag, itemCssClass, renderItem }: EpiContentAreaProps) => {\n const areaItems = items?.filter((x) => !!x && !!x.contentLink.expanded) || [];\n\n return (\n <>\n {areaItems.map((contentAreaItem, index) => (\n <EpiComponentLoader\n expandedValue={contentAreaItem.contentLink.expanded!}\n options={{\n isContentAreaItem: true,\n }}\n key={`{${contentAreaItem.contentLink.guidValue}_${index}}`}\n >\n {(LazyComponent, epiComponentProps) => {\n const contentAreaItemClasses = classNames(\n getCssClassForDisplayOptionWithDefaultTag(\n contentAreaItem.displayOption || epiTag,\n ),\n itemCssClass,\n );\n\n return (\n <>\n {(renderItem &&\n renderItem(\n epiComponentProps,\n contentAreaItem,\n contentAreaItemClasses,\n )) || (\n <div className={contentAreaItemClasses}>\n <LazyComponent {...epiComponentProps} />\n </div>\n )}\n </>\n );\n }}\n </EpiComponentLoader>\n ))}\n </>\n );\n};\n\nexport default EpiContentArea;\n","import type { EpiButtonLinkPropertyBlockType } from './epiButtonLinkPropertyBlock.types';\n\nexport const mapEpiButtonLinkPropertyBlock = (props: EpiButtonLinkPropertyBlockType) => {\n return {\n linkUrl: props.link,\n target: props.target,\n };\n};\n","import type { Button } from '@coop/components';\n\nimport type { EpiButtonPropertyBlockType, EpiButtonThemes } from './EpiButtonPropertyBlock.types';\n\nexport const mapEpiButtonPropertyBlock = (\n props: EpiButtonPropertyBlockType,\n): React.ComponentPropsWithoutRef<typeof Button> => {\n return {\n theme: mapEpiButtonTheme(props.theme),\n disabled: props.disabled,\n size: props.size || 40,\n fullWidth: props.fullWidth,\n 'aria-label': props.ariaLabel || undefined,\n style: {\n marginRight:\n props.alignment === 'start' || props.alignment === 'center' ? 'auto' : undefined,\n marginLeft:\n props.alignment === 'end' || props.alignment === 'center' ? 'auto' : undefined,\n },\n children: props.text,\n };\n};\n\nexport const mapEpiButtonTheme = (theme?: EpiButtonThemes) => {\n switch (theme) {\n case 'Button--white':\n case 'Button--invertedGreen':\n return 'whiteGreen';\n case 'Button--greenDark':\n case 'Button--green':\n return 'primary';\n case 'Button--transparentWhite':\n return 'whiteOutline';\n case 'Button--transparentGreenDark':\n case 'Button--transparentGreen':\n return 'primaryOutline';\n\n case 'Button--light':\n return 'light';\n case 'Button--whiteBlack':\n return 'whiteBlack';\n case undefined:\n return 'primary';\n default:\n return exhaustiveGuard(theme);\n }\n};\n\nconst exhaustiveGuard = (_value: never): never => {\n throw new Error(\n `ERROR! Reached forbidden guard function with unexpected value: ${JSON.stringify(_value)}`,\n );\n};\n","import type Heading from '../../../../common/components/Heading';\nimport type { EpiHeadingPropertyBlockType } from './epiHeadingPropertyBlockType';\n\nexport const mapEpiHeadingPropertyBlock = (\n props?: EpiHeadingPropertyBlockType,\n): React.ComponentPropsWithoutRef<typeof Heading> | undefined => {\n if (!props || !props.text) {\n return undefined;\n }\n\n return {\n element: `h${props.level || '2'}`,\n stylingElement: props.stylingLevel && `h${props.stylingLevel}`,\n color: props.color,\n alignment: props.alignment,\n children: props.text,\n };\n};\n\nexport const mapEpiHeadingPropertyFallback = (\n oldHeader?: string,\n heading?: EpiHeadingPropertyBlockType,\n): EpiHeadingPropertyBlockType => {\n if (heading && heading.text) {\n return heading;\n }\n\n return {\n text: oldHeader,\n };\n};\n","import type { EpiImagePropertyBlock } from './epiImagePropertyBlockType';\n\nexport const mapEpiImagePropertyBlock = (imageBlock: EpiImagePropertyBlock) => {\n return {\n srcSet:\n imageBlock.images\n ?.map((item) => {\n const url = item.cloudinaryImageUrl || item.imageUrl;\n if (!url) return null;\n\n return {\n srcSet: url,\n height: item.height,\n minWidth: item.breakpointFrom || (0 as const),\n };\n })\n .filter(Boolean) || [],\n defaultImageUrl: imageBlock.defaultCloudinaryImageUrl || imageBlock.defaultImage?.url,\n defaultImageHeight: imageBlock.defaultImageHeight,\n imageAltText: imageBlock.altText,\n };\n};\n","import type { ImageTextPropertyBlockProps } from '../../../../common/components/organisms/ImageTextPropertyBlock/ImageTextPropertyBlock';\nimport type { EpiTextColor } from '../../../models/common/epiPrimitives';\nimport type { EpiButtonLinkPropertyBlockType } from '../EpiButtonLinkPropertyBlock/epiButtonLinkPropertyBlock.types';\nimport { mapEpiButtonLinkPropertyBlock } from '../EpiButtonLinkPropertyBlock/epiButtonLinkPropertyBlock.utils';\nimport type { EpiButtonPropertyBlockType } from '../EpiButtonPropertyBlock/EpiButtonPropertyBlock.types';\nimport { mapEpiButtonPropertyBlock } from '../EpiButtonPropertyBlock/EpiButtonPropertyBlock.utils';\nimport { mapEpiHeadingPropertyBlock } from '../EpiHeadingPropertyBlock/EpiHeadingPropertyBlock.utils';\nimport type { EpiHeadingPropertyBlockType } from '../EpiHeadingPropertyBlock/epiHeadingPropertyBlockType';\nimport { mapEpiImagePropertyBlock } from '../EpiImagePropertyBlock/epiImagePropertyBlock.utils';\nimport type { EpiImageTextPropertyBlockType } from './epiImageTextPropertyBlockType';\n\ninterface ImageTextPropertyContext {\n lazyImage?: boolean;\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport const mapImageTextPropertyToProps = (\n props: EpiImageTextPropertyBlockType,\n options?: ImageTextPropertyContext,\n useFallbackedProperties = true,\n): Omit<\n ImageTextPropertyBlockProps,\n 'renderButton' | 'renderSecondaryButton' | 'renderHeading'\n> => {\n const mappedImageProperty = props.imageBlock && mapEpiImagePropertyBlock(props.imageBlock);\n\n let defaultImageUrl = mappedImageProperty?.defaultImageUrl;\n const defaultImageHeight = mappedImageProperty?.defaultImageHeight;\n\n const srcSet = mappedImageProperty?.srcSet || [];\n const fromMobileImage = srcSet.find((item) => item.minWidth === 600);\n const fromZero = srcSet.find((item) => item.minWidth === 0);\n\n if (useFallbackedProperties) {\n defaultImageUrl = defaultImageUrl || props.image?.url;\n\n if (!fromMobileImage && !fromZero && props.narrowImage && defaultImageUrl) {\n // move from old image and narrowImage properties into srcSet to have all breakpoint images in one place\n srcSet.push({\n srcSet: props.narrowImage?.url,\n height: undefined,\n minWidth: 0,\n });\n srcSet.push({\n srcSet: defaultImageUrl,\n height: defaultImageHeight,\n minWidth: 600,\n });\n }\n }\n\n return {\n imageUrl: defaultImageUrl,\n imageHeight: defaultImageHeight,\n srcSet,\n imageAltText: mappedImageProperty?.imageAltText,\n ariaLabel: props.ariaLabel,\n linkUrl: props.link,\n backgroundColor: props.backgroundColor,\n body: props.body,\n centerBlockHorizontally: props.centerBlockHorizontally,\n centerBlockVertically: props.centerBlockVertically,\n contentLessHorizontalPadding: props.contentLessHorizontalPadding,\n contentLessPadding: props.contentLessPadding,\n isClickable: props.isClickable,\n textColor: props.textColor,\n target: props.openLinkIn,\n lazy: options?.lazyImage,\n gaPromoId: props.gaPromoId,\n gaPromoName: props.gaPromoName,\n gaPromoCreative: props.gaPromoCreative,\n gaPromoPosition: props.gaPromoPosition,\n headingProps: mapEpiHeadingPropertyBlock(\n useFallbackedProperties\n ? mapImageTextToHeadingWithFallbacks(props)\n : mapImageTextToHeading(props),\n ),\n buttonProps: mapEpiButtonPropertyBlock(\n useFallbackedProperties\n ? mapImageTextToButtonWithFallbacks(props.buttonLink, props)\n : mapImageTextToButton(props.buttonLink),\n ),\n secondaryButtonProps:\n props.secondaryButtonLink && mapEpiButtonPropertyBlock(props.secondaryButtonLink),\n };\n};\n\n/**\n * For now, we have to support old button-related properties from Epi together with new property block.\n * This function maps so that old properties are a fallback to missing new property block\n */\nexport const mapEpiImageTextPropertyToLinkFallback = (\n input: EpiButtonLinkPropertyBlockType | undefined,\n props: EpiImageTextPropertyBlockType,\n) => {\n const mapped = input && mapEpiButtonLinkPropertyBlock(input);\n return {\n linkUrl: mapped?.linkUrl || props.link,\n target: mapped?.target || props.openLinkIn,\n };\n};\n\n// All elements should have the same fallback alignment\nconst ElementFallbackAlignment = 'start';\n\nconst mapImageTextToButton = (\n input: EpiButtonPropertyBlockType | undefined,\n): EpiButtonPropertyBlockType => {\n return {\n text: input?.text || '',\n ariaLabel: input?.ariaLabel,\n fullWidth: input?.fullWidth,\n theme: input?.theme,\n disabled: input?.disabled,\n size: input?.size || 40,\n alignment: input?.alignment || ElementFallbackAlignment,\n };\n};\n\n// Fallback for migrating old Epi fields to a new ButtonPropertyBlock\nconst mapImageTextToButtonWithFallbacks = (\n input: EpiButtonPropertyBlockType | undefined,\n allProps: EpiImageTextPropertyBlockType,\n): EpiButtonPropertyBlockType => {\n const mapped = mapImageTextToButton(input);\n\n return {\n ...mapped,\n text: mapped.text || allProps.buttonText,\n theme: mapped.theme || allProps.buttonColor,\n };\n};\n\nconst mapImageTextToHeading = (\n input: EpiImageTextPropertyBlockType,\n): EpiHeadingPropertyBlockType => {\n return {\n text: input.heading?.text || '',\n level: input.heading?.level || '2',\n stylingLevel: input.heading?.stylingLevel || '1',\n alignment: input.centerBlockHorizontally\n ? 'center'\n : input.heading?.alignment || ElementFallbackAlignment,\n color: input.heading?.color || 'black',\n };\n};\n\n// Fallback for migrating old Epi fields to a new HeadingPropertyBlock\nconst mapImageTextToHeadingWithFallbacks = (\n input: EpiImageTextPropertyBlockType,\n): EpiHeadingPropertyBlockType => {\n const mapped = mapImageTextToHeading(input);\n\n return {\n ...mapped,\n text: mapped.text || input.title || '',\n color: input.heading?.color || mapOldEpiImageTextColor(input.titleColor),\n };\n};\n\nconst mapOldEpiImageTextColor = (\n input: EpiImageTextPropertyBlockType['titleColor'],\n): EpiTextColor => {\n switch (input) {\n case 'u-colorWhite':\n return 'white';\n case 'u-colorGreen':\n return 'coopGreen';\n case 'u-colorGreenDark':\n return 'darkGreen';\n default:\n return 'black';\n }\n};\n","import { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport { useLocation, useParams } from 'react-router-dom';\n\nimport type { ContentParams } from '../../api/contentDeliveryApi';\nimport { contentDeliveryApi } from '../../api/contentDeliveryApi';\nimport { epiPageQueryKeys } from '../../epiQueryKeys';\nimport type { EpiSitePageType } from '../pages/epiSitePageType';\n\nexport const useEpiPageByContentId = <T extends IContent>(\n contentReferenceId: string | undefined,\n params: ContentParams<T>,\n queryOptions?: Pick<Parameters<typeof useQuery<T>>[0], 'enabled' | 'staleTime' | 'gcTime'>,\n) => {\n const query = useQuery({\n queryKey: epiPageQueryKeys.getByContentReference(contentReferenceId!, params),\n queryFn: () => contentDeliveryApi.getContentExtended<T>(contentReferenceId!, params),\n staleTime: 1000 * 60 * 1,\n placeholderData: keepPreviousData,\n enabled: !!contentReferenceId,\n ...queryOptions,\n });\n\n return query;\n};\n\nexport const useEpiPageByUrl = <T extends IContent>(\n route: string,\n params: ContentParams<T> | undefined = undefined,\n) => {\n const query = useQuery({\n queryKey: epiPageQueryKeys.getByUrl(route, params),\n queryFn: () => contentDeliveryApi.getContentByUrl<T>(route, params),\n staleTime: 1000 * 60 * 1,\n placeholderData: keepPreviousData,\n enabled: !!route,\n });\n\n return query;\n};\n\nexport const useCurrentPageEpiBasePath = (allowWildCards: boolean) => {\n const location = useLocation();\n const pathParams = useParams<Record<string, string>>();\n\n const clientOnlySegments =\n Object.entries(pathParams)\n .filter((item) => item[0] !== '*' || allowWildCards)\n ?.map((item) => ({\n segment: item[0],\n value: item[1],\n })) || [];\n const firstClientOnlySegmentValue = clientOnlySegments[0]?.value;\n\n const firstClientOnlyParamIndex =\n firstClientOnlySegmentValue && location.pathname.indexOf(firstClientOnlySegmentValue);\n\n // strip client-side route segment, so that only the exact Epi page URL is sent to Content Delivery API\n let basePath = location.pathname;\n if (firstClientOnlyParamIndex && firstClientOnlyParamIndex > -1) {\n basePath = basePath.substring(0, firstClientOnlyParamIndex);\n }\n\n // if we fuck up routers uncomment this\n // const basePathTrimmed = trimEnd(basePath, '/');\n return basePath;\n};\n\nexport const useCurrentEpiPage = <T extends EpiSitePageType>(\n params: ContentParams<T> = { depth: 1 },\n allowWildCards?: boolean,\n) => {\n const basePath = useCurrentPageEpiBasePath(!!allowWildCards);\n\n const query = useQuery<T>({\n queryKey: epiPageQueryKeys.getByUrl(basePath, params),\n queryFn: () => contentDeliveryApi.getContentByUrl<T>(basePath, params),\n staleTime: 1000 * 60 * 1,\n placeholderData: keepPreviousData,\n enabled: !!basePath,\n });\n\n return query;\n};\n","import classNames from 'classnames';\nimport { forwardRef, useEffect } from 'react';\nimport _ from 'underscore';\n\nimport ItemGrid, {\n calculateRowFromIndex,\n} from '../../../../ecommerce/components/ItemGrid/ItemGrid';\nimport { useGroupedProductsBlockState } from '../../../../ecommerce/hooks/useGroupedProductsBlockState';\n\nexport interface ExpandableItem {\n identifier: string;\n groupId: string;\n hasChildren: boolean;\n}\n\nexport interface GroupOrSingleTeaserProps<TItem extends ExpandableItem> {\n onGroupClick?: () => void;\n isExpanded: boolean;\n item: TItem;\n index: number;\n isGroup: boolean;\n}\n\ninterface ItemGridWithGroupingProps<TItem extends ExpandableItem> {\n cellsInRow: number;\n gridAdditionalClasses: string;\n items: TItem[];\n useGrouping: boolean;\n renderGroupOrSingleTeaser: (props: GroupOrSingleTeaserProps<TItem>) => React.ReactNode;\n renderAtRowEnd: (\n groupId: string | undefined,\n show: boolean,\n close: () => void,\n ) => React.ReactNode;\n itemUniqueKey: (item: TItem) => string;\n}\n\nconst ItemGridWithGrouping = <TItem extends ExpandableItem>(\n props: ItemGridWithGroupingProps<TItem>,\n ref: React.Ref<HTMLUListElement>,\n) => {\n const { toggleBlock, setBlocks, getBlock, closeBlock, isBlockExpanded } =\n useGroupedProductsBlockState();\n\n useEffect(() => {\n if (props.items.length && props.cellsInRow) {\n const rowsWithBlocks = props.items.map(\n (item, index) => calculateRowFromIndex(index, props.cellsInRow).row,\n );\n const uniqueRows = _.unique(rowsWithBlocks).map((row) => ({ row }));\n setBlocks(uniqueRows);\n }\n }, [props.cellsInRow, props.items, setBlocks]);\n\n return (\n <ItemGrid\n ref={ref}\n cellsInRow={props.cellsInRow}\n gridClasses={classNames(props.gridAdditionalClasses)}\n items={props.items}\n itemUniqueKey={props.itemUniqueKey}\n renderAtRowEnd={(row) => {\n if (!props.useGrouping) return null;\n\n const foundBlock = getBlock(row);\n\n if (!foundBlock) return null;\n\n const close = () => closeBlock(row);\n\n const groupId = foundBlock.activeBlock?.groupId;\n const show = !!foundBlock.activeBlock;\n\n return foundBlock && props.renderAtRowEnd(groupId, show, close);\n }}\n renderItem={(item, index) => {\n const { row, rowPosition } = calculateRowFromIndex(index, props.cellsInRow);\n const groupId = item?.groupId;\n\n const isGroup = props.useGrouping && item.hasChildren && !!groupId;\n\n const onGroupClick =\n props.useGrouping && item.hasChildren && groupId\n ? () => toggleBlock(row, groupId, rowPosition)\n : undefined;\n\n const isExpanded = isBlockExpanded(groupId);\n\n return props.renderGroupOrSingleTeaser({\n item,\n isExpanded,\n onGroupClick,\n index,\n isGroup,\n });\n }}\n />\n );\n};\n\nexport default forwardRef(ItemGridWithGrouping);\n","import { ChipIconButton } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport AnimateHeight from 'react-animate-height';\nimport type { SwiperOptions } from 'swiper/types';\n\nimport { SwipableList } from '../../SwipableList';\n\ninterface InGridItemsBlockProps<T> {\n heading: string;\n items?: T[];\n show: boolean;\n close: () => void;\n afterClose?: () => void;\n renderItem: (item: T, index: number) => React.ReactNode;\n swiperOptions: SwiperOptions;\n swiperMainClass: string;\n}\n\nconst InGridItemsBlock = <T,>(props: InGridItemsBlockProps<T>) => {\n const { show, close, afterClose } = props;\n\n const onAnimationEnd = () => {\n if (!show) {\n close();\n if (afterClose) {\n afterClose();\n }\n }\n };\n\n const onCloseClick = () => {\n close();\n };\n\n return (\n <AnimateHeight\n duration={250}\n height={show ? 'auto' : 0}\n easing=\"ease-in\"\n className=\"u-sizeFull\"\n onAnimationEnd={onAnimationEnd}\n >\n <div\n className={classNames(\n 'Section u-bgWhite u-marginVmd Section--counterHPadding u-borderRadius20 ',\n )}\n >\n <div className=\"u-paddingAmd\">\n <header className=\"u-flex u-flexJustifySpaceBetween u-flexAlignCenter u-paddingBmd u-sizeFull\">\n {props.heading && (\n <h2 className=\"Heading Heading--h4 u-marginBz\">{props.heading}</h2>\n )}\n <div style={{ position: 'absolute', right: 15, top: 15 }}>\n <ChipIconButton\n icon={CloseIcon}\n size={32}\n theme=\"whiteGreen\"\n label=\"Stäng\"\n onClick={onCloseClick}\n />\n </div>\n </header>\n {!!props.items?.length && (\n <SwipableList\n swiperMainClassName={props.swiperMainClass}\n swiperOptions={props.swiperOptions}\n >\n {props.items.map((item, index) => props.renderItem(item, index))}\n </SwipableList>\n )}\n </div>\n </div>\n </AnimateHeight>\n );\n};\n\nexport default InGridItemsBlock;\n","import type { FC } from 'react';\nimport { useMemo } from 'react';\nimport type { SwiperOptions } from 'swiper/types';\n\nimport { CoopSwiperBreakpoints } from '../../../../utility/coopSwiperBreakpoints';\nimport type { ApiDkeStoreOffer } from '../../../common/api/dke/dkeModels';\nimport InGridItemsBlock from '../../../common/components/molecules/ItemGridWithGrouping/InGridItemsBlock';\nimport { useSwiperOverflowClasses } from '../../../common/hooks/useSwiperOverflowClasses';\nimport { useBreakpointsSidebar } from '../../../ecommerce/hooks/useBreakpoints';\nimport StoreOfferTeaser from './StoreOfferTeaser/StoreOfferTeaser';\n\ninterface GroupedStoreOffersBlockProps {\n className: string;\n show: boolean;\n groupId?: string;\n close: () => void;\n storeOffers: ApiDkeStoreOffer[];\n}\n\nconst GroupedStoreOffersBlock: FC<React.PropsWithChildren<GroupedStoreOffersBlockProps>> = ({\n className,\n show,\n groupId,\n close,\n storeOffers,\n}) => {\n const offers = groupId ? storeOffers.find((offer) => groupId === offer.externalId) : null;\n\n const allVariations =\n offers?.clusterInteriorOffers && [offers].concat(offers?.clusterInteriorOffers);\n\n const afterClose = () => {\n close();\n };\n const { breakpoints } = useBreakpointsSidebar(CoopSwiperBreakpoints.AREA_NEW_PRODUCT_LIST);\n\n const { mainSwiperClasses } = useSwiperOverflowClasses();\n\n const modfiedSwiperOptions: SwiperOptions = useMemo(\n () => ({\n breakpoints,\n spaceBetween: 12,\n }),\n [breakpoints],\n );\n\n return (\n <div className={`${className} u-paddingAz`}>\n <InGridItemsBlock\n swiperMainClass={mainSwiperClasses}\n swiperOptions={modfiedSwiperOptions}\n heading={`Välj bland ${allVariations ? allVariations.length : ''} varianter`}\n items={allVariations}\n close={afterClose}\n show={show && !!allVariations}\n renderItem={(item, index) => (\n <StoreOfferTeaser\n offer={item}\n onGroupClick={() => {}}\n key={`${index}_${item.externalId}`}\n groupedFirstItem={index === 0}\n showAddToShoppingList\n />\n )}\n />\n </div>\n );\n};\nexport default GroupedStoreOffersBlock;\n","import { ChipButton, Icon } from '@coop/components';\nimport { ChevronDownIcon } from '@coop/icons';\nimport type { FC } from 'react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { ApiDkeStoreOffer } from '../../../../common/api/dke/dkeModels';\nimport type { ExpandableItem } from '../../../../common/components/molecules/ItemGridWithGrouping/ItemGridWithGrouping';\nimport ItemGridWithGrouping from '../../../../common/components/molecules/ItemGridWithGrouping/ItemGridWithGrouping';\nimport { useVerticalProductTeaserContainer } from '../../../../ecommerce/hooks/useProductTeaserContainer';\nimport GroupedStoreOffersBlock from '../GroupedStoreOffersBlock';\nimport StoreOfferTeaser from '../StoreOfferTeaser/StoreOfferTeaser';\nimport styles from './StoreOffersListBlock.module.less';\n\ninterface StoreOffersListBlockProps {\n heading: string;\n storeOffers: ApiDkeStoreOffer[];\n category: number;\n numberOfRows: {\n numberOfRowsDesktop: number;\n numberOfRowsPhone: number;\n numberOfRowsTablet: number;\n };\n storeUrl?: string;\n showAllLink?: boolean;\n}\n\nconst StoreOffersListBlock: FC<React.PropsWithChildren<StoreOffersListBlockProps>> = ({\n heading,\n storeOffers,\n category,\n numberOfRows,\n storeUrl,\n showAllLink,\n}) => {\n let showBtn = true;\n\n if (category === 1) {\n showBtn = false;\n }\n if (heading === 'Övrigt') {\n showBtn = false;\n }\n const [showMore, setShowMore] = useState(false);\n\n const showMorehandler = useCallback(() => {\n setShowMore(true);\n }, []);\n\n const { cellsInRow, gridAdditionalClasses } = useVerticalProductTeaserContainer('grid');\n\n let visibleOffersNumber = 0;\n switch (cellsInRow) {\n case 2:\n visibleOffersNumber = numberOfRows.numberOfRowsPhone * cellsInRow;\n break;\n case 3:\n visibleOffersNumber = numberOfRows.numberOfRowsPhone * cellsInRow;\n break;\n case 4:\n visibleOffersNumber = numberOfRows.numberOfRowsTablet * cellsInRow;\n break;\n case 6:\n visibleOffersNumber = numberOfRows.numberOfRowsDesktop * cellsInRow;\n break;\n default:\n visibleOffersNumber = 0;\n }\n\n const visibleOffers = useMemo(() => {\n const offersToShow =\n showMore || !showBtn ? storeOffers : storeOffers.slice(0, visibleOffersNumber);\n return offersToShow.map<ApiDkeStoreOffer & ExpandableItem>((offer) => {\n return {\n ...offer,\n identifier: offer.id,\n hasChildren: offer.clusterInteriorOffers.length > 0,\n groupId: offer.externalId,\n };\n });\n }, [showBtn, showMore, storeOffers, visibleOffersNumber]);\n\n return (\n <div className=\"Grid\">\n <div className=\"Grid-cell u-sizeFull u-marginVxsm\">\n <div className=\"u-flex u-flexJustifySpaceBetween u-paddingVsm u-flexAlignCenter\">\n <h2 className=\"u-paddingTxxxsm Heading Heading--h4 u-marginAz\">{heading}</h2>\n {showAllLink && (\n <a className=\"Link Link--green\" href={storeUrl}>\n Visa alla\n </a>\n )}\n </div>\n </div>\n <div className=\"Grid\">\n <div className=\"Grid-cell\">\n <ItemGridWithGrouping\n itemUniqueKey={(item) => item.identifier}\n cellsInRow={cellsInRow}\n gridAdditionalClasses={gridAdditionalClasses}\n items={visibleOffers}\n useGrouping\n renderGroupOrSingleTeaser={(renderProps) => (\n <StoreOfferTeaser\n key={`${renderProps.item.externalId}_${renderProps.index}`}\n offer={renderProps.item}\n onGroupClick={renderProps.onGroupClick}\n isExpanded={renderProps.isExpanded}\n showAddToShoppingList={\n renderProps.item.clusterInteriorOffers.length === 0\n }\n />\n )}\n renderAtRowEnd={(groupId, show, close) => (\n <GroupedStoreOffersBlock\n className=\"Grid-cell u-sizeFull\"\n show={show}\n groupId={groupId}\n close={close}\n storeOffers={storeOffers}\n />\n )}\n />\n </div>\n </div>\n {storeOffers.length > visibleOffersNumber && !showMore && showBtn && (\n <div\n className={`u-marginTmd u-sizeFull u-flex u-flexJustifyCenter ${styles['Button--drop-shadow']}`}\n >\n <ChipButton\n theme=\"whiteGreen\"\n size={32}\n rightSlot={<Icon icon={ChevronDownIcon} />}\n onClick={showMorehandler}\n >\n Visa alla {`(${storeOffers.length - visibleOffersNumber})`}\n </ChipButton>\n </div>\n )}\n </div>\n );\n};\nexport default StoreOffersListBlock;\n","/* eslint-disable react/jsx-props-no-spreading */\n\nimport ButtonEpiLink from '../../../../../common/components/ButtonEpiLink';\nimport Heading from '../../../../../common/components/Heading';\nimport DoubleImageTextBlock from '../../../../../common/components/organisms/DoubleImageTextBlock/DoubleImageTextBlock';\nimport { mapEpiButtonLinkPropertyBlock } from '../../../../../episerver/components/blocks/EpiButtonLinkPropertyBlock/epiButtonLinkPropertyBlock.utils';\nimport type { EpiDoubleImageTextBlockType } from '../../../../../episerver/components/blocks/EpiDoubleImageTextBlock/epiDoubleImageTextBlockType';\nimport {\n mapEpiImageTextPropertyToLinkFallback,\n mapImageTextPropertyToProps,\n} from '../../../../../episerver/components/blocks/EpiImageTextPropertyBlock/EpiImageTextPropertyBlock.utils';\n\ninterface CateringTeaserProps {\n cateringLink: string;\n doubleImageTextPropertyBlock: EpiDoubleImageTextBlockType;\n}\nconst CateringDoubleImageTextBlock: React.FC<React.PropsWithChildren<CateringTeaserProps>> = (\n props,\n) => {\n const epiLeft = { ...props.doubleImageTextPropertyBlock.left, link: props.cateringLink };\n const epiRight = props.doubleImageTextPropertyBlock.right;\n\n const left = mapImageTextPropertyToProps(epiLeft, {\n lazyImage: false,\n });\n\n const right = mapImageTextPropertyToProps(epiRight, {\n lazyImage: false,\n });\n\n return (\n <DoubleImageTextBlock\n {...props.doubleImageTextPropertyBlock}\n left={{\n ...left,\n renderButton: (bProps) => (\n <ButtonEpiLink\n {...bProps}\n {...mapEpiImageTextPropertyToLinkFallback(epiLeft.buttonLink, epiLeft)}\n />\n ),\n renderSecondaryButton: (bProps) =>\n epiLeft.secondaryButtonLink && (\n <ButtonEpiLink\n {...bProps}\n {...mapEpiButtonLinkPropertyBlock(epiLeft.secondaryButtonLink)}\n />\n ),\n renderHeading: (hProps) => <Heading {...hProps} fontFamilySecondary />,\n }}\n right={{\n ...right,\n renderButton: (bProps) => (\n <ButtonEpiLink\n {...bProps}\n {...mapEpiImageTextPropertyToLinkFallback(epiRight.buttonLink, epiRight)}\n />\n ),\n renderSecondaryButton: (bProps) =>\n epiRight.secondaryButtonLink && (\n <ButtonEpiLink\n {...bProps}\n {...mapEpiButtonLinkPropertyBlock(epiRight.secondaryButtonLink)}\n />\n ),\n renderHeading: (hProps) => <Heading {...hProps} fontFamilySecondary />,\n }}\n />\n );\n};\nexport default CateringDoubleImageTextBlock;\n","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"wMGtDyjw\",\"ChangeEmailLink\":\"D0v17trH\",\"InputContainer\":\"SGjfZ6eS\",\"ButtonWrapper\":\"akRlllUI\",\"EmailBox\":\"zgUy_Hdy\",\"GdprLink\":\"ufqtkSDK\"};","import { Button, Checkbox, Loader, ModalHeader } from '@coop/components';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport classNames from 'classnames';\nimport { type FC, useEffect, useState } from 'react';\n\nimport { appConfig } from '../../../../../appConfig';\nimport { useIsFromXSmall } from '../../../../common/components/atoms/ResponsiveBreakpoints';\nimport kimProxyFlow from '../../../../common/flow/kimProxyFlow';\nimport {\n useHasUserAKimCustomerId,\n useIsUserAuthenticated,\n useUserProfile,\n} from '../../../../common/hooks/useUserProfile';\nimport { MEMBER_CONSENT_NEWSLETTER_STORE } from '../../../../member/consts';\nimport { useKimCustomerDataQuery } from '../../../../member/hooks/useKimCustomerDataQuery';\nimport { kimCustomerDataQueryKeys } from '../../../../member/memberQueries';\nimport useConsentQuery from '../../hooks/useConsentQuery';\nimport { useConsentSubscribeMutation } from '../SubscriptionSwitch/SubscriptionSwitch.hooks';\nimport styles from './WeeklyNewsletterSubscription.module.less';\n\nexport interface WeeklyNewsletterSubscriptionProps {\n close: () => void;\n}\nconst LabelText: FC<React.PropsWithChildren<unknown>> = () => {\n return (\n <div className=\"u-textMedium\">\n <strong>Ja tack!</strong> Jag vill prenumerera på butikserbjudanden via e-post. Du kan\n avregistrera dig i varje utskick.\n </div>\n );\n};\n\nconst WeeklyNewsletterSubscription: FC<\n React.PropsWithChildren<WeeklyNewsletterSubscriptionProps>\n> = ({ close }) => {\n const queryClient = useQueryClient();\n const storeNewsletter = MEMBER_CONSENT_NEWSLETTER_STORE;\n const isLoggedIn = useIsUserAuthenticated();\n const hasKimCustomerId = useHasUserAKimCustomerId();\n const isXSmallScreen = useIsFromXSmall();\n const profile = useUserProfile();\n\n const identityServerEmail = profile?.email;\n const { emailSubscriptionPageUrl } = appConfig.coopSettings.myCoop;\n const [emailConsentChecked, setEmailConsentChecked] = useState<boolean>(false);\n const [showCheckedError, setShowCheckedError] = useState<boolean>(false);\n const [hasWeeklyNewsletterSubscription, setHasWeeklyNewsletterSubscription] =\n useState<boolean>(false);\n const { data: customerData } = useKimCustomerDataQuery(hasKimCustomerId);\n const { data: consents, isLoading: isLoadingConsents } = useConsentQuery(\n isLoggedIn && hasKimCustomerId,\n );\n\n const subscribeMutation = useConsentSubscribeMutation(storeNewsletter);\n\n const setEmailInKimMutation = useMutation({\n mutationFn: (newMail: string) => kimProxyFlow.changeEmail(newMail),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: kimCustomerDataQueryKeys.all });\n kimProxyFlow.deleteCustomerDataCache();\n subscribeMutation.mutate();\n },\n });\n\n useEffect(() => {\n if (consents) {\n // Check if user has store-consent\n const hasConsent = consents?.some(\n (item) => item.id === storeNewsletter && item.accepted,\n );\n\n setHasWeeklyNewsletterSubscription(hasConsent);\n }\n }, [consents, storeNewsletter]);\n\n if (!isLoggedIn || !hasKimCustomerId) return null;\n\n const kimEmail =\n customerData?.addresses?.filter(\n (x: { typeOfAddress: string }) => x.typeOfAddress === 'EMAIL',\n )[0]?.address || null;\n\n const subscribeToWeeklyNewsletter = () => {\n if (!emailConsentChecked) {\n setShowCheckedError(true);\n } else {\n setShowCheckedError(false);\n\n // If kimemail is missing, update it first\n if (!kimEmail && identityServerEmail) {\n // set email and subscribe\n setEmailInKimMutation.mutate(identityServerEmail);\n } else {\n subscribeMutation.mutate();\n }\n }\n };\n\n const onConcentChange = () => setEmailConsentChecked(!emailConsentChecked);\n\n if (subscribeMutation.isError || setEmailInKimMutation.isError)\n return (\n <StatusCard\n heading=\"Något gick fel\"\n text=\"Dina prenumerationer kunde inte hämtas just nu. Prova igen om en liten stund.\"\n image=\"/Assets/Images/phone-in-hand.svg\"\n modalClose={close}\n />\n );\n\n if (subscribeMutation.isSuccess)\n return (\n <StatusCard\n heading=\"Erbjudanden på väg!\"\n text=\" Smart val! När butiken släpper veckans erbjudanden får du en påminnelse på din mail.\"\n image=\"/Assets/Images/paper-plane.svg\"\n modalClose={close}\n />\n );\n\n return (\n <div className={classNames(styles.Container, 'u-paddingVz u-textCenter')}>\n <ModalHeader className=\"u-textWeightBold u-textCenter u-textFamilySecondary u-colorGreenDark u-md-text4XLarge u-text3XLarge u-marginVsm\">\n Missa inga butikserbjudanden!\n </ModalHeader>\n <p className=\"u-textMedium u-md-textXLarge u-marginBlg u-md-marginHxxxlg u-paddingHlg\">\n Få en påminnelse på e-post när din butik har nya erbjudanden.\n </p>\n {isLoadingConsents && (\n <div className=\"u-paddingVz u-textCenter\">\n <div className=\"u-textCenter u-marginBmd\">\n <Loader />\n </div>\n </div>\n )}\n\n {!isLoadingConsents && hasWeeklyNewsletterSubscription ? (\n <span>Du prenumererar redan på butikserbjudanden!</span>\n ) : (\n !isLoadingConsents && (\n <div\n className={classNames(\n styles.InputContainer,\n 'u-flex u-flexAlignCenter u-flexDirectionColumn',\n )}\n >\n <div className=\"u-flexGrow\">\n <div className={styles.EmailBox}>{kimEmail || identityServerEmail}</div>\n\n <a href={emailSubscriptionPageUrl} className={styles.ChangeEmailLink}>\n <strong>Ändra e-postadress</strong>\n </a>\n <Checkbox\n id=\"weeklyNewsletterConsent\"\n className=\"u-marginVmd\"\n checked={emailConsentChecked}\n onCheckedChange={onConcentChange}\n label={<LabelText />}\n indicatorVerticalPosition=\"top\"\n aria-label=\"Ja tack! Jag vill prenumerera på butikserbjudanden via e-post. Du kan avregistrera dig i varje utskick.\"\n validationMsg={\n showCheckedError\n ? 'Måste fyllas i för att du ska kunna prenumerera.'\n : ''\n }\n />\n <div className={styles.GdprLink}>\n <a\n href=\"/personuppgifter\"\n className=\"u-colorGreenMid3 u-textUnderline\"\n target=\"_blank\"\n >\n Läs om hur Coop behandlar dina personuppgifter.\n </a>\n </div>\n </div>\n <div\n className={classNames(\n styles.ButtonWrapper,\n 'u-flex u-flexJustifyCenter u-flexShrinkNone u-marginTsm u-marginBmd',\n )}\n >\n <Button\n onClick={subscribeToWeeklyNewsletter}\n theme=\"primary\"\n size={40}\n fullWidth={!isXSmallScreen}\n isLoading={subscribeMutation.isPending}\n aria-label=\"Prenumerera\"\n >\n Prenumerera\n </Button>\n </div>\n </div>\n )\n )}\n </div>\n );\n};\n\ninterface StatusCardProps {\n heading: string;\n text: string;\n modalClose: () => void;\n image: string;\n}\nconst StatusCard = ({ heading, text, modalClose, image }: StatusCardProps) => {\n return (\n <div className=\" u-paddingVz u-textCenter\">\n <div className=\"u-textCenter u-marginBmd\">\n <img src={image} alt=\"\" className={styles.SuccessImg} />\n <ModalHeader className=\"u-text4XLarge u-textFamilySecondary u-colorGreenDark u-marginVsm\">\n {heading}\n </ModalHeader>\n <p\n className={classNames(\n styles.StatusText,\n 'u-textMedium u-md-textXLarge u-marginBxlg u-marginTxsm',\n )}\n >\n {text}\n </p>\n </div>\n <div className={classNames(styles.ContainerBtn, 'u-flex u-flexJustifyCenter')}>\n <Button fullWidth onClick={modalClose} theme=\"primary\" size={40}>\n Stäng\n </Button>\n </div>\n </div>\n );\n};\n\nexport default WeeklyNewsletterSubscription;\n","import getDirectDrAxiosClient from './directDrAxiosClient';\nimport type { ApiDrPeriodsResponse } from './responses/drResponses';\n\nconst getDrPeriods = async (store: string) => {\n const result = await getDirectDrAxiosClient().get<ApiDrPeriodsResponse>(\n `api/v1/dr-store/${store}/onlywithpdf/true/`,\n {\n params: { 'api-version': 'v1' },\n },\n );\n return result.data;\n};\n\nexport default {\n getDrPeriods,\n};\n","import type { AxiosInstance } from 'axios';\n\nimport { appConfig } from '../../../appConfig';\nimport axiosClientFactory from '../../common/api/clients/clientFactory';\n\nconst getDirectDrAxiosClient = (): AxiosInstance => {\n const client = axiosClientFactory.createDirectApiClient({\n baseURL: appConfig.coopSettings.serviceAccess.drApiUrl,\n });\n return client;\n};\n\nexport default getDirectDrAxiosClient;\n","import { keepPreviousData, useQuery } from '@tanstack/react-query';\n\nimport drApi from '../api/drApi';\nimport { storeQueryKeys } from '../storeQueries';\n\nconst useDrFlyerQuery = (store: string) => {\n const query = useQuery({\n queryKey: storeQueryKeys.storeDr(store),\n queryFn: () => drApi.getDrPeriods(store),\n placeholderData: keepPreviousData,\n enabled: !!store,\n staleTime: 1000 * 60 * 60, // 1h\n });\n\n return query;\n};\n\nexport default useDrFlyerQuery;\n","import { Button, ChipIconButton, Modal } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport { useEffect, useState } from 'react';\n\nimport Image from '../../../../../common/components/atoms/Image';\nimport { useIsFromMedium } from '../../../../../common/components/atoms/ResponsiveBreakpoints';\nimport Heading from '../../../../../common/components/Heading';\nimport useModal from '../../../../../common/hooks/useModal';\nimport {\n useIsUserAMember,\n useIsUserAuthenticated,\n} from '../../../../../common/hooks/useUserProfile';\nimport { ga4StoresTracking } from '../../../../../common/tracking/ga4/stores';\nimport { MEMBER_CONSENT_NEWSLETTER_STORE } from '../../../../../member/consts';\nimport WeeklyNewsletterSubscription from '../../../../../myCoop/consentSubscriptions/components/WeeklyNewsletterSubscription/WeeklyNewsletterSubscription';\nimport useConsentQuery from '../../../../../myCoop/consentSubscriptions/hooks/useConsentQuery';\nimport useDrFlyerQuery from '../../../../hooks/useDrFlyerQuery';\nimport styles from './DrAndNewsFlyer.module.less';\n\nexport interface DkFlyerProps {\n storeName?: string;\n ledgerAccountNumber: string;\n storeOffersUrlBase: string;\n flyerImageUrl?: string;\n}\n\nconst DrAndNewsFlyer: React.FC<React.PropsWithChildren<DkFlyerProps>> = ({\n storeName,\n ledgerAccountNumber,\n storeOffersUrlBase,\n flyerImageUrl,\n}) => {\n const isMediumDevice = useIsFromMedium();\n const { isOpen, close, open } = useModal('StoreNewsFlyer');\n const isLoggedIn = useIsUserAuthenticated();\n const isMember = useIsUserAMember();\n\n const storeNewsletter = MEMBER_CONSENT_NEWSLETTER_STORE;\n const [showWeeklyNewsletterSubscription, setShowWeeklyNewsletterSubscription] =\n useState<boolean>(false);\n\n const { data: drPeriodList, isLoading: drListIsLoading } = useDrFlyerQuery(ledgerAccountNumber);\n\n const { data: consents } = useConsentQuery(isLoggedIn && isMember);\n\n useEffect(() => {\n if (consents) {\n // Check if user has store-consent\n const hasConsent = consents?.some(\n (item) => item.id === storeNewsletter && item.accepted,\n );\n\n setShowWeeklyNewsletterSubscription(!hasConsent);\n }\n }, [consents, storeNewsletter]);\n\n const clickHandler = (periodId: Number, current: Boolean, pdfUrl: string) => {\n const pdfLink = periodId ? pdfUrl : `${storeOffersUrlBase}?store=${ledgerAccountNumber}`;\n if (storeName) {\n if (current) {\n ga4StoresTracking.storeFlyerDownload.currentWeek(ledgerAccountNumber, storeName);\n } else {\n ga4StoresTracking.storeFlyerDownload.nextWeek(ledgerAccountNumber, storeName);\n }\n }\n window.open(pdfLink, '_blank');\n };\n\n if (drListIsLoading) return null;\n\n if (\n drPeriodList?.periods === undefined ||\n drPeriodList?.periods.length === 0 ||\n !drPeriodList.periods[0].current\n )\n return null;\n\n return (\n <>\n <div className={classNames(styles.DrFlyer, 'u-sizeFull')}>\n <div className={styles.ContainerFlex}>\n <div\n className={\n !showWeeklyNewsletterSubscription\n ? 'u-size1of1'\n : 'u-size1of1 u-md-size2of4 u-lg-size3of5'\n }\n >\n <div className={styles.Container}>\n <div className={styles.WeekContainer}>\n <div className={`${styles.CurrentWeek} ${styles.Week}`}>\n <div className={styles.ImageContainer}>\n {flyerImageUrl !== undefined && (\n <img\n className={styles.Image}\n src={\n flyerImageUrl ||\n '/Assets/Images/temp/DR-puff-Coop.png'\n }\n alt=\"\"\n />\n )}\n </div>\n <div className={styles.ContentAndButtons}>\n <div className={styles.Content}>\n <Heading\n element=\"h2\"\n fontFamilySecondary\n className={styles.Heading}\n color=\"coopGreen\"\n >\n Veckans reklamblad\n </Heading>\n </div>\n\n <div className={classNames(styles.Button)}>\n <Button\n theme=\"primary\"\n size={isMediumDevice ? 48 : 40}\n fullWidth\n onClick={() =>\n clickHandler(\n drPeriodList.periods[0].id,\n drPeriodList.periods[0].current,\n drPeriodList.periods[0].pdfUrl,\n )\n }\n aria-label=\"Öppna nu - veckans reklamblad\"\n >\n Öppna nu\n </Button>\n {drPeriodList.periods.length > 1 && (\n <Button\n theme=\"whiteGreen\"\n size={isMediumDevice ? 48 : 40}\n fullWidth\n aria-label=\"Se nästa veckas reklamblad\"\n onClick={() =>\n clickHandler(\n drPeriodList.periods[1].id,\n drPeriodList.periods[1].current,\n drPeriodList.periods[1].pdfUrl,\n )\n }\n >\n Se nästa vecka\n </Button>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {showWeeklyNewsletterSubscription && (\n <div\n className={classNames(\n styles.WeeklyNewsContainer,\n 'u-size1of1 u-md-size2of4 u-lg-size2of5',\n )}\n >\n <Image\n src=\"/Assets/Images/yellow-bell.svg\"\n height={isMediumDevice ? '74.5' : '57'}\n width={isMediumDevice ? '71' : '55'}\n alt=\"\"\n />\n <div className={styles.ContentWrapper}>\n <div className={styles.NewsContent}>\n <Heading\n element=\"h2\"\n fontFamilySecondary\n className=\"u-sm-text2XLarge u-lineHeightNormal\"\n color=\"darkGreen\"\n alignment=\"start\"\n >\n Missa inga erbjudanden!\n </Heading>\n <p className={styles.Text}>\n Få en påminnelse på e-post när veckans nya erbjudanden finns\n </p>\n </div>\n\n <Button\n theme=\"primary\"\n aria-label=\"Prenumerera på butikserbjudanden\"\n aria-haspopup=\"dialog\"\n size={isMediumDevice ? 48 : 40}\n onClick={() => open()}\n >\n Prenumerera\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <Modal isOpen={isOpen} close={close}>\n <div className={styles.ModalContainer}>\n <CloseButton modalClose={close} />\n <div className=\" u-paddingVz u-textCenter\">\n <WeeklyNewsletterSubscription close={close} />\n </div>\n </div>\n </Modal>\n </>\n );\n};\n\nexport default DrAndNewsFlyer;\ninterface CloseButtonProps {\n modalClose: () => void;\n}\nconst CloseButton = ({ modalClose }: CloseButtonProps) => {\n return (\n <div className=\"u-flex u-flexJustifyEnd\">\n <ChipIconButton\n icon={CloseIcon}\n theme=\"grey\"\n onClick={modalClose}\n size={32}\n label=\"Stäng\"\n />\n </div>\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"DrFlyer\":\"eVsBZsDr\",\"Week\":\"pf_MVoxN\",\"CurrentWeek\":\"ZOG3IJH_\",\"Heading\":\"HgtQQNAp\",\"ImageContainer\":\"KZuYuByV\",\"Image\":\"XnVwpkgL\",\"Content\":\"sECvY1sb\",\"WeekContainer\":\"z45KDyps\",\"WeeklyNewsContainer\":\"NMqidQ8K\",\"ContentWrapper\":\"W77SwEF7\",\"NewsContent\":\"TLNcrlgn\",\"Text\":\"BMEOCOwQ\",\"Container\":\"na3qCvTb\",\"ContainerFlex\":\"t_MDe6eJ\",\"NextweekContainer\":\"_00cXhos\",\"Button\":\"JDpDbwTp\",\"ModalContainer\":\"KsN8_dtn\",\"SuccessImg\":\"V2vBdDuS\",\"StatusText\":\"mTXOt9eX\",\"LoadingContainer\":\"_hqYkVAL\",\"ContainerBtn\":\"rFRim5LQ\",\"ContentAndButtons\":\"bkMYkP2r\"};","import { Button, Checkbox, ModalHeader, TextInput } from '@coop/components';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\n\nimport { useIsFromXSmall } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport type { ApiException } from '../../../common/exceptions/exceptionDefinitions';\nimport styles from './WeeklyNewsletterSubscription.module.less';\n\nexport interface WeeklyNewsletterSubscriptionProps {\n emailSubscriptionPageUrl: string;\n isLoadingSubscribe: boolean;\n hasFetchError: boolean | null;\n hasSubscribeError: ApiException;\n hasWeeklyNewsletterSubscription: boolean;\n email: string;\n changeEmail: (value: string) => void;\n emailIsInvalid: boolean;\n onConcentChange: () => void;\n emailConsent: boolean;\n subscribeToWeeklyNewsletter: () => void;\n isAuthenticated: boolean;\n}\nconst LabelText: FC<React.PropsWithChildren<unknown>> = () => {\n return (\n <div className=\"u-textMedium\">\n <strong>Ja tack!</strong> Jag vill prenumerera på butikserbjudanden via e-post. Du kan\n avregistrera dig i varje utskick. Mer information om vår personuppgiftsbehandling finns{' '}\n <a href=\"/personuppgifter\" className=\"u-colorGreenMid3\" target=\"_blank\">\n <strong>här</strong>\n </a>\n </div>\n );\n};\n\nconst WeeklyNewsletterSubscription: FC<\n React.PropsWithChildren<WeeklyNewsletterSubscriptionProps>\n> = ({\n emailSubscriptionPageUrl,\n hasWeeklyNewsletterSubscription,\n email,\n changeEmail,\n emailIsInvalid: showInvalidEmail,\n onConcentChange,\n emailConsent,\n subscribeToWeeklyNewsletter,\n isAuthenticated,\n}) => {\n const isXSmallScreen = useIsFromXSmall();\n\n return (\n <div className={classNames(styles.Container, 'u-paddingVz u-textCenter')}>\n <ModalHeader className=\"u-textWeightBold u-textCenter u-textFamilySecondary u-colorGreenDark u-md-text4XLarge u-text3XLarge u-marginVsm\">\n Missa inga butikserbjudanden!\n </ModalHeader>\n <p className=\"u-textMedium u-md-textXLarge u-marginBlg u-md-marginHxxxlg u-paddingHlg\">\n Få en påminnelse på e-post när din butik har nya erbjudanden.\n </p>\n <div\n className={classNames(\n styles.InputContainer,\n 'u-flex u-flexAlignCenter u-flexDirectionColumn',\n )}\n >\n <div className=\"u-flexGrow\">\n <TextInput\n label=\"E-postadress\"\n value={email}\n onChange={changeEmail}\n id=\"weeklyNewsletterEmail\"\n isInvalid={showInvalidEmail}\n validationText=\"Ange en giltig e-postadress\"\n disabledReason={\n isAuthenticated &&\n 'e-postmeddelandet är förifyllt och du kan inte ändra det'\n }\n className=\"u-bgWhite u-borderAllGrayMedium u-borderRadius12 \"\n />\n {!hasWeeklyNewsletterSubscription && isAuthenticated && (\n <a href={emailSubscriptionPageUrl} className={styles.ChangeEmailLink}>\n <strong> Ändra e-postadress </strong>\n </a>\n )}\n <Checkbox\n id=\"weeklyNewsletterConsent\"\n className=\"u-marginVmd\"\n checked={emailConsent}\n onCheckedChange={onConcentChange}\n label={<LabelText />}\n indicatorVerticalPosition=\"top\"\n />\n </div>\n </div>\n\n <div\n className={classNames(\n styles.ButtonWrapper,\n 'u-flex u-flexJustifyCenter u-flexShrinkNone u-marginTsm u-marginBmd',\n )}\n >\n <Button\n onClick={subscribeToWeeklyNewsletter}\n theme=\"primary\"\n size={40}\n disabled={!emailConsent}\n fullWidth={!isXSmallScreen}\n >\n Prenumerera\n </Button>\n </div>\n </div>\n );\n};\n\nexport default WeeklyNewsletterSubscription;\n","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"y5orvfgT\",\"ChangeEmailLink\":\"wnQrNQ2R\",\"InputContainer\":\"Qah9cjjA\",\"ButtonWrapper\":\"KwL78ZM7\"};","import { useEffect, useState } from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport { Helpers } from '../../../../utility/helpers';\nimport tracking from '../../../common/tracking/tracking';\nimport { getNeoId } from '../../../common/utils/neoIdUtils';\nimport useEmailSubscriptionQuery from './useEmailSubscriptionQuery';\nimport useSubscribe from './useSubscribe';\n\nconst useWeeklyNewsletterSubscriptionState = (\n serviceName: string,\n page: string,\n storeName?: string,\n) => {\n const [email, setEmail] = useState<string>(\n appConfig.coopUserSettings.isAuthenticated && appConfig.coopUserSettings.profile\n ? appConfig.coopUserSettings.profile.email\n : '',\n );\n const [emailConsent, setEmailConsent] = useState<boolean>(false);\n const [showInvalidEmail, setShowInvalidEmail] = useState<boolean>(false);\n const [hasWeeklyNewsletterSubscription, setHasWeeklyNewsletterSubscription] =\n useState<boolean>(false);\n\n const shouldStartWithFetchingEmailSubscriptions =\n appConfig.coopUserSettings.isAuthenticated || !!getNeoId();\n\n const {\n isLoading: isLoadingEmailSubscriptions,\n data: emailSubscriptions,\n error: fetchEmailSubscriptionsError,\n } = useEmailSubscriptionQuery(true, shouldStartWithFetchingEmailSubscriptions);\n\n const isAuthenticated =\n appConfig.coopUserSettings.isAuthenticated ||\n (!!getNeoId() && !fetchEmailSubscriptionsError);\n\n const { subscribe, isLoadingSubscribe, subscribeError, subscribeStatus } = useSubscribe(\n serviceName,\n true,\n );\n\n useEffect(() => {\n if (emailSubscriptions?.services) {\n setHasWeeklyNewsletterSubscription(\n emailSubscriptions?.services.some((x) => x.name === serviceName),\n );\n }\n }, [serviceName, emailSubscriptions]);\n\n useEffect(() => {\n if (subscribeStatus === 'success') {\n setHasWeeklyNewsletterSubscription(true);\n }\n }, [subscribeStatus]);\n\n const changeEmail = (value: string) => {\n const newEmail = value;\n setEmail(newEmail);\n if (showInvalidEmail && Helpers.validateEmail(newEmail)) {\n setShowInvalidEmail(false);\n }\n };\n\n const subscribeToWeeklyNewsletter = () => {\n if (!isAuthenticated && !Helpers.validateEmail(email)) {\n setShowInvalidEmail(true);\n return;\n }\n\n // If the user is authenticated, then use email\n subscribe(isAuthenticated ? undefined : email);\n tracking.myCoop.myProfile.subscribeToWeeklyNewsletter(page, storeName);\n };\n\n return {\n isLoading: isLoadingEmailSubscriptions,\n isLoadingSubscribe,\n hasFetchError: fetchEmailSubscriptionsError && isAuthenticated,\n hasSubscribeError: subscribeError,\n hasWeeklyNewsletterSubscription,\n email,\n setEmail,\n changeEmail,\n showInvalidEmail,\n emailConsent,\n setEmailConsent,\n subscribeToWeeklyNewsletter,\n isAuthenticated,\n subscribeStatus,\n };\n};\n\nexport default useWeeklyNewsletterSubscriptionState;\n","import { consentAdobeSubscriptionFlow } from '../../../common/flow/consentAdobeSubscriptionFlow';\nimport { useAsyncDispatcher } from '../../../common/hooks/useAsyncDispatcher';\n\nconst useSubscribe = (service: string | Array<string>, preferNeoId: boolean) => {\n const dispatch = useAsyncDispatcher(async (email?: string) => {\n return consentAdobeSubscriptionFlow.subscribe(\n Array.isArray(service) ? service : [service],\n preferNeoId,\n email,\n );\n });\n\n return {\n subscribe: dispatch.execute,\n isLoadingSubscribe: dispatch.isLoading,\n subscribeError: dispatch.error,\n subscribeStatus: dispatch.status,\n };\n};\n\nexport default useSubscribe;\n","import { Button, ChipIconButton, Loader, Modal } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\n\nimport { appConfig } from '../../../../../../appConfig';\nimport Image from '../../../../../common/components/atoms/Image';\nimport { useIsFromMedium } from '../../../../../common/components/atoms/ResponsiveBreakpoints';\nimport Heading from '../../../../../common/components/Heading';\nimport useModal from '../../../../../common/hooks/useModal';\nimport { ga4StoresTracking } from '../../../../../common/tracking/ga4/stores';\nimport WeeklyNewsletterSubscription from '../../../../../myCoop/emailSubscriptions/components/WeeklyNewsletterSubscription';\nimport useWeeklyNewsletterSubscriptionState from '../../../../../myCoop/emailSubscriptions/hooks/useWeeklyNewsletterSubscriptionState';\nimport useDrFlyerQuery from '../../../../hooks/useDrFlyerQuery';\nimport styles from './DrAndNewsFlyerAdobe.module.less';\n\nexport interface DkFlyerAdobeProps {\n storeName?: string;\n ledgerAccountNumber: string;\n storeOffersUrlBase: string;\n flyerImageUrl?: string;\n emailSubscriptionPageUrl: string;\n}\n\nconst DrAndNewsFlyerAdobe: React.FC<React.PropsWithChildren<DkFlyerAdobeProps>> = ({\n storeName,\n ledgerAccountNumber,\n storeOffersUrlBase,\n flyerImageUrl,\n emailSubscriptionPageUrl,\n}) => {\n const isMediumDevice = useIsFromMedium();\n const { isOpen, close, open } = useModal('StoreNewsFlyer');\n const isMember = appConfig.coopUserSettings.isMedmeraCustomer;\n\n const { data: drPeriodList, isLoading: drListIsLoading } = useDrFlyerQuery(ledgerAccountNumber);\n\n const clickHandler = (periodId: Number, current: Boolean, pdfUrl: string) => {\n const pdfLink = periodId ? pdfUrl : `${storeOffersUrlBase}?store=${ledgerAccountNumber}`;\n if (storeName) {\n if (current) {\n ga4StoresTracking.storeFlyerDownload.currentWeek(ledgerAccountNumber, storeName);\n } else {\n ga4StoresTracking.storeFlyerDownload.nextWeek(ledgerAccountNumber, storeName);\n }\n }\n window.open(pdfLink, '_blank');\n };\n\n const {\n isLoading,\n isLoadingSubscribe,\n hasFetchError,\n hasSubscribeError,\n hasWeeklyNewsletterSubscription,\n email,\n changeEmail,\n showInvalidEmail,\n emailConsent,\n setEmailConsent,\n subscribeToWeeklyNewsletter,\n isAuthenticated,\n subscribeStatus,\n } = useWeeklyNewsletterSubscriptionState('cooDRDigital', 'Butiker och erbjudanden', storeName);\n\n if (isLoading || drListIsLoading) return null;\n\n if (\n drPeriodList?.periods === undefined ||\n drPeriodList?.periods.length === 0 ||\n !drPeriodList.periods[0].current\n )\n return null;\n\n const showWeeklyNewsletterSubscription = !hasWeeklyNewsletterSubscription && isMember;\n\n const onConcentChange = () => setEmailConsent(!emailConsent);\n\n return (\n <>\n <div className={classNames(styles.DrFlyer, 'u-sizeFull')}>\n <div className={styles.ContainerFlex}>\n <div\n className={\n !showWeeklyNewsletterSubscription\n ? 'u-size1of1'\n : 'u-size1of1 u-md-size2of4 u-lg-size3of5'\n }\n >\n <div className={styles.Container}>\n <div className={styles.WeekContainer}>\n <div className={`${styles.CurrentWeek} ${styles.Week}`}>\n <div className={styles.ImageContainer}>\n {flyerImageUrl !== undefined && (\n <img\n className={styles.Image}\n src={\n flyerImageUrl ||\n '/Assets/Images/temp/DR-puff-Coop.png'\n }\n alt=\"\"\n />\n )}\n </div>\n <div className={styles.ContentAndButtons}>\n <div className={styles.Content}>\n <Heading\n element=\"h2\"\n fontFamilySecondary\n className={styles.Heading}\n color=\"coopGreen\"\n >\n Veckans reklamblad\n </Heading>\n </div>\n\n <div className={classNames(styles.Button)}>\n <Button\n theme=\"primary\"\n size={isMediumDevice ? 48 : 40}\n fullWidth\n onClick={() =>\n clickHandler(\n drPeriodList.periods[0].id,\n drPeriodList.periods[0].current,\n drPeriodList.periods[0].pdfUrl,\n )\n }\n aria-label=\"Öppna nu - veckans reklamblad\"\n >\n Öppna nu\n </Button>\n {drPeriodList.periods.length > 1 && (\n <Button\n theme=\"whiteGreen\"\n size={isMediumDevice ? 48 : 40}\n fullWidth\n aria-label=\"Se nästa veckas reklamblad\"\n onClick={() =>\n clickHandler(\n drPeriodList.periods[1].id,\n drPeriodList.periods[1].current,\n drPeriodList.periods[1].pdfUrl,\n )\n }\n >\n Se nästa vecka\n </Button>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {showWeeklyNewsletterSubscription && (\n <div\n className={classNames(\n styles.WeeklyNewsContainer,\n 'u-size1of1 u-md-size2of4 u-lg-size2of5',\n )}\n >\n <Image\n src=\"/Assets/Images/yellow-bell.svg\"\n height={isMediumDevice ? '74.5' : '57'}\n width={isMediumDevice ? '71' : '55'}\n alt=\"\"\n />\n <div className={styles.ContentWrapper}>\n <div className={styles.NewsContent}>\n <Heading\n element=\"h2\"\n fontFamilySecondary\n className=\"u-sm-text2XLarge u-lineHeightNormal\"\n color=\"darkGreen\"\n alignment=\"start\"\n >\n Missa inga erbjudanden!\n </Heading>\n <p className={styles.Text}>\n Få en påminnelse på e-post när veckans nya erbjudanden finns\n </p>\n </div>\n\n <Button\n theme=\"primary\"\n aria-label=\"Prenumerera på butikserbjudanden\"\n aria-haspopup=\"dialog\"\n size={isMediumDevice ? 48 : 40}\n onClick={() => open()}\n >\n Prenumerera\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n <Modal isOpen={isOpen} close={close}>\n <div className={styles.ModalContainer}>\n <CloseButton modalClose={close} />\n {(() => {\n if (isLoadingSubscribe) {\n return (\n <div\n className={classNames(\n styles.LoadingContainer,\n 'u-paddingVz u-flex',\n )}\n >\n <Loader />\n </div>\n );\n }\n\n if (hasFetchError || hasSubscribeError) {\n return (\n <StatusCard\n heading=\"Något gick fel\"\n text=\"Dina prenumerationer kunde inte hämtas just nu. Prova igen om en liten stund.\"\n image=\"/Assets/Images/phone-in-hand.svg\"\n modalClose={close}\n />\n );\n }\n\n if (subscribeStatus) {\n return (\n <StatusCard\n heading=\"Erbjudanden på väg!\"\n text=\" Smart val! När butiken släpper veckans erbjudanden får du en påminnelse på din mail.\"\n image=\"/Assets/Images/paper-plane.svg\"\n modalClose={close}\n />\n );\n }\n\n if (showWeeklyNewsletterSubscription) {\n return (\n <div className=\" u-paddingVz u-textCenter\">\n <WeeklyNewsletterSubscription\n emailSubscriptionPageUrl={emailSubscriptionPageUrl}\n isLoadingSubscribe={isLoadingSubscribe}\n hasFetchError={hasFetchError}\n hasSubscribeError={hasSubscribeError}\n hasWeeklyNewsletterSubscription={\n hasWeeklyNewsletterSubscription\n }\n email={email}\n changeEmail={changeEmail}\n emailIsInvalid={showInvalidEmail}\n onConcentChange={onConcentChange}\n emailConsent={emailConsent}\n subscribeToWeeklyNewsletter={subscribeToWeeklyNewsletter}\n isAuthenticated={isAuthenticated}\n />\n </div>\n );\n }\n })()}\n </div>\n </Modal>\n </>\n );\n};\n\nexport default DrAndNewsFlyerAdobe;\ninterface CloseButtonProps {\n modalClose: () => void;\n}\nconst CloseButton = ({ modalClose }: CloseButtonProps) => {\n return (\n <div className=\"u-flex u-flexJustifyEnd\">\n <ChipIconButton\n icon={CloseIcon}\n theme=\"grey\"\n onClick={modalClose}\n size={32}\n label=\"Stäng\"\n />\n </div>\n );\n};\n\ninterface StatusCardProps {\n heading: string;\n text: string;\n modalClose: () => void;\n image: string;\n}\nconst StatusCard = ({ heading, text, modalClose, image }: StatusCardProps) => {\n return (\n <div className=\" u-paddingVz u-textCenter\">\n <div className=\"u-textCenter u-marginBmd\">\n <img src={image} alt=\"\" className={styles.SuccessImg} />\n <h2 className=\"u-text4XLarge u-textFamilySecondary u-colorGreenDark u-marginVsm\">\n {heading}\n </h2>\n <p\n className={classNames(\n styles.StatusText,\n 'u-textMedium u-md-textXLarge u-marginBxlg u-marginTxsm',\n )}\n >\n {text}\n </p>\n </div>\n <div className={classNames(styles.ContainerBtn, 'u-flex u-flexJustifyCenter')}>\n <Button fullWidth onClick={modalClose} theme=\"primary\" size={40}>\n Stäng\n </Button>\n </div>\n </div>\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"DrFlyer\":\"MEcLYdp7\",\"Week\":\"A5yIbULP\",\"CurrentWeek\":\"vi8YB7YE\",\"Heading\":\"p8jONHsY\",\"ImageContainer\":\"LCNVO4Pt\",\"Image\":\"cDfBlBLH\",\"Content\":\"roclap04\",\"WeekContainer\":\"MW5cvEjb\",\"WeeklyNewsContainer\":\"EaysuIAk\",\"ContentWrapper\":\"zPytzfdT\",\"NewsContent\":\"GgfTvBAd\",\"Text\":\"qi0qmS9b\",\"Container\":\"YDA7pOhT\",\"ContainerFlex\":\"p2vE1Ivd\",\"NextweekContainer\":\"QDgmrtb5\",\"Button\":\"mUmntNSY\",\"ModalContainer\":\"KHCbe_7S\",\"SuccessImg\":\"g4OEFpqA\",\"StatusText\":\"tqe7LGGD\",\"LoadingContainer\":\"fWKeie8k\",\"ContainerBtn\":\"JGmf0rEJ\",\"ContentAndButtons\":\"KWwW6sP8\"};","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFacebookcolor = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Brand=facebook, monochrome=False\",\n clipPath: \"url(#clip0_1519_604)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"background r5\",\n d: \"M0 5C0 2.23858 2.23858 0 5 0H19C21.7614 0 24 2.23858 24 5V19C24 21.7614 21.7614 24 19 24H5C2.23858 24 0 21.7614 0 19V5Z\",\n fill: \"#3A559F\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Vector\",\n d: \"M16 7H14.076C13.461 7 13 7.252 13 7.889V9H16L15.762 12H13V20H10V12H8V9H10V7.077C10 5.055 11.064 4 13.461 4H16V7Z\",\n fill: \"white\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_1519_604\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 24,\n height: 24,\n fill: \"white\"\n })))));\n};\nexport default SvgFacebookcolor;","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"c_4Ht6Tz\",\"FacebookBgImageWrapper\":\"tk1U4Uzt\",\"ButtonWrapper\":\"uqkpWOO4\",\"CoopLogoWrapper\":\"yOM0Cwwh\",\"CoopLogo\":\"s4RFPH5X\"};","import { Chip, Icon } from '@coop/components';\nimport { useElementEvent } from '@coop/hooks';\nimport { CoopLogoIcon, FacebookLogoColorIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport { useCallback, useRef, useState } from 'react';\n\nimport styles from './FacebookNewsFeed.module.less';\n\ninterface FacebookProps {\n facebookUsername: string;\n}\n\nconst FacebookNewsFeed: React.FC<React.PropsWithChildren<FacebookProps>> = (props) => {\n const [topValueLogo, setTopValueLogo] = useState(0);\n const [bgImageHeight, setBgImageHeight] = useState(0);\n const [logoHeight, setLogoHeight] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const updateSizesOnWidth = useCallback(() => {\n if (containerRef.current !== null && containerRef.current) {\n const containerWidth = containerRef.current.clientWidth;\n\n const newTopValueLogo = containerWidth * 0.07;\n const newBgImageHeight = containerWidth * 0.25;\n const newLogoHeight = containerWidth * 0.2;\n\n setTopValueLogo(newTopValueLogo);\n setBgImageHeight(newBgImageHeight);\n setLogoHeight(newLogoHeight);\n }\n }, []);\n\n useElementEvent(window, 'resize', updateSizesOnWidth, true);\n\n return (\n <div className={classNames(styles.Container, 'NewsTeaser')}>\n <div\n className={styles.FacebookBgImageWrapper}\n ref={containerRef}\n style={{ minHeight: `${bgImageHeight}px` }}\n />\n <div className={styles.CoopLogoWrapper} style={{ top: `${topValueLogo}px` }}>\n <div className={styles.CoopLogo} style={{ height: `${logoHeight}px` }}>\n <Icon icon={CoopLogoIcon} color=\"white\" />\n </div>\n </div>\n\n <div className={classNames(styles.FacebookContent, 'NewsTeaser-content')}>\n <h2 className=\"u-textCenter u-text3XLarge\">Vi finns på Facebook</h2>\n <div className=\"NewsTeaser-cell u-textCenter u-colorDarkGray u-paddingBmd\">\n Lär känna oss och vår butik på Facebook. Lokala nyheter, inspiration och se vad\n som händer i butiken. Välkommen!\n </div>\n <div className=\"NewsTeaser-cell\">\n <div className=\"NewsTeaser-info\">\n <div className={styles.ButtonWrapper}>\n <Chip\n asChild\n theme=\"greenCta\"\n size={32}\n leftSlot={\n <Icon icon={FacebookLogoColorIcon} width={16} height={16} />\n }\n >\n <a\n href={`https://www.facebook.com/${props.facebookUsername}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Följ oss på Facebook\n </a>\n </Chip>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\nexport default FacebookNewsFeed;\n","import FacebookNewsFeed from '../FacebookNewsFeed';\n\ninterface NewsFlyerFacebookContainerProps {\n facebookUsername?: string;\n}\nconst FacebookContainer: React.FC<React.PropsWithChildren<NewsFlyerFacebookContainerProps>> = (\n props,\n) => {\n let { facebookUsername } = props;\n\n if (!facebookUsername || facebookUsername.trim().length === 0) {\n facebookUsername = 'CoopSverige';\n }\n\n return (\n <div className=\"Grid Grid--gutterA Grid--equalHeight u-flexJustifyCenter\">\n <div className=\"Grid-cell u-md-size2of3 u-lg-size1of2 \">\n <FacebookNewsFeed facebookUsername={facebookUsername} />\n </div>\n </div>\n );\n};\nexport default FacebookContainer;\n","import { Button, Icon } from '@coop/components';\nimport { PinIcon } from '@coop/icons';\n\ninterface FindStoreButtonProps {\n onClick: () => void;\n fullWidth?: boolean;\n}\n\nconst FindStoreButton = (props: FindStoreButtonProps) => {\n return (\n <Button\n onClick={props.onClick}\n theme=\"primary\"\n size={48}\n rightSlot={<Icon icon={PinIcon} />}\n fullWidth={props.fullWidth}\n >\n Hitta Butik\n </Button>\n );\n};\n\nexport default FindStoreButton;\n","import { Button, Icon } from '@coop/components';\nimport { HomeIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport { Link } from 'react-router-dom';\n\nimport { useIsMobile } from '../../../../../common/components/atoms/ResponsiveBreakpoints';\nimport { ga4StoresTracking } from '../../../../../common/tracking/ga4/stores';\nimport { ensureTrailingSlash } from '../../../../../common/utils/urlUtils';\nimport type { FavoriteStore } from '../../../../models';\nimport styles from './DropdownFullWidth.module.less';\nimport FindStoreButton from './FindStoreButton';\n\ninterface DropdownFullWidthProps {\n favoriteStores: FavoriteStore[];\n neoId: string | null;\n openStoreSearchWithTracking: () => void;\n onClickHandler: () => void;\n}\nconst DropdownFullWidth: React.FC<React.PropsWithChildren<DropdownFullWidthProps>> = ({\n favoriteStores,\n neoId,\n openStoreSearchWithTracking,\n onClickHandler,\n}) => {\n const fullUri = window.location.href;\n const isMobile = useIsMobile();\n\n const favoriteStoreTracking = (clickedStoreName: string) => {\n ga4StoresTracking.storeTab(fullUri, clickedStoreName);\n };\n\n const findStoreHandler = () => {\n openStoreSearchWithTracking();\n onClickHandler();\n };\n return (\n <div\n className={classNames(\n 'Main-container Main-container--padding',\n styles.DropDownContentWrapper,\n )}\n >\n <h2 className=\"u-flex u-flexAlignCenter u-marginBxxxsm\">\n <Icon icon={HomeIcon} title=\"home\" />\n\n <span className=\"u-textMedium u-md-textXLarge u-marginLxxsm\">\n {' '}\n Mina favoritbutiker{' '}\n </span>\n </h2>\n\n <div className={styles.FavoriteStoreWrapper}>\n {favoriteStores &&\n favoriteStores\n .filter((item) => !!item.url)\n .map((favoriteStore) => (\n <Button theme=\"light\" asChild size={48}>\n <Link\n key={favoriteStore.ledgerAccountNumber}\n to={`${ensureTrailingSlash(favoriteStore.url!)}${\n neoId ? `?neoId=${neoId}` : ''\n }`}\n onClick={() => {\n favoriteStoreTracking(favoriteStore.name);\n onClickHandler();\n }}\n >\n {favoriteStore.name}\n </Link>\n </Button>\n ))}\n\n <div className={classNames(isMobile ? styles['FindStoreButton--next-line'] : '')}>\n <FindStoreButton onClick={findStoreHandler} fullWidth={isMobile} />\n </div>\n </div>\n </div>\n );\n};\nexport default DropdownFullWidth;\n","// extracted by mini-css-extract-plugin\nexport default {\"DropDownContentWrapper\":\"qw0OauqF\",\"FavoriteStoreWrapper\":\"i8Vtn1EQ\",\"FindStoreButton--next-line\":\"wDYmq_Sd\"};","import { Button, Icon } from '@coop/components';\nimport { ChevronDownIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\n\nimport { useIsUserAuthenticated } from '../../../../../common/hooks/useUserProfile';\nimport type { FavoriteStore } from '../../../../models';\nimport FindStoreButton from './FindStoreButton';\nimport styles from './StoreFavoritesDropdownTrigger.module.less';\n\ninterface StoreFavoritesDropdownTriggerProps {\n favoriteStores: FavoriteStore[];\n isExpanded: boolean;\n openStoreSearchWithTracking: () => void;\n onClickHandler: () => void;\n}\n\nconst StoreFavoritesDropdownTrigger: FC<\n React.PropsWithChildren<StoreFavoritesDropdownTriggerProps>\n> = ({ favoriteStores, onClickHandler, isExpanded, openStoreSearchWithTracking }) => {\n const isAuthenticated = useIsUserAuthenticated();\n return (\n <div\n className={classNames(\n 'Main-container Main-container--padding u-paddingVsm',\n styles.FavoriteStoreButtonWrapper,\n )}\n style={{ position: 'relative' }}\n >\n {favoriteStores?.length > 0 && isAuthenticated ? (\n <Button\n theme={isExpanded ? 'whiteGreen' : 'primary'}\n onClick={onClickHandler}\n size={48}\n aria-controls=\"FavoriteStores-Dropdown\"\n aria-expanded={isExpanded}\n rightSlot={\n <Icon\n icon={ChevronDownIcon}\n rotateClockwise={isExpanded ? '180deg' : '0deg'}\n />\n }\n >\n Byt Butik\n <span\n className={classNames(\n styles['FavoriteStoreDropDown-badge'],\n isExpanded\n ? styles['FavoriteStoreDropDown-badge--green']\n : styles['FavoriteStoreDropDown-badge--white'],\n )}\n >\n {' '}\n {favoriteStores?.length}{' '}\n </span>\n </Button>\n ) : (\n <FindStoreButton onClick={openStoreSearchWithTracking} />\n )}\n </div>\n );\n};\n\nexport default StoreFavoritesDropdownTrigger;\n","// extracted by mini-css-extract-plugin\nexport default {\"FavoriteStoreButtonWrapper\":\"vEbZEcgL\",\"FavoriteStoreDropDown-badge--white\":\"AMjptkbH\",\"FavoriteStoreDropDown-badge--green\":\"jZbc8D2Q\",\"FavoriteStoreDropDown-badge\":\"WpMgVl4I\"};","import classNames from 'classnames';\nimport type { FC } from 'react';\nimport type React from 'react';\nimport { useState } from 'react';\nimport AnimateHeight from 'react-animate-height';\n\nimport useModal from '../../../../../common/hooks/useModal';\nimport { StoreModalType } from '../../../../../common/store/structureDefinitions/modalState';\nimport { ga4StoresTracking } from '../../../../../common/tracking/ga4/stores';\nimport type { FavoriteStore } from '../../../../models';\nimport DropdownFullWidth from './DropdownFullWidth';\nimport styles from './StoreFavoritesDropdownContent.module.less';\nimport StoreFavoritesDropdownTrigger from './StoreFavoritesDropdownTrigger';\n\ninterface StoreFavoritesDropdownContentProps {\n favoriteStores: FavoriteStore[];\n\n neoId: string | null;\n}\nconst StoreFavoritesDropdownContent: FC<\n React.PropsWithChildren<StoreFavoritesDropdownContentProps>\n> = ({\n favoriteStores,\n\n neoId,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [isAnimatingDropdown, setIsAnimatingDropdown] = useState(false);\n const onClickHandler = () => {\n setIsExpanded((prev) => !prev);\n };\n\n const fullUri = window.location.href;\n\n const { open: openStoreSearch } = useModal(StoreModalType.StoreSearchMap);\n\n const openStoreSearchWithTracking = () => {\n openStoreSearch();\n ga4StoresTracking.findStore(fullUri);\n };\n return (\n <>\n <div\n className={\n isAnimatingDropdown\n ? classNames(styles['DropdownWrapperBg--white'], 'u-zIndex13')\n : styles['DropdownWrapperBg--green']\n }\n >\n {favoriteStores && (\n <StoreFavoritesDropdownTrigger\n favoriteStores={favoriteStores}\n isExpanded={isAnimatingDropdown}\n openStoreSearchWithTracking={openStoreSearchWithTracking}\n onClickHandler={onClickHandler}\n />\n )}\n </div>\n\n <div\n className={classNames(\n styles.DropdownWrapper,\n isAnimatingDropdown && styles['DropdownWrapper--border'],\n )}\n >\n <AnimateHeight\n id=\"FavoriteStores-Dropdown\"\n duration={500}\n height={isExpanded ? 'auto' : 0}\n onAnimationStart={() => {\n if (!isAnimatingDropdown) {\n setIsAnimatingDropdown(true);\n }\n }}\n onAnimationEnd={() => {\n if (isAnimatingDropdown) {\n setIsAnimatingDropdown(false);\n }\n }}\n >\n <DropdownFullWidth\n favoriteStores={favoriteStores}\n neoId={neoId}\n openStoreSearchWithTracking={openStoreSearchWithTracking}\n onClickHandler={onClickHandler}\n />\n </AnimateHeight>\n </div>\n </>\n );\n};\n\nexport default StoreFavoritesDropdownContent;\n","// extracted by mini-css-extract-plugin\nexport default {\"FindStoreButton\":\"pTSeIof9\",\"DropdownWrapperBg--green\":\"c6gvTTSJ\",\"DropdownWrapperBg--white\":\"QAeASLcv\",\"DropdownWrapper\":\"SD1pDaMx\",\"DropdownWrapper--border\":\"TCbRz2HE\"};","// extracted by mini-css-extract-plugin\nexport default {\"StoreDetailsButton\":\"QxIyRXxy\",\"StoreInformationWrapper\":\"wZuMK_je\",\"StoreInformation\":\"js0iIvM5\",\"Heading\":\"SomCyr7E\",\"SubHeading\":\"dTR8wrLa\",\"FavoriteToggle\":\"Ny6eoRqZ\",\"DetailsModal\":\"GjhI5RTZ\",\"DetailsModal-heading\":\"rryMzlTA\",\"DetailsModal-close\":\"gibdaY2K\",\"DetailsModal-body\":\"Fi3yHFnj\",\"DetailsModal-column\":\"mp3Emzf7\",\"DetailsModal-columnHeading\":\"Vgb424Ld\",\"DetailsModal--mobile\":\"AI7QF0wH\",\"Accordion\":\"K9_dBxG8\",\"AccordionHeader\":\"G4OrMdMa\"};","interface ContactProps {\n phoneNumber: string;\n customerServiceUrl?: string;\n}\n\nconst Contact: React.FC<React.PropsWithChildren<ContactProps>> = (props) => {\n const title =\n 'Under frågor och svar hittar du svar på de vanligaste frågorna om Coop. Du kan också kontakta oss.';\n\n return props.phoneNumber ? (\n <div>\n <p className=\"u-marginTz\">\n För frågor om butikens sortiment och priser, ring oss:\n <br />\n Telefon:\n <a\n href={`tel:${props.phoneNumber}`}\n className=\"Link Link--bold Link--dsCtaGreen\"\n style={{ paddingLeft: '2px' }}\n >\n {props.phoneNumber}\n </a>\n </p>\n {props.customerServiceUrl && (\n <p>\n För övriga generella frågor om Coop, kontakta \n <a\n href={props.customerServiceUrl}\n title={title}\n className=\"Link Link--bold Link--dsCtaGreen\"\n >\n Kundservice\n </a>\n .\n </p>\n )}\n </div>\n ) : (\n // eslint-disable-next-line react/jsx-no-useless-fragment\n <>\n {props.customerServiceUrl && (\n <p className=\"u-marginTz\">\n För övriga \n <a\n href={props.customerServiceUrl}\n title={title}\n className=\"Link Link--bold Link--dsCtaGreen\"\n >\n Kundservice\n </a>\n .\n </p>\n )}\n </>\n );\n};\nexport default Contact;\n","import { getStreetAndGoogleAddress } from '../../StorePage.utils';\n\ninterface FindStoreProps {\n storeName: string;\n address: string;\n}\n\nconst FindStore: React.FC<React.PropsWithChildren<FindStoreProps>> = (props) => {\n const address = getStreetAndGoogleAddress(props.address, props.storeName);\n\n return (\n <>\n <div>\n {props.storeName}\n <br />\n {address?.addressStr[0]}\n <br />\n {address?.addressStr[1]} {address?.addressStr[2]}\n </div>\n <p>\n <a\n className=\"Link Link--bold Link--dsCtaGreen\"\n href={address?.googleAddress}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Visa på karta\n </a>\n </p>\n </>\n );\n};\n\nexport default FindStore;\n","import classNames from 'classnames';\n\ninterface InstoreProps {\n services: string[];\n storeServices1: string[];\n storeServices2: string[];\n storeServices3: string[];\n storeServices4: string[];\n}\n\nconst InStore: React.FC<React.PropsWithChildren<InstoreProps>> = (props) => {\n const services = [] as { title: string; list: string[] }[];\n\n if (props.storeServices1.length) {\n services.push({ title: 'Sortiment', list: props.storeServices1 });\n }\n\n if (props.storeServices2.length) {\n services.push({ title: 'Spel & förbutik', list: props.storeServices2 });\n }\n\n if (props.storeServices3.length) {\n services.push({ title: 'Paket & service', list: props.storeServices3 });\n }\n\n if (props.storeServices4.length) {\n services.push({ title: 'Kassor', list: props.storeServices4 });\n }\n\n return (\n <>\n {services.map((service, index) => (\n <div key={service.title} className={classNames(index !== 0 && 'u-marginTmd')}>\n <strong>{service.title}</strong>\n <ul className=\"List List--noSpacing\">\n {service.list.map((serviceItem) => (\n <li key={serviceItem}>{serviceItem}</li>\n ))}\n </ul>\n </div>\n ))}\n </>\n );\n};\nexport default InStore;\n","import type { OpeningHours } from '../../../../models';\n\ninterface OpenHoursDetailProps {\n futureStoreOpenHours: OpeningHours[];\n storeOpenHours: OpeningHours[];\n}\n\nconst OpenHoursDetails: React.FC<React.PropsWithChildren<OpenHoursDetailProps>> = (props) => {\n const todaysDate = new Date();\n const futureStoreOpenHours = props.futureStoreOpenHours.filter(\n (specialDates) => !(new Date(specialDates.date) < todaysDate),\n );\n\n return (\n <div className=\"u-sizeFull\">\n {props.storeOpenHours && (\n <div>\n {props.storeOpenHours\n .filter((s) => !s.isSpecialDate)\n .map((timeItem) => {\n return (\n <div key={timeItem.id} className=\"u-flex u-flexJustifySpaceBetween\">\n <div>{timeItem.text}</div>\n <div className=\"u-whitespaceNoWrap\">\n {timeItem.openHoursText}\n </div>\n </div>\n );\n })}\n </div>\n )}\n {!!props.futureStoreOpenHours?.length && (\n <div>\n {futureStoreOpenHours.map((timeItem) => {\n return (\n <div key={timeItem.id} className=\"u-flex u-flexJustifySpaceBetween\">\n <div>\n <em>{timeItem.text}</em>\n </div>\n <div className=\"u-whitespaceNoWrap\">\n <em>{timeItem.openHoursText}</em>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\nexport default OpenHoursDetails;\n","import { Accordion, ChipIconButton } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\n\nimport { BrowserSize } from '../../../../../../utility/browser';\nimport { Modal } from '../../../../../common/components/atoms/Modal';\nimport { useFromBrowserMediaQuery } from '../../../../../common/components/atoms/ResponsiveBreakpoints';\nimport useModal from '../../../../../common/hooks/useModal';\nimport { StoreModalType } from '../../../../../common/store/structureDefinitions/modalState';\nimport type { OpeningHours } from '../../../../models';\nimport { filterServices } from '../../StorePage.utils';\nimport Contact from './Contact';\nimport FindStore from './FindStore';\nimport InStore from './InStore';\nimport OpenHoursDetails from './OpenHoursDetail';\nimport styles from './StoreInformation.module.less';\n\ninterface StoreInformationModalProps {\n address?: string;\n phoneNumber?: string;\n services: string[];\n storeOpenHours: OpeningHours[];\n futureStoreOpenHours: OpeningHours[];\n storeName: string;\n storeServices1: string;\n storeServices2: string;\n storeServices3: string;\n storeServices4: string;\n customerServiceUrl?: string;\n}\n\nconst StoreInformationModal: React.FC<React.PropsWithChildren<StoreInformationModalProps>> = (\n props,\n) => {\n const { isOpen, close } = useModal(StoreModalType.StoreInformation);\n\n const isFromMedium = useFromBrowserMediaQuery(BrowserSize.md);\n\n let showAddress = false;\n let showOpenHours = false;\n let showInStore = false;\n\n const services1 = filterServices(props.services, props.storeServices1);\n\n const services2 = filterServices(props.services, props.storeServices2);\n\n const services3 = filterServices(props.services, props.storeServices3);\n\n const services4 = filterServices(props.services, props.storeServices4);\n\n if (props.storeOpenHours?.length > 0) {\n showOpenHours = true;\n }\n\n if (props.address && props.address.length > 0) {\n showAddress = true;\n }\n\n if (!!services1.length || !!services2.length || !!services3.length || !!services4.length) {\n showInStore = true;\n }\n\n return (\n <Modal\n additionalClasses={classNames(\n styles.DetailsModal,\n !isFromMedium && styles['DetailsModal--mobile'],\n )}\n isOpen={isOpen}\n close={close}\n >\n <div className=\"u-posAbsolute\" style={{ top: 15, right: 15 }}>\n <ChipIconButton\n size={32}\n onClick={close}\n icon={CloseIcon}\n label=\"Stäng\"\n theme=\"whiteGreen\"\n />\n </div>\n\n {isFromMedium ? (\n <>\n <div className={styles['DetailsModal-heading']}>Om butiken</div>\n <div className={styles['DetailsModal-body']}>\n {showOpenHours && (\n <div className={styles['DetailsModal-column']}>\n <div className={styles['DetailsModal-columnHeading']}>Öppet</div>\n <div className=\"u-sizeFull\">\n <OpenHoursDetails\n storeOpenHours={props.storeOpenHours}\n futureStoreOpenHours={props?.futureStoreOpenHours}\n />\n </div>\n </div>\n )}\n {showInStore && (\n <div className={styles['DetailsModal-column']}>\n <div className={styles['DetailsModal-columnHeading']}>\n Serviceutbud\n </div>\n <div className=\"u-sizeFull\">\n <InStore\n services={props.services || []}\n storeServices1={services1 || []}\n storeServices2={services2 || []}\n storeServices3={services3 || []}\n storeServices4={services4 || []}\n />\n </div>\n </div>\n )}\n {showAddress && props.address && (\n <div className={styles['DetailsModal-column']}>\n <div className={styles['DetailsModal-columnHeading']}>\n Hitta hit\n </div>\n <div className=\"u-sizeFull\">\n <FindStore\n storeName={props.storeName}\n address={props.address}\n />\n </div>\n </div>\n )}\n {props.phoneNumber && (\n <div className={styles['DetailsModal-column']}>\n <div className={styles['DetailsModal-columnHeading']}>\n Kontakta oss\n </div>\n <div className=\"u-sizeFull\">\n <Contact\n phoneNumber={props.phoneNumber}\n customerServiceUrl={props.customerServiceUrl}\n />\n </div>\n </div>\n )}\n </div>\n </>\n ) : (\n <>\n <div className={styles['DetailsModal-heading']}>Om butiken</div>\n <Accordion.Root\n type=\"single\"\n collapsible\n theme=\"white\"\n className={styles.Accordion}\n splitted\n >\n {showOpenHours && (\n <Accordion.Item value=\"Öppet\">\n <Accordion.Header asChild className={styles.AccordionHeader}>\n <Accordion.Trigger>\n <div>Öppet</div>\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <div>\n <OpenHoursDetails\n storeOpenHours={props.storeOpenHours}\n futureStoreOpenHours={props?.futureStoreOpenHours}\n />\n </div>\n </Accordion.Content>\n </Accordion.Item>\n )}\n {showInStore && (\n <Accordion.Item value=\"Serviceutbud\">\n <Accordion.Header asChild className={styles.AccordionHeader}>\n <Accordion.Trigger>\n <div>Serviceutbud</div>\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <div>\n <InStore\n services={props.services}\n storeServices1={services1}\n storeServices2={services2}\n storeServices3={services3}\n storeServices4={services4}\n />\n </div>\n </Accordion.Content>\n </Accordion.Item>\n )}\n {showAddress && props.address && (\n <Accordion.Item value=\"Hitta hit\">\n <Accordion.Header asChild className={styles.AccordionHeader}>\n <Accordion.Trigger>\n <div>Hitta hit & kontakta oss</div>\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <div>\n <p className=\"u-textWeightBold u-marginBxxsm u-marginTz\">\n Address\n </p>\n <FindStore\n storeName={props.storeName}\n address={props.address}\n />\n {props.phoneNumber && (\n <>\n <p className=\"u-textWeightBold u-marginBxxsm u-marginTmd\">\n Kontakta oss\n </p>\n <Contact phoneNumber={props.phoneNumber} />\n </>\n )}\n </div>\n </Accordion.Content>\n </Accordion.Item>\n )}\n </Accordion.Root>\n </>\n )}\n </Modal>\n );\n};\n\nexport default StoreInformationModal;\n","import { Confirm, IconButton } from '@coop/components';\nimport { HeartFilledIcon, HeartIcon } from '@coop/icons';\nimport type { FC } from 'react';\n\nimport useModal from '../../../../../common/hooks/useModal';\nimport { useIsUserAuthenticated } from '../../../../../common/hooks/useUserProfile';\nimport { useIsB2BRoute } from '../../../../../common/utils/b2bUtils';\nimport {\n getCreateAccountUrl,\n getLoginUrlWithReturnUrl,\n} from '../../../../../common/utils/urlUtils';\nimport styles from './ToggleFavoriteStoreButton.module.scss';\n\ninterface ToggleFavoriteStoreButtonProps {\n isStoreFavorite: boolean;\n toggleCurrentStoreToFavoriteStore: () => void;\n storeName: string;\n}\n\nconst ToggleFavoriteStoreButton: FC<React.PropsWithChildren<ToggleFavoriteStoreButtonProps>> = (\n props,\n) => {\n const { isOpen, open, close } = useModal();\n\n const isAuthenticated = useIsUserAuthenticated();\n\n const isB2BRoute = useIsB2BRoute();\n\n const loginUrl = getLoginUrlWithReturnUrl(isB2BRoute ? 'company' : 'private', 'none', true);\n\n const createAccountUrl = getCreateAccountUrl(isB2BRoute ? 'company' : 'private');\n\n return (\n <div className={styles.Container}>\n <div className={styles['FavoriteToggle-buttonWrapper']}>\n <IconButton\n icon={props.isStoreFavorite && isAuthenticated ? HeartFilledIcon : HeartIcon}\n label={\n props.isStoreFavorite\n ? 'Ta bort som favoritbutik'\n : 'Lägg till som favoritbutik'\n }\n size={40}\n theme=\"whiteOutline\"\n onClick={isAuthenticated ? props.toggleCurrentStoreToFavoriteStore : open}\n />\n\n <Confirm\n show={isOpen}\n close={close}\n onConfirm={() => {}}\n heading=\"Logga in för att spara din favoritbutik\"\n confirmButtonProps={{\n asChild: true,\n children: <a href={loginUrl}>Logga in</a>,\n }}\n cancelButtonProps={{\n asChild: true,\n children: <a href={createAccountUrl}>Skapa konto</a>,\n }}\n />\n </div>\n </div>\n );\n};\n\nexport default ToggleFavoriteStoreButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"noQ3EcJW\",\"FavoriteToggle-buttonWrapper\":\"JPrsDF5U\"};","import EmphasizedButton from '../../../../../common/components/molecules/EmphasizedButton';\nimport useModal from '../../../../../common/hooks/useModal';\nimport { StoreModalType } from '../../../../../common/store/structureDefinitions/modalState';\nimport { sendGaInteractionClickEvent } from '../../../../../common/tracking/common/interactionClickEvents';\nimport type { OpeningHours, Store } from '../../../../models';\nimport styles from './StoreInformation.module.less';\nimport StoreInformationModal from './StoreInformationModal';\nimport ToggleFavoriteStoreButton from './ToggleFavoriteStoreButton';\n\ninterface StoreInformationProps {\n singleStoreInformation?: Store;\n singleStoreInformationLoading: boolean;\n isStoreFavorite: boolean;\n toggleCurrentStoreToFavoriteStore: () => void;\n storeServices1: string;\n storeServices2: string;\n storeServices3: string;\n storeServices4: string;\n customerServiceUrl?: string;\n}\n\nconst StoreInformation: React.FC<React.PropsWithChildren<StoreInformationProps>> = (props) => {\n const { isOpen, close, open } = useModal(StoreModalType.StoreInformation);\n\n const getFormattedStoreOpenHours = (openingHours: OpeningHours[]) => {\n return openingHours.map((item) => ({\n ...item,\n openHoursText:\n item.openHoursText === '0-0' ? (\n <span className=\"u-textSmall\">Öppet dygnet runt</span>\n ) : (\n item.openHoursText\n ),\n text:\n item.openHoursText === '0-0' && item.text === 'Måndag-fredag'\n ? 'Mån-Fre'\n : item.text,\n }));\n };\n\n const onStoreDetailsToggleCLick = () => {\n if (props.singleStoreInformation) {\n sendGaInteractionClickEvent({\n eventCategory: 'Butiker och erbjudanden',\n eventAction: 'Information om butiken',\n eventLabel: props.singleStoreInformation.name,\n });\n }\n if (isOpen) {\n close();\n } else {\n open();\n }\n };\n\n return (\n <>\n <div className={styles.StoreInformationWrapper}>\n <div className={styles.StoreInformation}>\n <div className={styles.Heading}>\n {props.singleStoreInformation ? (\n <h1>{props.singleStoreInformation?.name} </h1>\n ) : (\n <h1> </h1> // to prevent layout shifts while store data is loading\n )}\n {props.singleStoreInformation && (\n <div className={styles.FavoriteToggle}>\n <ToggleFavoriteStoreButton\n isStoreFavorite={props.isStoreFavorite}\n toggleCurrentStoreToFavoriteStore={\n props.toggleCurrentStoreToFavoriteStore\n }\n storeName={props.singleStoreInformation?.name}\n />\n </div>\n )}\n </div>\n <div className={styles.SubHeading}>\n {props.singleStoreInformation?.openingHoursToday ? (\n <>\n Öppet idag:{' '}\n {props.singleStoreInformation?.openingHoursToday === '0-0'\n ? 'Öppet dygnet runt'\n : props.singleStoreInformation?.openingHoursToday}\n </>\n ) : (\n <> </> // to prevent layout shifts while store data is loading\n )}\n </div>\n </div>\n <div className={styles.StoreDetailsButton}>\n <EmphasizedButton\n onClick={onStoreDetailsToggleCLick}\n theme=\"whiteGreen\"\n size={48}\n >\n Om butiken\n </EmphasizedButton>\n </div>\n </div>\n {props.singleStoreInformation && (\n <StoreInformationModal\n storeOpenHours={getFormattedStoreOpenHours(\n props.singleStoreInformation.openingHours,\n )}\n futureStoreOpenHours={getFormattedStoreOpenHours(\n props.singleStoreInformation.futureIrregularOpeningHours,\n )}\n storeName={props.singleStoreInformation.name}\n address={props.singleStoreInformation.address}\n phoneNumber={props.singleStoreInformation.phone}\n services={props.singleStoreInformation.services}\n storeServices1={props.storeServices1}\n storeServices2={props.storeServices2}\n storeServices3={props.storeServices3}\n storeServices4={props.storeServices4}\n customerServiceUrl={props.customerServiceUrl}\n />\n )}\n </>\n );\n};\nexport default StoreInformation;\n","import type { FC } from 'react';\n\nimport type { EpiStoreSettingsPageType } from '../../../../../episerver/components/pages/EpiStoreSettingsPage/epiStoreSettingsPageType';\nimport type { FavoriteStore, Store } from '../../../../models';\nimport StoreFavoritesDropdownContent from '../StoreFavoritesDropdownContent/StoreFavoritesDropdownContent';\nimport StoreInformation from '../StoreInformation/StoreInformation';\n\ninterface StorePageHeaderProps {\n neoId: string | null;\n currentStore?: Store;\n singleStoreInformationLoading: boolean;\n favoriteStores: FavoriteStore[];\n storePageSettings?: EpiStoreSettingsPageType;\n isStoreFavorite: boolean;\n toggleCurrentStoreToFavoriteStore: () => void;\n}\n\nconst StorePageHeader: FC<React.PropsWithChildren<StorePageHeaderProps>> = (props) => {\n return (\n <div className=\"u-flex u-flexDirectionColumn\">\n <StoreFavoritesDropdownContent\n favoriteStores={props.favoriteStores}\n neoId={props.neoId}\n />\n\n <StoreInformation\n singleStoreInformation={props.currentStore}\n singleStoreInformationLoading={props.singleStoreInformationLoading}\n isStoreFavorite={props.isStoreFavorite}\n toggleCurrentStoreToFavoriteStore={props.toggleCurrentStoreToFavoriteStore}\n storeServices1={props.storePageSettings?.storeServices1 || ''}\n storeServices2={props.storePageSettings?.storeServices2 || ''}\n storeServices3={props.storePageSettings?.storeServices3 || ''}\n storeServices4={props.storePageSettings?.storeServices4 || ''}\n customerServiceUrl={props.storePageSettings?.customerServiceLink?.url}\n />\n </div>\n );\n};\n\nexport default StorePageHeader;\n","/* eslint-disable react/jsx-no-undef */\nimport { OverlayPacmanLoader } from '@coop/components';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { appConfig } from '../../../../appConfig';\nimport { b2bModeTrigger } from '../../../base/components/UserTypeModeSwitch/UserTypeModeSwitch.utils';\nimport { useIsDesktop } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport PageProperties from '../../../common/components/molecules/PageProperties';\nimport type { TabItem } from '../../../common/components/molecules/TabSwitcher';\nimport { TabSwitcher } from '../../../common/components/molecules/TabSwitcher';\nimport { useQuerySearchParam } from '../../../common/hooks/useQuerySearchParams';\nimport type { PageBaseProps } from '../../../common/models/props/PageBaseProps';\nimport { sendGaInteractionWithoutCustomerSegment } from '../../../common/tracking/commonEvents';\nimport { ga4StoresTracking } from '../../../common/tracking/ga4/stores';\nimport EpiContentArea from '../../../episerver/components/base/EpiContentArea';\nimport useDkeOffersQuery from '../../hooks/useDkeOffersQuery';\nimport useFavoriteStores from '../../hooks/useFavoriteStores';\nimport useStoreByIdQuery from '../../hooks/useStoreByIdQuery';\nimport { useStoreConceptPageQuery } from '../../hooks/useStoreConceptPageQuery';\nimport { useStoreSettingsPageQuery } from '../../hooks/useStoreSettingsPageQuery';\nimport BecomeAMemberBlock from '../../physicalOffers/components/BecomeAMemberBlock';\nimport OfferPropositionsListBlock from '../../physicalOffers/components/blocks/OfferPropositionsListBlock';\nimport StoreOffersListBlock from '../../physicalOffers/components/blocks/StoreOffersListBlock';\nimport { updateLastVisitedStoreLocalStorage } from '../../utils';\nimport CateringDoubleImageTextBlock from './components/CateringDoubleImageTextBlock';\nimport DrAndNewsFlyer from './components/DrAndNewsFlyer';\nimport DrAndNewsFlyerAdobe from './components/DrAndNewsFlyerAdobe';\nimport FacebookContainer from './components/FacebookContainer';\nimport StorePageHeader from './components/StorePageHeader';\nimport styles from './StorePage.module.less';\nimport {\n ensureStoreLedgerIdFormat,\n getCurrentStoreMetaDescription,\n getNumberOfRows,\n} from './StorePage.utils';\n\ninterface StorePageProps extends PageBaseProps {\n storeId: number;\n ledgerId: string;\n\n moduleListing1: ContentAreaItem[];\n moduleListing2: ContentAreaItem[];\n moduleListing3: ContentAreaItem[];\n\n parentLinkContentId?: string;\n\n showFacebookModule: boolean;\n facebookUsername?: string;\n url: string;\n disableStoreOffersFlyer: boolean;\n disableCampaignBanner: boolean;\n cateringLink: string;\n}\nconst StorePage: FC<StorePageProps> = (props) => {\n const [neoId] = useQuerySearchParam('neoId', null);\n updateLastVisitedStoreLocalStorage(props.storeId);\n const navigate = useNavigate();\n const { enableConsentKimApi } = appConfig.coopSettings.featureFlags;\n\n useEffect(() => {\n // some stores have external URL set in epi to point to external domain (i.e. X:-TRA stores)\n if (!props.url.startsWith('/')) {\n window.location.href = props.url;\n }\n }, [navigate, props.url, props.storeId]);\n\n const { favoriteStores, addFavoriteStore, deleteFavoriteStore } = useFavoriteStores();\n\n const { data: store, isLoading: storeIsLoading } = useStoreByIdQuery(props.ledgerId);\n\n const { data: storePageSettings } = useStoreSettingsPageQuery();\n\n const { data: parentPage, isLoading: parentPageIsLoading } = useStoreConceptPageQuery(\n props.parentLinkContentId!,\n );\n\n const drOfferEnabled = useMemo(() => {\n return (\n !!storePageSettings?.enableDrOffers ||\n !!storePageSettings?.drAvailableStoreLedgerAccountNumbers\n ?.map((item) => ensureStoreLedgerIdFormat(item))\n .includes(props.ledgerId)\n );\n }, [storePageSettings, props.ledgerId]);\n\n const { data: dkeOffers } = useDkeOffersQuery(props.ledgerId, drOfferEnabled);\n\n const isCurrentStoreFavorite = favoriteStores\n .map((_store) => _store.ledgerAccountNumber)\n .includes(props.ledgerId);\n\n const addCurrentStoreToFavorite = () => {\n addFavoriteStore({ ledgerId: props.ledgerId });\n if (store) {\n sendGaInteractionWithoutCustomerSegment(\n 'Butiker och erbjudanden',\n 'Spara butik',\n store.name,\n );\n ga4StoresTracking.favorite.add(props.ledgerId, store.name);\n }\n };\n\n const deleteCurrentStoreToFavorite = () => {\n deleteFavoriteStore({ ledgerId: props.ledgerId });\n if (store) {\n ga4StoresTracking.favorite.remove(props.ledgerId, store.name);\n }\n };\n\n const toggleCurrentStoreToFavorite = isCurrentStoreFavorite\n ? deleteCurrentStoreToFavorite\n : addCurrentStoreToFavorite;\n\n let moduleListing1: ContentAreaItem[] = [];\n let moduleListing2: ContentAreaItem[] = [];\n let moduleListing3: ContentAreaItem[] = [];\n\n if (parentPage) {\n moduleListing1 = (props.moduleListing1 || []).concat(parentPage?.moduleListing1 || []);\n moduleListing2 = (props.moduleListing2 || []).concat(parentPage?.moduleListing2 || []);\n moduleListing3 = (props.moduleListing3 || []).concat(parentPage?.moduleListing3 || []);\n }\n const isB2B = b2bModeTrigger().isB2BUser;\n\n const isDesktop = useIsDesktop();\n const currentStoreMetaDescription =\n props.headData?.meta?.description ||\n (store &&\n !!store.services?.length &&\n storePageSettings &&\n storePageSettings.storeDefaultMetaDescriptionTemplate &&\n storePageSettings.storeServiceSEOPriority &&\n getCurrentStoreMetaDescription(\n store.name,\n storePageSettings.storeDefaultMetaDescriptionTemplate,\n store.services,\n storePageSettings.storeServiceSEOPriority,\n )) ||\n undefined;\n\n const tabs: TabItem<{ url: string }>[] = [\n {\n id: 'storeTab1',\n name: storePageSettings?.contentTabHeading1\n ? storePageSettings.contentTabHeading1\n : 'Erbjudanden',\n component: (\n <div\n className={classNames(\n isDesktop && 'Main-container Main-container--padding',\n 'u-marginB',\n )}\n >\n <div\n className={classNames(\n !isDesktop && 'Main-container Main-container--padding',\n )}\n >\n {props.ledgerId && !props.disableStoreOffersFlyer && (\n <div className=\"Section Section--margin\">\n {enableConsentKimApi ? (\n <DrAndNewsFlyer\n storeName={store?.name}\n ledgerAccountNumber={props.ledgerId}\n storeOffersUrlBase={\n storePageSettings?.storeOffersUrlBase || ''\n }\n flyerImageUrl={parentPage?.flyerImage?.url}\n />\n ) : (\n <DrAndNewsFlyerAdobe\n storeName={store?.name}\n ledgerAccountNumber={props.ledgerId}\n storeOffersUrlBase={\n storePageSettings?.storeOffersUrlBase || ''\n }\n flyerImageUrl={parentPage?.flyerImage?.url}\n emailSubscriptionPageUrl={\n appConfig.coopSettings.myCoop.emailSubscriptionPageUrl\n }\n />\n )}\n </div>\n )}\n\n {!isB2B && (\n <div className=\"Section Section--margin\">\n <BecomeAMemberBlock />\n </div>\n )}\n\n {!!storePageSettings?.moduleListingGeneral && (\n <div className=\"Section Section--margin\">\n <EpiContentArea items={storePageSettings?.moduleListingGeneral} />\n </div>\n )}\n\n {!isB2B && props.ledgerId && (\n <div className=\"Section Section--margin\">\n <OfferPropositionsListBlock ledgerId={props.ledgerId} />\n </div>\n )}\n\n {!!moduleListing1?.length && (\n <div className=\"Section Section--margin\">\n <EpiContentArea items={moduleListing1} />\n </div>\n )}\n\n {!!dkeOffers?.categories?.length && drOfferEnabled && (\n <div className=\"Section Section--margin\">\n {dkeOffers.categories.map((storeOffer, index) => {\n return (\n storeOffer.offers?.length > 0 && (\n <StoreOffersListBlock\n heading={storeOffer.heading}\n storeOffers={storeOffer.offers}\n category={index}\n key={`{${storeOffer.guid}_${storeOffer.heading}`}\n numberOfRows={getNumberOfRows(\n index,\n storeOffer.heading,\n storeOffer.offers,\n dkeOffers.minimalOffersCount,\n storePageSettings,\n )}\n />\n )\n );\n })}\n </div>\n )}\n\n {props.showFacebookModule && (\n <div className=\"Section Section--margin u-overflowHidden\">\n <FacebookContainer facebookUsername={props.facebookUsername} />\n </div>\n )}\n\n {!!storePageSettings?.moduleListingGeneral2 && (\n <div className=\"Section Section--margin\">\n <EpiContentArea items={storePageSettings?.moduleListingGeneral2} />\n </div>\n )}\n\n {!!moduleListing2.length && (\n <div className=\"Section Section--margin Grid Grid--gutterV\">\n <EpiContentArea items={moduleListing2} />\n </div>\n )}\n\n {!!moduleListing3.length && (\n <div className=\"Section Section--margin Grid Grid--gutterV\">\n <EpiContentArea items={moduleListing3} />\n </div>\n )}\n\n <OverlayPacmanLoader\n isLoading={storeIsLoading || parentPageIsLoading}\n delay={400}\n />\n </div>\n </div>\n ),\n },\n {\n id: 'storeTab2',\n name: storePageSettings?.contentTabHeading2\n ? storePageSettings.contentTabHeading2\n : 'I butiken och catering',\n component: storePageSettings?.cateringDoubleImageTextBlock && (\n <div\n className=\"Main-container Main-container--padding\n u-marginB\"\n >\n <CateringDoubleImageTextBlock\n cateringLink={props.cateringLink}\n doubleImageTextPropertyBlock={\n storePageSettings.cateringDoubleImageTextBlock\n }\n />\n </div>\n ),\n },\n ];\n\n const hasTabs = !!props.cateringLink;\n\n return (\n <>\n <PageProperties\n headData={{\n ...props.headData,\n meta: {\n ...props.headData.meta,\n description: currentStoreMetaDescription,\n 'og:description': currentStoreMetaDescription,\n },\n }}\n pageTypeNameForAnalytics={props.pageTypeNameForAnalytics}\n />\n\n <div className={hasTabs ? '' : 'u-marginBxlg'}>\n <StorePageHeader\n neoId={neoId}\n currentStore={store}\n singleStoreInformationLoading={storeIsLoading}\n favoriteStores={favoriteStores}\n storePageSettings={storePageSettings}\n isStoreFavorite={isCurrentStoreFavorite}\n toggleCurrentStoreToFavoriteStore={toggleCurrentStoreToFavorite}\n />\n </div>\n {props.cateringLink ? (\n <TabSwitcher\n items={tabs}\n initialActiveId=\"storeTab1\"\n listClasses={styles['StorePageTabSwitcher--item']}\n align=\"center\"\n containerClasses={classNames(\n styles['StorePageTabSwitcher--container'],\n 'u-bgWhite u-paddingTxlg u-marginBlg',\n )}\n forcePanelRerenderOnTabChange\n hidePanelsWithCss\n />\n ) : (\n tabs[0].component\n )}\n </>\n );\n};\n\nexport default StorePage;\n","import { keepPreviousData, useQuery } from '@tanstack/react-query';\n\nimport storeApi from '../api/storeApi';\nimport { storeQueryKeys } from '../storeQueries';\n\nconst useStoreByIdQuery = (ledgerId: string) => {\n const query = useQuery({\n queryKey: storeQueryKeys.storeByLedgerId(ledgerId),\n queryFn: () => storeApi.stores.getStoresInformation(ledgerId),\n placeholderData: keepPreviousData,\n enabled: !!ledgerId,\n staleTime: Infinity,\n });\n\n return query;\n};\n\nexport default useStoreByIdQuery;\n","import { appConfig } from '../../../appConfig';\nimport { useEpiPageByContentId } from '../../episerver/components/hooks/useCurrentEpiPage';\nimport type { EpiStoreSettingsPageType } from '../../episerver/components/pages/EpiStoreSettingsPage/epiStoreSettingsPageType';\n\nexport const useStoreSettingsPageQuery = () =>\n useEpiPageByContentId<EpiStoreSettingsPageType>(\n appConfig.coopSettings.stores.storeSettingsPageContentId,\n { depth: 2 },\n { gcTime: 1000 * 60 * 5 },\n );\n","import { useEpiPageByContentId } from '../../episerver/components/hooks/useCurrentEpiPage';\nimport type { EpiStoreConceptPageType } from '../../episerver/components/pages/EpiStoreConceptPageType/epiStoreConceptPageType';\n\nexport const useStoreConceptPageQuery = (contentId: string) => {\n return useEpiPageByContentId<EpiStoreConceptPageType>(\n contentId!,\n {\n depth: 2,\n },\n {\n enabled: !!contentId,\n },\n );\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport dkeApi from '../../common/api/dke/dkeApi';\nimport { storeQueryKeys } from '../storeQueries';\n\nconst useDkeOffersQuery = (ledgerId: string, enabled: boolean) => {\n const { status, isLoading, data } = useQuery({\n queryKey: storeQueryKeys.storeDkeOffers(ledgerId),\n queryFn: () => dkeApi.getDkeOffers(ledgerId),\n enabled: !!ledgerId && enabled,\n });\n\n return {\n status,\n isLoading,\n data,\n };\n};\n\nexport default useDkeOffersQuery;\n","// extracted by mini-css-extract-plugin\nexport default {\"StorePageTabSwitcher--container\":\"D8sT1fIe\",\"StorePageTabSwitcher--item\":\"RKieEb6E\"};","import type { FC } from 'react';\n\nimport StorePage from '../../../../storeAndOffers/pages/StorePage/StorePage';\nimport { ensureStoreLedgerIdFormat } from '../../../../storeAndOffers/pages/StorePage/StorePage.utils';\nimport { mapEpiPageHeadData } from '../../../epiUtils';\nimport type { EpiStorePageType } from './epiStorePageType';\n\nconst EpiStorePage: FC<React.PropsWithChildren<EpiStorePageType>> = (props) => {\n return (\n <StorePage\n ledgerId={ensureStoreLedgerIdFormat(props.ledgerAccountNumber?.toString())}\n storeId={props.storeID}\n moduleListing1={props.moduleListing1}\n moduleListing2={props.moduleListing2}\n moduleListing3={props.moduleListing3}\n parentLinkContentId={props.parentLink?.id?.toString()}\n showFacebookModule={props.showFacebookModule}\n facebookUsername={props.facebookUsername}\n url={props.url}\n disableStoreOffersFlyer={!!props.disableStoreOffersFlyer}\n disableCampaignBanner={props.disableCampaignBanner}\n pageTypeNameForAnalytics={props.pageTypeNameForAnalytics}\n headData={mapEpiPageHeadData(props)}\n cateringLink={props.cateringLink}\n />\n );\n};\n\nexport default EpiStorePage;\n","export const MEMBER_CONSENT_QUERY = 'memberConsent';\nexport const MEMBER_CONSENT_NEWSLETTERS_EMAIL = [\n 'coop_offers',\n 'xtra_offers',\n 'member_association',\n 'membership_program',\n];\n\nexport const MEMBER_CONSENT_NEWSLETTERS_SMS = 'sms';\nexport const MEMBER_CONSENT_NEWSLETTER_STORE = 'coop_offers';\n\n// Remove later when Bloomreach is in use\nexport const ADOBE_MEMBER_CONSENT_NEWSLETTERS_EMAIL = [\n 'cooOnline',\n 'cooDRDigital',\n 'cooPartnermail',\n 'cooNewsletter',\n];\n","import { useQuery } from '@tanstack/react-query';\n\nimport kimProxyFlow from '../../common/flow/kimProxyFlow';\nimport { kimCustomerDataQueryKeys } from '../memberQueries';\n\nexport const useKimCustomerDataQuery = (enabled: boolean) => {\n const query = useQuery({\n queryKey: kimCustomerDataQueryKeys.defaultDataSet(),\n queryFn: async () => {\n return kimProxyFlow.getCustomerData();\n },\n enabled,\n });\n\n return query;\n};\n","export const autoVoucherStatusQueryKey = ['autoVoucherStatus'];\nexport const kimCustomerDataQueryKeys = {\n all: ['kimCustomerData'],\n defaultDataSet: () => [...kimCustomerDataQueryKeys.all],\n fullDatSet: () => [...kimCustomerDataQueryKeys.all, 'kimCustomerDataFull'],\n byEmail: (email: string) => [...kimCustomerDataQueryKeys.all, 'kimCustomerEmail', email],\n};\n","import { useMutation, useQueryClient } from '@tanstack/react-query';\n\nimport kimProxyFlow from '../../../../common/flow/kimProxyFlow';\nimport tracking from '../../../../common/tracking/tracking';\nimport { consentSubscriptionsKeys } from '../../../myCoopQueries';\n\nexport const useConsentSubscribeMutation = (service: string, neoId?: string) => {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: () => kimProxyFlow.subscribeConsents([service], neoId),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: consentSubscriptionsKeys.all });\n tracking.myCoop.myProfile.subscribe(service);\n },\n });\n};\n\nexport const useConsentUnsubscribeMutation = (service: string, neoId?: string) => {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: () => kimProxyFlow.unsubscribeConsent(service, neoId),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: consentSubscriptionsKeys.all });\n tracking.myCoop.myProfile.unsubscribe(service);\n },\n });\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport { appConfig } from '../../../../appConfig';\nimport kimProxyFlow from '../../../common/flow/kimProxyFlow';\nimport { consentSubscriptionsKeys } from '../../myCoopQueries';\n\nconst useConsentQuery = (enabled: boolean, neoId?: string) => {\n const mmid = appConfig.coopUserSettings.profile?.medmeraId?.toString();\n const email = appConfig.coopUserSettings.profile?.email?.toString();\n\n let queryKeyName: string[] = [];\n if (neoId) queryKeyName = consentSubscriptionsKeys.consentSubscriptionsByNeoId(neoId);\n else if (mmid) queryKeyName = consentSubscriptionsKeys.consentSubscriptionsByMmId(mmid);\n else if (email) queryKeyName = consentSubscriptionsKeys.consentSubscriptionsByEmail(email);\n\n const query = useQuery({\n queryKey: queryKeyName,\n queryFn: () => kimProxyFlow.getConsents(neoId),\n retry: 0,\n enabled: enabled && queryKeyName.length > 0 && !!queryKeyName,\n });\n\n return query;\n};\n\nexport default useConsentQuery;\n","import { useQuery } from '@tanstack/react-query';\n\nimport { appConfig } from '../../../../appConfig';\nimport { consentAdobeSubscriptionFlow } from '../../../common/flow/consentAdobeSubscriptionFlow';\nimport { getNeoId } from '../../../common/utils/neoIdUtils';\nimport { adobeConsentSubscriptionsKeys } from '../../myCoopQueries';\n\nconst useEmailSubscriptionQuery = (preferNeoId: boolean | undefined, enabled: boolean) => {\n const neoId = (preferNeoId && getNeoId()) || undefined;\n const mmid = appConfig.coopUserSettings.profile?.medmeraId?.toString();\n const email = appConfig.coopUserSettings.profile?.email?.toString();\n\n let queryKeyName: string[] = [];\n\n if (neoId) queryKeyName = adobeConsentSubscriptionsKeys.consentSubscriptionsByNeoId(neoId);\n else if (mmid) queryKeyName = adobeConsentSubscriptionsKeys.consentSubscriptionsByMmId(mmid);\n else if (email) queryKeyName = adobeConsentSubscriptionsKeys.consentSubscriptionsByEmail(email);\n\n const query = useQuery({\n queryKey: queryKeyName,\n queryFn: () => consentAdobeSubscriptionFlow.getSubscriptions(preferNeoId),\n retry: 0,\n enabled: enabled && queryKeyName.length > 0 && !!queryKeyName,\n });\n\n return query;\n};\n\nexport default useEmailSubscriptionQuery;\n","export const savedCartQueryKeys = {\n all: ['savedCarts'],\n byPaging: (page: number, pageSize: number) => [...savedCartQueryKeys.all, page, pageSize],\n};\n\nexport const subscriptionsQueryKeys = {\n all: ['subscriptions'],\n byId: (id: string) => [...subscriptionsQueryKeys.all, id],\n timeslots: (subId: string) => [...subscriptionsQueryKeys.all, 'subscriptionTimeslots', subId],\n klarnaSnippet: ['subscriptionsKlarnaSnippet'],\n};\n\nexport const orderReclamationsQueryKey = ['orderReclamations'];\nexport const deliveryAddressQueryKey = ['deliveryAddress'];\nexport const connectedCardsQueryKey = ['connectedCards'];\n\nexport const lastOrdersQueryKeys = {\n all: ['lastOrders'],\n byId: (id: string | undefined) => [...lastOrdersQueryKeys.all, id],\n};\n\nexport const myCoopProfileMenuKeys = {\n all: ['myCoopProfileMenu'],\n settingsPage: ['myCoopSettingsPage'],\n};\n\nexport const myCoopHouseholdKeys = {\n householdMembers: ['householdMembers'],\n};\n\nexport const associationNamesQueryKey = ['associationNames'];\n\nexport const householdMemberQueryKeys = {\n addHouseholdMember: (personalNumber: string) => ['addHouseholdMember', personalNumber],\n};\n\n// Poänguttag - Pointitem purchases\nexport const pointItemWithdrawalHistoryKeys = {\n all: ['pointItemWithdrawalHistory'],\n byDate: (from: Date, to: Date, page: number, size: number) => [\n ...pointItemWithdrawalHistoryKeys.all,\n from,\n to,\n page,\n size,\n ],\n};\n\n// Poänghistorik - point history\nexport const pointHistoryKeys = {\n all: ['pointHistory'],\n byDate: (from: Date, page: number, size: number) => [...pointHistoryKeys.all, from, page, size],\n};\n\n// Köphistorik - Money purchase history\nexport const purchaseHistoryKeys = {\n all: ['purchaseHistory'],\n byDate: (from: Date, page: number, size: number) => [\n ...purchaseHistoryKeys.all,\n from,\n page,\n size,\n ],\n};\n\nexport const consentSubscriptionsKeys = {\n all: ['consentSubscriptions'],\n consentSubscriptionsByNeoId: (neoId: string) => [...consentSubscriptionsKeys.all, neoId],\n consentSubscriptionsByMmId: (mmId: string) => [...consentSubscriptionsKeys.all, mmId],\n consentSubscriptionsByEmail: (email: string) => [...consentSubscriptionsKeys.all, email],\n};\n\n// Remove later when bloomreach is in place\nexport const adobeConsentSubscriptionsKeys = {\n all: ['adobeConsentSubscriptions'],\n consentSubscriptionsByNeoId: (neoId: string) => [\n ...adobeConsentSubscriptionsKeys.all,\n `neo:${neoId}`,\n ],\n consentSubscriptionsByMmId: (mmId: string) => [...adobeConsentSubscriptionsKeys.all, mmId],\n consentSubscriptionsByEmail: (email: string) => [...adobeConsentSubscriptionsKeys.all, email],\n};\n\nexport const consentSubscribeToggleKeys = {\n consentSubscribeByNeoId: (neoId: string) => ['consentSubscribeNeo', neoId],\n consentSubscribeByMmId: (mmId: string) => ['consentSubscribe', mmId],\n consentUnsubscribeByNeoId: (neoId: string) => ['consentUnsubscribeNeo', neoId],\n consentUnsubscribeByMmId: (mmId: string) => ['consentUnsubscribe', mmId],\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"Accordion--default\":\"uQoAqqx6\",\"AccordionItem\":\"piwULS3m\",\"AccordionHeader\":\"HXu37Y5q\",\"AccordionContent\":\"mpl9oZN6\",\"Accordion--splitted\":\"F9Wnh_SN\",\"AccordionTrigger\":\"a9ShLV3j\",\"AccordionChevron\":\"FyfbfKVj\",\"slideDown\":\"ul2JMOGH\",\"slideUp\":\"PByVuNmz\",\"Accordion-gray\":\"odcxhOBR\",\"Accordion-white\":\"B3Rty6Sz\",\"Accordion-green\":\"lQTJWIkg\",\"Accordion--rounded\":\"n1yxWvZ1\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport { Icon } from '@coop/components';\nimport { ChevronDownIcon } from '@coop/icons';\nimport type {\n AccordionContentProps,\n AccordionHeaderProps,\n AccordionItemProps,\n AccordionMultipleProps,\n AccordionSingleProps,\n AccordionTriggerProps,\n} from '@radix-ui/react-accordion';\nimport * as AccordionRadix from '@radix-ui/react-accordion';\nimport { Slottable } from '@radix-ui/react-slot';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Accordion.module.scss';\n\nconst AccordionRoot = React.forwardRef<\n HTMLDivElement,\n (AccordionSingleProps | AccordionMultipleProps) &\n React.RefAttributes<HTMLDivElement> & {\n theme?: 'gray' | 'white' | 'green';\n splitted?: boolean;\n rounded?: boolean;\n }\n>(({ theme, splitted, rounded, className, ...props }, ref) => {\n const classes = classNames(\n styles.Accordion,\n className,\n theme === 'gray' && styles['Accordion-gray'],\n theme === 'white' && styles['Accordion-white'],\n theme === 'green' && styles['Accordion-green'],\n splitted ? styles['Accordion--splitted'] : styles['Accordion--default'],\n !!rounded && styles['Accordion--rounded'],\n );\n\n return <AccordionRadix.Root {...props} ref={ref} className={classes} />;\n});\n\nconst AccordionItem = React.forwardRef<\n HTMLDivElement,\n AccordionItemProps & React.RefAttributes<HTMLDivElement>\n>((props, ref) => {\n const classes = classNames(styles.AccordionItem, props.className);\n\n return <AccordionRadix.Item {...props} ref={ref} className={classes} />;\n});\n\nconst AccordionTrigger = React.forwardRef<\n HTMLButtonElement,\n AccordionTriggerProps &\n React.RefAttributes<HTMLButtonElement> & {\n iconClassName?: string;\n iconPosition?: 'left' | 'right';\n withChevron?: boolean;\n }\n>(({ iconClassName, iconPosition = 'right', children, withChevron = true, ...props }, ref) => {\n const classes = classNames(styles.AccordionTrigger, props.className);\n\n return (\n <AccordionRadix.Trigger {...props} ref={ref} className={classes}>\n {iconPosition === 'left' && !props.disabled && withChevron && (\n <Icon\n icon={ChevronDownIcon}\n width={20}\n height={20}\n aria-hidden=\"true\"\n className={classNames(iconClassName, styles.AccordionChevron)}\n />\n )}\n <Slottable>{children}</Slottable>\n {!props.disabled && iconPosition === 'right' && withChevron && (\n <Icon\n icon={ChevronDownIcon}\n width={20}\n height={20}\n aria-hidden=\"true\"\n className={classNames(iconClassName, styles.AccordionChevron)}\n />\n )}\n </AccordionRadix.Trigger>\n );\n});\n\nconst AccordionHeader = React.forwardRef<\n HTMLDivElement,\n AccordionHeaderProps & React.RefAttributes<HTMLHeadingElement>\n>((props, ref) => {\n const classes = classNames(styles.AccordionHeader, props.className);\n\n return <AccordionRadix.Header {...props} ref={ref} className={classes} />;\n});\n\nconst AccordionContent = React.forwardRef<\n HTMLDivElement,\n AccordionContentProps & React.RefAttributes<HTMLDivElement>\n>((props, ref) => {\n const classes = classNames(styles.AccordionContent, props.className);\n\n return <AccordionRadix.Content {...props} ref={ref} className={classes} />;\n});\n\nconst Accordion = {\n Root: AccordionRoot,\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Header: AccordionHeader,\n Content: AccordionContent,\n};\n\n(Accordion.Root as React.FC<React.ComponentProps<typeof AccordionRoot>>).displayName =\n 'Accordion.Root';\n(Accordion.Item as React.FC<React.ComponentProps<typeof AccordionItem>>).displayName =\n 'Accordion.Item';\n(Accordion.Trigger as React.FC).displayName = 'Accordion.Trigger';\n(Accordion.Header as React.FC).displayName = 'Accordion.Header';\n(Accordion.Content as React.FC).displayName = 'Accordion.Content';\n\nexport default Accordion;\n","import * as React from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nimport type { Icon } from '../Icon';\nimport { AccessibleIcon } from '../Icon';\nimport Button from './Button';\nimport type { ButtonProps } from './Button.types';\n\ntype IconButtonProps = {\n icon: Parameters<typeof Icon>[0]['icon'];\n label: string;\n} & Omit<ButtonProps, 'asIcon' | 'asChild'>;\n\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ icon, label, children, ...buttonProps }, ref) => {\n return (\n <Button\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...buttonProps}\n asIcon\n ref={ref}\n loadingText={<VisuallyHidden>{buttonProps.loadingText || 'Laddar'}</VisuallyHidden>}\n >\n <AccessibleIcon label={label} icon={icon} />\n {children}\n </Button>\n );\n },\n);\n\nexport default IconButton;\n","'use client';\n\nimport { CheckmarkIcon } from '@coop/icons';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport classNames from 'classnames';\nimport type * as React from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nimport { Icon } from '../Icon';\nimport styles from './Checkbox.module.scss';\n\ninterface StyledCheckboxProps extends CheckboxPrimitive.CheckboxProps {\n label: React.ReactNode;\n labelVisuallyHidden?: boolean; // hide for render, but still announce when using screen reader\n disabled?: boolean;\n validationMsg?: string;\n theme?: 'shadowed' | 'default';\n indicatorVerticalPosition?: 'top' | 'center';\n}\n\nconst StyledCheckbox = ({\n label,\n validationMsg,\n className,\n disabled = false,\n labelVisuallyHidden = false,\n theme = 'default',\n indicatorVerticalPosition: labeVerticalPosition = 'center',\n ...props\n}: StyledCheckboxProps) => {\n const classes = classNames(\n styles.Checkbox,\n className,\n theme === 'shadowed' && styles['Checkbox-shadowed'],\n disabled && styles['is-disabled'],\n validationMsg && styles['is-invalid'],\n );\n\n return (\n <div className={classes}>\n <CheckboxPrimitive.Root\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n className={classNames(\n styles.CheckboxButton,\n labeVerticalPosition === 'center' && styles['CheckboxButton--center'],\n labeVerticalPosition === 'top' && styles['CheckboxButton--top'],\n )}\n disabled={disabled}\n >\n {theme === 'shadowed' && <div className={classNames(styles.IndicatorShadow)} />}\n <CheckboxPrimitive.Indicator className={styles.Indicator}>\n <Icon icon={CheckmarkIcon} aria-hidden />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n <label htmlFor={props.id} className={classNames(styles.Label)}>\n {labelVisuallyHidden ? <VisuallyHidden>{label}</VisuallyHidden> : label}\n {validationMsg && <span className={styles.ValidationMessage}>{validationMsg}</span>}\n </label>\n </div>\n );\n};\n\nexport default StyledCheckbox;\n","// extracted by mini-css-extract-plugin\nexport default {\"Checkbox\":\"Y02YGszF\",\"is-disabled\":\"Q92zu7lA\",\"is-invalid\":\"pTNKREns\",\"CheckboxButton\":\"WTmRJxlo\",\"CheckboxButton--center\":\"ChXSMKxP\",\"CheckboxButton--top\":\"oWSBitfJ\",\"Indicator\":\"Kvm8CmPU\",\"Label\":\"xlvlfBnS\",\"ValidationMessage\":\"k4rpKaRx\",\"Checkbox-shadowed\":\"OgUQu9R2\",\"IndicatorShadow\":\"YbZlQr1_\"};","'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","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"mzNAH6Pz\",\"TopContainer\":\"jU8P02pG\",\"BottomContainer\":\"dxPSebVp\",\"InputContainer\":\"KhcWGy_U\",\"Input\":\"FB9Zekja\",\"TextArea\":\"DJjSRY6R\",\"PostfixSlot\":\"YyrA4WeF\",\"PrefixSlot\":\"_XIGwGkW\",\"HelperText\":\"z4f00Lmh\",\"Label\":\"FvaO26Ls\",\"ValidationText\":\"zssnVrz1\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { TextAreaProps, TextFieldProps } from 'react-aria-components';\nimport {\n FieldError as AriaFieldError,\n Input as AriaInput,\n Label as AriaLabel,\n Text as AriaText,\n TextArea as AriaTextArea,\n TextField as AriaTextField,\n} from 'react-aria-components';\n\nimport styles from './TextField.module.scss';\n\nconst TextFieldRoot = (props: TextFieldProps) => (\n <AriaTextField\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n className={classNames(props.className, styles.Container)}\n >\n {props.children}\n </AriaTextField>\n);\n\nconst TextFieldTopContainer = (props: { children: React.ReactNode }) => (\n <div className={styles.TopContainer}>{props.children}</div>\n);\n\nconst TextFieldInputContainer = (props: { children: React.ReactNode }) => (\n <div className={styles.InputContainer}>{props.children}</div>\n);\n\nconst TextFieldBottomContainer = (props: { children: React.ReactNode }) => (\n <div className={styles.BottomContainer}>{props.children}</div>\n);\n\nconst TextFieldLabel = (props: {\n label?: string;\n isRequired?: boolean;\n necessityIndicator?: 'label' | 'none';\n}) => {\n let indicator = props.necessityIndicator;\n if (!props.label) {\n return null;\n }\n\n // This case is for backwards compatibility. If the field is required, but the indicator is not set, we default to 'label'.\n // This essentially replaces old * indicator with (obligatoriskt) text if the indicator is not yet set.\n // This is to avoid breaking changes in the UI after new TextInput is deployed.\n if (props.isRequired && indicator === undefined) {\n indicator = 'label';\n }\n\n if (!indicator || indicator === 'none') {\n return <AriaLabel className={styles.Label}>{props.label}</AriaLabel>;\n }\n\n return (\n <AriaLabel className={classNames(styles.Label)}>\n {props.label}\n {props.isRequired ? (\n // Required is dealt with aria-required in the input. tehre is no ARIA for optional fields, so they must be part of the label, available for screenreaders.\n <span aria-hidden> (obligatoriskt)</span>\n ) : (\n <span> (frivilligt)</span>\n )}\n </AriaLabel>\n );\n};\n\nconst TextFieldHelperText = (props: { helperText?: string; disabledReason?: React.ReactNode }) =>\n (props.helperText || props.disabledReason) && (\n <AriaText slot=\"description\" className={styles.HelperText}>\n {[props.helperText, props.disabledReason].filter(Boolean).join('. ')}\n </AriaText>\n );\n\nconst TextFieldValidationError = (props: { validationText?: string }) =>\n props.validationText && (\n <AriaFieldError className={styles.ValidationText}>{props.validationText}</AriaFieldError>\n );\n\nconst TextFieldPostfix = (props: { children: React.ReactNode }) =>\n props.children && <div className={styles.PostfixSlot}>{props.children}</div>;\n\nconst TextFieldPrefix = (props: { children: React.ReactNode }) =>\n props.children && <div className={styles.PrefixSlot}>{props.children}</div>;\n\nconst TextFieldInput = React.forwardRef<HTMLInputElement, {}>((_props, ref) => (\n <AriaInput\n ref={ref}\n className={({ isInvalid }) => classNames(styles.Input, isInvalid && styles['is-invalid'])}\n />\n));\n\nconst TextFieldTextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>((props, ref) => (\n <AriaTextArea\n ref={ref}\n {...props}\n className={({ isInvalid }) =>\n classNames(props.className, styles.TextArea, isInvalid && styles['is-invalid'])\n }\n />\n));\n\nconst TextField = {\n Root: TextFieldRoot,\n TopContainer: TextFieldTopContainer,\n InputContainer: TextFieldInputContainer,\n BottomContainer: TextFieldBottomContainer,\n Label: TextFieldLabel,\n HelperText: TextFieldHelperText,\n ValidationError: TextFieldValidationError,\n Prefix: TextFieldPrefix,\n Postfix: TextFieldPostfix,\n Input: TextFieldInput,\n TextArea: TextFieldTextArea,\n};\n\nexport default TextField;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { splitCustomObjectFromIntersection } from '@coop/utils';\nimport * as React from 'react';\nimport type { TextFieldProps } from 'react-aria-components';\n\nimport { TextField } from '../TextField';\n\ninterface TextInputCustomProps {\n label?: string;\n helperText?: string;\n validationText?: string;\n disabledReason?: React.ReactNode;\n postfixSlot?: React.ReactNode;\n /**\n * In certain cases it is needed to hide the indicator that a field is required or optional.\n * It might depend on the context of the form and how many required fields there is versus optional ones.\n * If most fields in a form are required - show indicator for optional ones.\n * If most fields in a form are optional - show indicator for required ones.\n * By default the label indicator is shown.\n * @default \"label\"\n */\n necessityIndicator?: 'label' | 'none';\n}\n\n// Override React Aria's TextFieldProps to add comments for some props\ninterface TextFieldOverridenProps {\n /**\n * @deprecated Use helperText instead with a correct UX copy. Placeholder will be removed from TextInput for A11Y reasons.\n * */\n placeholder?: string;\n\n /** Makes a field required for A11Y purposes. It does not add a visual cue when necessityIndicator is set to 'none'. */\n isRequired?: boolean;\n\n /** Use disabledReason instead. It will make the field read only (focusable) and provide the text why its disabled in the help text label. */\n isDisabled?: never;\n}\n\nconst TextInput = React.forwardRef<\n HTMLInputElement,\n TextInputCustomProps & TextFieldProps & TextFieldOverridenProps\n>((props, ref) => {\n const { custom: customProps, rest: textInputProps } = splitCustomObjectFromIntersection<\n TextInputCustomProps,\n TextFieldProps\n >(props, {\n label: props.label,\n helperText: props.helperText,\n validationText: props.validationText,\n disabledReason: props.disabledReason,\n postfixSlot: props.postfixSlot,\n necessityIndicator: props.necessityIndicator,\n });\n\n return (\n <TextField.Root\n {...textInputProps}\n isReadOnly={!!customProps.disabledReason}\n // We mostly use the inputs with React Hook Form, so the validation behavior must be set to aria\n validationBehavior={textInputProps.validationBehavior ?? 'aria'}\n >\n <TextField.TopContainer>\n <TextField.Label\n label={customProps.label}\n isRequired={textInputProps.isRequired}\n necessityIndicator={props.necessityIndicator}\n />\n <TextField.HelperText\n helperText={customProps.helperText}\n disabledReason={customProps.disabledReason}\n />\n </TextField.TopContainer>\n\n <TextField.InputContainer>\n <TextField.Input ref={ref} />\n {props.postfixSlot && <TextField.Postfix>{props.postfixSlot}</TextField.Postfix>}\n </TextField.InputContainer>\n\n {customProps.validationText && (\n <TextField.BottomContainer>\n <TextField.ValidationError validationText={customProps.validationText} />\n </TextField.BottomContainer>\n )}\n </TextField.Root>\n );\n});\n\nexport default TextInput;\n","import { pick } from 'lodash-es';\n\ntype AllOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? K : never }[keyof T];\ntype AllNonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\n\ntype OptionalToMaybeUndefined<T> = { [K in AllOptionalKeys<T>]: T[K] | undefined } & {\n [K in AllNonOptionalKeys<T>]: T[K];\n};\n\nexport const splitCustomObjectFromIntersection = <TCustom extends {}, TResult extends {}>(\n whole: TCustom & TResult,\n custom: OptionalToMaybeUndefined<TCustom>,\n) => {\n const keysNotFromCustomProps = Object.keys(whole).filter(\n (key) => !Object.keys(custom).includes(key),\n );\n\n const rest = pick(whole, keysNotFromCustomProps) as TResult;\n return { custom, rest };\n};\n"],"names":["_g","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","width","height","viewBox","xmlns","id","d","_path","fillRule","clipRule","ButtonEpiLink","ref","linkUrl","target","buttonProps","anchorRel","includes","undefined","asChild","href","rel","children","link","data","meta","canonical","path","page","pagination","currentPage","hasPrevPage","hasNextPage","totalItems","pageSize","prevPage","nextPage","linkData","entries","filter","item","metaData","options","map","key","property","value","isDocumentHeadReadyForReactHelmet","useDocumentHeadIsPreparedForReactHelmet","Helmet","name","content","Button","size","className","defaultQueryKeys","useGaVirtualPageView","search","dispatch","canonicalUrl","URL","window","location","origin","toString","triggerString","queryString","keys","triggerKeys","searchParams","URLSearchParams","Array","from","reduce","acc","set","getFilteredQueryStringForVirtualPageView","queryStringTriggers","enable","sendEvent","useSavedInRef","c","setPageGaData","gaPageTypeName","pageTypeName","pageTitle","useEffect","current","headData","pageTypeNameForAnalytics","virtualPageViewQueryStringTriggers","setTitle","headPagination","baseUrl","emailSubscriptionErrorInterceptor","error","response","status","token","neoId","url","get","err","code","services","email","axiosClient","post","delete","consentAdobeSubscriptionFlow","getSubscriptions","preferNeoId","isAuthenticated","appConfig","coopUserSettings","spaToken","getAuthToken","subscribe","unsubscribe","accessToken","errorInterceptors","createDirectApiClient","baseURL","coopSettings","serviceAccess","kimProxyApiUrl","headers","Accept","kimProxyApiSubscriptionKey","Authorization","btoa","params","kimProxyApiVersion","details","getCustomerData","identity","getCustomerDataFull","deleteCustomerDataCache","changeEmail","kimProxyDirectApi","getConsents","subscribeConsents","serviceIds","put","identifiers","unsubscribeConsent","service","serviceId","elementsToUpdateByTag","readyForReactHelmet","setReadyForReactHelmet","useState","stringifiedElements","JSON","stringify","parsedElementsToUpdateByTag","parse","document","getElementsByTagName","forEach","child","tagName","toLowerCase","tagEl","getAttribute","setAttribute","useQuerySearchParams","useQuerySearchParam","defaultValue","query","pushLocation","replace","useCallback","newVal","historyAction","q","trim","newHistoryLocation","useRef","useLayoutEffect","useSwiperOverflowClasses","swiperIsXConstrained","constrainedX","swiperIsYConstrained","constrainedY","isMobile","spaceBetween","mainSwiperClasses","getRobotsContent","noIndex","noFollow","getCanonical","Number","isInteger","String","getNextPage","pathname","getPrevPage","stringifiedParams","isSameRow","row","getNewActiveBlock","existingBlock","toggledBlockPayload","newActiveBlock","groupId","toggledFromRowIndex","activeBlock","rowPosition","sameGroup","isSameGroup","reducer","state","action","type","payload","useGroupedProductsBlockState","useReducer","closeBlock","toggleBlock","isBlockExpanded","find","setBlocks","blocks","b","getBlock","useVerticalProductTeaserContainer","containerType","hasBanner","gridAdditionalClasses","breakpointAreaName","AREA_NEW_PRODUCT_GRID","AREA_NEW_PRODUCT_LIST_WITH_BANNER","AREA_NEW_PRODUCT_LIST","getProductTeaserContainerBreakpointAreaName","cellsInRow","breakpoints","swiperOptions","useMemo","swiperMainClass","config","createLocalApiClient","mapContentParams","select","s","encodeURIComponent","join","expand","contentDeliveryApi","getContentByUrl","depth","client","urlPath","getContent","contentReferenceId","getContentExtended","getMultipleContents","contentReferenceIds","references","getChildren","serializedParams","requestUrl","getMenu","withAncestors","withContainers","getMenuByUrl","apiUrl","items","epiTag","itemCssClass","renderItem","areaItems","x","contentLink","expanded","contentAreaItem","index","expandedValue","isContentAreaItem","LazyComponent","epiComponentProps","contentAreaItemClasses","displayOption","guidValue","mapEpiButtonLinkPropertyBlock","mapEpiButtonPropertyBlock","theme","mapEpiButtonTheme","disabled","fullWidth","ariaLabel","style","marginRight","alignment","marginLeft","text","exhaustiveGuard","_value","Error","mapEpiHeadingPropertyBlock","element","level","stylingElement","stylingLevel","color","mapEpiHeadingPropertyFallback","oldHeader","heading","mapEpiImagePropertyBlock","imageBlock","srcSet","images","cloudinaryImageUrl","imageUrl","minWidth","breakpointFrom","Boolean","defaultImageUrl","defaultCloudinaryImageUrl","defaultImage","defaultImageHeight","imageAltText","altText","mapImageTextPropertyToProps","useFallbackedProperties","mappedImageProperty","fromMobileImage","fromZero","image","narrowImage","push","imageHeight","backgroundColor","body","centerBlockHorizontally","centerBlockVertically","contentLessHorizontalPadding","contentLessPadding","isClickable","textColor","openLinkIn","lazy","lazyImage","gaPromoId","gaPromoName","gaPromoCreative","gaPromoPosition","headingProps","mapImageTextToHeadingWithFallbacks","mapImageTextToHeading","mapImageTextToButtonWithFallbacks","buttonLink","mapImageTextToButton","secondaryButtonProps","secondaryButtonLink","mapEpiImageTextPropertyToLinkFallback","input","mapped","ElementFallbackAlignment","allProps","buttonText","buttonColor","mapOldEpiImageTextColor","titleColor","useEpiPageByContentId","queryOptions","queryKey","getByContentReference","queryFn","staleTime","placeholderData","enabled","useEpiPageByUrl","route","getByUrl","useCurrentPageEpiBasePath","allowWildCards","pathParams","firstClientOnlySegmentValue","segment","firstClientOnlyParamIndex","indexOf","basePath","substring","useCurrentEpiPage","forwardRef","rowsWithBlocks","uniqueRows","ItemGrid","gridClasses","itemUniqueKey","renderAtRowEnd","useGrouping","foundBlock","show","isGroup","hasChildren","onGroupClick","isExpanded","renderGroupOrSingleTeaser","close","afterClose","AnimateHeight","A","duration","easing","onAnimationEnd","position","right","top","ChipIconButton","icon","label","onClick","SwipableList","swiperMainClassName","storeOffers","offers","offer","externalId","allVariations","clusterInteriorOffers","concat","useBreakpoints","modfiedSwiperOptions","StoreOfferTeaser","groupedFirstItem","showAddToShoppingList","category","numberOfRows","storeUrl","showAllLink","showBtn","showMore","setShowMore","showMorehandler","visibleOffersNumber","numberOfRowsPhone","numberOfRowsTablet","numberOfRowsDesktop","visibleOffers","slice","identifier","renderProps","ChipButton","rightSlot","Icon","epiLeft","doubleImageTextPropertyBlock","left","cateringLink","epiRight","DoubleImageTextBlock","renderButton","bProps","renderSecondaryButton","renderHeading","hProps","Heading","fontFamilySecondary","LabelText","StatusCard","modalClose","src","alt","SuccessImg","ModalHeader","StatusText","ContainerBtn","queryClient","storeNewsletter","isLoggedIn","hasKimCustomerId","isXSmallScreen","profile","useUserProfile","identityServerEmail","emailSubscriptionPageUrl","myCoop","emailConsentChecked","setEmailConsentChecked","showCheckedError","setShowCheckedError","hasWeeklyNewsletterSubscription","setHasWeeklyNewsletterSubscription","customerData","useKimCustomerDataQuery","consents","isLoading","isLoadingConsents","useConsentQuery","subscribeMutation","setEmailInKimMutation","useMutation","mutationFn","newMail","kimProxyFlow","onSuccess","invalidateQueries","all","mutate","hasConsent","some","accepted","kimEmail","addresses","typeOfAddress","address","isError","isSuccess","Container","Loader","InputContainer","EmailBox","ChangeEmailLink","Checkbox","checked","onCheckedChange","indicatorVerticalPosition","validationMsg","GdprLink","ButtonWrapper","isPending","store","drApiUrl","useQuery","storeDr","drApi","storeName","ledgerAccountNumber","storeOffersUrlBase","flyerImageUrl","isMediumDevice","isOpen","open","useModal","isMember","showWeeklyNewsletterSubscription","setShowWeeklyNewsletterSubscription","drPeriodList","drListIsLoading","clickHandler","periodId","pdfUrl","pdfLink","storeFlyerDownload","currentWeek","nextWeek","periods","Image","Modal","CloseButton","emailIsInvalid","showInvalidEmail","onConcentChange","emailConsent","subscribeToWeeklyNewsletter","TextInput","onChange","isInvalid","validationText","disabledReason","serviceName","setEmail","setEmailConsent","setShowInvalidEmail","shouldStartWithFetchingEmailSubscriptions","isLoadingEmailSubscriptions","emailSubscriptions","fetchEmailSubscriptionsError","useEmailSubscriptionQuery","isLoadingSubscribe","subscribeError","subscribeStatus","useAsyncDispatcher","isArray","execute","hasFetchError","hasSubscribeError","newEmail","validateEmail","tracking","myProfile","isMedmeraCustomer","_defs","fill","clipPath","topValueLogo","setTopValueLogo","bgImageHeight","setBgImageHeight","logoHeight","setLogoHeight","containerRef","updateSizesOnWidth","containerWidth","clientWidth","newBgImageHeight","newLogoHeight","useElementEvent","FacebookBgImageWrapper","minHeight","CoopLogoWrapper","CoopLogo","FacebookContent","Chip","leftSlot","facebookUsername","favoriteStores","openStoreSearchWithTracking","onClickHandler","fullUri","favoriteStore","to","clickedStoreName","storeTab","rotateClockwise","setIsExpanded","isAnimatingDropdown","setIsAnimatingDropdown","prev","openStoreSearch","StoreSearchMap","findStore","onAnimationStart","phoneNumber","paddingLeft","customerServiceUrl","addressStr","googleAddress","storeServices1","list","storeServices2","storeServices3","storeServices4","serviceItem","todaysDate","Date","futureStoreOpenHours","specialDates","date","storeOpenHours","isSpecialDate","timeItem","openHoursText","StoreInformation","isFromMedium","md","showAddress","showOpenHours","showInStore","services1","services2","services3","services4","additionalClasses","OpenHoursDetail","Accordion","Root","collapsible","splitted","Item","Header","Trigger","Content","isB2BRoute","loginUrl","createAccountUrl","IconButton","isStoreFavorite","toggleCurrentStoreToFavoriteStore","Confirm","onConfirm","confirmButtonProps","cancelButtonProps","getFormattedStoreOpenHours","openingHours","singleStoreInformation","openingHoursToday","EmphasizedButton","eventCategory","eventAction","eventLabel","futureIrregularOpeningHours","phone","currentStore","singleStoreInformationLoading","storePageSettings","customerServiceLink","storeId","navigate","enableConsentKimApi","featureFlags","startsWith","addFavoriteStore","deleteFavoriteStore","useFavoriteStores","storeIsLoading","ledgerId","storeByLedgerId","storeApi","stores","getStoresInformation","Infinity","storeSettingsPageContentId","gcTime","parentPage","parentPageIsLoading","contentId","parentLinkContentId","drOfferEnabled","enableDrOffers","drAvailableStoreLedgerAccountNumbers","dkeOffers","storeDkeOffers","dkeApi","getDkeOffers","isCurrentStoreFavorite","_store","toggleCurrentStoreToFavorite","favorite","remove","add","moduleListing1","moduleListing2","moduleListing3","isB2B","isB2BUser","isDesktop","currentStoreMetaDescription","description","storeDefaultMetaDescriptionTemplate","storeServiceSEOPriority","tabs","contentTabHeading1","component","disableStoreOffersFlyer","flyerImage","BecomeAMemberBlock","moduleListingGeneral","EpiContentArea","OfferPropositionsListBlock","categories","storeOffer","minimalOffersCount","guid","showFacebookModule","moduleListingGeneral2","delay","contentTabHeading2","cateringDoubleImageTextBlock","hasTabs","PageProperties","TabSwitcher","initialActiveId","listClasses","align","containerClasses","forcePanelRerenderOnTabChange","hidePanelsWithCss","storeID","parentLink","disableCampaignBanner","MEMBER_CONSENT_QUERY","MEMBER_CONSENT_NEWSLETTERS_EMAIL","MEMBER_CONSENT_NEWSLETTERS_SMS","MEMBER_CONSENT_NEWSLETTER_STORE","ADOBE_MEMBER_CONSENT_NEWSLETTERS_EMAIL","defaultDataSet","autoVoucherStatusQueryKey","kimCustomerDataQueryKeys","fullDatSet","byEmail","useConsentSubscribeMutation","useConsentUnsubscribeMutation","mmid","medmeraId","queryKeyName","consentSubscriptionsByNeoId","consentSubscriptionsByMmId","consentSubscriptionsByEmail","retry","savedCartQueryKeys","byPaging","subscriptionsQueryKeys","byId","timeslots","subId","klarnaSnippet","orderReclamationsQueryKey","deliveryAddressQueryKey","connectedCardsQueryKey","lastOrdersQueryKeys","myCoopProfileMenuKeys","settingsPage","myCoopHouseholdKeys","householdMembers","associationNamesQueryKey","householdMemberQueryKeys","addHouseholdMember","personalNumber","pointItemWithdrawalHistoryKeys","byDate","pointHistoryKeys","purchaseHistoryKeys","consentSubscriptionsKeys","mmId","adobeConsentSubscriptionsKeys","rounded","classes","AccordionItem","iconClassName","iconPosition","withChevron","AccordionTrigger","AccordionChevron","AccordionHeader","AccordionContent","displayName","asIcon","loadingText","labelVisuallyHidden","labeVerticalPosition","htmlFor","VisuallyHidden","iconProps","TopContainer","BottomContainer","Label","indicator","necessityIndicator","isRequired","HelperText","helperText","slot","ValidationError","ValidationText","Prefix","PrefixSlot","Postfix","PostfixSlot","Input","_props","TextArea","custom","customProps","rest","textInputProps","postfixSlot","isReadOnly","validationBehavior","splitCustomObjectFromIntersection","whole","keysNotFromCustomProps"],"sourceRoot":""}