{"version":3,"file":"coopse.script.9321.b600f130.chunk.js","mappings":"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","sources":["webpack:///../../packages/icons/src/stroke2/bag1.svg","webpack:///../../packages/icons/src/stroke2/search.svg","webpack:///../../packages/components/src/ActionList/ActionList.module.scss","webpack:///../../packages/components/src/Search/Search.module.scss","webpack:///./src/microApps/base/models/SearchFromPageType.ts","webpack:///./src/microApps/common/hooks/useLoadGoogleMapScript.ts","webpack:///./src/microApps/common/components/atoms/GoogleMapsScriptLoader/GoogleMapsScriptLoader.tsx","webpack:///./src/microApps/common/hooks/useEffectOnce.ts","webpack:///./src/microApps/common/tracking/ga4/search/ga4SearchEvents.ts","webpack:///./src/microApps/storeAndOffers/pages/StoreMapPage/StoreMapPage.tsx","webpack:///./src/microApps/storeAndOffers/pages/StoreMapPage/hooks/useDkeTvOffers.ts","webpack:///./src/microApps/storeAndOffers/pages/StoreMapPage/StoreMapPage.hooks.ts","webpack:///./src/microApps/storeAndOffers/pages/StoreMapPage/StoreMapPage.module.less","webpack:///./src/microApps/episerver/components/pages/EpiMapStorePage/EpiMapStorePage.tsx","webpack:///./src/microApps/storeAndOffers/consts.ts","webpack:///./src/microApps/storeAndOffers/hooks/useLastVisitedStores.ts","webpack:///./src/microApps/storeAndOffers/storeOffersMap/components/StoreSearchBar.tsx","webpack:///./src/microApps/common/tracking/hooks/useStoreMapSearchGA4Tracking.ts","webpack:///./src/microApps/storeAndOffers/storeOffersMap/hooks/useStoreFlyinUrlQueryState.ts","webpack:///./src/microApps/storeAndOffers/storeOffersMap/hooks/useAllStoresQuery.ts","webpack:///./src/microApps/storeAndOffers/storeOffersMap/hooks/useStoreSearchQuery.ts","webpack:///./src/microApps/storeAndOffers/storeOffersMap/hooks/useStoreSearch.ts","webpack:///./src/microApps/storeAndOffers/storeOffersMap/utils.ts","webpack:///../../packages/components/src/ListBox/ListBox.module.scss","webpack:///../../packages/components/src/ListBox/ListBox.tsx","webpack:///../../packages/components/src/Search/SearchActions.tsx","webpack:///../../packages/components/src/Search/SearchContent.tsx","webpack:///../../packages/components/src/Search/SearchInputSlot.tsx","webpack:///../../packages/components/src/Search/Search.utils.ts","webpack:///../../packages/components/src/Search/SearchRoot.tsx","webpack:///../../packages/components/src/SearchAutocomplete/Popover.tsx","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.module.scss","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.tsx","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.hooks.ts","webpack:///../../packages/hooks/src/useResizeObserver.ts","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.utils.ts"],"sourcesContent":["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 SvgBag1 = _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: \"M9.514 2.14266C9.98758 2.42681 10.1411 3.04107 9.857 3.51465L7.7657 7.00015H16.2333L14.142 3.51465C13.8579 3.04107 14.0114 2.42681 14.485 2.14266C14.9586 1.85851 15.5729 2.01208 15.857 2.48566L18.5657 7.00015H20.7187C22.0199 7.00015 22.9746 8.22293 22.659 9.48522L20.159 19.4852C19.9364 20.3756 19.1365 21.0002 18.2187 21.0002H5.78028C4.86255 21.0002 4.06258 20.3756 3.84 19.4852L1.34 9.48522C1.02442 8.22293 1.97914 7.00015 3.28028 7.00015H5.43332L8.14201 2.48566C8.42616 2.01208 9.04042 1.85851 9.514 2.14266ZM5.98117 9.00015H3.28028L5.78028 19.0002H18.2187L20.7187 9.00015H18.0178C18.0062 9.00035 17.9946 9.00035 17.9831 9.00015H6.01595C6.00437 9.00035 5.99277 9.00035 5.98117 9.00015Z\"\n  })));\n};\nexport default SvgBag1;","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 SvgSearch = _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: \"M15.1215 6.63627C12.7784 4.29312 8.97941 4.29312 6.63627 6.63627C4.29312 8.97941 4.29312 12.7784 6.63627 15.1215C8.97941 17.4647 12.7784 17.4647 15.1215 15.1215C17.4647 12.7784 17.4647 8.97941 15.1215 6.63627ZM5.22205 5.22205C8.34625 2.09786 13.4116 2.09786 16.5358 5.22205C19.4205 8.10678 19.6416 12.6465 17.1991 15.7849L20.7784 19.3642C21.1689 19.7547 21.1689 20.3879 20.7784 20.7784C20.3879 21.1689 19.7547 21.1689 19.3642 20.7784L15.7849 17.1991C12.6465 19.6416 8.10678 19.4205 5.22205 16.5358C2.09786 13.4116 2.09786 8.34625 5.22205 5.22205Z\"\n  })));\n};\nexport default SvgSearch;","// extracted by mini-css-extract-plugin\nexport default {\"ActionList\":\"itbvuHLp\",\"NoResults\":\"wWJqNXNL\",\"Item\":\"qZUW1oDQ\",\"NoResultsItem\":\"PKUeCReq\",\"ItemIcon\":\"phSAdaxj\",\"ItemHovered\":\"KIb11HB5\",\"ItemFocusVisible\":\"HNG_hZl_\"};","// extracted by mini-css-extract-plugin\nexport default {\"Search\":\"ZJoyxDAW\",\"Search--hidden\":\"dcXQdb7D\",\"Search-content\":\"oDq6An2m\",\"Search-input\":\"rXjMsUPA\",\"Search-actions\":\"gIEZRGNZ\",\"Search-icon\":\"vJ6gvrQv\",\"Search--large\":\"awlM8ShU\",\"Search--medium\":\"K6UbBi1w\",\"Search--small\":\"dozh4_al\"};","// Sync with SearchOverlayCurrentPage on backend\nexport enum SearchFromPageType {\n    StartPage = 'startpage',\n    Ecommerce = 'ecommerce',\n    Stores = 'stores',\n    Recipes = 'recipes',\n    Finance = 'finance',\n    Member = 'member',\n    Other = 'other',\n}\n","import { useLoadScript } from '@react-google-maps/api';\n\nimport { appConfig } from '../../../appConfig';\n\nconst googleMapsApiConfig: Parameters<typeof useLoadScript>[0] = {\n    googleMapsApiKey: appConfig.coopSettings.stores?.googleApiKey,\n    libraries: ['geometry'],\n    language: 'sv',\n};\n\nconst useLoadGoogleMapScript = () => {\n    return useLoadScript(googleMapsApiConfig);\n};\n\nexport default useLoadGoogleMapScript;\n","/* eslint-disable react/jsx-no-useless-fragment */\n\nimport { useEffect } from 'react';\n\nimport useLoadGoogleMapScript from '../../../hooks/useLoadGoogleMapScript';\n\nconst GoogleMapsScriptLoader = ({\n    loadingSlot,\n    loadedSlot,\n    loadErrorSlot,\n    onLoaded,\n    onLoadError,\n}: {\n    loadingSlot?: React.ReactNode;\n    loadedSlot?: React.ReactNode;\n    loadErrorSlot?: React.ReactNode;\n    onLoaded?: () => void;\n    onLoadError?: (err: Error) => void;\n}) => {\n    const { isLoaded, loadError } = useLoadGoogleMapScript();\n\n    useEffect(() => {\n        if (isLoaded) {\n            onLoaded?.();\n        }\n    }, [onLoaded, isLoaded]);\n\n    useEffect(() => {\n        if (loadError) {\n            onLoadError?.(loadError);\n        }\n    }, [loadError, onLoadError]);\n\n    if (loadError) {\n        return <>{loadErrorSlot}</>;\n    }\n\n    if (isLoaded) {\n        return <>{loadedSlot}</>;\n    }\n\n    return <>{loadingSlot}</>;\n};\n\nexport default GoogleMapsScriptLoader;\n","import { useCallback, useEffect, useRef } from 'react';\n\nconst useEffectOnce = (when: boolean, callback: () => void) => {\n    const sent = useRef(false);\n    useEffect(() => {\n        if (when && !sent.current) {\n            sent.current = true;\n            callback();\n        }\n    }, [when, callback]);\n\n    const resetEffect = useCallback(() => {\n        sent.current = false;\n    }, []);\n\n    return { resetEffect };\n};\n\nexport default useEffectOnce;\n","import { SearchFromPageType } from '../../../../base/models/SearchFromPageType';\nimport { failSilently } from '../../utils/failSilently';\nimport { sendGA4Event } from '../shared/sendGa4Event';\n\ntype SearchType = 'resultPage' | 'overlay';\n\nconst mapSearchFeatureName = (searchFromPage?: SearchFromPageType): SearchFeatureName => {\n    switch (searchFromPage) {\n        case SearchFromPageType.StartPage:\n            return 'homepage';\n        case SearchFromPageType.Ecommerce:\n            return 'products';\n        case SearchFromPageType.Recipes:\n            return 'recipes';\n        case SearchFromPageType.Stores:\n            return 'stores';\n        case SearchFromPageType.Member:\n            return 'member';\n        case SearchFromPageType.Finance:\n            return 'bank';\n        case SearchFromPageType.Other:\n        default:\n            return 'other';\n    }\n};\n\nconst mapSearchTypeToGa = (searchType: SearchType) => {\n    switch (searchType) {\n        case 'overlay':\n            return 'autocomplete';\n        case 'resultPage':\n            return 'enter';\n        default:\n            return null;\n    }\n};\n\nconst search =\n    (searchFromPage?: SearchFromPageType) =>\n    (actionTrigger: SearchTermActionTriggerType) =>\n    ({\n        actualSearchTerm,\n        originalSearchTerm,\n        totalResultNumber,\n    }: {\n        actualSearchTerm?: string;\n        originalSearchTerm?: string;\n        totalResultNumber?: number;\n    }) => {\n        const featureName = mapSearchFeatureName(searchFromPage);\n\n        const event: SearchEvent = {\n            event: 'search',\n            search_feature_name: featureName,\n            search_term_action_type_trigger: actionTrigger,\n            search_term: originalSearchTerm?.length === 0 ? undefined : originalSearchTerm,\n            search_term_inferred: actualSearchTerm,\n            search_results_number: totalResultNumber,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst searchDropdownAction =\n    (searchFromPage?: SearchFromPageType) => (actionTrigger: SearchTermActionTriggerType) => {\n        const featureName = mapSearchFeatureName(searchFromPage);\n\n        const event: SearchDropdownActionEvent = {\n            event: 'search_dropdown_action',\n            search_feature_name: featureName,\n            type: actionTrigger,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst searchDropdownItemAction =\n    (searchFromPage?: SearchFromPageType) =>\n    (actionTrigger: SearchTermActionTriggerType) =>\n    ({ position, itemId, itemName }: { position?: number; itemId?: string; itemName?: string }) => {\n        const featureName = mapSearchFeatureName(searchFromPage);\n\n        const event: SearchDropdownItemActionEvent = {\n            event: 'search_dropdown_action',\n            search_feature_name: featureName,\n            type: actionTrigger,\n            position,\n            item_id: itemId,\n            item_name: itemName,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst viewSearchResults =\n    (searchFromPage?: SearchFromPageType) =>\n    ({\n        actualSearchTerm,\n        originalSearchTerm,\n        totalResultNumber,\n    }: {\n        actualSearchTerm: string;\n        originalSearchTerm: string;\n        totalResultNumber: number;\n    }) => {\n        const featureName = mapSearchFeatureName(searchFromPage);\n\n        const event: ViewSearchResultsEvent = {\n            event: 'view_search_results',\n            search_term: originalSearchTerm,\n            search_term_inferred: actualSearchTerm,\n            search_feature_name: featureName,\n            search_results_number: totalResultNumber,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst viewSearchResultSuggestionClick = (linkText: string, linkUrl: string) => {\n    const event: ViewSearchResultsSuggestionClickEvent = {\n        event: 'view_search_results_other_suggestions_clicks',\n        type: 'other_suggestions',\n        click_text: linkText,\n        click_path: linkUrl,\n    };\n\n    sendGA4Event(event);\n};\n\nconst noSearchResults =\n    (searchType: SearchType) => (searchTerm: string) => (searchFromPage?: SearchFromPageType) => {\n        const featureName = mapSearchFeatureName(searchFromPage);\n        const type = mapSearchTypeToGa(searchType);\n\n        const event: NoSearchResultsEvent = {\n            event: 'no_search_results',\n            feature_name: featureName,\n            type,\n            search_term: searchTerm,\n        };\n\n        sendGA4Event(event);\n    };\n\nconst searchIconClick = (searchFromPage?: SearchFromPageType) => {\n    const featureName = mapSearchFeatureName(searchFromPage);\n\n    const event: SearchIconClickEvent = {\n        event: 'search_icon_click',\n        search_feature_name: featureName,\n    };\n\n    sendGA4Event(event);\n};\n\nexport default {\n    viewSearchResultSuggestionClick: failSilently(viewSearchResultSuggestionClick),\n    viewSearchResults: failSilently(viewSearchResults),\n    search: failSilently(search),\n    searchDropdownAction: failSilently(searchDropdownAction),\n    searchDropdownItemAction: failSilently(searchDropdownItemAction),\n    noSearchResults: failSilently(noSearchResults),\n    searchIconClick: failSilently(searchIconClick),\n};\n","/* eslint-disable react/jsx-props-no-spreading */\nimport { Button, OverlayPacmanLoader } from '@coop/components';\nimport classNames from 'classnames';\nimport { useState } from 'react';\nimport type { SwiperOptions } from 'swiper/types';\n\nimport { CoopSwiperBreakpoints } from '../../../../utility/coopSwiperBreakpoints';\nimport { Helpers } from '../../../../utility/helpers';\nimport { b2bModeTrigger } from '../../../base/components/UserTypeModeSwitch/UserTypeModeSwitch.utils';\nimport GoogleMapsScriptLoader from '../../../common/components/atoms/GoogleMapsScriptLoader/GoogleMapsScriptLoader';\nimport { SwipableList } from '../../../common/components/SwipableList';\nimport useModal from '../../../common/hooks/useModal';\nimport { StoreModalType } from '../../../common/store/structureDefinitions/modalState';\nimport { getNeoId } from '../../../common/utils/neoIdUtils';\nimport { useBreakpointsSidebar } from '../../../ecommerce/hooks/useBreakpoints';\nimport useReactRouting from '../../../ecommerce/hooks/useReactRouting';\nimport useFavoriteStores from '../../hooks/useFavoriteStores';\nimport { useLastVisitedStore } from '../../hooks/useLastVisitedStores';\nimport BecomeAMemberBlock from '../../physicalOffers/components/BecomeAMemberBlock';\nimport OfferPropositionsListBlock from '../../physicalOffers/components/blocks/OfferPropositionsListBlock';\nimport StoreOfferTeaser from '../../physicalOffers/components/StoreOfferTeaser/StoreOfferTeaser';\nimport StoreSearchBar from '../../storeOffersMap/components/StoreSearchBar';\nimport { useStoreFlyinUrlQueryState } from '../../storeOffersMap/hooks/useStoreFlyinUrlQueryState';\nimport { useStoreSearch } from '../../storeOffersMap/hooks/useStoreSearch';\nimport { useDkeTvOffers } from './hooks/useDkeTvOffers';\nimport { useFavoriteStoreRedirect, useLastVisitedStoreRedirect } from './StoreMapPage.hooks';\nimport styles from './StoreMapPage.module.less';\n\ninterface StoreMapPageProps {\n    storeHeadline: string;\n    text: string;\n}\nconst StoreMapPage = (props: StoreMapPageProps) => {\n    const { data: lastVisitedStore, isLoading: lastVisitedStoreLoading } = useLastVisitedStore();\n    const { favoriteStores, favoriteStoresLoading } = useFavoriteStores();\n    const { open } = useModal(StoreModalType.StoreSearchMap);\n\n    const { data: tvOffers, isLoading: isTvOffersLoading } = useDkeTvOffers();\n\n    const isSoftLoggedIn = getNeoId();\n    const validTvOffers = tvOffers ? tvOffers.slice(0, 8) : [];\n\n    useFavoriteStoreRedirect(favoriteStores);\n    useLastVisitedStoreRedirect(lastVisitedStore);\n    const { push } = useReactRouting();\n\n    const { setMapView, storeSearchQueryParam, setStoreSearchQueryParam } =\n        useStoreFlyinUrlQueryState();\n\n    const [searchTerm, setSearchTerm] = useState(storeSearchQueryParam || '');\n    const [mapsScriptLoaded, setMapsScriptLoaded] = useState(false);\n    const isZipCodeEntered = Helpers.isZipCode(searchTerm);\n\n    const { results, resultsLoaded, isError } = useStoreSearch(searchTerm, mapsScriptLoaded);\n\n    const isB2B = b2bModeTrigger().isB2BUser;\n\n    const { breakpoints } = useBreakpointsSidebar(CoopSwiperBreakpoints.AREA_TV_OFFERS_LIST);\n\n    const swiperOptions: SwiperOptions = {\n        spaceBetween: 10,\n        breakpoints,\n    };\n\n    if (favoriteStoresLoading || isTvOffersLoading || lastVisitedStoreLoading) {\n        return (\n            <OverlayPacmanLoader\n                isLoading={favoriteStoresLoading || isTvOffersLoading || lastVisitedStoreLoading}\n            />\n        );\n    }\n\n    return (\n        <div className={styles.StoreMapPageMargin}>\n            <div className=\"Main-container Main-container--padding\">\n                <div className=\"Section Section--margin u-textCenter\">\n                    <div className={classNames(' u-bgGreenLight', styles.Container)}>\n                        <div\n                            className={classNames(\n                                'Main-container Main-container--small',\n                                validTvOffers?.length > 0 ? styles.Hero : '',\n                            )}\n                        >\n                            <div className={styles.Banner}>\n                                <img src=\"/Assets/Images/party-banner.png\" alt=\"\" />\n                            </div>\n\n                            <div className=\"u-paddingHxlg\">\n                                <h1\n                                    className={classNames(\n                                        'Heading  u-textFamilySecondary u-colorGreenDark',\n                                        styles.Heading,\n                                    )}\n                                >\n                                    {props.storeHeadline}\n                                </h1>\n                                <p className=\"u-textLarge u-marginBlg\">{props.text}</p>\n                            </div>\n\n                            <div\n                                className={classNames(\n                                    styles.SearchBarContainer,\n                                    'u-sizeFull u-paddingHxlg ',\n                                )}\n                            >\n                                <StoreSearchBar\n                                    inputText={searchTerm}\n                                    setInputText={setSearchTerm}\n                                    selectByCityName={(cityName) => {\n                                        setStoreSearchQueryParam(cityName);\n                                        open();\n                                    }}\n                                    results={results}\n                                    resultsLoaded={resultsLoaded}\n                                    selectStoreFromSearch={(store) => push(store.url)}\n                                    searchSize=\"medium\"\n                                    isError={isError}\n                                />\n                                {/* Zip code search requires Google Maps JS API thats inside Maps script */}\n                                {isZipCodeEntered && (\n                                    <GoogleMapsScriptLoader\n                                        onLoaded={() => setMapsScriptLoaded(true)}\n                                    />\n                                )}\n                            </div>\n                            <div\n                                className={classNames(styles.Button, 'u-paddingHsm u-paddingTxxsm')}\n                            >\n                                <Button\n                                    theme=\"light\"\n                                    size={40}\n                                    onClick={() => {\n                                        setMapView();\n                                        open();\n                                    }}\n                                    className=\"u-marginHauto\"\n                                >\n                                    Välj butik via karta\n                                </Button>\n                            </div>\n                        </div>\n\n                        {!isTvOffersLoading && validTvOffers?.length > 0 && (\n                            <div className={styles.SwiperContainer}>\n                                <SwipableList\n                                    swiperOptions={swiperOptions}\n                                    swiperPaginationClass={styles.SwiperPagination}\n                                >\n                                    {validTvOffers.map((offer) => (\n                                        <StoreOfferTeaser\n                                            key={offer.id}\n                                            offer={offer}\n                                            showAddToShoppingList\n                                        />\n                                    ))}\n                                </SwipableList>\n                            </div>\n                        )}\n                    </div>\n                </div>\n            </div>\n\n            <div className=\"Main-container Main-container--padding\">\n                {!isB2B && (\n                    <div className=\"Section u-marginVlg\">\n                        <OfferPropositionsListBlock ledgerId={undefined} />\n                    </div>\n                )}\n\n                {!isB2B && !isSoftLoggedIn && <BecomeAMemberBlock />}\n            </div>\n        </div>\n    );\n};\n\nexport default StoreMapPage;\n","import { useQuery } from '@tanstack/react-query';\n\nimport dkeApi from '../../../../common/api/dke/dkeApi';\nimport { storeQueryKeys } from '../../../storeQueries';\n\nexport const useDkeTvOffers = () => {\n    const query = useQuery({\n        queryKey: storeQueryKeys.storeTvOffers,\n        queryFn: dkeApi.getTvOffers,\n        retry: 1,\n        staleTime: Infinity,\n    });\n\n    return query;\n};\n","import { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport useEffectOnce from '../../../common/hooks/useEffectOnce';\nimport type { FavoriteStore, StoreSimple } from '../../models';\n\n// Navigate to first favorite store page when comming into the main store page (map), if any favorite store exist\n// The functionality is also done on backend\n// This hook is for future spa mode between microapps\nexport const useFavoriteStoreRedirect = (favoriteStores: FavoriteStore[]) => {\n    const navigate = useNavigate();\n\n    const onFavoriteStoresFetched = useCallback(() => {\n        const firstFavoriteStore = favoriteStores?.[0];\n        if (firstFavoriteStore && firstFavoriteStore.url) {\n            navigate(firstFavoriteStore.url, { replace: true });\n        }\n    }, [favoriteStores, navigate]);\n\n    useEffectOnce(!!favoriteStores, onFavoriteStoresFetched);\n};\nexport const useLastVisitedStoreRedirect = (lastVisitedStore: StoreSimple[] | undefined) => {\n    const navigate = useNavigate();\n\n    const onlastVisitedStoreFetched = useCallback(() => {\n        const validLastVisitedStore = lastVisitedStore?.[0];\n        if (validLastVisitedStore && validLastVisitedStore.url) {\n            navigate(validLastVisitedStore.url, { replace: true });\n        }\n    }, [lastVisitedStore, navigate]);\n\n    useEffectOnce(!!lastVisitedStore, onlastVisitedStoreFetched);\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"StoreMapPageMargin\":\"gcblvIio\",\"Heading\":\"tXqwFqqz\",\"Banner\":\"R890BUfB\",\"Button\":\"M9P8oO0V\",\"Container\":\"iMIpiM9k\",\"Hero\":\"Dp4TB2wT\",\"SearchBarContainer\":\"YORZB14H\",\"SwiperContainer\":\"zaunrTME\",\"SwiperPagination\":\"DWGvHarT\",\"LoginBlock\":\"VWL7ofbJ\",\"LoginContainer\":\"CQ6zmEYP\",\"LoginHeading\":\"X8hKRbKA\"};","import type { FC } from 'react';\n\nimport StoreMapPage from '../../../../storeAndOffers/pages/StoreMapPage/StoreMapPage';\nimport type { EpiMapStorePageType } from './epiMapStorePageType';\n\nconst EpiMapStorePage: FC<React.PropsWithChildren<EpiMapStorePageType>> = (props) => {\n    return <StoreMapPage storeHeadline={props.pageHeadline} text={props.text} />;\n};\n\nexport default EpiMapStorePage;\n","export const STORE_SEARCH_QUERY_KEY = 'storeSearchQuery';\nexport const STORE_FLYIN_QUERY_KEY = 'storeFlyin';\nexport const STORE_SEARCH_QUERY_MIN_LENGTH = 3;\nexport const STORE_SEARCH_ZIP_LENGTH = 5;\n","/* eslint-disable prettier/prettier */\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useIsUserAuthenticated } from '../../common/hooks/useUserProfile';\nimport storeApi from '../api/storeApi';\nimport { storeQueryKeys } from '../storeQueries';\n\nexport const useLastVisitedStore = () => {\n    const isAuthenticated = useIsUserAuthenticated();\n    const query = useQuery({\n        queryKey: storeQueryKeys.lastVisitedStore,\n        queryFn: storeApi.stores.getLastVisitedStore,\n        enabled: !isAuthenticated,\n        staleTime: 1000 * 60 * 5, // 5 minutes\n    });\n\n    return query;\n};\n","import type { Search } from '@coop/components';\nimport {\n    SearchAutocomplete,\n    SearchAutocompleteItem,\n    SearchAutocompleteItemIcon,\n} from '@coop/components';\nimport { SearchAutocompleteItemLabel } from '@coop/components/src/SearchAutocomplete/SearchAutocomplete';\nimport { Bag1Icon, PinIcon } from '@coop/icons';\n\nimport { useStoreMapSearchGA4ActionTracking } from '../../../common/tracking/hooks/useStoreMapSearchGA4Tracking';\nimport { isNumber } from '../../../common/utils/numberUtils';\nimport { STORE_SEARCH_QUERY_MIN_LENGTH, STORE_SEARCH_ZIP_LENGTH } from '../../consts';\nimport type { MapStore } from '../models';\n\nexport type StoreSearchBarResultItem =\n    | {\n          id: string;\n          type: 'city';\n          name: string;\n      }\n    | {\n          id: string;\n          type: 'store';\n          store: MapStore;\n      };\n\ninterface StoreSearchBarProps {\n    inputText?: string;\n    setInputText: (text: string) => void;\n    selectByCityName: (cityName: string) => void;\n    selectStoreFromSearch: (store: MapStore) => void;\n    searchSize: React.ComponentProps<typeof Search>['size'];\n    results: StoreSearchBarResultItem[];\n    isError: boolean;\n    resultsLoaded: boolean;\n}\n\nconst StoreSearchBar = ({\n    selectByCityName,\n    selectStoreFromSearch,\n    searchSize,\n    setInputText,\n    results,\n    resultsLoaded,\n    inputText,\n    isError,\n}: StoreSearchBarProps) => {\n    const { trackEnterAction } = useStoreMapSearchGA4ActionTracking(inputText);\n\n    const inputIsProperLength =\n        !!inputText &&\n        ((!isNumber(inputText) && inputText.length >= STORE_SEARCH_QUERY_MIN_LENGTH) ||\n            (isNumber(inputText) && inputText.length === STORE_SEARCH_ZIP_LENGTH)); // when searching for zipcode, we want to show dropdown only when the input is 5 digits long\n\n    const selectFoundCityName = (name: string) => {\n        selectByCityName(name);\n        setInputText(name);\n        trackEnterAction(name);\n    };\n\n    const selectFoundStore = (store: MapStore) => {\n        selectStoreFromSearch(store);\n        setInputText(store.name);\n        trackEnterAction(store.name);\n    };\n\n    const handleItemClick = (item: StoreSearchBarResultItem) => {\n        if (item.type === 'city') {\n            return selectFoundCityName(item.name);\n        }\n\n        return selectFoundStore(item.store);\n    };\n\n    return (\n        <SearchAutocomplete\n            placeholder=\"Sök butik\"\n            size={searchSize}\n            inputValue={inputText}\n            onInputChange={setInputText}\n            showEmptyStateWhen={resultsLoaded && inputIsProperLength && !results.length}\n            showErrorStateWhen={isError}\n            items={resultsLoaded && inputIsProperLength ? results : []}\n            onSelectionChange={(key) => {\n                const theItem = results.find((result) => result.id === key);\n                if (theItem) {\n                    handleItemClick(theItem);\n                }\n            }}\n            overlayMaxHeight={500}\n        >\n            {(item) => (\n                <SearchAutocompleteItem\n                    textValue={item.type === 'city' ? item.name : item.store.name}\n                >\n                    <SearchAutocompleteItemIcon icon={item.type === 'city' ? PinIcon : Bag1Icon} />\n                    <SearchAutocompleteItemLabel>\n                        {item.type === 'city' ? item.name : item.store.name}\n                    </SearchAutocompleteItemLabel>\n                </SearchAutocompleteItem>\n            )}\n        </SearchAutocomplete>\n    );\n};\n\nexport default StoreSearchBar;\n","import { useEffect, useRef } from 'react';\n\nimport { SearchFromPageType } from '../../../base/models/SearchFromPageType';\nimport { ga4SearchTracking } from '../ga4/search';\n\nexport const useStoreMapSearchGA4ActionTracking = (originalQuery: string | undefined) => {\n    const previousOriginalQuery = useRef<string | undefined>(undefined);\n    useEffect(() => {\n        if (previousOriginalQuery.current !== originalQuery) {\n            previousOriginalQuery.current = undefined;\n        }\n    }, [originalQuery]);\n\n    const trackSearchAction = (\n        actionTrigger: SearchTermActionTriggerType,\n        queryUsed: string,\n        totalResultNumber?: number,\n    ) => {\n        if (previousOriginalQuery.current === originalQuery && originalQuery !== undefined) {\n            return;\n        }\n\n        previousOriginalQuery.current = originalQuery;\n\n        ga4SearchTracking.search(SearchFromPageType.Stores)?.(actionTrigger)({\n            originalSearchTerm: originalQuery,\n            actualSearchTerm: queryUsed,\n            totalResultNumber,\n        });\n    };\n\n    const trackEnterAction = (queryUsed: string) => {\n        trackSearchAction('enter', queryUsed);\n        ga4SearchTracking.searchDropdownAction(SearchFromPageType.Stores)?.('enter');\n    };\n    return {\n        trackEnterAction,\n    };\n};\n","import { useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nimport { STORE_FLYIN_QUERY_KEY, STORE_SEARCH_QUERY_KEY } from '../../consts';\n\nexport const useStoreFlyinUrlQueryState = () => {\n    const [params, setParams] = useSearchParams();\n    const storeSearchQueryParam = params.get(STORE_SEARCH_QUERY_KEY);\n    const storeFlyinQueryParam = params.get(STORE_FLYIN_QUERY_KEY);\n\n    const setMapView = useCallback(() => {\n        setParams(\n            (prev) => {\n                const newParams = new URLSearchParams(prev);\n                newParams.set(STORE_FLYIN_QUERY_KEY, 'map');\n                return newParams;\n            },\n            {\n                replace: true,\n            },\n        );\n    }, [setParams]);\n\n    const setSearchView = useCallback(() => {\n        setParams(\n            (prev) => {\n                const newParams = new URLSearchParams(prev);\n                newParams.set(STORE_FLYIN_QUERY_KEY, 'search');\n                return newParams;\n            },\n            {\n                replace: true,\n            },\n        );\n    }, [setParams]);\n\n    const setResultsView = useCallback(() => {\n        setParams(\n            (prev) => {\n                const newParams = new URLSearchParams(prev);\n                newParams.set(STORE_FLYIN_QUERY_KEY, 'results');\n                return newParams;\n            },\n            {\n                replace: true,\n            },\n        );\n    }, [setParams]);\n\n    const reset = useCallback(() => {\n        setParams(\n            (prev) => {\n                const newParams = new URLSearchParams(prev);\n                newParams.delete(STORE_SEARCH_QUERY_KEY);\n                newParams.delete(STORE_FLYIN_QUERY_KEY);\n                return newParams;\n            },\n            {\n                replace: true,\n            },\n        );\n    }, [setParams]);\n\n    const setStoreSearchQueryParam = useCallback(\n        (searchTerm: string | null) => {\n            setParams(\n                (prev) => {\n                    const newParams = new URLSearchParams(prev);\n                    if (searchTerm) {\n                        newParams.set(STORE_SEARCH_QUERY_KEY, searchTerm);\n                    } else {\n                        newParams.delete(STORE_SEARCH_QUERY_KEY);\n                    }\n                    return newParams;\n                },\n                {\n                    replace: true,\n                },\n            );\n        },\n        [setParams],\n    );\n\n    const setStoreSearchQueryWithResultsView = useCallback(\n        (searchTerm: string | null) => {\n            setParams(\n                (prev) => {\n                    const newParams = new URLSearchParams(prev);\n                    if (searchTerm) {\n                        newParams.set(STORE_SEARCH_QUERY_KEY, searchTerm);\n                        newParams.set(STORE_FLYIN_QUERY_KEY, 'results');\n                    }\n                    return newParams;\n                },\n                {\n                    replace: true,\n                },\n            );\n        },\n        [setParams],\n    );\n\n    return {\n        storeSearchQueryParam,\n        storeFlyinQueryParam,\n        setParams,\n        setMapView,\n        setSearchView,\n        setResultsView,\n        setStoreSearchQueryParam,\n        setStoreSearchQueryWithResultsView,\n        reset,\n    };\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport storeApi from '../../api/storeApi';\nimport { storeQueryKeys } from '../../storeQueries';\n\ntype GetAllStoresData = Awaited<ReturnType<typeof storeApi.stores.getAll>>;\n\nconst useAllStoresQuery = <TData = GetAllStoresData>(args?: {\n    select?: (data: GetAllStoresData) => TData;\n    enabled?: boolean;\n}) => {\n    const query = useQuery({\n        queryKey: storeQueryKeys.allStores,\n        queryFn: storeApi.stores.getAll,\n        staleTime: 1000 * 60 * 5,\n        placeholderData: [],\n        select: args?.select,\n        enabled: args?.enabled,\n    });\n\n    return query;\n};\n\nexport default useAllStoresQuery;\n","import { keepPreviousData, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { Helpers } from '../../../../utility/helpers';\nimport storeApi from '../../api/storeApi';\nimport { storeQueryKeys } from '../../storeQueries';\nimport {\n    getCityNamesFromStores,\n    getStoresNearbyPosition,\n    googleApiGetCoordinatesByZipCode,\n} from '../utils';\nimport useAllStoresQuery from './useAllStoresQuery';\n\nconst parseZipCode = (zipCodeString: string) => {\n    return Helpers.isZipCode(zipCodeString) ? Number(zipCodeString) : null;\n};\n\nconst SEARCH_STORE_LIMIT = 25;\n\n/**\n * WARNING: this hook uses Google's Geocode API to get coordinates for a zip code. Its pay-as-you-go, so use it sparingly.\n */\nexport const useStoreSearchQuery = (searchTerm: string, enabled: boolean) => {\n    const allStoresQuery = useAllStoresQuery();\n    const queryClient = useQueryClient();\n\n    const query = useQuery({\n        queryKey: storeQueryKeys.storeSearch(searchTerm),\n        enabled: allStoresQuery.isSuccess && enabled,\n        queryFn: async () => {\n            const cachedAllStores = queryClient.getQueryData(\n                storeQueryKeys.allStores,\n            ) as (typeof allStoresQuery)['data'];\n\n            const allStores = cachedAllStores || (await storeApi.stores.getAll());\n\n            const possibleZipCode = parseZipCode(searchTerm);\n            if (possibleZipCode !== null) {\n                const coords = await googleApiGetCoordinatesByZipCode(possibleZipCode.toString());\n                const nearbyStores = getStoresNearbyPosition({\n                    stores: allStores,\n                    coordinate: coords,\n                });\n\n                if (nearbyStores?.length > 0)\n                    return {\n                        stores: nearbyStores.splice(0, SEARCH_STORE_LIMIT),\n                        cityNames: undefined,\n                    };\n            } else {\n                const filteredStores = searchTerm\n                    ? allStores.filter((store) =>\n                          store.name.toLowerCase().includes(searchTerm.toLowerCase()),\n                      )\n                    : [];\n\n                const filteredCityNames = searchTerm\n                    ? getCityNamesFromStores(allStores).filter((name) =>\n                          name.toLowerCase().includes(searchTerm.toLowerCase()),\n                      )\n                    : [];\n\n                return {\n                    stores: filteredStores.splice(0, SEARCH_STORE_LIMIT),\n                    cityNames: filteredCityNames.splice(0, SEARCH_STORE_LIMIT),\n                };\n            }\n        },\n        placeholderData: keepPreviousData,\n        staleTime: Infinity,\n    });\n\n    return query;\n};\n","import { Helpers } from '../../../../utility/helpers';\nimport { isNumber } from '../../../common/utils/numberUtils';\nimport { STORE_SEARCH_QUERY_MIN_LENGTH } from '../../consts';\nimport type { StoreSearchBarResultItem } from '../components/StoreSearchBar';\nimport useAllStoresQuery from './useAllStoresQuery';\nimport { useStoreSearchQuery } from './useStoreSearchQuery';\n\nexport const useStoreSearch = (searchTerm: string, googleMapsApiLoaded: boolean) => {\n    const allStoresQuery = useAllStoresQuery();\n    const storeSearchQuery = useStoreSearchQuery(\n        searchTerm,\n        searchTerm.length >= STORE_SEARCH_QUERY_MIN_LENGTH &&\n            ((Helpers.isZipCode(searchTerm) && googleMapsApiLoaded) || // if zipcode is entered, Google Maps API needs to be loaded first to use the search\n                !isNumber(searchTerm.split(' ').join(''))), // searchTerm is not a number, so its normal text search\n    );\n\n    const storeSearchResults = storeSearchQuery.data?.stores?.map(\n        (store) =>\n            ({\n                type: 'store',\n                store,\n                id: `${store.ledgerAccountNumber}_${store.name}`,\n            }) as StoreSearchBarResultItem,\n    );\n\n    const storeCityNames = storeSearchQuery.data?.cityNames?.map(\n        (item) =>\n            ({\n                id: item,\n                type: 'city',\n                name: item,\n            }) as StoreSearchBarResultItem,\n    );\n\n    const results = [...(storeCityNames || []), ...(storeSearchResults || [])];\n\n    return {\n        results,\n        resultsLoaded: storeSearchQuery.isSuccess && allStoresQuery.isSuccess,\n        allStoresQuery,\n        storeSearchQuery,\n        isError: storeSearchQuery.isError || allStoresQuery.isError,\n    };\n};\n","import type { MapStore } from './models';\n\nexport const MAP_DEFAULT_LEVEL_ZOOM = 5;\nexport const MAP_STORE_LEVEL_ZOOM = 16;\nexport const DESKTOP_LIST_INSIDE_MAP_WIDTH = 400;\n\nconst getWithTwoDecimalPoints = (num: number) => Math.round(num * 100) / 100;\n\nexport const formatMetersToText = (meters: number | null) => {\n    const METERS_PER_KILOMETER = 1000;\n    const METERS_PER_MILE = 10000;\n\n    if (!meters) {\n        return '';\n    }\n\n    if (meters > METERS_PER_MILE - 1) {\n        return `${getWithTwoDecimalPoints(meters / METERS_PER_MILE)} mil`;\n    }\n\n    if (meters > METERS_PER_KILOMETER - 1) {\n        return `${getWithTwoDecimalPoints(meters / METERS_PER_KILOMETER)} km`;\n    }\n\n    return `${meters} m`;\n};\n\nexport const getStoresWithinAcceptableDistance = ({\n    startDistanceinMeters,\n    storesWithDistances,\n    stopSearchAtIteration,\n    minStoresToStopEarly,\n}: {\n    startDistanceinMeters: number;\n    storesWithDistances: (MapStore & { distance: number })[];\n    stopSearchAtIteration: number;\n    minStoresToStopEarly: number;\n}) => {\n    const START_DISTANCE_IN_METERS = startDistanceinMeters;\n    const STOP_SEARCHING_AT_NUMBER = stopSearchAtIteration;\n    const MIN_STORES_TO_STOP = minStoresToStopEarly;\n\n    const innerGetStoresWithinAcceptableDistance = (\n        currDistanceInMeters: number,\n        tryNumber: number,\n    ): (MapStore & { distance: number })[] => {\n        const storesWithinAcceptableDistance = storesWithDistances\n            .slice(0)\n            .sort((a, b) => a.distance - b.distance)\n            .filter((store) => store.distance <= currDistanceInMeters);\n\n        if (tryNumber === STOP_SEARCHING_AT_NUMBER) {\n            return storesWithinAcceptableDistance;\n        }\n\n        if (storesWithinAcceptableDistance.length >= MIN_STORES_TO_STOP) {\n            return storesWithinAcceptableDistance;\n        }\n\n        // Increase the distance by 1000m after each iteration, i.e. -> 1000 -> 2000 -> 3000 -> ...\n        return innerGetStoresWithinAcceptableDistance(currDistanceInMeters + 1000, tryNumber + 1);\n    };\n\n    return innerGetStoresWithinAcceptableDistance(START_DISTANCE_IN_METERS, 1);\n};\n\nexport const getStoresNearbyPosition = ({\n    stores,\n    coordinate,\n}: {\n    stores: MapStore[];\n    coordinate: { lat: number; lng: number };\n}) => {\n    const userLatLng = new google.maps.LatLng(coordinate);\n\n    const storesWithDistances = stores.map((store) => ({\n        ...store,\n        distance: google.maps.geometry.spherical.computeDistanceBetween(\n            userLatLng,\n            new google.maps.LatLng(store.latitude, store.longitude),\n        ),\n    }));\n\n    const nearbyStores = getStoresWithinAcceptableDistance({\n        startDistanceinMeters: 3000,\n        storesWithDistances,\n        stopSearchAtIteration: 80, // Northern parts of Sweden might require even further, but we don't want to over do it\n        minStoresToStopEarly: 3,\n    });\n\n    return nearbyStores.map((store) => {\n        // eslint-disable-next-line unused-imports/no-unused-vars\n        const { distance, ...restOfStore } = store;\n        return restOfStore;\n    });\n};\n\nexport const googleApiGetCoordinatesByZipCode = (\n    zipCode: string,\n): Promise<{ lat: number; lng: number }> => {\n    return new Promise((resolve, reject) => {\n        const geocoder = new google.maps.Geocoder();\n\n        geocoder.geocode(\n            {\n                componentRestrictions: {\n                    country: 'SE',\n                    postalCode: zipCode,\n                },\n            },\n            (results, status) => {\n                if (status === 'OK' && results) {\n                    return resolve({\n                        lat: results[0].geometry.location.lat(),\n                        lng: results[0].geometry.location.lng(),\n                    });\n                }\n                return reject(status);\n            },\n        );\n    });\n};\n\nexport const getCityNamesFromStores = (stores: MapStore[]) =>\n    Array.from(new Set(stores.map((store) => store.city)));\n\nexport const createGoogleMapLinkToStore = (store: MapStore) =>\n    `https://maps.google.com/maps?q=${store.name}+${store.address}+${store.postalCode}+${store.city}`;\n\nexport const formatStoreOpeningHoursToday = (openingHoursToday: string) => {\n    return openingHoursToday === '0-0' ? 'Öppet dygnet runt' : openingHoursToday;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"Item\":\"pTBUdwWd\",\"ItemSelected\":\"ylL8_7oD\"};","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable @typescript-eslint/no-use-before-define */\n// import type { AriaListBoxOptions } from '@react-aria/listbox';\n// import type { Node } from '@react-types/shared';\nimport type { Node } from '@react-types/shared';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { type AriaListBoxOptions, useListBox, useOption } from 'react-aria';\nimport {\n    type ListBoxItemProps,\n    type ListBoxProps,\n    ListBox as AriaListBox,\n    ListBoxItem as AriaListBoxItem,\n} from 'react-aria-components';\nimport { type ListState } from 'react-stately';\n\nimport actionListStyles from '../ActionList/ActionList.module.scss';\nimport { Icon } from '../Icon';\nimport listBoxStyles from './ListBox.module.scss';\n\nexport const StaticListBox = <TItem extends object>(\n    props: ListBoxProps<TItem> & React.RefAttributes<HTMLDivElement>,\n) => {\n    return <AriaListBox {...props} className={actionListStyles.ActionList} />;\n};\n\nexport const StaticListBoxItem = <TItem extends object>(\n    props: ListBoxItemProps<TItem> & React.RefAttributes<TItem>,\n) => {\n    return (\n        <AriaListBoxItem\n            {...props}\n            className={classNames(actionListStyles.Item, listBoxStyles.Item)}\n        />\n    );\n};\n\nexport interface ResultListBoxStateShowProps {\n    showEmptyStateWhen: boolean;\n    renderEmptyState?: () => React.ReactNode;\n    showErrorStateWhen: boolean;\n    renderErrorState?: () => React.ReactNode;\n}\n\ninterface DynamicListBoxProps<TItem extends object>\n    extends ResultListBoxStateShowProps,\n        AriaListBoxOptions<TItem> {\n    listBoxRef: React.RefObject<HTMLDivElement>;\n    state: ListState<TItem>;\n    itemClassName?: string;\n}\n\nexport const DynamicListBox = <T extends object>(\n    props: DynamicListBoxProps<T> & React.RefAttributes<HTMLDivElement>,\n) => {\n    const ref = React.useRef(null);\n    const { listBoxProps } = useListBox(props, props.state, ref);\n\n    if (props.showErrorStateWhen) {\n        return (\n            <div ref={ref} {...listBoxProps} className={actionListStyles.NoResults}>\n                <div className={actionListStyles.NoResultsItem}>\n                    {props.renderErrorState?.() || 'Ett fel uppstod'}\n                </div>\n            </div>\n        );\n    }\n\n    if (props.showEmptyStateWhen && [...props.state.collection].length === 0) {\n        return (\n            <div ref={ref} {...listBoxProps} className={actionListStyles.NoResults}>\n                <div className={actionListStyles.NoResultsItem}>\n                    {props.renderEmptyState?.() || 'Inga resultat'}\n                </div>\n            </div>\n        );\n    }\n\n    return (\n        <ul\n            {...listBoxProps}\n            ref={ref}\n            className={classNames(actionListStyles.ActionList, listBoxProps.className)}\n        >\n            {[...props.state.collection].map((item) => (\n                <DynamicListBoxItem\n                    key={item.key}\n                    item={item}\n                    state={props.state}\n                    className={props.itemClassName}\n                />\n            ))}\n        </ul>\n    );\n};\n\ninterface DynamicListBoxItemProps<TItem extends object> {\n    className?: string;\n    item: Node<TItem>;\n    state: ListState<TItem>;\n}\n\nconst DynamicListBoxItem = <T extends object>(props: DynamicListBoxItemProps<T>) => {\n    const ref = React.useRef(null);\n    const { optionProps, isFocusVisible, isSelected } = useOption(\n        { key: props.item.key },\n        props.state,\n        ref,\n    );\n\n    return (\n        <li\n            {...optionProps}\n            className={classNames(\n                actionListStyles.Item,\n                listBoxStyles.Item,\n                isSelected && listBoxStyles.ItemSelected,\n                isFocusVisible && actionListStyles.ItemFocusVisible,\n                optionProps.className,\n                props.className,\n            )}\n            ref={ref}\n        >\n            {props.item.rendered}\n        </li>\n    );\n};\n\nexport const ListBoxItemIcon = ({ icon }: { icon?: React.ComponentProps<typeof Icon>['icon'] }) => {\n    return icon ? <Icon icon={icon} className={actionListStyles.ItemIcon} aria-hidden /> : null;\n};\n","/* eslint-disable react/jsx-props-no-spreading */\nimport { CloseIcon, SearchIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type * as React from 'react';\n\nimport { ChipIconButton } from '../Chip';\nimport { Icon } from '../Icon';\nimport styles from './Search.module.scss';\n\nconst SearchActions = (props: {\n    inputValue?: string;\n    submitLabel?: string;\n    onEnterPress?: () => void;\n    clearButtonRef?: React.RefObject<HTMLButtonElement>;\n    clearButtonProps?: React.ComponentPropsWithoutRef<'button'>;\n}) => {\n    return (\n        <div className={styles['Search-actions']}>\n            {props.inputValue && props.clearButtonProps && props.clearButtonProps.onClick && (\n                <ChipIconButton\n                    ref={props.clearButtonRef}\n                    icon={CloseIcon}\n                    label=\"Rensa\"\n                    theme=\"whiteGreen\"\n                    size={24}\n                    {...props.clearButtonProps}\n                    onClick={props.clearButtonProps.onClick}\n                />\n            )}\n            {props.inputValue && props.onEnterPress ? (\n                <ChipIconButton\n                    size={32}\n                    theme=\"greenCta\"\n                    icon={SearchIcon}\n                    onClick={props.onEnterPress}\n                    label={props.submitLabel || 'Sök'}\n                />\n            ) : (\n                <div aria-hidden className={classNames(styles['Search-icon'])}>\n                    <Icon icon={SearchIcon} />\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default SearchActions;\n","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Search.module.scss';\n\nconst SearchContent = React.forwardRef<HTMLDivElement, React.PropsWithChildren>((props, ref) => {\n    return (\n        <div ref={ref} className={classNames(styles['Search-content'], 'u-noPrint')}>\n            {props.children}\n        </div>\n    );\n});\n\nexport default SearchContent;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Search.module.scss';\n\nconst SearchInputSlot = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(\n    (props, ref) => {\n        return (\n            <input\n                ref={ref}\n                size={1} // Enables it to shrink below default 20 which is needed for small screens\n                {...props}\n                className={classNames(styles['Search-input'], props.className)}\n            />\n        );\n    },\n);\n\nexport default SearchInputSlot;\n","import styles from './Search.module.scss';\nimport type { SearchSize } from './Search.types';\n\nexport const getClassForSize = (theme: SearchSize) => {\n    switch (theme) {\n        case 'small':\n            return styles['Search--small'];\n        case 'medium':\n            return styles['Search--medium'];\n        case 'large':\n            return styles['Search--large'];\n        default:\n            return '';\n    }\n};\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Search.module.scss';\nimport type { SearchBarOptions } from './Search.types';\nimport { getClassForSize } from './Search.utils';\n\ninterface SearchProps extends SearchBarOptions {\n    className?: string;\n}\n\nconst SearchRoot = React.forwardRef<HTMLDivElement, React.PropsWithChildren<SearchProps>>(\n    (props, ref) => {\n        return (\n            <div\n                ref={ref}\n                className={classNames(\n                    styles.Search,\n                    props.hide && styles['Search--hidden'],\n                    getClassForSize(props.size),\n                    props.className,\n                )}\n                data-test=\"search\"\n            >\n                {props.children}\n            </div>\n        );\n    },\n);\n\nexport default SearchRoot;\n","import type * as React from 'react';\nimport { type AriaPopoverProps, Overlay, usePopover } from 'react-aria';\nimport type { OverlayTriggerState } from 'react-stately';\n\nimport styles from './SearchAutocomplete.module.scss';\n\ninterface PopoverProps extends AriaPopoverProps {\n    style?: React.CSSProperties;\n    children: React.ReactNode;\n    state: OverlayTriggerState;\n}\n\nconst Popover = ({ children, state, ...props }: PopoverProps) => {\n    const { popoverProps } = usePopover(props, state);\n\n    const style = { ...popoverProps.style, ...props.style };\n\n    return (\n        <Overlay>\n            <div\n                // eslint-disable-next-line react/jsx-props-no-spreading\n                {...popoverProps}\n                className={styles.Popover}\n                ref={props.popoverRef as React.RefObject<HTMLDivElement>}\n                style={style}\n            >\n                {children}\n            </div>\n        </Overlay>\n    );\n};\n\nexport default Popover;\n","// extracted by mini-css-extract-plugin\nexport default {\"Popover\":\"bXxScuMl\",\"ItemLabel\":\"_KG9rfUt\",\"HintHighlight\":\"j6ln53QE\"};","/* eslint-disable react/button-has-type */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { useResizeObserver } from '@coop/hooks';\n/* eslint-disable react/jsx-props-no-spreading */\nimport type { ComboBoxProps } from '@react-types/combobox';\nimport { useCallback, useState } from 'react';\nimport * as React from 'react';\nimport { useButton } from 'react-aria';\nimport { ComboBoxStateContext } from 'react-aria-components';\nimport { type ComboBoxStateOptions, Item, useComboBoxState } from 'react-stately';\n\nimport {\n    type ResultListBoxStateShowProps,\n    DynamicListBox,\n    ListBoxItemIcon,\n} from '../ListBox/ListBox';\nimport {\n    type SearchBarOptions,\n    SearchActions,\n    SearchContent,\n    SearchInputSlot,\n    SearchRoot,\n} from '../Search';\nimport Popover from './Popover';\nimport { useSearchAutocomplete } from './SearchAutocomplete.hooks';\nimport styles from './SearchAutocomplete.module.scss';\nimport { hightlightAutocompleteSubstring } from './SearchAutocomplete.utils';\n\ninterface SearchAutocompleteProps<T extends object>\n    extends Omit<ComboBoxProps<T>, 'label'>,\n        SearchBarOptions,\n        ResultListBoxStateShowProps {\n    defaultFilter?: ComboBoxStateOptions<T>['defaultFilter'];\n    submitLabel?: string;\n    onSubmit?: (value: string, item: T | null) => void;\n    overlayMaxHeight?: number;\n}\n\nconst SearchAutocomplete = <T extends object>(props: SearchAutocompleteProps<T>) => {\n    const outerRef = React.useRef<HTMLDivElement>(null);\n    const triggerRef = React.useRef<HTMLDivElement>(null);\n    const inputRef = React.useRef<HTMLInputElement>(null);\n    const listBoxRef = React.useRef(null);\n    const popoverRef = React.useRef<HTMLDivElement>(null);\n    const clearButtonRef = React.useRef<HTMLButtonElement>(null);\n\n    const state = useComboBoxState({\n        ...props,\n        allowsCustomValue: true,\n        allowsEmptyCollection: true, // search must always have a state of no results if no items are found\n    });\n\n    const {\n        clearButtonProps: ariaClearButtonProps,\n        inputProps,\n        listBoxProps,\n        descriptionProps,\n    } = useSearchAutocomplete(\n        {\n            ...props,\n            inputRef,\n            listBoxRef,\n            popoverRef,\n        },\n        state,\n    );\n\n    const { buttonProps } = useButton(ariaClearButtonProps, clearButtonRef);\n\n    const [menuWidth, setMenuWidth] = useState<string | null>(null);\n    const onResize = useCallback(() => {\n        const outerRect = outerRef.current?.getBoundingClientRect();\n        if (outerRect) {\n            setMenuWidth(`${outerRect.right - outerRect.left}px`);\n        }\n    }, [outerRef, setMenuWidth]);\n\n    useResizeObserver({ ref: outerRef, boxOptions: 'border-box', onResize });\n\n    const description =\n        state.collection.size !== 0\n            ? 'Förslag visas nedan'\n            : 'Sökresultaten kommer att visas medan du skriver';\n\n    return (\n        <ComboBoxStateContext.Provider value={state}>\n            <SearchRoot ref={outerRef} size={props.size} hide={props.hide}>\n                <SearchContent ref={triggerRef}>\n                    <SearchInputSlot\n                        ref={inputRef}\n                        {...inputProps}\n                        aria-label={props.placeholder}\n                    />\n                    <SearchActions\n                        inputValue={state.inputValue}\n                        onEnterPress={\n                            props.onSubmit\n                                ? () => props.onSubmit?.(state.inputValue, null)\n                                : undefined\n                        }\n                        submitLabel={props.submitLabel}\n                        clearButtonRef={clearButtonRef}\n                        clearButtonProps={buttonProps}\n                    />\n                    <span {...descriptionProps} style={{ display: 'none' }}>\n                        {description}\n                    </span>\n                </SearchContent>\n                {state.isOpen && (\n                    <Popover\n                        state={state}\n                        popoverRef={popoverRef}\n                        triggerRef={triggerRef}\n                        offset={12}\n                        style={\n                            {\n                                '--coop-listbox-trigger-width': menuWidth,\n                            } as React.CSSProperties\n                        }\n                        placement=\"bottom start\"\n                        maxHeight={props.overlayMaxHeight}\n                        isNonModal\n                    >\n                        <DynamicListBox\n                            {...listBoxProps}\n                            listBoxRef={listBoxRef}\n                            state={state}\n                            aria-label=\"förslag\"\n                            /* Show empty state only when full search (a.k.a. \"go to all results\") action is NOT available\n                             * Autocomplete is not a full search thats why we shouldnt say that results are empty (we dont know that yet), its only the suggestions that are empty\n                             */\n                            showEmptyStateWhen={props.showEmptyStateWhen && !props.onSubmit}\n                            renderEmptyState={\n                                props.renderEmptyState || (() => 'Vi hittar ingen träff')\n                            }\n                            showErrorStateWhen={props.showErrorStateWhen}\n                            renderErrorState={props.renderErrorState || (() => 'Fel vid sökning')}\n                            itemClassName={styles.ItemLabel}\n                        />\n                    </Popover>\n                )}\n            </SearchRoot>\n        </ComboBoxStateContext.Provider>\n    );\n};\n\nexport default SearchAutocomplete;\n\nexport const SearchAutocompleteItem = Item;\n\nexport const SearchAutocompleteItemIcon = ListBoxItemIcon;\n\nexport const SearchAutocompleteItemLabel = ({ children }: { children: string }) => {\n    const state = React.useContext(ComboBoxStateContext);\n    if (!state) {\n        return children;\n    }\n\n    const { pre, post, highlighted } = hightlightAutocompleteSubstring(children, state.inputValue);\n\n    return (\n        <div>\n            {pre && <span>{pre}</span>}\n            {highlighted && <span className={styles.HintHighlight}>{highlighted}</span>}\n            {post && <span>{post}</span>}\n        </div>\n    );\n};\n","import type { RefObject } from 'react';\nimport { mergeProps, useComboBox, useSearchField } from 'react-aria';\nimport type { ComboBoxState } from 'react-stately';\n\ninterface SearchAutocompleteOptions<T> {\n    placeholder?: string;\n    inputRef: RefObject<HTMLInputElement | null>;\n    popoverRef: RefObject<HTMLDivElement | null>;\n    listBoxRef: RefObject<HTMLElement | null>;\n    onSubmit?: (value: string, item: T | null) => void;\n}\n\nexport const useSearchAutocomplete = <T>(\n    props: SearchAutocompleteOptions<T>,\n    state: ComboBoxState<T>,\n) => {\n    const { popoverRef, inputRef, listBoxRef, onSubmit, ...otherProps } = props;\n\n    const { inputProps, clearButtonProps, labelProps, descriptionProps } = useSearchField(\n        {\n            ...otherProps,\n            value: state.inputValue,\n            onChange: state.setInputValue,\n            autoComplete: 'off',\n            label: props.placeholder,\n            onClear: () => {\n                state.setInputValue('');\n                state.close();\n            },\n            onSubmit: (value) => {\n                // Prevent submission from search field if menu item was selected\n                if (state.selectionManager.focusedKey === null) {\n                    onSubmit?.(value, null);\n                }\n            },\n            onFocus: () => {\n                // Open when in put alreday has some value. Input value is retained i.e. after outside click and user might want to see the results again\n                if (state.inputValue) {\n                    state.open();\n                }\n            },\n        },\n        {\n            value: state.inputValue,\n            setValue: state.setInputValue,\n        },\n        inputRef,\n    );\n\n    const { listBoxProps, inputProps: comboBoxInputProps } = useComboBox(\n        {\n            ...otherProps,\n            popoverRef,\n            listBoxRef,\n            inputRef,\n            label: props.placeholder,\n            // those will be merged with the inputProps from useSearchField\n            onFocus: undefined,\n            onFocusChange: undefined,\n            onBlur: undefined,\n            onKeyDown: undefined,\n            onKeyUp: undefined,\n            validate: undefined,\n        },\n        state,\n    );\n\n    return {\n        labelProps,\n        descriptionProps,\n        inputProps: mergeProps(comboBoxInputProps, inputProps),\n        listBoxProps,\n        clearButtonProps,\n    };\n};\n","import { type RefObject, useEffect } from 'react';\n\nexport const useResizeObserver = <T extends HTMLElement>(options: {\n    ref: RefObject<T>;\n    boxOptions?: ResizeObserverBoxOptions;\n    onResize: () => void;\n}) => {\n    const { ref, boxOptions, onResize } = options;\n\n    useEffect(() => {\n        const element = ref?.current;\n        if (!element) {\n            return;\n        }\n\n        window.addEventListener('resize', onResize, false);\n\n        const resizeObserverInstance = new window.ResizeObserver((entries) => {\n            if (!entries.length) {\n                return;\n            }\n\n            onResize();\n        });\n        resizeObserverInstance.observe(element, { box: boxOptions });\n\n        return () => {\n            if (element) {\n                resizeObserverInstance.unobserve(element);\n            }\n        };\n    }, [onResize, ref, boxOptions]);\n};\n","export const hightlightAutocompleteSubstring = (input: string, hint: string) => {\n    if (!input || !hint) {\n        return {\n            pre: input,\n            highlighted: null,\n            post: null,\n        };\n    }\n\n    const inputLowercase = input?.toLowerCase();\n    const hintLowercase = hint?.toLowerCase();\n\n    let pre = '';\n    let highlighted = '';\n    let post = '';\n\n    // Check if the query matches any part of the text\n    if (hintLowercase && inputLowercase.includes(hintLowercase)) {\n        const startIndex = inputLowercase.indexOf(hintLowercase);\n        const endIndex = startIndex + hintLowercase.length;\n\n        pre = input.slice(0, startIndex);\n        highlighted = input.slice(startIndex, endIndex);\n        post = input.slice(endIndex);\n    } else {\n        pre = input;\n    }\n\n    return {\n        pre,\n        highlighted,\n        post,\n    };\n};\n"],"names":["_path","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","width","height","viewBox","xmlns","id","fillRule","clipRule","d","SearchFromPageType","googleMapsApiConfig","googleMapsApiKey","coopSettings","stores","googleApiKey","libraries","language","loadingSlot","loadedSlot","loadErrorSlot","onLoaded","onLoadError","isLoaded","loadError","useEffect","when","callback","sent","useRef","current","resetEffect","useCallback","mapSearchFeatureName","searchFromPage","StartPage","Ecommerce","Recipes","Stores","Member","Finance","Other","viewSearchResultSuggestionClick","failSilently","linkText","linkUrl","event","type","click_text","click_path","viewSearchResults","actualSearchTerm","originalSearchTerm","totalResultNumber","search_term","search_term_inferred","search_feature_name","search_results_number","search","actionTrigger","search_term_action_type_trigger","undefined","searchDropdownAction","searchDropdownItemAction","position","itemId","itemName","item_id","item_name","noSearchResults","searchType","searchTerm","featureName","mapSearchTypeToGa","feature_name","searchIconClick","data","lastVisitedStore","isLoading","lastVisitedStoreLoading","favoriteStores","favoriteStoresLoading","useFavoriteStores","open","useModal","StoreSearchMap","tvOffers","isTvOffersLoading","useQuery","queryKey","s","storeTvOffers","queryFn","dkeApi","getTvOffers","retry","staleTime","Infinity","isSoftLoggedIn","validTvOffers","slice","navigate","onFavoriteStoresFetched","firstFavoriteStore","url","replace","useEffectOnce","useFavoriteStoreRedirect","onlastVisitedStoreFetched","validLastVisitedStore","useLastVisitedStoreRedirect","push","useReactRouting","setMapView","storeSearchQueryParam","setStoreSearchQueryParam","useStoreFlyinUrlQueryState","setSearchTerm","useState","mapsScriptLoaded","setMapsScriptLoaded","isZipCodeEntered","isZipCode","results","resultsLoaded","isError","useStoreSearch","isB2B","isB2BUser","breakpoints","useBreakpoints","AREA_TV_OFFERS_LIST","swiperOptions","spaceBetween","className","src","alt","storeHeadline","text","StoreSearchBar","inputText","setInputText","selectByCityName","cityName","selectStoreFromSearch","store","searchSize","GoogleMapsScriptLoader","Button","theme","size","onClick","SwipableList","swiperPaginationClass","map","offer","StoreOfferTeaser","showAddToShoppingList","OfferPropositionsListBlock","ledgerId","BecomeAMemberBlock","pageHeadline","STORE_SEARCH_QUERY_KEY","STORE_FLYIN_QUERY_KEY","STORE_SEARCH_QUERY_MIN_LENGTH","STORE_SEARCH_ZIP_LENGTH","useLastVisitedStore","isAuthenticated","getLastVisitedStore","enabled","trackEnterAction","originalQuery","previousOriginalQuery","queryUsed","trackSearchAction","useStoreMapSearchGA4ActionTracking","inputIsProperLength","SearchAutocomplete","placeholder","inputValue","onInputChange","showEmptyStateWhen","showErrorStateWhen","items","onSelectionChange","key","theItem","find","result","item","name","overlayMaxHeight","textValue","icon","params","setParams","get","storeFlyinQueryParam","prev","newParams","URLSearchParams","set","setSearchView","setResultsView","reset","delete","setStoreSearchQueryWithResultsView","args","allStores","storeApi","getAll","placeholderData","select","googleMapsApiLoaded","allStoresQuery","storeSearchQuery","queryClient","storeSearch","isSuccess","getQueryData","possibleZipCode","zipCodeString","Number","filteredStores","filter","toLowerCase","includes","filteredCityNames","splice","cityNames","coords","toString","nearbyStores","coordinate","useStoreSearchQuery","split","join","storeSearchResults","ledgerAccountNumber","MAP_DEFAULT_LEVEL_ZOOM","MAP_STORE_LEVEL_ZOOM","DESKTOP_LIST_INSIDE_MAP_WIDTH","getWithTwoDecimalPoints","num","Math","round","formatMetersToText","meters","METERS_PER_MILE","METERS_PER_KILOMETER","getStoresNearbyPosition","userLatLng","google","maps","LatLng","startDistanceinMeters","storesWithDistances","stopSearchAtIteration","minStoresToStopEarly","STOP_SEARCHING_AT_NUMBER","MIN_STORES_TO_STOP","innerGetStoresWithinAcceptableDistance","currDistanceInMeters","tryNumber","storesWithinAcceptableDistance","sort","a","b","distance","getStoresWithinAcceptableDistance","geometry","spherical","computeDistanceBetween","latitude","longitude","googleApiGetCoordinatesByZipCode","zipCode","Promise","resolve","reject","Geocoder","geocode","componentRestrictions","country","postalCode","status","lat","location","lng","getCityNamesFromStores","Array","from","Set","city","createGoogleMapLinkToStore","address","formatStoreOpeningHoursToday","openingHoursToday","StaticListBox","ActionList","StaticListBoxItem","Item","DynamicListBox","ref","listBoxProps","useListBox","state","NoResults","NoResultsItem","renderErrorState","collection","renderEmptyState","DynamicListBoxItem","itemClassName","optionProps","isFocusVisible","isSelected","useOption","ItemFocusVisible","rendered","ListBoxItemIcon","Icon","ItemIcon","clearButtonProps","clearButtonRef","label","onEnterPress","submitLabel","SearchContent","children","SearchInputSlot","getClassForSize","Search","hide","popoverProps","usePopover","style","Overlay","popoverRef","outerRef","triggerRef","inputRef","listBoxRef","useComboBoxState","allowsCustomValue","allowsEmptyCollection","ariaClearButtonProps","inputProps","descriptionProps","onSubmit","otherProps","labelProps","useSearchField","value","onChange","setInputValue","autoComplete","onClear","close","selectionManager","focusedKey","onFocus","setValue","comboBoxInputProps","useComboBox","onFocusChange","onBlur","onKeyDown","onKeyUp","validate","mergeProps","useSearchAutocomplete","buttonProps","useButton","menuWidth","setMenuWidth","onResize","outerRect","getBoundingClientRect","right","left","options","boxOptions","element","window","addEventListener","resizeObserverInstance","ResizeObserver","entries","observe","box","unobserve","useResizeObserver","description","ComboBox","Provider","SearchRoot","SearchActions","display","isOpen","offset","placement","maxHeight","isNonModal","SearchAutocompleteItem","SearchAutocompleteItemIcon","ListBox","SearchAutocompleteItemLabel","pre","post","highlighted","input","hint","inputLowercase","hintLowercase","startIndex","indexOf","endIndex","hightlightAutocompleteSubstring"],"sourceRoot":""}