{"version":3,"file":"coopse.script.2835.e71a60f9.chunk.js","mappings":"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","sources":["webpack:///../../packages/icons/src/stroke2/filter.svg","webpack:///../../packages/icons/src/stroke2/minus.svg","webpack:///../../packages/icons/src/stroke2/plus.svg","webpack:///./src/microApps/common/hooks/useQuerySearchParamUrlBuilder.ts","webpack:///./src/microApps/recipe/components/RecipeFilterFlyinTrigger/RecipeFilterFlyinView.tsx","webpack:///./src/microApps/recipe/components/RecipeFilterFlyinTrigger/RecipeFilterFlyinTrigger.tsx","webpack:///./src/microApps/recipe/components/RecipeFilterSearchBar/RecipeFilterSearchBar.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSideBarNavDesktop.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavAnchor.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavCategory3.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavCategory2.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNavCategory1.tsx","webpack:///./src/microApps/recipe/components/RecipeSidebarNav/RecipeSidebarNav.tsx","webpack:///./src/microApps/recipe/hooks/useLoopRecipeSearch.ts","webpack:///./src/microApps/recipe/hooks/useSidebarState.ts","webpack:///./src/microApps/recipe/pages/RecipeStartPage/components/FavoriteRecipesSideBarLink/FavoriteRecipesSideBarLink.tsx","webpack:///./src/microApps/recipe/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 SvgFilter = _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 5C13.8954 5 13 5.89543 13 7C13 8.10457 13.8954 9 15 9C16.1046 9 17 8.10457 17 7C17 5.89543 16.1046 5 15 5ZM11.126 6C11.5701 4.27477 13.1362 3 15 3C16.8638 3 18.4299 4.27477 18.874 6H21C21.5523 6 22 6.44772 22 7C22 7.55228 21.5523 8 21 8H18.874C18.4299 9.72523 16.8638 11 15 11C13.1362 11 11.5701 9.72523 11.126 8H3C2.44772 8 2 7.55228 2 7C2 6.44772 2.44772 6 3 6H11.126ZM9 15C7.89543 15 7 15.8954 7 17C7 18.1046 7.89543 19 9 19C10.1046 19 11 18.1046 11 17C11 15.8954 10.1046 15 9 15ZM5.12602 16C5.57006 14.2748 7.13616 13 9 13C10.8638 13 12.4299 14.2748 12.874 16H21C21.5523 16 22 16.4477 22 17C22 17.5523 21.5523 18 21 18H12.874C12.4299 19.7252 10.8638 21 9 21C7.13616 21 5.57006 19.7252 5.12602 18H3C2.44772 18 2 17.5523 2 17C2 16.4477 2.44772 16 3 16H5.12602Z\"\n  })));\n};\nexport default SvgFilter;","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 SvgMinus = _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 11.9995C4 11.4472 4.44772 10.9995 5 10.9995H19C19.5523 10.9995 20 11.4472 20 11.9995C20 12.5518 19.5523 12.9995 19 12.9995H5C4.44772 12.9995 4 12.5518 4 11.9995Z\"\n  })));\n};\nexport default SvgMinus;","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 SvgPlus = _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: \"M12 4C12.5523 4 13 4.44772 13 5V11H19C19.5523 11 20 11.4477 20 12C20 12.5523 19.5523 13 19 13H13V19C13 19.5523 12.5523 20 12 20C11.4477 20 11 19.5523 11 19V13H5C4.44772 13 4 12.5523 4 12C4 11.4477 4.44772 11 5 11H11V5C11 4.44772 11.4477 4 12 4Z\"\n  })));\n};\nexport default SvgPlus;","import { useLocation } from 'react-router-dom';\n\nexport type CreateUrlWithNewParamValue = (val: string | null) => string;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst useQuerySearchParamUrlBuilder = (key: string, defaultValue?: any) => {\n    const location = useLocation();\n\n    const paramValue = new URLSearchParams(location.search).get(key) || defaultValue;\n\n    const createUrlWithNewParamValue: CreateUrlWithNewParamValue = (val) => {\n        const urlParams = new URLSearchParams(location.search);\n\n        if (val) {\n            urlParams.set(key, val);\n        } else {\n            urlParams.delete(key);\n        }\n\n        return `${location.pathname}${urlParams.toString() && `?${urlParams.toString()}`}`;\n    };\n\n    return {\n        paramValue,\n        createUrlWithNewParamValue,\n    };\n};\n\nexport default useQuerySearchParamUrlBuilder;\n","import { Button, ModalHeader } from '@coop/components';\nimport type { FC } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { useFavoriteRecipeIds } from '../../../common/hooks/useFavouriteRecipes';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport FavoriteRecipesSideBarLink from '../../pages/RecipeStartPage/components/FavoriteRecipesSideBarLink/FavoriteRecipesSideBarLink';\nimport RecipeFilterSearchBar from '../RecipeFilterSearchBar/RecipeFilterSearchBar';\nimport RecipeSidebarNav from '../RecipeSidebarNav/RecipeSidebarNav';\n\ninterface RecipeFilterFlyinViewProps {\n    close: () => void;\n    sidebarState: SidebarState;\n    categories: RecipeCategoryFacet[];\n    currentCategories: string[];\n    getUrlForCategories: GetUrlForCategoriesSignature;\n    sortParamVal?: string;\n    useRefresh?: boolean;\n    recipesCount: number | null;\n    ssrRecipeRootUrl: string;\n}\n\nconst RecipeFilterFlyinView: FC<React.PropsWithChildren<RecipeFilterFlyinViewProps>> = ({\n    close,\n    sidebarState,\n    categories,\n    currentCategories,\n    getUrlForCategories,\n    sortParamVal,\n    useRefresh,\n    recipesCount,\n    ssrRecipeRootUrl,\n}) => {\n    const { data: favouriteRecipeExternalIds } = useFavoriteRecipeIds();\n    const hasSelectedCategories = currentCategories && currentCategories?.length > 0;\n    return (\n        <div className=\"u-paddingHsm\">\n            <ModalHeader className=\"Heading Heading--h2 u-marginTmd u-md-marginTlg u-marginBmd u-textCenter\">\n                Filtrera\n            </ModalHeader>\n\n            <div className=\"u-marginBmd u-borderRadius2\">\n                <RecipeFilterSearchBar\n                    categories={categories}\n                    currentCategories={currentCategories}\n                    getUrlForCategories={getUrlForCategories}\n                    useRefresh={useRefresh}\n                />\n            </div>\n            <div>\n                <RecipeSidebarNav\n                    sidebarState={sidebarState}\n                    categories={categories}\n                    currentCategories={currentCategories}\n                    getUrlForCategories={getUrlForCategories}\n                    sortParamVal={sortParamVal}\n                    useRefresh={useRefresh}\n                    extraClassName=\"RecipeSidebarNav--flyin mixinScroll u-overflowXHidden u-flexGrow\"\n                    topListItemSlot={\n                        <FavoriteRecipesSideBarLink\n                            favouriteRecipeExternalIds={favouriteRecipeExternalIds}\n                            ssrRecipeRootUrl={ssrRecipeRootUrl}\n                            extraClassName=\"u-borderRadius8\"\n                        />\n                    }\n                />\n            </div>\n\n            <div\n                className=\"u-posRelative\"\n                style={{\n                    background: 'linear-gradient(180deg, rgba(245, 245, 245, 0) 0%, #F5F5F5 100%',\n                }}\n            >\n                <div className=\"u-flex u-flexJustifyCenter u-marginBlg\">\n                    {hasSelectedCategories && (\n                        <Button\n                            asChild\n                            size={40}\n                            theme=\"primaryOutline\"\n                            className=\"u-marginRxsm\"\n                            fullWidth\n                        >\n                            <Link to={getUrlForCategories({ categories: [] })}>\n                                Rensa {currentCategories.length} filter\n                            </Link>\n                        </Button>\n                    )}\n\n                    <Button size={40} theme=\"primary\" fullWidth onClick={close}>\n                        {hasSelectedCategories ? `Visa ${recipesCount} recept` : 'Visa receptsidan'}\n                    </Button>\n                </div>\n            </div>\n        </div>\n    );\n};\n\nexport default RecipeFilterFlyinView;\n","import type { FC, ReactNode } from 'react';\n\nimport { FlyinNavigation } from '../../../common/components/atoms/FlyInNavigation';\nimport { FlyIn } from '../../../common/components/atoms/Modal';\nimport useModal from '../../../common/hooks/useModal';\nimport { FlyInType } from '../../../common/store/structureDefinitions/modalState';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport RecipeFilterFlyinView from './RecipeFilterFlyinView';\n\ninterface RecipeFilterFlyinTriggerProps {\n    sidebarState: SidebarState;\n    categories: RecipeCategoryFacet[];\n    currentCategories: string[];\n    getUrlForCategories: GetUrlForCategoriesSignature;\n    sortParamVal?: string;\n    useRefresh?: boolean;\n    recipesCount: number | null;\n    children: (showRecipeFilterFlyin: () => void) => ReactNode;\n    ssrRecipeRootUrl: string;\n}\n\nconst RecipeFilterFlyinTrigger: FC<RecipeFilterFlyinTriggerProps> = ({\n    sidebarState,\n    categories,\n    currentCategories,\n    getUrlForCategories,\n    sortParamVal,\n    useRefresh,\n    recipesCount,\n    children,\n    ssrRecipeRootUrl,\n}) => {\n    const { isOpen, close, open } = useModal(FlyInType.RecipePageFilter);\n\n    return (\n        <>\n            {children(open)}\n            <FlyIn\n                isOpen={isOpen}\n                close={close}\n                sizePx={540}\n                additionalClasses=\"u-textLeft u-bgGrayLight\"\n            >\n                <FlyinNavigation onClose={close} autoFocus>\n                    <RecipeFilterFlyinView\n                        close={close}\n                        sidebarState={sidebarState}\n                        categories={categories}\n                        currentCategories={currentCategories}\n                        getUrlForCategories={getUrlForCategories}\n                        sortParamVal={sortParamVal}\n                        useRefresh={useRefresh}\n                        recipesCount={recipesCount}\n                        ssrRecipeRootUrl={ssrRecipeRootUrl}\n                    />\n                </FlyinNavigation>\n            </FlyIn>\n        </>\n    );\n};\n\nexport default RecipeFilterFlyinTrigger;\n","import { SearchAutocomplete, SearchAutocompleteItem } from '@coop/components';\nimport * as levenshtein from 'fast-levenshtein';\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { appConfig } from '../../../../appConfig';\nimport useQuerySearchParamUrlBuilder from '../../../common/hooks/useQuerySearchParamUrlBuilder';\nimport { addQueryParamsToUrl } from '../../../common/utils/urlUtils';\nimport useReactRouting from '../../../ecommerce/hooks/useReactRouting';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport { getAllCategoryNamesFromLevel2AndDown } from '../../utils';\n\ninterface RecipeFilterSearchBarProps {\n    categories: RecipeCategoryFacet[];\n    currentCategories: string[];\n    getUrlForCategories: GetUrlForCategoriesSignature;\n    useRefresh?: boolean;\n}\n\nconst RecipeFilterSearchBar: FC<React.PropsWithChildren<RecipeFilterSearchBarProps>> = ({\n    categories,\n    currentCategories,\n    getUrlForCategories,\n    useRefresh,\n}) => {\n    const [inputText, setInputText] = useState('');\n    const { push } = useReactRouting();\n    const inputIsProperLength = inputText.length > 2;\n    const { paramValue: queryParamVal, createUrlWithNewParamValue: createQueryUrl } =\n        useQuerySearchParamUrlBuilder('query');\n\n    const categoryNames = useMemo(\n        () =>\n            getAllCategoryNamesFromLevel2AndDown(categories)\n                .filter(\n                    (name) =>\n                        !currentCategories.includes(name.toLowerCase()) &&\n                        name.toLowerCase().includes(inputText.toLowerCase()),\n                )\n                .sort((a, b) => levenshtein.get(a, inputText) - levenshtein.get(b, inputText))\n                .map((item, index) => ({ id: `${item}_${index}`, label: item })),\n        [categories, currentCategories, inputText],\n    );\n\n    const getUrlForCategoriesExtended = (categoriesForUrl: string[]) => {\n        const url = getUrlForCategories({ categories: categoriesForUrl });\n\n        if (queryParamVal) {\n            return addQueryParamsToUrl(url, {\n                query: queryParamVal,\n            });\n        }\n\n        return url;\n    };\n\n    const navigateExactMatch = (value: string) => {\n        if (useRefresh) {\n            window.location.href = getUrlForCategoriesExtended([\n                ...currentCategories,\n                value.toLowerCase(),\n            ]);\n        } else {\n            push(getUrlForCategoriesExtended([...currentCategories, value.toLowerCase()]));\n        }\n    };\n\n    const navigateSearchMatch = (value: string) => {\n        if (useRefresh) {\n            window.location.href = `${appConfig.coopSettings.recipe.url}?query=${value.toLowerCase()}`;\n        } else {\n            push(createQueryUrl(value.toLowerCase()));\n        }\n    };\n\n    const performSearch = () => {\n        const inputTextInLower = inputText.toLowerCase();\n        const exactFilterMatch = categoryNames[0]?.label?.toLowerCase() === inputTextInLower;\n\n        if (exactFilterMatch) {\n            navigateExactMatch(inputTextInLower);\n        } else {\n            navigateSearchMatch(inputTextInLower);\n        }\n\n        setInputText('');\n    };\n\n    const handleSelection = (selection: string) => {\n        const inputTextInLower = selection.toLowerCase();\n        navigateExactMatch(inputTextInLower);\n    };\n\n    return (\n        <SearchAutocomplete\n            submitLabel=\"Sök recept\"\n            placeholder=\"Sök bland filter\"\n            inputValue={inputText}\n            onInputChange={setInputText}\n            items={inputIsProperLength ? categoryNames : []}\n            size=\"small\"\n            onSelectionChange={(key) => {\n                const theItem = categoryNames?.find((result) => result.id === key);\n                if (theItem) {\n                    handleSelection(theItem.label);\n                }\n            }}\n            showEmptyStateWhen={inputIsProperLength}\n            showErrorStateWhen={false}\n            onSubmit={performSearch}\n            overlayMaxHeight={500}\n        >\n            {(item) => (\n                <SearchAutocompleteItem textValue={item.label}>\n                    {useRefresh ? (\n                        <a\n                            href={getUrlForCategories({\n                                categories: [...currentCategories, item.label],\n                            })}\n                        >\n                            {item.label}\n                        </a>\n                    ) : (\n                        <Link\n                            onClick={() => setInputText('')}\n                            to={getUrlForCategories({\n                                categories: [...currentCategories, item.label],\n                            })}\n                        >\n                            {item.label}\n                        </Link>\n                    )}\n                </SearchAutocompleteItem>\n            )}\n        </SearchAutocomplete>\n    );\n};\n\nexport default RecipeFilterSearchBar;\n","import type React from 'react';\n\nimport { SkipLink, SkipLinkLayout } from '../../../base/components/SkipLink';\nimport RecipeSidebarNav from './RecipeSidebarNav';\n\nconst RecipeSidebarNavDesktop = (props: React.ComponentProps<typeof RecipeSidebarNav>) => {\n    return (\n        <SkipLinkLayout\n            skipTriggerSlot={\n                <SkipLink href=\"#pageContent\" align=\"center\">\n                    Hoppa över filter\n                </SkipLink>\n            }\n        >\n            {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n            <RecipeSidebarNav {...props} />\n        </SkipLinkLayout>\n    );\n};\n\nexport default RecipeSidebarNavDesktop;\n","import type { FC, ReactNode } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { ga4RecipesTracking } from '../../../common/tracking/ga4/recipes';\nimport tracking from '../../../common/tracking/tracking';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { RecipeSidebarLink } from './models';\n\ninterface RecipeSidebarNavAnchorProps {\n    category: RecipeCategoryFacet;\n    parentCategory: RecipeCategoryFacet;\n    link: RecipeSidebarLink;\n    className: string;\n    useRefresh?: boolean;\n    children: ReactNode;\n}\n\nconst RecipeSidebarNavAnchor: FC<React.PropsWithChildren<RecipeSidebarNavAnchorProps>> = ({\n    category,\n    parentCategory,\n    link,\n    className,\n    useRefresh,\n    children,\n}) => {\n    const recipeFilterPageTracking = tracking.recipe.useFilterPageTracking();\n    const rel = link.noFollow ? 'nofollow' : undefined;\n\n    const onClick = () => {\n        ga4RecipesTracking.filterRecipes(parentCategory.item);\n        recipeFilterPageTracking?.categoryLinkClick(category, parentCategory);\n    };\n\n    if (useRefresh) {\n        return (\n            <a href={link.url} className={className} rel={rel}>\n                {children}\n            </a>\n        );\n    }\n\n    return (\n        <Link to={link.url} className={className} rel={rel} onClick={onClick}>\n            {children}\n        </Link>\n    );\n};\n\nexport default RecipeSidebarNavAnchor;\n","import classnames from 'classnames';\nimport type { FC } from 'react';\n\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSidebarNavAnchor from './RecipeSidebarNavAnchor';\n\ninterface RecipeSideBarCategory3Props {\n    currentCategories: string[];\n    category: RecipeCategoryFacet;\n    getUrlForCategory3: (\n        category: RecipeCategoryFacet,\n        parentCategory: RecipeCategoryFacet,\n    ) => RecipeSidebarLink;\n    parentCategory: RecipeCategoryFacet;\n    useRefresh?: boolean;\n}\n\nconst RecipeSideBarCategory3: FC<React.PropsWithChildren<RecipeSideBarCategory3Props>> = ({\n    currentCategories,\n    category,\n    getUrlForCategory3,\n    parentCategory,\n    useRefresh,\n}) => {\n    const isLinkedCheckedClass = 'is-checked';\n    const isChecked =\n        currentCategories.includes(category.item.toLowerCase()) ||\n        currentCategories.includes(parentCategory.item.toLowerCase());\n\n    return (\n        <li className=\"RecipeSidebarNav-category3\" data-testid={category.item}>\n            <RecipeSidebarNavAnchor\n                category={category}\n                parentCategory={parentCategory}\n                link={getUrlForCategory3(category, parentCategory)}\n                className={classnames(\n                    'RecipeSidebarNav-checkboxLink',\n                    isChecked ? isLinkedCheckedClass : '',\n                )}\n                useRefresh={useRefresh}\n            >\n                <span className=\"RecipeSidebarNav-checkboxLinkText\">{category.item}</span>\n            </RecipeSidebarNavAnchor>\n        </li>\n    );\n};\n\nexport default RecipeSideBarCategory3;\n","import { Icon } from '@coop/components';\nimport { ChevronDownIcon } from '@coop/icons';\nimport classnames from 'classnames';\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport AnimateHeight from 'react-animate-height';\nimport _ from 'underscore';\n\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSidebarNavAnchor from './RecipeSidebarNavAnchor';\nimport RecipeSidebarNavCategory3 from './RecipeSidebarNavCategory3';\n\nconst IS_LINK_CHECKED_CLASS = 'is-checked';\nconst IS_HIDDEN_CLASS = 'u-hiddenLight';\n\ninterface RecipeSideBarCategory2Props {\n    currentCategories: string[];\n    sidebarState: SidebarState;\n    category: RecipeCategoryFacet;\n    parentCategory: RecipeCategoryFacet;\n    getUrlForCategory2: (category: RecipeCategoryFacet) => RecipeSidebarLink;\n    getUrlForCategory3: (\n        category: RecipeCategoryFacet,\n        parentCategory: RecipeCategoryFacet,\n    ) => RecipeSidebarLink;\n    isHidden: boolean;\n    useRefresh?: boolean;\n}\n\nconst RecipeSideBarCategory2: FC<React.PropsWithChildren<RecipeSideBarCategory2Props>> = ({\n    currentCategories,\n    sidebarState,\n    category,\n    parentCategory,\n    getUrlForCategory2,\n    getUrlForCategory3,\n    isHidden,\n    useRefresh,\n}) => {\n    const isExpanded = sidebarState.expandedCategories[category.item];\n    const setIsExpanded = (bool: boolean) =>\n        sidebarState.setCategoryAsExpanded(category.item, bool);\n    const [uniqueIdForAria] = useState(() => _.uniqueId('category2-'));\n\n    if (category.categories) {\n        return (\n            <li\n                className={classnames(\n                    'RecipeSidebarNav-category2',\n                    isHidden ? IS_HIDDEN_CLASS : '',\n                )}\n                data-testid={category.item}\n            >\n                <div className=\"RecipeSidebarNav-category2Header\">\n                    <RecipeSidebarNavAnchor\n                        parentCategory={parentCategory}\n                        category={category}\n                        link={getUrlForCategory2(category)}\n                        className={classnames(\n                            'RecipeSidebarNav-checkboxLink',\n                            currentCategories.includes(category.item.toLowerCase())\n                                ? IS_LINK_CHECKED_CLASS\n                                : '',\n                        )}\n                        useRefresh={useRefresh}\n                    >\n                        <span className=\"RecipeSidebarNav-checkboxLinkText\">{category.item}</span>\n                    </RecipeSidebarNavAnchor>\n\n                    <span className=\"RecipeSidebarNav-category2Amount\">({category.count})</span>\n                    <button\n                        aria-expanded={isExpanded}\n                        aria-controls={uniqueIdForAria}\n                        type=\"button\"\n                        className=\"RecipeSidebarNav-category2Button u-outlineSolidBase2\"\n                        onClick={() => setIsExpanded(!isExpanded)}\n                        aria-label={`Expandera ${category.item} kategori`}\n                    >\n                        <Icon\n                            className=\"u-marginLauto\"\n                            icon={ChevronDownIcon}\n                            width={20}\n                            height={20}\n                            rotateClockwise={isExpanded ? '180deg' : '0deg'}\n                            aria-hidden\n                        />\n                    </button>\n                </div>\n                <AnimateHeight id={uniqueIdForAria} duration={250} height={isExpanded ? 'auto' : 0}>\n                    <ul className=\"RecipeSidebarNav-category2ListOfChildren\">\n                        {category.categories.map((category3) => (\n                            <RecipeSidebarNavCategory3\n                                key={category3.item}\n                                currentCategories={currentCategories}\n                                category={category3}\n                                getUrlForCategory3={getUrlForCategory3}\n                                parentCategory={category}\n                                useRefresh={useRefresh}\n                            />\n                        ))}\n                    </ul>\n                </AnimateHeight>\n            </li>\n        );\n    }\n\n    return (\n        <li\n            className={classnames('RecipeSidebarNav-category2', isHidden ? IS_HIDDEN_CLASS : '')}\n            data-testid={category.item}\n        >\n            <div className=\"RecipeSidebarNav-category2Header\">\n                <RecipeSidebarNavAnchor\n                    parentCategory={parentCategory}\n                    category={category}\n                    link={getUrlForCategory2(category)}\n                    className={classnames(\n                        'RecipeSidebarNav-checkboxLink',\n                        currentCategories.includes(category.item.toLowerCase())\n                            ? IS_LINK_CHECKED_CLASS\n                            : '',\n                    )}\n                    useRefresh={useRefresh}\n                >\n                    <span className=\"RecipeSidebarNav-checkboxLinkText\">{category.item}</span>\n                </RecipeSidebarNavAnchor>\n\n                <span className=\"RecipeSidebarNav-category2Amount\">({category.count})</span>\n            </div>\n        </li>\n    );\n};\n\nexport default RecipeSideBarCategory2;\n","import { Icon } from '@coop/components';\nimport { ChevronDownIcon, MinusIcon, PlusIcon } from '@coop/icons';\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport AnimateHeight from 'react-animate-height';\nimport * as _ from 'underscore';\n\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSideBarCategory2 from './RecipeSidebarNavCategory2';\n\nconst INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW = 3;\n\ninterface RecipeSideBarCategory1Props {\n    currentCategories: string[];\n    sidebarState: SidebarState;\n    category: RecipeCategoryFacet;\n    getUrlForCategory2: (category: RecipeCategoryFacet) => RecipeSidebarLink;\n    getUrlForCategory3: (\n        category: RecipeCategoryFacet,\n        parentCategory: RecipeCategoryFacet,\n    ) => RecipeSidebarLink;\n    useRefresh?: boolean;\n}\n\nconst RecipeSideBarCategory1: FC<React.PropsWithChildren<RecipeSideBarCategory1Props>> = ({\n    currentCategories,\n    sidebarState,\n    category,\n    getUrlForCategory2,\n    getUrlForCategory3,\n    useRefresh,\n}) => {\n    const isExpanded = sidebarState.expandedCategories[category.item];\n    const setIsExpanded = (bool: boolean) =>\n        sidebarState.setCategoryAsExpanded(category.item, bool);\n\n    const isShowAll = sidebarState.showAllCategories[category.item];\n    const setIsShowAll = (bool: boolean) => sidebarState.setCategoryAsShowAll(category.item, bool);\n\n    const [uniqueIdForAria] = useState(() => _.uniqueId('category1-'));\n\n    const shouldShowCategory2 = (index: number) =>\n        index <= INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW - 1 || isShowAll;\n    if (category.categories == null) {\n        return null;\n    }\n    return (\n        <li className=\"RecipeSidebarNav-category1\" data-testid={category.item}>\n            <button\n                aria-expanded={isExpanded}\n                aria-controls={uniqueIdForAria}\n                className=\"RecipeSidebarNav-category1Button u-outlineSolidBase2\"\n                type=\"button\"\n                onClick={() => setIsExpanded(!isExpanded)}\n            >\n                <span className=\"RecipeSidebarNav-category1Title\">{category.item}</span>\n\n                <Icon\n                    className=\"u-marginLauto\"\n                    icon={ChevronDownIcon}\n                    width={20}\n                    height={20}\n                    rotateClockwise={isExpanded ? '180deg' : '0deg'}\n                    aria-hidden\n                />\n            </button>\n\n            <AnimateHeight id={uniqueIdForAria} duration={250} height={isExpanded ? 'auto' : 0}>\n                <div className=\"RecipeSidebarNav-category1PreListDiv\" />\n                <ul className=\"RecipeSidebarNav-category1ListOfChildren\">\n                    {category.categories.map((category2, index) => (\n                        <RecipeSideBarCategory2\n                            key={category2.item}\n                            currentCategories={currentCategories}\n                            sidebarState={sidebarState}\n                            parentCategory={category}\n                            category={category2}\n                            getUrlForCategory2={getUrlForCategory2}\n                            getUrlForCategory3={getUrlForCategory3}\n                            isHidden={!shouldShowCategory2(index)}\n                            useRefresh={useRefresh}\n                        />\n                    ))}\n                </ul>\n\n                {category.categories.length > INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW && (\n                    <button\n                        className=\"RecipeSidebarNav-category1SeeMoreFooter u-outlineSolidBase2\"\n                        type=\"button\"\n                        onClick={() => setIsShowAll(!isShowAll)}\n                    >\n                        {isShowAll ? (\n                            <Icon\n                                className=\"u-marginLmd u-marginRxsm\"\n                                icon={MinusIcon}\n                                width={20}\n                                height={20}\n                                aria-hidden\n                            />\n                        ) : (\n                            <Icon\n                                className=\"u-marginLmd u-marginRxsm\"\n                                icon={PlusIcon}\n                                width={20}\n                                height={20}\n                                aria-hidden\n                            />\n                        )}\n\n                        {isShowAll ? <span>Färre kategorier</span> : <span> Fler kategorier</span>}\n                    </button>\n                )}\n            </AnimateHeight>\n        </li>\n    );\n};\n\nexport default RecipeSideBarCategory1;\n","import classNames from 'classnames';\nimport type { FC } from 'react';\n\nimport { addQueryParamsToUrl } from '../../../common/utils/urlUtils';\nimport type { RecipeCategoryFacet } from '../../../search/models/models';\nimport type { SidebarState } from '../../hooks/useSidebarState';\nimport type { GetUrlForCategoriesSignature } from '../../models';\nimport {\n    getCategoriesWhileRemovingCategoryFacetChildren,\n    getCategoriesWhileRemovingCategoryFacetsParent,\n} from '../../utils';\nimport type { RecipeSidebarLink } from './models';\nimport RecipeSidebarNavCategory1 from './RecipeSidebarNavCategory1';\n\nexport interface RecipeSidebarNavProps {\n    sidebarState: SidebarState;\n    categories: RecipeCategoryFacet[];\n    currentCategories: string[];\n    getUrlForCategories: GetUrlForCategoriesSignature;\n    sortParamVal?: string;\n    queryParamVal?: string;\n    extraClassName?: string;\n    useRefresh?: boolean;\n    topListItemSlot?: React.ReactNode;\n}\nconst RecipeSidebarNav: FC<React.PropsWithChildren<RecipeSidebarNavProps>> = ({\n    sidebarState,\n    categories,\n    currentCategories,\n    getUrlForCategories,\n    sortParamVal,\n    queryParamVal,\n    extraClassName,\n    useRefresh,\n    topListItemSlot,\n}) => {\n    const shouldAddNoFollowToLink = ({ categoriesForUrl }: { categoriesForUrl: string[] }) => {\n        if (categoriesForUrl.length > 2) {\n            return true;\n        }\n\n        if (sortParamVal) {\n            return true;\n        }\n\n        if (queryParamVal) {\n            return true;\n        }\n\n        return false;\n    };\n\n    const getUrlForCategory2 = (category: RecipeCategoryFacet): RecipeSidebarLink => {\n        const categoriesForUrl = getCategoriesWhileRemovingCategoryFacetChildren({\n            currentCategories,\n            category,\n        });\n\n        const url = getUrlForCategories({ categories: categoriesForUrl });\n        const urlWithPotentialQueryParams = addQueryParamsToUrl(url, {\n            sort: sortParamVal,\n            query: queryParamVal,\n        });\n\n        return {\n            url: urlWithPotentialQueryParams,\n            noFollow: shouldAddNoFollowToLink({ categoriesForUrl }),\n        };\n    };\n\n    const getUrlForCategory3 = (\n        category: RecipeCategoryFacet,\n        parentCategory: RecipeCategoryFacet,\n    ): RecipeSidebarLink => {\n        const categoriesForUrl = getCategoriesWhileRemovingCategoryFacetsParent({\n            currentCategories,\n            category,\n            parentCategory,\n        });\n\n        const url = getUrlForCategories({ categories: categoriesForUrl });\n        const urlWithPotentialQueryParams = addQueryParamsToUrl(url, {\n            sort: sortParamVal,\n            query: queryParamVal,\n        });\n\n        return {\n            url: urlWithPotentialQueryParams,\n            noFollow: shouldAddNoFollowToLink({ categoriesForUrl }),\n        };\n    };\n\n    return (\n        <ul className={classNames('RecipeSidebarNav', extraClassName)} aria-label=\"Filter\">\n            {topListItemSlot && <li>{topListItemSlot}</li>}\n            {categories.map((category) => (\n                <RecipeSidebarNavCategory1\n                    currentCategories={currentCategories}\n                    sidebarState={sidebarState}\n                    key={category.item}\n                    category={category}\n                    getUrlForCategory2={getUrlForCategory2}\n                    getUrlForCategory3={getUrlForCategory3}\n                    useRefresh={useRefresh}\n                />\n            ))}\n        </ul>\n    );\n};\n\nexport default RecipeSidebarNav;\n","import type { ApiException } from '../../common/exceptions/exceptionDefinitions';\nimport type { AsyncDispatcherStatus } from '../../common/hooks/useAsyncDispatcher';\nimport { useAsyncDispatcher } from '../../common/hooks/useAsyncDispatcher';\nimport type { ApiLoopSort } from '../../search/api/searchRequests';\nimport searchFlow from '../../search/flow/searchFlow';\nimport type { RecipeCategoryFacet, SearchRecipe } from '../../search/models/models';\nimport { SearchFacetType } from '../../search/models/models';\n\ntype MapKeys = keyof Pick<ApiLoopSearchRecipe, 'name' | 'average_rating' | 'publication_date'>;\n\nconst MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT: Record<\n    MapKeys,\n    ApiLoopSort<keyof ApiLoopSearchRecipe>\n> = {\n    publication_date: {\n        type: 'attribute',\n        attributeName: 'publication_date',\n        order: 'desc',\n    },\n    name: {\n        type: 'attribute',\n        attributeName: 'name',\n        order: 'asc',\n    },\n    average_rating: {\n        type: 'attribute',\n        attributeName: 'average_rating',\n        order: 'desc',\n    },\n    // searching for popularity is default if no sortorder is sent in.\n};\n\nexport interface LoopRecipeResult {\n    categories: RecipeCategoryFacet[];\n    recipes: SearchRecipe[];\n    recipesCount: number | null;\n    fetchRecipeData: (args: UseLoopRecipeSearchExecuteArgs) => void;\n    isRecipeDataLoading: boolean;\n    recipeDataError: ApiException;\n    recipeDataStatus: AsyncDispatcherStatus;\n    noRecipesFromPreviousRequest: boolean;\n    noCategoriesFromPreviousRequest: boolean;\n    queryUsed?: string;\n}\n\nexport interface UseLoopRecipeSearchExecuteArgs {\n    resultsPerPage: number;\n    page: number;\n    selectedCategories: string[];\n    sortBy?: keyof ApiLoopSearchRecipe;\n    searchQuery?: string;\n    searchOperator?: 'AND';\n}\n\nconst useLoopRecipeSearch = (): LoopRecipeResult => {\n    const {\n        result,\n        execute: fetchRecipeData,\n        isLoading: isRecipeDataLoading,\n        error: recipeDataError,\n        status: recipeDataStatus,\n    } = useAsyncDispatcher(\n        async ({\n            resultsPerPage,\n            page,\n            selectedCategories,\n            sortBy,\n            searchQuery = '',\n        }: UseLoopRecipeSearchExecuteArgs) => {\n            return searchFlow.searchRecipesLoop({\n                searchRequest: {\n                    searchQuery,\n                    page,\n                    resultsPerPage,\n                    sortBy:\n                        sortBy && MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT[sortBy as MapKeys]\n                            ? [MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT[sortBy as MapKeys]]\n                            : undefined,\n                    facets: [\n                        {\n                            type: SearchFacetType.RecipeCategories,\n                            selected: selectedCategories,\n                        },\n                    ],\n                },\n            });\n        },\n        { initialLoadingState: true, keepPreviousResult: true },\n    );\n\n    const noRecipesFromPreviousRequest =\n        recipeDataStatus === undefined ||\n        recipeDataStatus === 'not-requested' ||\n        (recipeDataStatus === 'success' && result?.items?.length === 0) ||\n        (isRecipeDataLoading && result?.items?.length === 0);\n\n    const noCategoriesFromPreviousRequest =\n        recipeDataStatus === undefined ||\n        recipeDataStatus === 'not-requested' ||\n        (recipeDataStatus === 'success' && result?.facets[0]?.items?.length === 0) ||\n        (isRecipeDataLoading && result?.facets[0]?.items?.length === 0);\n\n    return {\n        categories: result?.facets[0]?.items ?? [],\n        recipes: result?.items ?? [],\n        recipesCount: result?.count ?? null,\n        fetchRecipeData,\n        isRecipeDataLoading,\n        recipeDataError,\n        recipeDataStatus,\n        noRecipesFromPreviousRequest,\n        noCategoriesFromPreviousRequest,\n        queryUsed: result?.queryUsed,\n    };\n};\n\nexport default useLoopRecipeSearch;\n","import { useState } from 'react';\n\n// We want to be able to unmount the component without affecting it's expanded + showAll state.\nexport interface SidebarState {\n    expandedCategories: Record<string, boolean>;\n    showAllCategories: Record<string, boolean>;\n    setCategoryAsExpanded: (name: string, value: boolean) => void;\n    setCategoryAsShowAll: (name: string, value: boolean) => void;\n}\n\nexport const useSidebarState = (): SidebarState => {\n    const [expandedCategories, setExpandedCategories] = useState({});\n    const [showAllCategories, setShowAllCategories] = useState({});\n\n    return {\n        expandedCategories,\n        showAllCategories,\n        setCategoryAsExpanded: (name: string, value: boolean) =>\n            setExpandedCategories({\n                ...expandedCategories,\n                [name]: value,\n            }),\n        setCategoryAsShowAll: (name: string, value: boolean) =>\n            setShowAllCategories({\n                ...expandedCategories,\n                [name]: value,\n            }),\n    };\n};\n","import { Icon } from '@coop/components';\nimport { HeartFilledIcon, HeartIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport { Link } from 'react-router-dom';\n\ninterface FavoriteRecipesCountItemProps {\n    favouriteRecipeExternalIds: string[] | undefined;\n    ssrRecipeRootUrl: string;\n    extraClassName?: string;\n}\n\nconst FavoriteRecipesSideBarLink: FC<React.PropsWithChildren<FavoriteRecipesCountItemProps>> = ({\n    favouriteRecipeExternalIds,\n    ssrRecipeRootUrl,\n    extraClassName,\n}) => {\n    if (Array.isArray(favouriteRecipeExternalIds)) {\n        return (\n            <Link\n                className={classNames(\n                    'u-bgWhite u-paddingAsm u-marginBxsm u-flex u-flexJustifySpaceBetween u-outlineSolidBase2',\n                    extraClassName,\n                )}\n                style={{ borderRadius: '5px!important' }}\n                to={`${ssrRecipeRootUrl}favorit/`}\n                rel=\"nofollow\"\n            >\n                <p className=\"u-marginAz u-textSmall\">\n                    <span className=\"u-textWeightBold\">Sparade recept </span>\n                    <span className=\"u-colorGreenDark\">({favouriteRecipeExternalIds.length})</span>\n                </p>\n                {favouriteRecipeExternalIds.length ? (\n                    <Icon\n                        icon={HeartFilledIcon}\n                        width={20}\n                        height={20}\n                        color=\"dsGreen\"\n                        aria-hidden\n                    />\n                ) : (\n                    <Icon icon={HeartIcon} width={20} height={20} color=\"dsGreen\" aria-hidden />\n                )}\n            </Link>\n        );\n    }\n\n    return null;\n};\n\nexport default FavoriteRecipesSideBarLink;\n","import type { ApiCategoriesUrlOrder } from '../../models/recipe/recipeModel';\nimport type { RecipeCategoryFacet } from '../search/models/models';\nimport type {\n    CategoryNamesUnderLevel1,\n    CategoryNameToUrlSegment,\n    GetUrlForCategoriesSignature,\n} from './models';\n\n/**\n *\n * @param currStringArray current state of array\n * @param newString to be added or removed from currStringArray\n * @returns new array with or without newString\n */\nexport const createNewArrayByTogglingString = (currStringArray: string[], newString: string) => {\n    const shouldRemoveString = currStringArray.includes(newString);\n\n    if (shouldRemoveString) {\n        return currStringArray.filter((name) => name !== newString);\n    }\n\n    return [...currStringArray, newString];\n};\n\n/**\n * @returns a function that creates a path string where the categories are ordered correctly\n */\nexport const createGetUrlForCategories =\n    (\n        categoryNameToUrlSegment: CategoryNameToUrlSegment,\n        categoriesUrlOrder: ApiCategoriesUrlOrder,\n        recipeRootUrl: string,\n    ): GetUrlForCategoriesSignature =>\n    ({ categories }: { categories: string[] }) => {\n        const sortByCategoryUrlOrder = (a: string, b: string) =>\n            categoriesUrlOrder[a.toLowerCase()] - categoriesUrlOrder[b.toLowerCase()];\n\n        const mapCategoryNameToUrlSegment = (categoryName: string) =>\n            categoryName ? categoryNameToUrlSegment[categoryName.toLowerCase()] : null;\n\n        const removedPotentialLastSlashFromRoot =\n            recipeRootUrl.slice(-1) === '/'\n                ? recipeRootUrl.slice(0, recipeRootUrl.length - 1)\n                : recipeRootUrl;\n\n        const hasFilterQuery = categories.length > 2;\n\n        const builtPath = categories\n            .slice()\n            .sort(sortByCategoryUrlOrder)\n            .map(mapCategoryNameToUrlSegment)\n            .filter(Boolean)\n            .reduce((acc, currSegment, index) => {\n                if (index < 2) {\n                    return `${acc}/${currSegment}`;\n                }\n\n                if (index === 2) {\n                    return `${acc}?filter=${currSegment}`;\n                }\n\n                return `${acc},${currSegment}`;\n            }, removedPotentialLastSlashFromRoot);\n\n        return hasFilterQuery ? builtPath : `${builtPath}/`;\n    };\n\nexport const getCategoriesWhileRemovingCategoryFacetChildren = ({\n    currentCategories,\n    category,\n}: {\n    currentCategories: string[];\n    category: RecipeCategoryFacet;\n}) => {\n    if (Array.isArray(category.categories)) {\n        const childrenNames = category.categories.map((childCategory) =>\n            childCategory.item.toLowerCase(),\n        );\n\n        const categoriesWithoutChildren = currentCategories.filter(\n            (currCategory) => !childrenNames.includes(currCategory),\n        );\n\n        return createNewArrayByTogglingString(\n            categoriesWithoutChildren,\n            category.item.toLowerCase(),\n        );\n    }\n\n    return createNewArrayByTogglingString(currentCategories, category.item.toLowerCase());\n};\n\nexport const getCategoriesWhileRemovingCategoryFacetsParent = ({\n    currentCategories,\n    category,\n    parentCategory,\n}: {\n    currentCategories: string[];\n    category: RecipeCategoryFacet;\n    parentCategory: RecipeCategoryFacet;\n}) => {\n    const lowerCaseParentName = parentCategory.item.toLowerCase();\n\n    const categoriesWithoutParent = currentCategories.filter(\n        (categoryName) => categoryName !== lowerCaseParentName,\n    );\n\n    return createNewArrayByTogglingString(categoriesWithoutParent, category.item.toLowerCase());\n};\n\nexport const getAllCategoryNamesFromLevel2AndDown = (\n    categories: RecipeCategoryFacet[] | null,\n    collectedNames: string[] = [],\n    rootCall: boolean = true,\n): string[] => {\n    if (!categories) {\n        return collectedNames;\n    }\n\n    return categories.reduce((acc, facet) => {\n        const childCategories = getAllCategoryNamesFromLevel2AndDown(\n            facet.categories,\n            collectedNames,\n            false,\n        );\n\n        if (rootCall) {\n            return [...acc, ...childCategories];\n        }\n\n        return [...acc, ...childCategories, facet.item];\n    }, collectedNames);\n};\n\n/**\n * Removes categories on level 1\n * @returns the categories we can show\n */\nexport const getCategoryNamesUnderLevel1 = (\n    ssrCategoriesUrlOrder: ApiCategoriesUrlOrder,\n): CategoryNamesUnderLevel1 => {\n    const obj = ssrCategoriesUrlOrder ?? {};\n    return Object.entries(obj).reduce((acc, [key, val]) => {\n        if (val % 1000 !== 0) {\n            return {\n                ...acc,\n                [key]: true,\n            };\n        }\n\n        return acc;\n    }, {});\n};\n\nexport const buildRecipeRedirectUrl = (externalId: string) => `/redirect/recipe/${externalId}`;\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","key","defaultValue","location","paramValue","URLSearchParams","search","get","createUrlWithNewParamValue","val","urlParams","set","delete","pathname","toString","close","sidebarState","categories","currentCategories","getUrlForCategories","sortParamVal","useRefresh","recipesCount","ssrRecipeRootUrl","data","favouriteRecipeExternalIds","hasSelectedCategories","className","ModalHeader","RecipeFilterSearchBar","RecipeSidebarNav","extraClassName","topListItemSlot","FavoriteRecipesSideBarLink","style","background","Button","asChild","size","theme","fullWidth","to","onClick","children","isOpen","open","useModal","RecipePageFilter","sizePx","additionalClasses","onClose","autoFocus","inputText","setInputText","useState","push","inputIsProperLength","queryParamVal","createQueryUrl","categoryNames","useMemo","filter","name","includes","toLowerCase","sort","a","b","map","item","index","label","getUrlForCategoriesExtended","categoriesForUrl","url","query","navigateExactMatch","value","window","href","submitLabel","placeholder","inputValue","onInputChange","items","onSelectionChange","theItem","find","result","selection","inputTextInLower","handleSelection","showEmptyStateWhen","showErrorStateWhen","onSubmit","coopSettings","recipe","overlayMaxHeight","textValue","skipTriggerSlot","align","category","parentCategory","link","recipeFilterPageTracking","tracking","useFilterPageTracking","rel","noFollow","undefined","filterRecipes","categoryLinkClick","getUrlForCategory3","isChecked","IS_LINK_CHECKED_CLASS","IS_HIDDEN_CLASS","getUrlForCategory2","isHidden","isExpanded","expandedCategories","uniqueIdForAria","count","type","setIsExpanded","bool","setCategoryAsExpanded","Icon","icon","rotateClockwise","AnimateHeight","A","duration","category3","RecipeSidebarNavCategory3","isShowAll","showAllCategories","shouldShowCategory2","INITIAL_MAX_CATEGORY2_ITEMS_TO_SHOW","category2","setIsShowAll","setCategoryAsShowAll","shouldAddNoFollowToLink","RecipeSidebarNavCategory1","MAP_LOOP_SEARCH_RECIPE_KEY_TO_API_LOOP_SORT","publication_date","attributeName","order","average_rating","execute","fetchRecipeData","isLoading","isRecipeDataLoading","error","recipeDataError","status","recipeDataStatus","resultsPerPage","page","selectedCategories","sortBy","searchQuery","searchRecipesLoop","searchRequest","facets","RecipeCategories","selected","initialLoadingState","keepPreviousResult","noRecipesFromPreviousRequest","noCategoriesFromPreviousRequest","recipes","queryUsed","useSidebarState","setExpandedCategories","setShowAllCategories","Array","isArray","borderRadius","color","createNewArrayByTogglingString","currStringArray","newString","createGetUrlForCategories","categoryNameToUrlSegment","categoriesUrlOrder","recipeRootUrl","removedPotentialLastSlashFromRoot","slice","hasFilterQuery","builtPath","categoryName","Boolean","reduce","acc","currSegment","getCategoriesWhileRemovingCategoryFacetChildren","childrenNames","childCategory","categoriesWithoutChildren","currCategory","getCategoriesWhileRemovingCategoryFacetsParent","lowerCaseParentName","categoriesWithoutParent","getAllCategoryNamesFromLevel2AndDown","collectedNames","rootCall","facet","childCategories","getCategoryNamesUnderLevel1","ssrCategoriesUrlOrder","obj","entries","buildRecipeRedirectUrl","externalId"],"sourceRoot":""}