{"version":3,"sources":["../locales/ar/search-ui-react.json","../locales/cs/search-ui-react.json","../locales/da/search-ui-react.json","../locales/de/search-ui-react.json","../locales/el/search-ui-react.json","../locales/en-GB/search-ui-react.json","../locales/en/search-ui-react.json","../locales/es/search-ui-react.json","../locales/et/search-ui-react.json","../locales/fi/search-ui-react.json","../locales/fr/search-ui-react.json","../locales/hi/search-ui-react.json","../locales/hr/search-ui-react.json","../locales/hu/search-ui-react.json","../locales/it/search-ui-react.json","../locales/ja/search-ui-react.json","../locales/ko/search-ui-react.json","../locales/lt/search-ui-react.json","../locales/lv/search-ui-react.json","../locales/nb/search-ui-react.json","../locales/nl/search-ui-react.json","../locales/pl/search-ui-react.json","../locales/pt/search-ui-react.json","../locales/ro/search-ui-react.json","../locales/ru/search-ui-react.json","../locales/sk/search-ui-react.json","../locales/sv/search-ui-react.json","../locales/tr/search-ui-react.json","../locales/vi/search-ui-react.json","../locales/zh-CN/search-ui-react.json","../locales/zh-TW/search-ui-react.json","../src/utils/supportedLocales.ts","../src/components/SearchBar.tsx","../src/hooks/useEntityPreviews.tsx","../src/hooks/useComponentMountStatus.tsx","../src/hooks/useDebouncedFunction.ts","../src/hooks/useRecentSearches.ts","../src/hooks/useSearchWithNearMeHandling.ts","../src/utils/search-operations.ts","../src/utils/location-operations.ts","../src/hooks/useSynchronizedRequest.tsx","../src/icons/VerticalDividerIcon.tsx","../src/icons/HistoryIcon.tsx","../src/icons/CloseIcon.tsx","../src/icons/MagnifyingGlassIcon.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Dropdown/DropdownContext.ts","../src/components/Dropdown/InputContext.ts","../src/components/Dropdown/FocusContext.ts","../src/components/ScreenReader.tsx","../src/components/utils/recursivelyMapChildren.ts","../src/components/Dropdown/DropdownItem.tsx","../src/components/Dropdown/generateDropdownId.ts","../src/hooks/useComposedCssClasses.tsx","../src/hooks/useLayoutEffect.ts","../src/hooks/useId.ts","../src/components/Dropdown/DropdownInput.tsx","../src/components/Dropdown/DropdownMenu.tsx","../src/components/SearchButton.tsx","../src/components/utils/renderHighlightedValue.tsx","../src/components/utils/renderAutocompleteResult.tsx","../src/hooks/useAnalytics.ts","../src/hooks/useSearchBarAnalytics.ts","../src/models/verticalLink.ts","../src/utils/filterutils.tsx","../src/models/NumberRangeFilter.ts","../src/components/SpellCheck.tsx","../src/hooks/useCardAnalyticsCallback.tsx","../src/hooks/useCardAnalytics.ts","../src/hooks/useCardFeedbackCallback.tsx","../src/utils/i18n.ts","../src/components/DirectAnswer.tsx","../src/components/ThumbsFeedback.tsx","../src/icons/ThumbIcon.tsx","../src/components/FieldValueDirectAnswer.tsx","../src/components/FeaturedSnippetDirectAnswer.tsx","../src/components/FilterSearch.tsx","../src/components/Geolocation.tsx","../src/icons/LoadingIndicator.tsx","../src/icons/YextIcon.tsx","../src/hooks/useGeolocationHandler.ts","../src/icons/CurrentLocationIcon.tsx","../src/components/LocationBias.tsx","../src/components/AppliedFilters.tsx","../src/components/AppliedFiltersDisplay.tsx","../src/hooks/useClearFiltersCallback.ts","../src/components/Filters/HierarchicalFacetDisplay.tsx","../src/hooks/useHierarchicalFacetTree.ts","../src/components/Filters/FiltersContext.ts","../src/hooks/useNlpFilterDisplayNames.ts","../src/hooks/useRemovableFilters.ts","../src/utils/isDescendantHierarchicalFacet.tsx","../src/hooks/useStateUpdatedOnSearch.ts","../src/hooks/useRemovableStaticFilters.ts","../src/components/UniversalResults.tsx","../src/components/VerticalResultsDisplay.tsx","../src/components/cards/standard/StandardCardDisplay.tsx","../src/components/cards/standard/StandardCard.tsx","../src/components/sections/StandardSection.tsx","../src/components/sections/SectionHeader.tsx","../src/icons/CollectionIcon.tsx","../src/components/VerticalResults.tsx","../src/components/Pagination.tsx","../src/icons/ChevronIcon.tsx","../src/hooks/usePaginationAnalytics.ts","../src/components/AlternativeVerticals.tsx","../src/icons/StarIcon.tsx","../src/components/ResultsCount.tsx","../src/components/FilterGroup.tsx","../src/components/Filters/CheckboxOption.tsx","../src/components/Filters/FilterGroupContext.ts","../src/components/Filters/CollapsibleLabel.tsx","../src/components/Filters/CollapsibleSection.tsx","../src/components/Filters/FacetsProvider.tsx","../src/components/Filters/FilterGroupProvider.tsx","../src/components/Filters/SearchInput.tsx","../src/components/Filters/StaticFiltersProvider.tsx","../src/components/Filters/RangeInput.tsx","../src/icons/InvalidIcon.tsx","../src/components/FacetTiltle.tsx","../src/components/StaticFilters.tsx","../src/components/StandardFacets.tsx","../src/components/FilterDivider.tsx","../src/components/HierarchicalFacets.tsx","../src/components/NumericalFacets.tsx","../src/components/StandardFacetContent.tsx","../src/components/Facets.tsx","../src/components/NumericalFacetContent.tsx","../src/components/HierarchicalFacetContent.tsx","../src/components/ApplyFiltersButton.tsx","../src/components/MapboxMap.tsx","../src/components/AnalyticsProvider.tsx","../src/models/SearchAnalyticsEventServiceImpl.ts","../node_modules/@yext/search-core/src/models/core/Environment.ts","../node_modules/@yext/search-core/src/models/core/CloudRegion.ts","../src/components/GenerativeDirectAnswer.tsx","../src/components/Markdown.tsx","../src/components/SearchI18nextProvider.tsx","../src/models/StandardCardData.ts","../src/index.ts"],"sourcesContent":["{\n  \"aiGeneratedAnswer\": \"إجابة تم إنشاؤها بواسطة الذكاء الاصطناعي\",\n  \"allCategories\": \"جميع الفئات \",\n  \"appliedFiltersToCurrentSearch\": \"تم تطبيق الفلاتر على البحث الحالي\",\n  \"apply\": \"تطبيق\",\n  \"applyFilters\": \"تطبيق الفلاتر\",\n  \"autocompleteOptionsFound_few\": \"تم العثور على {{count}} خيارات للإكمال التلقائي {{label}}.\",\n  \"autocompleteOptionsFound_many\": \"تم العثور على {{count}} خيارًا للإكمال التلقائي {{label}}.\",\n  \"autocompleteOptionsFound_one\": \"تم العثور على خيار واحد للإكمال التلقائي {{label}}.\",\n  \"autocompleteOptionsFound_other\": \"تم العثور على {{count}} خيار للإكمال التلقائي {{label}}.\",\n  \"autocompleteOptionsFound_two\": \"تم العثور على خيارين للإكمال التلقائي {{label}}.\",\n  \"autocompleteOptionsFound_zero\": \"لم يتم العثور على أي خيارات للإكمال التلقائي.\",\n  \"autocompleteSuggestion\": \"اقتراح الإكمال التلقائي: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"تم العثور على {{count}} اقتراحات.\",\n  \"autocompleteSuggestionsFound_many\": \"تم العثور على {{count}} اقتراحًا.\",\n  \"autocompleteSuggestionsFound_one\": \"تم العثور على اقتراح واحد.\",\n  \"autocompleteSuggestionsFound_other\": \"تم العثور على {{count}} اقتراح.\",\n  \"autocompleteSuggestionsFound_two\": \"تم العثور على اقتراحين.\",\n  \"autocompleteSuggestionsFound_zero\": \"لم يتم العثور على أي اقتراحات.\",\n  \"basedOnYourDevice\": \" (استنادًا إلى جهازك)\",\n  \"basedOnYourInternetAddress\": \" (استنادًا إلى عنوان الإنترنت الخاص بك)\",\n  \"categoriesText_one\": \"الفئة التالية تحتوي على نتائج لـ - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"الفئات التالية تحتوي على نتائج لـ - <strong>{{query}}</strong>\",\n  \"clearAll\": \"مسح الكل\",\n  \"clearMinAndMax\": \"مسح الحد الأدنى والأقصى\",\n  \"clearTheRangeToSelectOptions\": \"امسح النطاق لاختيار الخيارات.\",\n  \"clearTheSearchBar\": \"امسح شريط البحث\",\n  \"conductASearch\": \"إجراء بحث\",\n  \"currentLocation\": \"الموقع الحالي\",\n  \"didYouMean\": \"هل كنت تقصد <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"عند توفر نتائج الإكمال التلقائي، استخدم الأسهم للأعلى والأسفل للتنقل واضغط Enter للاختيار.\",\n  \"feedback\": \"ملاحظات\",\n  \"filterGroupSearchInputLabel\": \"ابحث في خيارات {{title}}\",\n  \"invalidRange\": \"نطاق غير صالح\",\n  \"max\": \"الحد الأقصى\",\n  \"min\": \"الحد الأدنى\",\n  \"navigateToTheNextResultsPage\": \"انتقل إلى صفحة النتائج التالية\",\n  \"navigateToThePreviousResultsPage\": \"انتقل إلى صفحة النتائج السابقة\",\n  \"noAutocompleteOptionsFound\": \"لم يتم العثور على خيارات للإكمال التلقائي.\",\n  \"noAutocompleteSuggestionsFound\": \"لم يتم العثور على اقتراحات.\",\n  \"noResultsFoundIn\": \"لم يتم العثور على نتائج في {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"الصفحة {{pageNumber}}\",\n  \"pagination\": \"ترقيم الصفحات\",\n  \"readMoreAbout\": \"اقرأ المزيد عن <a>{{name}}</a>\",\n  \"recentSearch\": \"بحث حديث: {{query}}\",\n  \"recentSearchesFound_few\": \"تم العثور على {{count}} عمليات بحث.\",\n  \"recentSearchesFound_many\": \"تم العثور على {{count}} عملية بحث.\",\n  \"recentSearchesFound_one\": \"تم العثور على عملية بحث واحدة.\",\n  \"recentSearchesFound_other\": \"تم العثور على {{count}} عملية بحث.\",\n  \"recentSearchesFound_two\": \"تم العثور على عمليتي بحث.\",\n  \"recentSearchesFound_zero\": \"لم يتم العثور على عمليات بحث حديثة.\",\n  \"removeFilter\": \"إزالة الفلتر «{{displayName}}»\",\n  \"resultPreview\": \"معاينة النتيجة: {{value}}\",\n  \"resultPreviewsFound_few\": \"تم العثور على {{count}} معاينات.\",\n  \"resultPreviewsFound_many\": \"تم العثور على {{count}} معاينة.\",\n  \"resultPreviewsFound_one\": \"تم العثور على معاينة واحدة.\",\n  \"resultPreviewsFound_other\": \"تم العثور على {{count}} معاينة.\",\n  \"resultPreviewsFound_two\": \"تم العثور على معاينتين.\",\n  \"resultPreviewsFound_zero\": \"لم يتم العثور على أي معاينات.\",\n  \"resultsCountText_few\": \"{{count}} نتائج\",\n  \"resultsCountText_many\": \"{{count}} نتيجة\",\n  \"resultsCountText_one\": \"نتيجة واحدة\",\n  \"resultsCountText_other\": \"{{count}} نتيجة\",\n  \"resultsCountText_two\": \"نتيجتان\",\n  \"resultsCountText_zero\": \"لا توجد نتائج\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} من أصل {{resultsCount}} نتيجة\",\n  \"searchHere\": \"ابحث هنا…\",\n  \"showingAllInstead\": \"يتم عرض جميع نتائج {{currentVerticalLabel}} بدلاً من ذلك.\",\n  \"showLess\": \"عرض أقل\",\n  \"showMore\": \"عرض المزيد\",\n  \"sources_few\": \"مصادر ({{count}})\",\n  \"sources_many\": \"مصدر ({{count}})\",\n  \"sources_one\": \"مصدر\",\n  \"sources_other\": \"مصدر ({{count}})\",\n  \"sources_two\": \"مصدران\",\n  \"sources_zero\": \"لا توجد مصادر\",\n  \"submitSearch\": \"تنفيذ البحث\",\n  \"suggestionResultsCount_few\": \"{{label}} - {{count}} نتائج\",\n  \"suggestionResultsCount_many\": \"{{label}} - {{count}} نتيجة\",\n  \"suggestionResultsCount_one\": \"{{label}} - نتيجة واحدة\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} نتيجة\",\n  \"suggestionResultsCount_two\": \"{{label}} - نتيجتان\",\n  \"suggestionResultsCount_zero\": \"{{label}} - لا توجد نتائج\",\n  \"thankYouForYourFeedback\": \"شكرًا لملاحظاتك!\",\n  \"thisAnsweredMyQuestion\": \"نعم، هذا أجاب على سؤالي\",\n  \"thisDidNotAnswerMyQuestion\": \"لا، هذا لم يجب على سؤالي\",\n  \"unselectAnOptionToEnterInARange\": \"قم بإلغاء تحديد خيار لإدخال نطاق.\",\n  \"updateYourLocation\": \"تحديث موقعك\",\n  \"useCurrentLocation\": \"استخدام الموقع الحالي\",\n  \"useMyLocation\": \"استخدم موقعي\",\n  \"viewAll\": \"عرض الكل\",\n  \"viewDetails\": \"عرض التفاصيل\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI generovaná odpověď\",\n  \"allCategories\": \"Všechny kategorie\",\n  \"appliedFiltersToCurrentSearch\": \"Použité filtry pro aktuální hledání\",\n  \"apply\": \"Použít\",\n  \"applyFilters\": \"Použít filtry\",\n  \"autocompleteOptionsFound_few\": \"Nalezeny {{count}}{{label}} možnosti automatického dokončování.\",\n  \"autocompleteOptionsFound_many\": \"Nalezeno {{count}}{{label}} možností automatického dokončování.\",\n  \"autocompleteOptionsFound_one\": \"Nalezena {{count}}{{label}} možnost automatického dokončování.\",\n  \"autocompleteOptionsFound_other\": \"Nalezeno {{count}}{{label}} možností automatického dokončování.\",\n  \"autocompleteSuggestion\": \"návrh automatického doplňování: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"Nalezeny {{count}} návrhy automatického dokončování.\",\n  \"autocompleteSuggestionsFound_many\": \"Nalezeno {{count}} návrhů automatického dokončování.\",\n  \"autocompleteSuggestionsFound_one\": \"Nalezen {{count}} návrh automatického dokončování.\",\n  \"autocompleteSuggestionsFound_other\": \"Nalezeno {{count}} návrhů automatického dokončování.\",\n  \"basedOnYourDevice\": \" (na základě vašeho zařízení)\",\n  \"basedOnYourInternetAddress\": \" (na základě vaší IP adresy)\",\n  \"categoriesText_few\": \"Následující kategorie přinesla výsledky pro – <strong>{{query}}</strong>\",\n  \"categoriesText_one\": \"Následující kategorie přinesly výsledky pro – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Následujících kategorií přineslo výsledky pro – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Vyčistit vše\",\n  \"clearMinAndMax\": \"Vymazat min a max\",\n  \"clearTheRangeToSelectOptions\": \"Vymažte rozsah pro výběr možností.\",\n  \"clearTheSearchBar\": \"Vymažte vyhledávací lištu\",\n  \"conductASearch\": \"Provést vyhledávání\",\n  \"currentLocation\": \"Aktuální poloha\",\n  \"didYouMean\": \"Mysleli jste <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Pokud jsou dostupné výsledky automatického doplnění, použijte šipky nahoru/dolů pro výběr a Enter pro potvrzení.\",\n  \"feedback\": \"Zpětná vazba\",\n  \"filterGroupSearchInputLabel\": \"Hledat možnosti {{title}}\",\n  \"invalidRange\": \"Neplatný rozsah\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Přejděte na další stránku výsledků\",\n  \"navigateToThePreviousResultsPage\": \"Přejděte na stránku předchozích výsledků\",\n  \"noAutocompleteOptionsFound\": \"Nenalezeny žádné možností automatického doplňování.\",\n  \"noAutocompleteSuggestionsFound\": \"Nenalezeny žádné návrhy automatického doplňování.\",\n  \"noResultsFoundIn\": \"V {{currentVerticalLabel}} nebyly nalezeny žádné výsledky.\",\n  \"paginationPage\": \"stránka {{pageNumber}}\",\n  \"pagination\": \"Stránkování\",\n  \"readMoreAbout\": \"Přečíst si více o <a>{{name}}</a>\",\n  \"recentSearch\": \"nedávné vyhledávání: {{query}}\",\n  \"recentSearchesFound_few\": \"Nalezena {{count}} nedávná hledání.\",\n  \"recentSearchesFound_many\": \"Nalezeno {{count}} nedávných hledání.\",\n  \"recentSearchesFound_one\": \"Nalezeno {{count}} nedávné hledání.\",\n  \"recentSearchesFound_other\": \"Nalezeno {{count}} nedávných hledání.\",\n  \"removeFilter\": \"Odebrat filtr „{{displayName}}“\",\n  \"resultPreview\": \"náhled výsledků: {{value}}\",\n  \"resultPreviewsFound_few\": \"Nalezeny {{count}} náhledy výsledků.\",\n  \"resultPreviewsFound_many\": \"Nalezeno {{count}} náhledů výsledků.\",\n  \"resultPreviewsFound_one\": \"Nalezen {{count}} náhled výsledku.\",\n  \"resultPreviewsFound_other\": \"Nalezeno {{count}} náhledů výsledků.\",\n  \"resultsCountText_few\": \"{{count}} výsledky\",\n  \"resultsCountText_many\": \"{{count}} výsledků\",\n  \"resultsCountText_one\": \"{{count}} výsledek\",\n  \"resultsCountText_other\": \"{{count}} výsledků\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} – {{paginateEnd}} z {{resultsCount}} výsledků\",\n  \"searchHere\": \"Hledejte zde…\",\n  \"showingAllInstead\": \"Místo toho zobrazujeme všechny {{currentVerticalLabel}}.\",\n  \"showLess\": \"Zobrazit méně\",\n  \"showMore\": \"Zobrazit více\",\n  \"sources_few\": \"Zdroje ({{count}})\",\n  \"sources_many\": \"Zdroje ({{count}})\",\n  \"sources_one\": \"Zdroj\",\n  \"sources_other\": \"Zdroje ({{count}})\",\n  \"submitSearch\": \"Odeslat vyhledávání\",\n  \"suggestionResultsCount_few\": \"{{label}} – {{count}} výsledky\",\n  \"suggestionResultsCount_many\": \"{{label}} – {{count}} výsledků\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} výsledek\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} výsledků\",\n  \"thankYouForYourFeedback\": \"Děkujeme za vaši zpětnou vazbu!\",\n  \"thisAnsweredMyQuestion\": \"Toto odpovědělo na mou otázku\",\n  \"thisDidNotAnswerMyQuestion\": \"Toto neodpovědělo na mou otázku\",\n  \"unselectAnOptionToEnterInARange\": \"Zrušte výběr možnosti, abyste mohli zadat rozsah.\",\n  \"updateYourLocation\": \"Aktualizujte svou polohu\",\n  \"useCurrentLocation\": \"Použít aktuální polohu\",\n  \"useMyLocation\": \"Použít mou polohu\",\n  \"viewAll\": \"Zobrazit vše\",\n  \"viewDetails\": \"Zobrazit podrobnosti\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI-genereret svar\",\n  \"allCategories\": \"Alle kategorier\",\n  \"appliedFiltersToCurrentSearch\": \"Anvendte filtre til den aktuelle søgning\",\n  \"apply\": \"Anvende\",\n  \"applyFilters\": \"Anvend filtre\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} autofuldførelsesmulighed fundet.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} autofuldførelsesmuligheder fundet.\",\n  \"autocompleteSuggestion\": \"autofuldførelsesforslag: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} autofuldførelsesforslag fundet.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} autofuldførelsesforslag fundet.\",\n  \"basedOnYourDevice\": \" (baseret på din enhed)\",\n  \"basedOnYourInternetAddress\": \" (baseret på din internetadresse)\",\n  \"categoriesText_one\": \"Følgende kategori gav resultater for - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Følgende kategorier gav resultater for - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Ryd alle\",\n  \"clearMinAndMax\": \"Ryd maks og min\",\n  \"clearTheRangeToSelectOptions\": \"Ryd rækkevidden for at vælge indstillinger.\",\n  \"clearTheSearchBar\": \"Ryd søgefeltet\",\n  \"conductASearch\": \"Foretage en søgning\",\n  \"currentLocation\": \"Nuværende placering\",\n  \"didYouMean\": \"Mente du <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Når autoudfyldningsresultater er tilgængelige, brug pil op/ned for at gennemgå og Enter for at vælge.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Søg i valgmuligheder for {{title}}\",\n  \"invalidRange\": \"Ugyldigt rækkevidde\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Naviger til den næste resultatside\",\n  \"navigateToThePreviousResultsPage\": \"Naviger til den tidligere resultatside\",\n  \"noAutocompleteOptionsFound\": \"0 autofuldførelsesmuligheder fundet.\",\n  \"noAutocompleteSuggestionsFound\": \"0 forslag til autofuldførelse fundet.\",\n  \"noResultsFoundIn\": \"Ingen resultater fundet i {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"side {{pageNumber}}\",\n  \"pagination\": \"Pagination\",\n  \"readMoreAbout\": \"Læs mere om <a>{{name}}</a>\",\n  \"recentSearch\": \"nylig søgning: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} seneste søgning fundet.\",\n  \"recentSearchesFound_other\": \"{{count}} seneste søgninger fundet.\",\n  \"removeFilter\": \"Fjern filteret »{{displayName}}«\",\n  \"resultPreview\": \"resultatvisninger: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} resultatvisning fundet.\",\n  \"resultPreviewsFound_other\": \"{{count}} resultatvisninger fundet.\",\n  \"resultsCountText_one\": \"{{count}} resultat\",\n  \"resultsCountText_other\": \"{{count}} resultater\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} af {{resultsCount}} resultater\",\n  \"searchHere\": \"Søg her…\",\n  \"showingAllInstead\": \"Viser i stedet alle {{currentVerticalLabel}}.\",\n  \"showLess\": \"Vis mindre\",\n  \"showMore\": \"Vis mere\",\n  \"sources_one\": \"Kilde\",\n  \"sources_other\": \"Kilder ({{count}})\",\n  \"submitSearch\": \"Indsend søgning\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} resultat\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} resultater\",\n  \"thankYouForYourFeedback\": \"Tak for din feedback!\",\n  \"thisAnsweredMyQuestion\": \"Dette besvarede mit spørgsmål\",\n  \"thisDidNotAnswerMyQuestion\": \"Dette besvarede ikke mit spørgsmål\",\n  \"unselectAnOptionToEnterInARange\": \"Fravælg en mulighed for at indtaste et interval.\",\n  \"updateYourLocation\": \"Opdater din placering\",\n  \"useCurrentLocation\": \"Brug nuværende placering\",\n  \"useMyLocation\": \"Brug min placering\",\n  \"viewAll\": \"Se alle\",\n  \"viewDetails\": \"Se detaljer\"\n}\n","{\n  \"aiGeneratedAnswer\": \"KI-generierte Antwort\",\n  \"allCategories\": \"Alle Kategorien\",\n  \"appliedFiltersToCurrentSearch\": \"Angewandte Filter auf die aktuelle Suche\",\n  \"apply\": \"Anwenden\",\n  \"applyFilters\": \"Filter anwenden\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} Autovervollständigungsoption gefunden.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} Autovervollständigungsoptionen gefunden.\",\n  \"autocompleteSuggestion\": \"autovervollständigung Vorschlag: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} Autovervollständigungsvorschlag gefunden.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} Autovervollständigungsvorschläge gefunden.\",\n  \"basedOnYourDevice\": \" (basierend auf Ihrem Gerät)\",\n  \"basedOnYourInternetAddress\": \" (basierend auf Ihrer IP-Adresse)\",\n  \"categoriesText_one\": \"Die folgende Kategorie lieferte Ergebnisse für - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Die folgenden Kategorien lieferten Ergebnisse für - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Alle klar\",\n  \"clearMinAndMax\": \"Min und Max löschen\",\n  \"clearTheRangeToSelectOptions\": \"Löschen Sie den Bereich, um Optionen auszuwählen.\",\n  \"clearTheSearchBar\": \"Löschen Sie die Suchleiste\",\n  \"conductASearch\": \"Eine Suche durchführen\",\n  \"currentLocation\": \"Aktueller Standort\",\n  \"didYouMean\": \"Meinten Sie <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Wenn Autovervollständigungsergebnisse verfügbar sind, mit Pfeiltasten navigieren und mit Enter auswählen.\",\n  \"feedback\": \"Rückmeldung\",\n  \"filterGroupSearchInputLabel\": \"Optionen für {{title}} durchsuchen\",\n  \"invalidRange\": \"Ungültiger Bereich\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Navigieren Sie zur nächsten Ergebnisseite\",\n  \"navigateToThePreviousResultsPage\": \"Navigieren Sie zur vorherigen Ergebnisseite\",\n  \"noAutocompleteOptionsFound\": \"0 autovervollständigung Optionen gefunden.\",\n  \"noAutocompleteSuggestionsFound\": \"0 autovervollständigung Vorschläge gefunden.\",\n  \"noResultsFoundIn\": \"Keine Ergebnisse in {{currentVerticalLabel}} gefunden.\",\n  \"paginationPage\": \"Seite {{pageNumber}}\",\n  \"pagination\": \"Seitennavigation\",\n  \"readMoreAbout\": \"Mehr erfahren über <a>{{name}}</a>\",\n  \"recentSearch\": \"neuere Suche: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} letzter Suchbegriff gefunden.\",\n  \"recentSearchesFound_other\": \"{{count}} letzte Suchbegriffe gefunden.\",\n  \"removeFilter\": \"Filter „{{displayName}}“ entfernen\",\n  \"resultPreview\": \"Ergebnisvorschau: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} Ergebnisvorschau gefunden.\",\n  \"resultPreviewsFound_other\": \"{{count}} Ergebnisvorschauen gefunden.\",\n  \"resultsCountText_one\": \"{{count}} Ergebnis\",\n  \"resultsCountText_other\": \"{{count}} Ergebnisse\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} von {{resultsCount}} Ergebnissen\",\n  \"searchHere\": \"Suche hier…\",\n  \"showingAllInstead\": \"Zeige stattdessen alle {{currentVerticalLabel}} an.\",\n  \"showLess\": \"Weniger anzeigen\",\n  \"showMore\": \"Mehr anzeigen\",\n  \"sources_one\": \"Quelle\",\n  \"sources_other\": \"Quellen ({{count}})\",\n  \"submitSearch\": \"Suche einreichen\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} Ergebnis\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} Ergebnisse\",\n  \"thankYouForYourFeedback\": \"Vielen Dank für Ihr Feedback!\",\n  \"thisAnsweredMyQuestion\": \"Das hat meine Frage beantwortet\",\n  \"thisDidNotAnswerMyQuestion\": \"Das hat meine Frage nicht beantwortet\",\n  \"unselectAnOptionToEnterInARange\": \"Wählen Sie eine Option ab, um einen Bereich einzugeben.\",\n  \"updateYourLocation\": \"Aktualisieren Sie Ihren Standort\",\n  \"useCurrentLocation\": \"Aktuellen Standort verwenden\",\n  \"useMyLocation\": \"Meinen Standort verwenden\",\n  \"viewAll\": \"Alle anzeigen\",\n  \"viewDetails\": \"Details anzeigen\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Απάντηση που δημιουργήθηκε από ΤΝ\",\n  \"allCategories\": \"Όλες οι κατηγορίες\",\n  \"appliedFiltersToCurrentSearch\": \"Εφαρμοσμένα φίλτρα στην τρέχουσα αναζήτηση\",\n  \"apply\": \"Εφαρμογή\",\n  \"applyFilters\": \"Εφαρμογή φίλτρων\",\n  \"autocompleteOptionsFound_one\": \"Βρέθηκε {{count}}{{label}} επιλογή αυτόματης συμπλήρωσης.\",\n  \"autocompleteOptionsFound_other\": \"Βρέθηκαν {{count}}{{label}} επιλογές αυτόματης συμπλήρωσης.\",\n  \"autocompleteSuggestion\": \"Πρόταση αυτόματης συμπλήρωσης: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"Βρέθηκε {{count}} πρόταση αυτόματης συμπλήρωσης.\",\n  \"autocompleteSuggestionsFound_other\": \"Βρέθηκαν {{count}} προτάσεις αυτόματης συμπλήρωσης.\",\n  \"basedOnYourDevice\": \" (με βάση τη συσκευή σας)\",\n  \"basedOnYourInternetAddress\": \" (με βάση τη διεύθυνση IP σας)\",\n  \"categoriesText_one\": \"Η παρακάτω κατηγορία έδωσε αποτελέσματα για - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Οι παρακάτω κατηγορίες έδωσαν αποτελέσματα για - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Καθάρισμα όλων\",\n  \"clearMinAndMax\": \"Καθάρισμα ελάχιστου και μέγιστου\",\n  \"clearTheRangeToSelectOptions\": \"Καθάρισε το εύρος για επιλογή επιλογών.\",\n  \"clearTheSearchBar\": \"Καθάρισε τη γραμμή αναζήτησης\",\n  \"conductASearch\": \"Διεξαγωγή αναζήτησης\",\n  \"currentLocation\": \"Τρέχουσα τοποθεσία\",\n  \"didYouMean\": \"Μήπως εννοούσατε <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Όταν είναι διαθέσιμα αποτελέσματα αυτόματης συμπλήρωσης, χρησιμοποιήστε τα βελάκια πάνω/κάτω για προεπισκόπηση και Enter για επιλογή.\",\n  \"feedback\": \"Σχόλια\",\n  \"filterGroupSearchInputLabel\": \"Αναζήτηση στις επιλογές {{title}}\",\n  \"invalidRange\": \"Άκυρο εύρος\",\n  \"max\": \"Μέγ.\",\n  \"min\": \"Ελάχ.\",\n  \"navigateToTheNextResultsPage\": \"Μετάβαση στην επόμενη σελίδα αποτελεσμάτων\",\n  \"navigateToThePreviousResultsPage\": \"Επιστροφή στην προηγούμενη σελίδα αποτελεσμάτων\",\n  \"noAutocompleteOptionsFound\": \"Δεν βρέθηκε καμία επιλογή αυτόματης συμπλήρωσης.\",\n  \"noAutocompleteSuggestionsFound\": \"Δεν βρέθηκε καμία πρόταση αυτόματης συμπλήρωσης.\",\n  \"noResultsFoundIn\": \"Δεν βρέθηκαν αποτελέσματα στο/στη {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"σελίδα {{pageNumber}}\",\n  \"pagination\": \"Σελιδοποίηση\",\n  \"readMoreAbout\": \"Διαβάστε περισσότερα για <a>{{name}}</a>\",\n  \"recentSearch\": \"πρόσφατη αναζήτηση: {{query}}\",\n  \"recentSearchesFound_one\": \"Βρέθηκε {{count}} πρόσφατη αναζήτηση.\",\n  \"recentSearchesFound_other\": \"Βρέθηκαν {{count}} πρόσφατες αναζητήσεις.\",\n  \"removeFilter\": \"Αφαίρεση φίλτρου «{{displayName}}»\",\n  \"resultPreview\": \"προεπισκόπηση αποτελέσματος: {{value}}\",\n  \"resultPreviewsFound_one\": \"Βρέθηκε {{count}} προεπισκόπηση αποτελέσματος.\",\n  \"resultPreviewsFound_other\": \"Βρέθηκαν {{count}} προεπισκοπήσεις αποτελεσμάτων.\",\n  \"resultsCountText_one\": \"{{count}} Αποτέλεσμα\",\n  \"resultsCountText_other\": \"{{count}} Αποτελέσματα\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} – {{paginateEnd}} από {{resultsCount}} Αποτελέσματα\",\n  \"searchHere\": \"Αναζήτησε εδώ…\",\n  \"showingAllInstead\": \"Δείχνωνται όλα τα/{{currentVerticalLabel}} αντ’ αυτού.\",\n  \"showLess\": \"Εμφάνιση λιγότερων\",\n  \"showMore\": \"Εμφάνιση περισσότερων\",\n  \"sources_one\": \"Πηγή\",\n  \"sources_other\": \"Πηγές ({{count}})\",\n  \"submitSearch\": \"Αναζήτηση\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} αποτέλεσμα\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} αποτελέσματα\",\n  \"thankYouForYourFeedback\": \"Ευχαριστούμε για τα σχόλιά σας!\",\n  \"thisAnsweredMyQuestion\": \"Αυτό απάντησε στην ερώτησή μου\",\n  \"thisDidNotAnswerMyQuestion\": \"Αυτό δεν απάντησε στην ερώτησή μου\",\n  \"unselectAnOptionToEnterInARange\": \"Αποεπιλογή μιας επιλογής για εισαγωγή σε εύρος.\",\n  \"updateYourLocation\": \"Ενημέρωσε την τοποθεσία σου\",\n  \"useCurrentLocation\": \"Χρήση τρέχουσας τοποθεσίας\",\n  \"useMyLocation\": \"Χρήση της τοποθεσίας μου\",\n  \"viewAll\": \"Δες όλα\",\n  \"viewDetails\": \"Δες λεπτομέρειες\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI Generated Answer\",\n  \"allCategories\": \"All Categories\",\n  \"appliedFiltersToCurrentSearch\": \"Applied filters to current search\",\n  \"apply\": \"Apply\",\n  \"applyFilters\": \"Apply Filters\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} autocomplete option found.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} autocomplete options found.\",\n  \"autocompleteSuggestion\": \"autocomplete suggestion: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} autocomplete suggestion found.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} autocomplete suggestions found.\",\n  \"basedOnYourDevice\": \" (based on your device)\",\n  \"basedOnYourInternetAddress\": \" (based on your internet address)\",\n  \"categoriesText_one\": \"The following category yielded results for - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"The following categories yielded results for - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Clear All\",\n  \"clearMinAndMax\": \"Clear min and max\",\n  \"clearTheRangeToSelectOptions\": \"Clear the range to select options.\",\n  \"clearTheSearchBar\": \"Clear the search bar\",\n  \"conductASearch\": \"Conduct a search\",\n  \"currentLocation\": \"Current Location\",\n  \"didYouMean\": \"Did you mean <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"When autocomplete results are available, use up and down arrows to review and enter to select.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Search {{title}} Options\",\n  \"invalidRange\": \"Invalid range\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Navigate to the next results page\",\n  \"navigateToThePreviousResultsPage\": \"Navigate to the previous results page\",\n  \"noAutocompleteOptionsFound\": \"0 autocomplete options found.\",\n  \"noAutocompleteSuggestionsFound\": \"0 autocomplete suggestions found.\",\n  \"noResultsFoundIn\": \"No results found in {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"page {{pageNumber}}\",\n  \"pagination\": \"Pagination\",\n  \"readMoreAbout\": \"Read more about <a>{{name}}</a>\",\n  \"recentSearch\": \"recent search: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} recent search found.\",\n  \"recentSearchesFound_other\": \"{{count}} recent searches found.\",\n  \"removeFilter\": \"Remove \\\"{{displayName}}\\\" filter\",\n  \"resultPreview\": \"result preview: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} result preview found.\",\n  \"resultPreviewsFound_other\": \"{{count}} recent previews found.\",\n  \"resultsCountText_one\": \"{{count}} Result\",\n  \"resultsCountText_other\": \"{{count}} Results\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} of {{resultsCount}} Results\",\n  \"searchHere\": \"Search here…\",\n  \"showingAllInstead\": \"Showing all {{currentVerticalLabel}} instead.\",\n  \"showLess\": \"Show Less\",\n  \"showMore\": \"Show More\",\n  \"sources_one\": \"Source\",\n  \"sources_other\": \"Sources ({{count}})\",\n  \"submitSearch\": \"Submit Search\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} result\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} results\",\n  \"thankYouForYourFeedback\": \"Thank you for your feedback!\",\n  \"thisAnsweredMyQuestion\": \"This answered my question\",\n  \"thisDidNotAnswerMyQuestion\": \"This did not answer my question\",\n  \"unselectAnOptionToEnterInARange\": \"Unselect an option to enter in a range.\",\n  \"updateYourLocation\": \"Update your location\",\n  \"useCurrentLocation\": \"Use Current Location\",\n  \"useMyLocation\": \"Use my location\",\n  \"viewAll\": \"View all\",\n  \"viewDetails\": \"View Details\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI Generated Answer\",\n  \"allCategories\": \"All Categories\",\n  \"appliedFiltersToCurrentSearch\": \"Applied filters to current search\",\n  \"apply\": \"Apply\",\n  \"applyFilters\": \"Apply Filters\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} autocomplete option found.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} autocomplete options found.\",\n  \"autocompleteSuggestion\": \"autocomplete suggestion: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} autocomplete suggestion found.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} autocomplete suggestions found.\",\n  \"basedOnYourDevice\": \" (based on your device)\",\n  \"basedOnYourInternetAddress\": \" (based on your internet address)\",\n  \"categoriesText_one\": \"The following category yielded results for - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"The following categories yielded results for - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Clear All\",\n  \"clearMinAndMax\": \"Clear min and max\",\n  \"clearTheRangeToSelectOptions\": \"Clear the range to select options.\",\n  \"clearTheSearchBar\": \"Clear the search bar\",\n  \"conductASearch\": \"Conduct a search\",\n  \"currentLocation\": \"Current Location\",\n  \"didYouMean\": \"Did you mean <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"When autocomplete results are available, use up and down arrows to review and enter to select.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Search {{title}} Options\",\n  \"invalidRange\": \"Invalid range\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Navigate to the next results page\",\n  \"navigateToThePreviousResultsPage\": \"Navigate to the previous results page\",\n  \"noAutocompleteOptionsFound\": \"0 autocomplete options found.\",\n  \"noAutocompleteSuggestionsFound\": \"0 autocomplete suggestions found.\",\n  \"noResultsFoundIn\": \"No results found in {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"page {{pageNumber}}\",\n  \"pagination\": \"Pagination\",\n  \"readMoreAbout\": \"Read more about <a>{{name}}</a>\",\n  \"recentSearch\": \"recent search: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} recent search found.\",\n  \"recentSearchesFound_other\": \"{{count}} recent searches found.\",\n  \"removeFilter\": \"Remove \\\"{{displayName}}\\\" filter\",\n  \"resultPreview\": \"result preview: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} result preview found.\",\n  \"resultPreviewsFound_other\": \"{{count}} recent previews found.\",\n  \"resultsCountText_one\": \"{{count}} Result\",\n  \"resultsCountText_other\": \"{{count}} Results\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} of {{resultsCount}} Results\",\n  \"searchHere\": \"Search here...\",\n  \"showingAllInstead\": \"Showing all {{currentVerticalLabel}} instead.\",\n  \"showLess\": \"Show Less\",\n  \"showMore\": \"Show More\",\n  \"sources_one\": \"Source\",\n  \"sources_other\": \"Sources ({{count}})\",\n  \"submitSearch\": \"Submit Search\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} result\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} results\",\n  \"thankYouForYourFeedback\": \"Thank you for your feedback!\",\n  \"thisAnsweredMyQuestion\": \"This answered my question\",\n  \"thisDidNotAnswerMyQuestion\": \"This did not answer my question\",\n  \"unselectAnOptionToEnterInARange\": \"Unselect an option to enter in a range.\",\n  \"updateYourLocation\": \"Update your location\",\n  \"useCurrentLocation\": \"Use Current Location\",\n  \"useMyLocation\": \"Use my location\",\n  \"viewAll\": \"View all\",\n  \"viewDetails\": \"View Details\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Respuesta generada por IA\",\n  \"allCategories\": \"Todas las categorías\",\n  \"appliedFiltersToCurrentSearch\": \"Filtros aplicados a la búsqueda actual\",\n  \"apply\": \"Aplicar\",\n  \"applyFilters\": \"Aplicar filtros\",\n  \"autocompleteOptionsFound_many\": \"{{count}}{{label}} opciones de autocompletado encontradas.\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} opción de autocompletado encontrada.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} opciones de autocompletado encontradas.\",\n  \"autocompleteSuggestion\": \"sugerencia de autocompleto: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_many\": \"{{count}} sugerencias de autocompletado encontradas.\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} sugerencia de autocompletado encontrada.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} sugerencias de autocompletado encontradas.\",\n  \"basedOnYourDevice\": \" (basado en tu dispositivo)\",\n  \"basedOnYourInternetAddress\": \" (basado en tu dirección de internet)\",\n  \"categoriesText_one\": \"La siguiente categoría produjo resultados para - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Las siguientes categorías produjeron resultados para - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Borrar todo\",\n  \"clearMinAndMax\": \"Borrar mínimo y máximo\",\n  \"clearTheRangeToSelectOptions\": \"Borrar el rango para seleccionar opciones.\",\n  \"clearTheSearchBar\": \"Borrar la barra de búsqueda\",\n  \"conductASearch\": \"Realizar una búsqueda\",\n  \"currentLocation\": \"Ubicación Actual\",\n  \"didYouMean\": \"Quisiste decir <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Cuando haya resultados de autocompletar, usa las flechas arriba y abajo para revisar y entra para seleccionar.\",\n  \"feedback\": \"Comentarios\",\n  \"filterGroupSearchInputLabel\": \"Buscar opciones de {{title}}\",\n  \"invalidRange\": \"Rango no válido\",\n  \"max\": \"Máx.\",\n  \"min\": \"Mín.\",\n  \"navigateToTheNextResultsPage\": \"Navegue a la página de resultados del siguiente\",\n  \"navigateToThePreviousResultsPage\": \"Navegue a la página de resultados anterior\",\n  \"noAutocompleteOptionsFound\": \"0 Opciones de autocompletar encontradas.\",\n  \"noAutocompleteSuggestionsFound\": \"0 Sugerencias de autocompletar encontradas.\",\n  \"noResultsFoundIn\": \"No se encontraron resultados en {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"página {{pageNumber}}\",\n  \"pagination\": \"Paginación\",\n  \"readMoreAbout\": \"Leer más sobre <a>{{name}}</a>\",\n  \"recentSearch\": \"búsqueda reciente: {{query}}\",\n  \"recentSearchesFound_many\": \"{{count}} búsquedas recientes encontradas.\",\n  \"recentSearchesFound_one\": \"{{count}} búsqueda reciente encontrada.\",\n  \"recentSearchesFound_other\": \"{{count}} búsquedas recientes encontradas.\",\n  \"removeFilter\": \"Quitar el filtro «{{displayName}}»\",\n  \"resultPreview\": \"vista previa de resultados: {{value}}\",\n  \"resultPreviewsFound_many\": \"{{count}} vistas previas de resultados encontradas.\",\n  \"resultPreviewsFound_one\": \"{{count}} vista previa de resultado encontrada.\",\n  \"resultPreviewsFound_other\": \"{{count}} vistas previas de resultados encontradas.\",\n  \"resultsCountText_many\": \"{{count}} resultados\",\n  \"resultsCountText_one\": \"{{count}} resultado\",\n  \"resultsCountText_other\": \"{{count}} resultados\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} de {{resultsCount}} resultados\",\n  \"searchHere\": \"Buscar aquí…\",\n  \"showingAllInstead\": \"Mostrando todos los {{currentVerticalLabel}} en su lugar.\",\n  \"showLess\": \"Mostrar Menos\",\n  \"showMore\": \"Mostrar Más\",\n  \"sources_many\": \"Fuentes ({{count}})\",\n  \"sources_one\": \"Fuente\",\n  \"sources_other\": \"Fuentes ({{count}})\",\n  \"submitSearch\": \"Enviar búsqueda\",\n  \"suggestionResultsCount_many\": \"{{label}} - {{count}} resultados\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} resultado\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} resultados\",\n  \"thankYouForYourFeedback\": \"¡Gracias por tus comentarios!\",\n  \"thisAnsweredMyQuestion\": \"Esto respondió mi pregunta\",\n  \"thisDidNotAnswerMyQuestion\": \"Esto no respondió mi pregunta\",\n  \"unselectAnOptionToEnterInARange\": \"Deselecciona una opción para ingresar un rango.\",\n  \"updateYourLocation\": \"Actualiza tu ubicación\",\n  \"useCurrentLocation\": \"Usar Ubicación Actual\",\n  \"useMyLocation\": \"Usar mi ubicación\",\n  \"viewAll\": \"Ver todo\",\n  \"viewDetails\": \"Ver detalles\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Tehisintellekti loodud vastus\",\n  \"allCategories\": \"Kõik kategooriad\",\n  \"appliedFiltersToCurrentSearch\": \"Rakendatud filtrid praegusele otsingule\",\n  \"apply\": \"Rakendama\",\n  \"applyFilters\": \"Rakenda filtrid\",\n  \"autocompleteOptionsFound_one\": \"Leiti {{count}}{{label}} automaatse täitmise valik.\",\n  \"autocompleteOptionsFound_other\": \"Leiti {{count}}{{label}} automaatse täitmise valikut.\",\n  \"autocompleteSuggestion\": \"automaatse täitmise soovitus: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"Leiti {{count}} automaatse täitmise soovitus.\",\n  \"autocompleteSuggestionsFound_other\": \"Leiti {{count}} automaatse täitmise soovitust.\",\n  \"basedOnYourDevice\": \" (põhineb sinu seadmel)\",\n  \"basedOnYourInternetAddress\": \" (põhineb sinu internetiaadressil)\",\n  \"categoriesText_one\": \"Järgmine kategooria andis tulemusi päringu jaoks – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Järgmised kategooriad andsid tulemusi päringu jaoks – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Puhastama kõik\",\n  \"clearMinAndMax\": \"Tühjenda miinimum ja maksimum\",\n  \"clearTheRangeToSelectOptions\": \"Valikute valimiseks tühjendage vahemik.\",\n  \"clearTheSearchBar\": \"Tühjendage otsinguriba\",\n  \"conductASearch\": \"Otsingut tegema\",\n  \"currentLocation\": \"Praegune asukoht\",\n  \"didYouMean\": \"Kas mõtlesite <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Kui automaattäite tulemused on saadaval, kasuta üles-/allanooleid eelvaateks ja Enterit valimiseks.\",\n  \"feedback\": \"Tagasiside\",\n  \"filterGroupSearchInputLabel\": \"Otsi {{title}} valikute seast\",\n  \"invalidRange\": \"Kehtetu vahemik\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Liikuge järgmisele tulemuste lehele\",\n  \"navigateToThePreviousResultsPage\": \"Liikuge eelmise tulemuste lehele\",\n  \"noAutocompleteOptionsFound\": \"0 leitud automaatse täitmise valikud.\",\n  \"noAutocompleteSuggestionsFound\": \"0 leitud automaatse täitmise ettepanekuid.\",\n  \"noResultsFoundIn\": \"Tulemusi ei leitud kategoorias {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"leht {{pageNumber}}\",\n  \"pagination\": \"Lehekülgede navigeerimine\",\n  \"readMoreAbout\": \"Loe rohkem: <a>{{name}}</a>\",\n  \"recentSearch\": \"hiljutine otsing: {{query}}\",\n  \"recentSearchesFound_one\": \"Leiti {{count}} hiljutine otsing.\",\n  \"recentSearchesFound_other\": \"Leiti {{count}} hiljutist otsingut.\",\n  \"removeFilter\": \"Eemalda filter „{{displayName}}”\",\n  \"resultPreview\": \"tulemuse eelvaade: {{value}}\",\n  \"resultPreviewsFound_one\": \"Leiti {{count}} tulemuse eelvaade.\",\n  \"resultPreviewsFound_other\": \"Leiti {{count}} tulemuse eelvaateid.\",\n  \"resultsCountText_one\": \"{{count}} tulemust\",\n  \"resultsCountText_other\": \"{{count}} tulemust\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} – {{paginateEnd}} / {{resultsCount}} tulemust\",\n  \"searchHere\": \"Otsige siit…\",\n  \"showingAllInstead\": \"Näidatakse hoopis kõiki kategooriaid {{currentVerticalLabel}}.\",\n  \"showLess\": \"Näita vähem\",\n  \"showMore\": \"Näita rohkem\",\n  \"sources_one\": \"Allikas\",\n  \"sources_other\": \"Allikad ({{krahv}})\",\n  \"submitSearch\": \"Otsingut esitama\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} tulemus\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} tulemust\",\n  \"thankYouForYourFeedback\": \"Täname teie tagasiside eest!\",\n  \"thisAnsweredMyQuestion\": \"See vastas minu küsimusele\",\n  \"thisDidNotAnswerMyQuestion\": \"See ei vastanud minu küsimusele\",\n  \"unselectAnOptionToEnterInARange\": \"Valiku tühistamiseks sisestage vahemik.\",\n  \"updateYourLocation\": \"Värskendage oma asukohta\",\n  \"useCurrentLocation\": \"Kasuta praegust asukohta\",\n  \"useMyLocation\": \"Kasuta minu asukohta\",\n  \"viewAll\": \"Vaata kõiki\",\n  \"viewDetails\": \"Vaadake üksikasju\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Tekoälyn luoma vastaus\",\n  \"allCategories\": \"Kaikki kategoriat\",\n  \"appliedFiltersToCurrentSearch\": \"Käytetyt suodattimet nykyiseen hakuun\",\n  \"apply\": \"Käytä\",\n  \"applyFilters\": \"Käytä suodattimia\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} automaattista ehdotusta löytyi.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} automaattista ehdotusta löytyi.\",\n  \"autocompleteSuggestion\": \"automaattinen ehdotus: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} automaattinen ehdotus löytyi.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} automaattista ehdotusta löytyi.\",\n  \"basedOnYourDevice\": \" (perustuu laitteeseesi)\",\n  \"basedOnYourInternetAddress\": \" (perustuu internet-osoitteeseesi)\",\n  \"categoriesText_one\": \"Seuraava kategoria antoi tuloksia hakusanalle - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Seuraavat kategoriat antoivat tuloksia hakusanalle - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Tyhjennä kaikki\",\n  \"clearMinAndMax\": \"Tyhjennä minimi ja maksimi\",\n  \"clearTheRangeToSelectOptions\": \"Tyhjennä valintaväli.\",\n  \"clearTheSearchBar\": \"Tyhjennä hakupalkki\",\n  \"conductASearch\": \"Tee haku\",\n  \"currentLocation\": \"Nykyinen sijainti\",\n  \"didYouMean\": \"Tarkoititko <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Kun automaattiset tulokset ovat saatavilla, käytä nuolinäppäimiä selaamiseen ja Enteriä valitsemiseen.\",\n  \"feedback\": \"Palaute\",\n  \"filterGroupSearchInputLabel\": \"Hae {{title}}-vaihtoehdoista\",\n  \"invalidRange\": \"Virheellinen väli\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Siirry seuraavalle tulossivulle\",\n  \"navigateToThePreviousResultsPage\": \"Siirry edelliselle tulossivulle\",\n  \"noAutocompleteOptionsFound\": \"0 automaattista ehdotusta löytyi.\",\n  \"noAutocompleteSuggestionsFound\": \"0 automaattista ehdotusta löytyi.\",\n  \"noResultsFoundIn\": \"Tuloksia ei löytynyt kohdasta {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"sivu {{pageNumber}}\",\n  \"pagination\": \"Sivutus\",\n  \"readMoreAbout\": \"Lue lisää aiheesta <a>{{name}}</a>\",\n  \"recentSearch\": \"viimeisin haku: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} viimeisin haku löytyi.\",\n  \"recentSearchesFound_other\": \"{{count}} viimeisintä hakua löytyi.\",\n  \"removeFilter\": \"Poista suodatin \\\"{{displayName}}\\\"\",\n  \"resultPreview\": \"tuloksen esikatselu: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} tuloksen esikatselu löytyi.\",\n  \"resultPreviewsFound_other\": \"{{count}} tuloksen esikatselua löytyi.\",\n  \"resultsCountText_one\": \"{{count}} tulos\",\n  \"resultsCountText_other\": \"{{count}} tulosta\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} / {{resultsCount}} tulosta\",\n  \"searchHere\": \"Hae tästä…\",\n  \"showingAllInstead\": \"Näytetään kaikki kohteessa {{currentVerticalLabel}} sen sijaan.\",\n  \"showLess\": \"Näytä vähemmän\",\n  \"showMore\": \"Näytä lisää\",\n  \"sources_one\": \"Lähde\",\n  \"sources_other\": \"Lähteet ({{count}})\",\n  \"submitSearch\": \"Lähetä haku\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} tulos\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} tulosta\",\n  \"thankYouForYourFeedback\": \"Kiitos palautteestasi!\",\n  \"thisAnsweredMyQuestion\": \"Tämä vastasi kysymykseeni\",\n  \"thisDidNotAnswerMyQuestion\": \"Tämä ei vastannut kysymykseeni\",\n  \"unselectAnOptionToEnterInARange\": \"Poista valinta päästäksesi syöttämään välin.\",\n  \"updateYourLocation\": \"Päivitä sijaintisi\",\n  \"useCurrentLocation\": \"Käytä nykyistä sijaintia\",\n  \"useMyLocation\": \"Käytä sijaintiani\",\n  \"viewAll\": \"Näytä kaikki\",\n  \"viewDetails\": \"Näytä tiedot\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Réponse générée par l'IA\",\n  \"allCategories\": \"Toutes les catégories\",\n  \"appliedFiltersToCurrentSearch\": \"Filtres appliqués à la recherche actuelle\",\n  \"apply\": \"Appliquer\",\n  \"applyFilters\": \"Appliquer les filtres\",\n  \"autocompleteOptionsFound_many\": \"{{count}} options d'autocomplétion{{label}} trouvées.\",\n  \"autocompleteOptionsFound_one\": \"{{count}} option d'autocomplétion{{label}} trouvée.\",\n  \"autocompleteOptionsFound_other\": \"{{count}} options d'autocomplétion{{label}} trouvées.\",\n  \"autocompleteSuggestion\": \"suggestion de saisie semi-automatique: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_many\": \"{{count}} suggestions d'autocomplétion trouvées.\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} suggestion d'autocomplétion trouvée.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} suggestions d'autocomplétion trouvées.\",\n  \"basedOnYourDevice\": \" (basé sur votre appareil)\",\n  \"basedOnYourInternetAddress\": \" (basé sur votre adresse Internet)\",\n  \"categoriesText_one\": \"La catégorie suivante a donné des résultats pour - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Les catégories suivantes ont donné des résultats pour - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Effacer tout\",\n  \"clearMinAndMax\": \"Effacer min et max\",\n  \"clearTheRangeToSelectOptions\": \"Effacer la plage pour sélectionner les options.\",\n  \"clearTheSearchBar\": \"Effacer la barre de recherche\",\n  \"conductASearch\": \"Effectuer une recherche\",\n  \"currentLocation\": \"Localisation actuelle\",\n  \"didYouMean\": \"Vouliez-vous dire <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Lorsque des résultats de saisie semi-automatique sont disponibles, utilisez les flèches haut et bas pour naviguer et appuyez sur Entrée pour sélectionner.\",\n  \"feedback\": \"Retour\",\n  \"filterGroupSearchInputLabel\": \"Rechercher parmi les options de {{title}}\",\n  \"invalidRange\": \"Gamme non valide\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Accédez à la page de résultats suivante\",\n  \"navigateToThePreviousResultsPage\": \"Accédez à la page de résultats précédents\",\n  \"noAutocompleteOptionsFound\": \"0 option de saisie semi-automatique trouvée.\",\n  \"noAutocompleteSuggestionsFound\": \"0 suggestion de saisie semi-automatique trouvées.\",\n  \"noResultsFoundIn\": \"Aucun résultat trouvé dans {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"page {{pageNumber}}\",\n  \"pagination\": \"Pagination\",\n  \"readMoreAbout\": \"En savoir plus sur <a>{{name}}</a>\",\n  \"recentSearch\": \"recherche récente : {{query}}\",\n  \"recentSearchesFound_many\": \"{{count}} recherches récentes trouvées.\",\n  \"recentSearchesFound_one\": \"{{count}} recherche récente trouvée.\",\n  \"recentSearchesFound_other\": \"{{count}} recherches récentes trouvées.\",\n  \"removeFilter\": \"Supprimer le filtre «{{displayName}}»\",\n  \"resultPreview\": \"aperçu du résultat: {{value}}\",\n  \"resultPreviewsFound_many\": \"{{count}} aperçus de résultats trouvés.\",\n  \"resultPreviewsFound_one\": \"{{count}} aperçu de résultat trouvé.\",\n  \"resultPreviewsFound_other\": \"{{count}} aperçus de résultats trouvés.\",\n  \"resultsCountText_many\": \"{{count}} résultats\",\n  \"resultsCountText_one\": \"{{count}} résultat\",\n  \"resultsCountText_other\": \"{{count}} résultats\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} sur {{resultsCount}} résultats\",\n  \"searchHere\": \"Recherche ici…\",\n  \"showingAllInstead\": \"Affichage de tous les {{currentVerticalLabel}} à la place.\",\n  \"showLess\": \"Afficher moins\",\n  \"showMore\": \"Afficher plus\",\n  \"sources_many\": \"Sources ({{count}})\",\n  \"sources_one\": \"Source\",\n  \"sources_other\": \"Sources ({{count}})\",\n  \"submitSearch\": \"Soumettre la recherche\",\n  \"suggestionResultsCount_many\": \"{{label}} - {{count}} résultats\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} résultat\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} résultats\",\n  \"thankYouForYourFeedback\": \"Merci pour votre retour !\",\n  \"thisAnsweredMyQuestion\": \"Cela a répondu à ma question\",\n  \"thisDidNotAnswerMyQuestion\": \"Cela n'a pas répondu à ma question\",\n  \"unselectAnOptionToEnterInARange\": \"Désélectionnez une option pour saisir une plage.\",\n  \"updateYourLocation\": \"Mettez à jour votre emplacement\",\n  \"useCurrentLocation\": \"Utiliser la localisation actuelle\",\n  \"useMyLocation\": \"Utiliser ma localisation\",\n  \"viewAll\": \"Afficher tous\",\n  \"viewDetails\": \"Afficher les détails\"\n}\n","{\n  \"aiGeneratedAnswer\": \"एआई द्वारा जनरेट किया गया उत्तर\",\n  \"allCategories\": \"सभी श्रेणियाँ\",\n  \"appliedFiltersToCurrentSearch\": \"वर्तमान खोज पर लागू फ़िल्टर\",\n  \"apply\": \"लागू करें\",\n  \"applyFilters\": \"फ़िल्टर लागू करें\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} स्वतः पूर्ति विकल्प मिला।\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} स्वतः पूर्ति विकल्प मिले।\",\n  \"autocompleteSuggestion\": \"स्वतः पूर्ति सुझाव: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} स्वतः पूर्ति सुझाव मिला।\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} स्वतः पूर्ति सुझाव मिले।\",\n  \"basedOnYourDevice\": \" (आपके डिवाइस के आधार पर)\",\n  \"basedOnYourInternetAddress\": \" (आपके इंटरनेट पते के आधार पर)\",\n  \"categoriesText_one\": \"निम्नलिखित श्रेणी में परिणाम मिले - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"निम्नलिखित श्रेणियों में परिणाम मिले - <strong>{{query}}</strong>\",\n  \"clearAll\": \"सभी साफ़ करें\",\n  \"clearMinAndMax\": \"न्यूनतम और अधिकतम साफ़ करें\",\n  \"clearTheRangeToSelectOptions\": \"विकल्प चुनने के लिए सीमा साफ़ करें।\",\n  \"clearTheSearchBar\": \"खोज बार साफ़ करें\",\n  \"conductASearch\": \"खोज करें\",\n  \"currentLocation\": \"वर्तमान स्थान\",\n  \"didYouMean\": \"क्या आपका मतलब <button>{{correctedQuery}}</button> था\",\n  \"dropDownScreenReaderInstructions\": \"जब स्वतः पूर्ण परिणाम उपलब्ध हों, तो समीक्षा के लिए ऊपर और नीचे के तीर कुंजी का उपयोग करें और चयन के लिए एंटर दबाएं।\",\n  \"feedback\": \"प्रतिक्रिया\",\n  \"filterGroupSearchInputLabel\": \"{{title}} विकल्प खोजें\",\n  \"invalidRange\": \"अमान्य सीमा\",\n  \"max\": \"अधिकतम\",\n  \"min\": \"न्यूनतम\",\n  \"navigateToTheNextResultsPage\": \"अगले परिणाम पृष्ठ पर जाएं\",\n  \"navigateToThePreviousResultsPage\": \"पिछले परिणाम पृष्ठ पर जाएं\",\n  \"noAutocompleteOptionsFound\": \"कोई स्वतः पूर्ति विकल्प नहीं मिला।\",\n  \"noAutocompleteSuggestionsFound\": \"कोई स्वतः पूर्ति सुझाव नहीं मिला।\",\n  \"noResultsFoundIn\": \"{{currentVerticalLabel}} में कोई परिणाम नहीं मिला।\",\n  \"paginationPage\": \"पृष्ठ {{pageNumber}}\",\n  \"pagination\": \"पृष्ठांकन\",\n  \"readMoreAbout\": \"<a>{{name}}</a> के बारे में और पढ़ें\",\n  \"recentSearch\": \"हाल की खोज: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} हाल की खोज मिली।\",\n  \"recentSearchesFound_other\": \"{{count}} हाल की खोज मिलीं।\",\n  \"removeFilter\": \"“{{displayName}}“ फ़िल्टर हटाएं\",\n  \"resultPreview\": \"परिणाम पूर्वावलोकन: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} परिणाम पूर्वावलोकन मिला।\",\n  \"resultPreviewsFound_other\": \"{{count}} परिणाम पूर्वावलोकन मिले।\",\n  \"resultsCountText_one\": \"{{count}} परिणाम\",\n  \"resultsCountText_other\": \"{{count}} परिणाम\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} में से कुल {{resultsCount}} परिणाम\",\n  \"searchHere\": \"यहाँ खोजें…\",\n  \"showingAllInstead\": \"इसके बजाय सभी {{currentVerticalLabel}} दिखा रहे हैं।\",\n  \"showLess\": \"कम दिखाएँ\",\n  \"showMore\": \"और दिखाएँ\",\n  \"sources_one\": \"स्रोत\",\n  \"sources_other\": \"स्रोत ({{count}})\",\n  \"submitSearch\": \"खोज जमा करें\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} परिणाम\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} परिणाम\",\n  \"thankYouForYourFeedback\": \"आपकी प्रतिक्रिया के लिए धन्यवाद!\",\n  \"thisAnsweredMyQuestion\": \"इससे मेरे प्रश्न का उत्तर मिला\",\n  \"thisDidNotAnswerMyQuestion\": \"इससे मेरे प्रश्न का उत्तर नहीं मिला\",\n  \"unselectAnOptionToEnterInARange\": \"सीमा दर्ज करने के लिए विकल्प अनचेक करें।\",\n  \"updateYourLocation\": \"अपना स्थान अपडेट करें\",\n  \"useCurrentLocation\": \"वर्तमान स्थान का उपयोग करें\",\n  \"useMyLocation\": \"मेरा स्थान उपयोग करें\",\n  \"viewAll\": \"सभी देखें\",\n  \"viewDetails\": \"विवरण देखें\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI generirani odgovor\",\n  \"allCategories\": \"Sve kategorije\",\n  \"appliedFiltersToCurrentSearch\": \"Primijenjeni filtri na trenutnu pretragu\",\n  \"apply\": \"Primijeni\",\n  \"applyFilters\": \"Primijeni filtere\",\n  \"autocompleteOptionsFound_few\": \"Pronađene su {{count}}{{label}} opcije za automatsko dovršavanje.\",\n  \"autocompleteOptionsFound_one\": \"Pronađena je {{count}}{{label}} opcija za automatsko dovršavanje.\",\n  \"autocompleteOptionsFound_other\": \"Pronađeno je {{count}}{{label}} opcija za automatsko dovršavanje.\",\n  \"autocompleteSuggestion\": \"prijedlog za automatsko dovršavanje: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"Pronađena su {{count}} prijedloga za automatsko dovršavanje.\",\n  \"autocompleteSuggestionsFound_one\": \"Pronađen je {{count}} prijedlog za automatsko dovršavanje.\",\n  \"autocompleteSuggestionsFound_other\": \"Pronađeno je {{count}} prijedloga za automatsko dovršavanje.\",\n  \"basedOnYourDevice\": \" (na temelju vašeg uređaja)\",\n  \"basedOnYourInternetAddress\": \" (na temelju vaše internet adrese)\",\n  \"categoriesText_few\": \"Sljedeće kategorije dale su rezultate za - <strong>{{query}}</strong>\",\n  \"categoriesText_one\": \"Sljedeća kategorija dala je rezultate za - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Sljedeće kategorije dale su rezultate za - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Očisti sve\",\n  \"clearMinAndMax\": \"Očisti min i max\",\n  \"clearTheRangeToSelectOptions\": \"Očistite raspon za odabir opcija.\",\n  \"clearTheSearchBar\": \"Očistite traku za pretraživanje\",\n  \"conductASearch\": \"Provesti pretragu\",\n  \"currentLocation\": \"Trenutna lokacija\",\n  \"didYouMean\": \"Jeste li mislili na <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Kad su dostupni rezultati automatskog dovršavanja, koristite strelice gore i dolje za pregled i Enter za odabir.\",\n  \"feedback\": \"Povratne informacije\",\n  \"filterGroupSearchInputLabel\": \"Pretraži opcije za {{title}}\",\n  \"invalidRange\": \"Nevažeći raspon\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Dođite do sljedeće stranice rezultata\",\n  \"navigateToThePreviousResultsPage\": \"Dođite do stranice s prethodnim rezultatima\",\n  \"noAutocompleteOptionsFound\": \"Nije pronađena 0 opcija automatskog dovršavanja.\",\n  \"noAutocompleteSuggestionsFound\": \"Nije pronađen 0 prijedloga za automatsko dovršavanje.\",\n  \"noResultsFoundIn\": \"Nema rezultata u {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"stranica {{pageNumber}}\",\n  \"pagination\": \"Paginacija\",\n  \"readMoreAbout\": \"Pročitaj više o <a>{{name}}</a>\",\n  \"recentSearch\": \"nedavno pretraživanje: {{query}}\",\n  \"recentSearchesFound_few\": \"Pronađene su {{count}} nedavne pretrage.\",\n  \"recentSearchesFound_one\": \"Pronađena je {{count}} nedavna pretraga.\",\n  \"recentSearchesFound_other\": \"Pronađeno je {{count}} nedavnih pretraga.\",\n  \"removeFilter\": \"Ukloni filtar „{{displayName}}“\",\n  \"resultPreview\": \"pregled rezultata: {{value}}\",\n  \"resultPreviewsFound_few\": \"Pronađena su {{count}} pregleda rezultata.\",\n  \"resultPreviewsFound_one\": \"Pronađen je {{count}} pregled rezultata.\",\n  \"resultPreviewsFound_other\": \"Pronađeno je {{count}} pregleda rezultata.\",\n  \"resultsCountText_few\": \"{{count}} rezultata\",\n  \"resultsCountText_one\": \"{{count}} rezultat\",\n  \"resultsCountText_other\": \"{{count}} rezultata\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} od {{resultsCount}} rezultata\",\n  \"searchHere\": \"Pretražite ovdje…\",\n  \"showingAllInstead\": \"Prikazuju se svi {{currentVerticalLabel}} umjesto toga.\",\n  \"showLess\": \"Prikaži manje\",\n  \"showMore\": \"Prikaži više\",\n  \"sources_few\": \"Izvora ({{count}})\",\n  \"sources_one\": \"Izvor\",\n  \"sources_other\": \"Izvori ({{count}})\",\n  \"submitSearch\": \"Pošaljite pretragu\",\n  \"suggestionResultsCount_few\": \"{{label}} - {{count}} rezultata\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} rezultat\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} rezultata\",\n  \"thankYouForYourFeedback\": \"Hvala na vašoj povratnoj informaciji!\",\n  \"thisAnsweredMyQuestion\": \"Ovo je odgovorilo na moje pitanje\",\n  \"thisDidNotAnswerMyQuestion\": \"Ovo nije odgovorilo na moje pitanje\",\n  \"unselectAnOptionToEnterInARange\": \"Poništite odabir opcije da biste unijeli raspon.\",\n  \"updateYourLocation\": \"Ažurirajte svoje mjesto\",\n  \"useCurrentLocation\": \"Koristi trenutnu lokaciju\",\n  \"useMyLocation\": \"Koristi moju lokaciju\",\n  \"viewAll\": \"Pogledajte sve\",\n  \"viewDetails\": \"Pogledajte detalje\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI generált válasz\",\n  \"allCategories\": \"Összes kategória\",\n  \"appliedFiltersToCurrentSearch\": \"Alkalmazott szűrők az aktuális keresésre\",\n  \"apply\": \"Alkalmaz\",\n  \"applyFilters\": \"Szűrők alkalmazása\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} automatikus kiegészítési opció található.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} automatikus kiegészítési opció található.\",\n  \"autocompleteSuggestion\": \"automatikus kiegészítési javaslat: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} automatikus javaslat található.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} automatikus javaslat található.\",\n  \"basedOnYourDevice\": \" (a készülék alapján)\",\n  \"basedOnYourInternetAddress\": \" (az internetes cím alapján)\",\n  \"categoriesText_one\": \"Az alábbi kategória adott találatot erre: - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Az alábbi kategóriák adtak találatot erre: - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Tisztítsa meg az összeset\",\n  \"clearMinAndMax\": \"Töröld a minimumot és maximumot\",\n  \"clearTheRangeToSelectOptions\": \"Törölje az Opciók kiválasztásához a tartományt.\",\n  \"clearTheSearchBar\": \"Törölje a keresősávot\",\n  \"conductASearch\": \"Kutatást végez\",\n  \"currentLocation\": \"Jelenlegi helyzet\",\n  \"didYouMean\": \"Ezt szerette volna: <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Ha automatikus kiegészítési eredmények érhetők el, használd a fel/le nyilakat a böngészéshez, és az Entert a kiválasztáshoz.\",\n  \"feedback\": \"Visszacsatolás\",\n  \"filterGroupSearchInputLabel\": \"Keresés a(z) {{title}} lehetőségei között\",\n  \"invalidRange\": \"Érvénytelen hatótávolság\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Keresse meg a következő eredményoldalt\",\n  \"navigateToThePreviousResultsPage\": \"Keresse meg az előző eredményoldalt\",\n  \"noAutocompleteOptionsFound\": \"0 automatikus kiegészítési lehetőség található.\",\n  \"noAutocompleteSuggestionsFound\": \"0 automatikus kiegészítési javaslat található.\",\n  \"noResultsFoundIn\": \"Nem találhatók találatok a(z) {{currentVerticalLabel}}-ben.\",\n  \"paginationPage\": \"{{pageNumber}}. oldal\",\n  \"pagination\": \"Lapozás\",\n  \"readMoreAbout\": \"Olvass többet erről: <a>{{name}}</a>\",\n  \"recentSearch\": \"legutóbbi keresés: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} legutóbbi keresés található.\",\n  \"recentSearchesFound_other\": \"{{count}} legutóbbi keresés található.\",\n  \"removeFilter\": \"„{{displayName}}“ szűrő eltávolítása\",\n  \"resultPreview\": \"találati előnézete: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} találati előnézet található.\",\n  \"resultPreviewsFound_other\": \"{{count}} találati előnézet található.\",\n  \"resultsCountText_one\": \"{{count}} találat\",\n  \"resultsCountText_other\": \"{{count}} találat\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} / összesen {{resultsCount}} találat\",\n  \"searchHere\": \"Keressen itt…\",\n  \"showingAllInstead\": \"Helyette az összes {{currentVerticalLabel}} megjelenítése.\",\n  \"showLess\": \"Kevesebb mutatása\",\n  \"showMore\": \"Több mutatása\",\n  \"sources_one\": \"Forrás ({{count}})\",\n  \"sources_other\": \"Források ({{count}})\",\n  \"submitSearch\": \"Küldje el a keresést\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} találat\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} találat\",\n  \"thankYouForYourFeedback\": \"Köszönjük a visszajelzését!\",\n  \"thisAnsweredMyQuestion\": \"Ez megválaszolta a kérdésemet\",\n  \"thisDidNotAnswerMyQuestion\": \"Ez nem válaszolta meg a kérdésemet\",\n  \"unselectAnOptionToEnterInARange\": \"Töröljön egy jelölést a tartomány megadásához.\",\n  \"updateYourLocation\": \"Frissítse a tartózkodási helyét\",\n  \"useCurrentLocation\": \"Használd a jelenlegi helyzetet\",\n  \"useMyLocation\": \"Használd a helyzetemet\",\n  \"viewAll\": \"Tekintse meg az összeset\",\n  \"viewDetails\": \"A részletek megtekintése\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Risposta generata dall'IA\",\n  \"allCategories\": \"Tutte le categorie\",\n  \"appliedFiltersToCurrentSearch\": \"Filtri applicati alla ricerca corrente\",\n  \"apply\": \"Applica\",\n  \"applyFilters\": \"Applica filtri\",\n  \"autocompleteOptionsFound_many\": \"{{count}}{{label}} opzioni di completamento automatico trovate.\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} opzione di completamento automatico trovata.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} opzioni di completamento automatico trovate.\",\n  \"autocompleteSuggestion\": \"suggerimento di completamento automatico: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_many\": \"{{count}} suggerimenti di completamento automatico trovati.\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} suggerimento di completamento automatico trovato.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} suggerimenti di completamento automatico trovati.\",\n  \"basedOnYourDevice\": \" (basato sul tuo dispositivo)\",\n  \"basedOnYourInternetAddress\": \" (basato sul tuo indirizzo internet)\",\n  \"categoriesText_one\": \"La seguente categoria ha prodotto risultati per – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Le seguenti categorie hanno prodotto risultati per – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Cancella tutto\",\n  \"clearMinAndMax\": \"Cancella min e max\",\n  \"clearTheRangeToSelectOptions\": \"Cancella l'intervallo per selezionare le opzioni.\",\n  \"clearTheSearchBar\": \"Cancella la barra di ricerca\",\n  \"conductASearch\": \"Condurre una ricerca\",\n  \"currentLocation\": \"Posizione attuale\",\n  \"didYouMean\": \"Volevi dire <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Quando sono disponibili i risultati di completamento automatico, usa le frecce su e giù per rivedere e invio per selezionare.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Cerca tra le opzioni di {{title}}\",\n  \"invalidRange\": \"Gamma non valida\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Passare alla pagina dei risultati successivi\",\n  \"navigateToThePreviousResultsPage\": \"Passare alla pagina dei risultati precedenti\",\n  \"noAutocompleteOptionsFound\": \"0 opzioni di completamento automatico trovate.\",\n  \"noAutocompleteSuggestionsFound\": \"0 suggerimenti di completamento automatico trovati.\",\n  \"noResultsFoundIn\": \"Nessun risultato trovato in {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"pagina {{pageNumber}}\",\n  \"pagination\": \"Paginazione\",\n  \"readMoreAbout\": \"Leggi di più su <a>{{name}}</a>\",\n  \"recentSearch\": \"ricerca recente: {{query}}\",\n  \"recentSearchesFound_many\": \"{{count}} ricerche recenti trovate.\",\n  \"recentSearchesFound_one\": \"{{count}} ricerca recente trovata.\",\n  \"recentSearchesFound_other\": \"{{count}} ricerche recenti trovate.\",\n  \"removeFilter\": \"Rimuovi il filtro «{{displayName}}»\",\n  \"resultPreview\": \"anteprima dei risultati: {{value}}\",\n  \"resultPreviewsFound_many\": \"{{count}} anteprime dei risultati trovate.\",\n  \"resultPreviewsFound_one\": \"{{count}} anteprima del risultato trovata.\",\n  \"resultPreviewsFound_other\": \"{{count}} anteprime dei risultati trovate.\",\n  \"resultsCountText_many\": \"{{count}} risultati\",\n  \"resultsCountText_one\": \"{{count}} risultato\",\n  \"resultsCountText_other\": \"{{count}} risultati\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} di {{resultsCount}} risultati\",\n  \"searchHere\": \"Cerca qui…\",\n  \"showingAllInstead\": \"Mostrando invece tutti i {{currentVerticalLabel}}.\",\n  \"showLess\": \"Mostra meno\",\n  \"showMore\": \"Mostra di più\",\n  \"sources_many\": \"Fonti ({{count}})\",\n  \"sources_one\": \"Fonte\",\n  \"sources_other\": \"Fonti ({{count}})\",\n  \"submitSearch\": \"Invia la ricerca\",\n  \"suggestionResultsCount_many\": \"{{label}} – {{count}} risultati\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} risultato\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} risultati\",\n  \"thankYouForYourFeedback\": \"Grazie per il tuo feedback!\",\n  \"thisAnsweredMyQuestion\": \"Questa risposta ha risolto il mio dubbio\",\n  \"thisDidNotAnswerMyQuestion\": \"Questa risposta non ha risolto il mio dubbio\",\n  \"unselectAnOptionToEnterInARange\": \"Deseleziona un’opzione per inserire un intervallo.\",\n  \"updateYourLocation\": \"Aggiorna la tua posizione\",\n  \"useCurrentLocation\": \"Usa la posizione attuale\",\n  \"useMyLocation\": \"Usa la mia posizione\",\n  \"viewAll\": \"Visualizza tutto\",\n  \"viewDetails\": \"Visualizza i dettagli\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI生成された回答\",\n  \"allCategories\": \"すべてのカテゴリー\",\n  \"appliedFiltersToCurrentSearch\": \"現在の検索に適用されたフィルター\",\n  \"apply\": \"適用\",\n  \"applyFilters\": \"フィルターを適用\",\n  \"autocompleteOptionsFound_other\": \"{{label}}のオートコンプリート候補が{{count}}件見つかりました。\",\n  \"autocompleteSuggestion\": \"オートコンプリートの提案：{{suggestion}}\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} 件のオートコンプリート候補が見つかりました。\",\n  \"basedOnYourDevice\": \"（デバイスに基づく）\",\n  \"basedOnYourInternetAddress\": \"（インターネットアドレスに基づく）\",\n  \"categoriesText_other\": \"次のカテゴリでは、 -  <strong> {{query}} </strong>の結果が得られました\",\n  \"clearAll\": \"すべてをクリアします\",\n  \"clearMinAndMax\": \"最小値と最大値をクリア\",\n  \"clearTheRangeToSelectOptions\": \"範囲をクリアしてオプションを選択します。\",\n  \"clearTheSearchBar\": \"検索バーをクリアします\",\n  \"conductASearch\": \"検索を実施します\",\n  \"currentLocation\": \"現在地\",\n  \"didYouMean\": \"<button>{{correctedQuery}}</button> と言いたかったですか\",\n  \"dropDownScreenReaderInstructions\": \"オートコンプリート結果が利用可能な場合、↑↓キーで選択し、Enter キーで選択。\",\n  \"feedback\": \"フィードバック\",\n  \"filterGroupSearchInputLabel\": \"{{title}} のオプションを検索\",\n  \"invalidRange\": \"無効な範囲\",\n  \"max\": \"最大\",\n  \"min\": \"最小\",\n  \"navigateToTheNextResultsPage\": \"次の結果ページに移動します\",\n  \"navigateToThePreviousResultsPage\": \"前の結果ページに移動します\",\n  \"noAutocompleteOptionsFound\": \"オートコンプリート オプションが 0 件見つかりました。\",\n  \"noAutocompleteSuggestionsFound\": \"オートコンプリート候補が 0 件見つかりました。\",\n  \"noResultsFoundIn\": \"{{currentVerticalLabel}}で結果が見つかりませんでした。\",\n  \"paginationPage\": \"{{pageNumber}}ページ\",\n  \"pagination\": \"ページネーション\",\n  \"readMoreAbout\": \"<a>{{name}}</a> について詳しく読む\",\n  \"recentSearch\": \"最近の検索：{{query}}\",\n  \"recentSearchesFound_other\": \"{{count}} 件の最近の検索が見つかりました。\",\n  \"removeFilter\": \"「{{displayName}}」 フィルターを削除\",\n  \"resultPreview\": \"結果プレビュー：{{value}}\",\n  \"resultPreviewsFound_other\": \"{{count}} 件の結果プレビューが見つかりました。\",\n  \"resultsCountText_other\": \"{{count}}件\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}〜{{paginateEnd}}／全{{resultsCount}}件\",\n  \"searchHere\": \"ここで検索…\",\n  \"showingAllInstead\": \"代わりにすべての{{currentVerticalLabel}}を表示しています。\",\n  \"showLess\": \"折りたたむ\",\n  \"showMore\": \"もっと見る\",\n  \"sources_other\": \"出典（{{count}}）\",\n  \"submitSearch\": \"検索を送信します\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} 件の結果\",\n  \"thankYouForYourFeedback\": \"ご意見ありがとうございます！\",\n  \"thisAnsweredMyQuestion\": \"この回答で疑問が解決しました\",\n  \"thisDidNotAnswerMyQuestion\": \"この回答では疑問が解決しませんでした\",\n  \"unselectAnOptionToEnterInARange\": \"範囲を入力するには、選択を解除してください。\",\n  \"updateYourLocation\": \"あなたの場所を更新します\",\n  \"useCurrentLocation\": \"現在地を使用\",\n  \"useMyLocation\": \"現在地を使用\",\n  \"viewAll\": \"すべてを表示します\",\n  \"viewDetails\": \"詳細を表示します\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI 생성 답변\",\n  \"allCategories\": \"전체 카테고리\",\n  \"appliedFiltersToCurrentSearch\": \"현재 검색에 적용된 필터\",\n  \"apply\": \"적용\",\n  \"applyFilters\": \"필터 적용\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}}개의 자동완성 옵션을 찾았습니다.\",\n  \"autocompleteSuggestion\": \"자동완성 제안: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}}개의 자동완성 제안을 찾았습니다.\",\n  \"basedOnYourDevice\": \" (기기 기준)\",\n  \"basedOnYourInternetAddress\": \" (인터넷 주소 기준)\",\n  \"categoriesText_other\": \"다음 카테고리에서 결과가 나타났습니다: <strong>{{query}}</strong>\",\n  \"clearAll\": \"모두 지우기\",\n  \"clearMinAndMax\": \"최소값 및 최대값 지우기\",\n  \"clearTheRangeToSelectOptions\": \"범위를 지워 옵션을 선택하세요.\",\n  \"clearTheSearchBar\": \"검색창 지우기\",\n  \"conductASearch\": \"검색 실행\",\n  \"currentLocation\": \"현재 위치\",\n  \"didYouMean\": \"다음을 찾으셨나요 <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"자동완성 결과가 있을 때 위/아래 화살표로 탐색하고 Enter 키로 선택하세요.\",\n  \"feedback\": \"피드백\",\n  \"filterGroupSearchInputLabel\": \"{{title}} 옵션 검색\",\n  \"invalidRange\": \"잘못된 범위입니다\",\n  \"max\": \"최대\",\n  \"min\": \"최소\",\n  \"navigateToTheNextResultsPage\": \"다음 결과 페이지로 이동\",\n  \"navigateToThePreviousResultsPage\": \"이전 결과 페이지로 이동\",\n  \"noAutocompleteOptionsFound\": \"자동완성 옵션이 없습니다.\",\n  \"noAutocompleteSuggestionsFound\": \"자동완성 제안이 없습니다.\",\n  \"noResultsFoundIn\": \"{{currentVerticalLabel}}에서 결과를 찾을 수 없습니다.\",\n  \"paginationPage\": \"{{pageNumber}}페이지\",\n  \"pagination\": \"페이지네이션\",\n  \"readMoreAbout\": \"<a>{{name}}</a>에 대해 더 읽기\",\n  \"recentSearch\": \"최근 검색: {{query}}\",\n  \"recentSearchesFound_other\": \"{{count}}개의 최근 검색어가 있습니다.\",\n  \"removeFilter\": \"「{{displayName}}」필터 제거\",\n  \"resultPreview\": \"결과 미리보기: {{value}}\",\n  \"resultPreviewsFound_other\": \"{{count}}개의 미리보기를 찾았습니다.\",\n  \"resultsCountText_other\": \"{{count}}개 결과\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} / 총 {{resultsCount}}개 결과\",\n  \"searchHere\": \"여기에 검색…\",\n  \"showingAllInstead\": \"{{currentVerticalLabel}} 전체를 표시하고 있습니다.\",\n  \"showLess\": \"간략히 보기\",\n  \"showMore\": \"더 보기\",\n  \"sources_other\": \"출처 ({{count}})\",\n  \"submitSearch\": \"검색\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}}개 결과\",\n  \"thankYouForYourFeedback\": \"피드백 감사합니다!\",\n  \"thisAnsweredMyQuestion\": \"질문에 대한 답변이 되었습니다\",\n  \"thisDidNotAnswerMyQuestion\": \"질문에 대한 답변이 아닙니다\",\n  \"unselectAnOptionToEnterInARange\": \"범위를 입력하려면 선택을 취소하세요.\",\n  \"updateYourLocation\": \"위치 업데이트\",\n  \"useCurrentLocation\": \"현재 위치 사용\",\n  \"useMyLocation\": \"내 위치 사용\",\n  \"viewAll\": \"전체 보기\",\n  \"viewDetails\": \"자세히 보기\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Dirbtinio intelekto sugeneruotas atsakymas\",\n  \"allCategories\": \"Visos kategorijos\",\n  \"appliedFiltersToCurrentSearch\": \"Taikyti filtrai dabartiniam paieškai\",\n  \"apply\": \"Taikyti\",\n  \"applyFilters\": \"Taikyti filtrus\",\n  \"autocompleteOptionsFound_few\": \"Rastos {{count}}{{label}} automatinio užbaigimo parinktys.\",\n  \"autocompleteOptionsFound_many\": \"Rasta {{count}}{{label}} automatinio užbaigimo parinkčių.\",\n  \"autocompleteOptionsFound_one\": \"Rasta {{count}}{{label}} automatinio užbaigimo parinktis.\",\n  \"autocompleteOptionsFound_other\": \"Rasta {{count}}{{label}} automatinio užbaigimo parinkčių.\",\n  \"autocompleteSuggestion\": \"automatinis užbaigimas pasiūlymas: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"Rasti {{count}} automatinio užbaigimo pasiūlymai.\",\n  \"autocompleteSuggestionsFound_many\": \"Rasta {{count}} automatinio užbaigimo pasiūlymų.\",\n  \"autocompleteSuggestionsFound_one\": \"Rastas {{count}} automatinio užbaigimo pasiūlymas.\",\n  \"autocompleteSuggestionsFound_other\": \"Rasta {{count}} automatinio užbaigimo pasiūlymų.\",\n  \"basedOnYourDevice\": \" (remiantis jūsų įrenginiu)\",\n  \"basedOnYourInternetAddress\": \" (remiantis jūsų interneto adresu)\",\n  \"categoriesText_few\": \"Šios kategorijos pateikė rezultatus – <strong>{{query}}</strong>\",\n  \"categoriesText_one\": \"Ši kategorija pateikė rezultatus – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Šių kategorijų pateikta rezultatų – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Išvalyti viską\",\n  \"clearMinAndMax\": \"Išvalyti min ir max\",\n  \"clearTheRangeToSelectOptions\": \"Išvalykite diapazoną, kurį galite pasirinkti parinktys.\",\n  \"clearTheSearchBar\": \"Išvalykite paieškos juostą\",\n  \"conductASearch\": \"Atlikite paiešką\",\n  \"currentLocation\": \"Dabartinė vieta\",\n  \"didYouMean\": \"Ar turėjote omenyje <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Kai yra automatinio užbaigimo rezultatai, naudokite rodykles aukštyn ir žemyn naršymui ir Enter pasirinkimui.\",\n  \"feedback\": \"Atsiliepimai\",\n  \"filterGroupSearchInputLabel\": \"Ieškoti {{title}} parinkčių\",\n  \"invalidRange\": \"Neteisingas diapazonas\",\n  \"max\": \"Maks.\",\n  \"min\": \"Min.\",\n  \"navigateToTheNextResultsPage\": \"Eikite į kitą rezultatų puslapį\",\n  \"navigateToThePreviousResultsPage\": \"Eikite į ankstesnį rezultatų puslapį\",\n  \"noAutocompleteOptionsFound\": \"0 automaatse täitmise valikut ei leitud.\",\n  \"noAutocompleteSuggestionsFound\": \"0 automaatse täitmise soovitust ei leitud.\",\n  \"noResultsFoundIn\": \"Rezultatų nerasta {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"{{pageNumber}} puslapis\",\n  \"pagination\": \"Puslapiavimas\",\n  \"readMoreAbout\": \"Skaityti daugiau apie <a>{{name}}</a>\",\n  \"recentSearch\": \"Naujausia paieška: {{query}}\",\n  \"recentSearchesFound_few\": \"Rastos {{count}} neseniai atliktos paieškos.\",\n  \"recentSearchesFound_many\": \"Rasta {{count}} neseniai atliktų paieškų.\",\n  \"recentSearchesFound_one\": \"Rasta {{count}} neseniai atlikta paieška.\",\n  \"recentSearchesFound_other\": \"Rasta {{count}} neseniai atliktų paieškų.\",\n  \"removeFilter\": \"Pašalinti filtrą: „{{displayName}}“\",\n  \"resultPreview\": \"rezultato peržiūra: {{value}}\",\n  \"resultPreviewsFound_few\": \"Rastos {{count}} rezultatų peržiūros.\",\n  \"resultPreviewsFound_many\": \"Rasta {{count}} rezultatų peržiūrų.\",\n  \"resultPreviewsFound_one\": \"Rasta {{count}} rezultatų peržiūra.\",\n  \"resultPreviewsFound_other\": \"Rasta {{count}} rezultatų peržiūrų.\",\n  \"resultsCountText_few\": \"{{count}} rezultatai\",\n  \"resultsCountText_many\": \"{{count}} rezultatų\",\n  \"resultsCountText_one\": \"{{count}} rezultatas\",\n  \"resultsCountText_other\": \"{{count}} rezultatų\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} iš {{resultsCount}} rezultatų\",\n  \"searchHere\": \"Ieškokite čia…\",\n  \"showingAllInstead\": \"Vietoje to rodomi visi {{currentVerticalLabel}}.\",\n  \"showLess\": \"Rodyti mažiau\",\n  \"showMore\": \"Rodyti daugiau\",\n  \"sources_few\": \"Šaltiniai ({{count}})\",\n  \"sources_many\": \"Šaltinių ({{count}})\",\n  \"sources_one\": \"Šaltinis\",\n  \"sources_other\": \"Šaltinių ({{count}})\",\n  \"submitSearch\": \"Pateikti paiešką\",\n  \"suggestionResultsCount_few\": \"{{label}} – {{count}} rezultatai\",\n  \"suggestionResultsCount_many\": \"{{label}} – {{count}} rezultatų\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} rezultatas\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} rezultatų\",\n  \"thankYouForYourFeedback\": \"Ačiū už jūsų atsiliepimus!\",\n  \"thisAnsweredMyQuestion\": \"Tai atsakė į mano klausimą\",\n  \"thisDidNotAnswerMyQuestion\": \"Tai neatsakė į mano klausimą\",\n  \"unselectAnOptionToEnterInARange\": \"Atžymėkite parinktį, kad galėtumėte įvesti intervalą.\",\n  \"updateYourLocation\": \"Atnaujinkite savo vietą\",\n  \"useCurrentLocation\": \"Naudoti dabartinę vietą\",\n  \"useMyLocation\": \"Naudoti mano vietą\",\n  \"viewAll\": \"Peržiūrėti visus\",\n  \"viewDetails\": \"Peržiūrėti išsamią informaciją\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI ģenerēta atbilde\",\n  \"allCategories\": \"Visas kategorijas\",\n  \"appliedFiltersToCurrentSearch\": \"Pielietotie filtri pašreizējai meklēšanai\",\n  \"apply\": \"Pielietot\",\n  \"applyFilters\": \"Pielietot filtrus\",\n  \"autocompleteOptionsFound_one\": \"Atrasta {{count}}{{label}} automātiskās aizpildes iespēja.\",\n  \"autocompleteOptionsFound_other\": \"Atrastas {{count}}{{label}} automātiskās aizpildes iespējas.\",\n  \"autocompleteOptionsFound_zero\": \"Nav atrasta neviena{{label}} automātiskās aizpildes iespējas.\",\n  \"autocompleteSuggestion\": \"automātiskās pabeigšanas ieteikums: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"Atrasts {{count}} automātās aizpildes ieteikums.\",\n  \"autocompleteSuggestionsFound_other\": \"Atrasti {{count}} automātiskās aizpildes ieteikumi.\",\n  \"autocompleteSuggestionsFound_zero\": \"Atrasti {{count}} automātiskās aizpildes ieteikumi.\",\n  \"basedOnYourDevice\": \" (balstoties uz jūsu ierīci)\",\n  \"basedOnYourInternetAddress\": \" (balstoties uz jūsu interneta adresi)\",\n  \"categoriesText_one\": \"Nākamā kategorija deva rezultātus priekš – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Nākamo kategoriju skaits deva rezultātus priekš – <strong>{{query}}</strong>\",\n  \"categoriesText_zero\": \"Nav neviena rezultāta kategorijai – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Notīrīt visu\",\n  \"clearMinAndMax\": \"Notīrīt min un max\",\n  \"clearTheRangeToSelectOptions\": \"Notīriet diapazonu, lai izvēlētos opcijas.\",\n  \"clearTheSearchBar\": \"Notīriet meklēšanas joslu\",\n  \"conductASearch\": \"Veikt meklēšanu\",\n  \"currentLocation\": \"Pašreizējā atrašanās vieta\",\n  \"didYouMean\": \"Vai jūs domājāt <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Kad ir pieejami automātiskās pabeigšanas rezultāti, izmantojiet bultiņas uz augšu un leju, lai pārlūkotu, un Enter, lai izvēlētos.\",\n  \"feedback\": \"Atsauksmes\",\n  \"filterGroupSearchInputLabel\": \"Meklēt {{title}} opcijās\",\n  \"invalidRange\": \"Nederīgs diapazons\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Dodieties uz nākamo rezultātu lapu\",\n  \"navigateToThePreviousResultsPage\": \"Dodieties uz iepriekšējo rezultātu lapu\",\n  \"noAutocompleteOptionsFound\": \"Atrasta 0 automātiskās pabeigšanas opcija.\",\n  \"noAutocompleteSuggestionsFound\": \"Atrasti 0 automātiskās pabeigšanas ieteikumi.\",\n  \"noResultsFoundIn\": \"Rezultāti nav atrasti {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"{{pageNumber}}. lapa\",\n  \"pagination\": \"Lappuļošana\",\n  \"readMoreAbout\": \"Lasīt vairāk par <a>{{name}}</a>\",\n  \"recentSearch\": \"nesenā meklēšana: {{query}}\",\n  \"recentSearchesFound_one\": \"Atrasta {{count}} nesenā meklēšana.\",\n  \"recentSearchesFound_other\": \"Atrastas {{count}} nesenās meklēšanas.\",\n  \"recentSearchesFound_zero\": \"Atrastas {{count}} nesenās meklēšanas.\",\n  \"removeFilter\": \"Noņemt filtru: „{{displayName}}“\",\n  \"resultPreview\": \"rezultāta priekšskatījums: {{value}}\",\n  \"resultPreviewsFound_one\": \"Atrasts {{count}} rezultātu priekšskatījums.\",\n  \"resultPreviewsFound_other\": \"Atrastas {{count}} rezultātu priekšskatījumi.\",\n  \"resultPreviewsFound_zero\": \"Atrastas {{count}} rezultātu priekšskatījumi.\",\n  \"resultsCountText_one\": \"{{count}} rezultāts\",\n  \"resultsCountText_other\": \"{{count}} rezultāti\",\n  \"resultsCountText_zero\": \"{{count}} rezultātu\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} no {{resultsCount}} rezultātiem\",\n  \"searchHere\": \"Meklēt šeit…\",\n  \"showingAllInstead\": \"Tiek rādīti visi {{currentVerticalLabel}}.\",\n  \"showLess\": \"Rādīt mazāk\",\n  \"showMore\": \"Rādīt vairāk\",\n  \"sources_one\": \"Avots\",\n  \"sources_other\": \"Avoti ({{count}})\",\n  \"sources_zero\": \"Avoti nav pieejami\",\n  \"submitSearch\": \"Iesniegt meklēšanu\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} rezultāts\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} rezultātu\",\n  \"suggestionResultsCount_zero\": \"{{label}} – nav rezultātu\",\n  \"thankYouForYourFeedback\": \"Paldies par jūsu atsauksmēm!\",\n  \"thisAnsweredMyQuestion\": \"Šis atbildēja uz manu jautājumu\",\n  \"thisDidNotAnswerMyQuestion\": \"Šis neatbildēja uz manu jautājumu\",\n  \"unselectAnOptionToEnterInARange\": \"Atceļiet izvēli, lai ievadītu diapazonu.\",\n  \"updateYourLocation\": \"Atjauniniet savu atrašanās vietu\",\n  \"useCurrentLocation\": \"Izmantot pašreizējo atrašanās vietu\",\n  \"useMyLocation\": \"Izmantot manu atrašanās vietu\",\n  \"viewAll\": \"Skatīt visu\",\n  \"viewDetails\": \"Skatīt informāciju\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI-generert svar\",\n  \"allCategories\": \"Alle kategorier\",\n  \"appliedFiltersToCurrentSearch\": \"Brukte filtre for gjeldende søk\",\n  \"apply\": \"Bruk\",\n  \"applyFilters\": \"Bruk filtre\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} autofullføringsvalg funnet.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} autofullføringsvalg funnet.\",\n  \"autocompleteSuggestion\": \"autofullføringsforslag: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} autofullføringsforslag funnet.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} autofullføringsforslag funnet.\",\n  \"basedOnYourDevice\": \" (basert på enheten din)\",\n  \"basedOnYourInternetAddress\": \" (basert på din internettadresse)\",\n  \"categoriesText_one\": \"Følgende kategori ga resultater for – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Følgende kategorier ga resultater for – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Fjern alt\",\n  \"clearMinAndMax\": \"Fjern min og maks\",\n  \"clearTheRangeToSelectOptions\": \"Fjern området for å velge alternativer.\",\n  \"clearTheSearchBar\": \"Tøm søkefeltet\",\n  \"conductASearch\": \"Utfør et søk\",\n  \"currentLocation\": \"Nåværende posisjon\",\n  \"didYouMean\": \"Mente du <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Når autofullføringsresultater er tilgjengelige, bruk opp- og nedpiler for å bla gjennom og enter for å velge.\",\n  \"feedback\": \"Tilbakemelding\",\n  \"filterGroupSearchInputLabel\": \"Søk i alternativer for {{title}}\",\n  \"invalidRange\": \"Ugyldig område\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Gå til neste resultatside\",\n  \"navigateToThePreviousResultsPage\": \"Gå til forrige resultatside\",\n  \"noAutocompleteOptionsFound\": \"0 autofullføringsvalg funnet.\",\n  \"noAutocompleteSuggestionsFound\": \"0 autofullføringsforslag funnet.\",\n  \"noResultsFoundIn\": \"Ingen resultater funnet i {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"side {{pageNumber}}\",\n  \"pagination\": \"Sideinndeling\",\n  \"readMoreAbout\": \"Les mer om <a>{{name}}</a>\",\n  \"recentSearch\": \"siste søk: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} siste søk funnet.\",\n  \"recentSearchesFound_other\": \"{{count}} siste søk funnet.\",\n  \"removeFilter\": \"Fjern filteret “{{displayName}}”\",\n  \"resultPreview\": \"resultatforhåndsvisning: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} resultatforhåndsvisning funnet.\",\n  \"resultPreviewsFound_other\": \"{{count}} resultatforhåndsvisninger funnet.\",\n  \"resultsCountText_one\": \"{{count}} resultat\",\n  \"resultsCountText_other\": \"{{count}} resultater\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} av {{resultsCount}} resultater\",\n  \"searchHere\": \"Søk her…\",\n  \"showingAllInstead\": \"Viser alle {{currentVerticalLabel}} i stedet.\",\n  \"showLess\": \"Vis mindre\",\n  \"showMore\": \"Vis mer\",\n  \"sources_one\": \"Kilde\",\n  \"sources_other\": \"Kilder ({{count}})\",\n  \"submitSearch\": \"Send søk\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} resultat\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} resultater\",\n  \"thankYouForYourFeedback\": \"Takk for tilbakemeldingen!\",\n  \"thisAnsweredMyQuestion\": \"Dette besvarte spørsmålet mitt\",\n  \"thisDidNotAnswerMyQuestion\": \"Dette besvarte ikke spørsmålet mitt\",\n  \"unselectAnOptionToEnterInARange\": \"Fjern valg for å angi et område.\",\n  \"updateYourLocation\": \"Oppdater plasseringen din\",\n  \"useCurrentLocation\": \"Bruk nåværende posisjon\",\n  \"useMyLocation\": \"Bruk min posisjon\",\n  \"viewAll\": \"Se alle\",\n  \"viewDetails\": \"Se detaljer\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI gegenereerd antwoord\",\n  \"allCategories\": \"Alle categorieën\",\n  \"appliedFiltersToCurrentSearch\": \"Toegepaste filters op de huidige zoekopdracht\",\n  \"apply\": \"Toepassen\",\n  \"applyFilters\": \"Filters toepassen\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} automatisch aanvulsuggestie gevonden.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} automatisch aanvulsuggesties gevonden.\",\n  \"autocompleteSuggestion\": \"automatisch aanvultip: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} automatisch aanvultip gevonden.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} automatisch aanvultips gevonden.\",\n  \"basedOnYourDevice\": \" (gebaseerd op je apparaat)\",\n  \"basedOnYourInternetAddress\": \" (gebaseerd op je internetadres)\",\n  \"categoriesText_one\": \"De volgende categorie leverde resultaten op voor - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"De volgende categorieën leverden resultaten op voor - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Alles wissen\",\n  \"clearMinAndMax\": \"Min en max wissen\",\n  \"clearTheRangeToSelectOptions\": \"Wis het bereik om opties te selecteren.\",\n  \"clearTheSearchBar\": \"Zoekbalk wissen\",\n  \"conductASearch\": \"Een zoekopdracht uitvoeren\",\n  \"currentLocation\": \"Huidige locatie\",\n  \"didYouMean\": \"Bedoelde je <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Wanneer automatische aanvulresultaten beschikbaar zijn, gebruik de pijltjestoetsen omhoog en omlaag om te navigeren en Enter om te selecteren.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Zoek in opties voor {{title}}\",\n  \"invalidRange\": \"Ongeldig bereik\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Navigeer naar de volgende resultatenpagina\",\n  \"navigateToThePreviousResultsPage\": \"Navigeer naar de vorige resultatenpagina\",\n  \"noAutocompleteOptionsFound\": \"0 automatisch aanvulopties gevonden.\",\n  \"noAutocompleteSuggestionsFound\": \"0 automatisch aanvultips gevonden.\",\n  \"noResultsFoundIn\": \"Geen resultaten gevonden in {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"pagina {{pageNumber}}\",\n  \"pagination\": \"Paginering\",\n  \"readMoreAbout\": \"Lees meer over <a>{{name}}</a>\",\n  \"recentSearch\": \"recente zoekopdracht: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} recente zoekopdracht gevonden.\",\n  \"recentSearchesFound_other\": \"{{count}} recente zoekopdrachten gevonden.\",\n  \"removeFilter\": \"Filter „{{displayName}}“ verwijderen\",\n  \"resultPreview\": \"resultaatvoorbeeld: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} resultaatvoorbeeld gevonden.\",\n  \"resultPreviewsFound_other\": \"{{count}} resultaatvoorbeelden gevonden.\",\n  \"resultsCountText_one\": \"{{count}} resultaat\",\n  \"resultsCountText_other\": \"{{count}} resultaten\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} van {{resultsCount}} resultaten\",\n  \"searchHere\": \"Hier zoeken…\",\n  \"showingAllInstead\": \"Toont in plaats daarvan alle {{currentVerticalLabel}}.\",\n  \"showLess\": \"Minder weergeven\",\n  \"showMore\": \"Meer weergeven\",\n  \"sources_one\": \"Bron\",\n  \"sources_other\": \"Bronnen ({{count}})\",\n  \"submitSearch\": \"Zoekopdracht versturen\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} resultaat\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} resultaten\",\n  \"thankYouForYourFeedback\": \"Bedankt voor je feedback!\",\n  \"thisAnsweredMyQuestion\": \"Dit beantwoordde mijn vraag\",\n  \"thisDidNotAnswerMyQuestion\": \"Dit beantwoordde mijn vraag niet\",\n  \"unselectAnOptionToEnterInARange\": \"Deselecteer een optie om een bereik in te voeren.\",\n  \"updateYourLocation\": \"Werk je locatie bij\",\n  \"useCurrentLocation\": \"Gebruik huidige locatie\",\n  \"useMyLocation\": \"Gebruik mijn locatie\",\n  \"viewAll\": \"Bekijk alles\",\n  \"viewDetails\": \"Bekijk details\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI wygenerowało odpowiedź\",\n  \"allCategories\": \"Wszystkie kategorie\",\n  \"appliedFiltersToCurrentSearch\": \"Zastosowane filtry do bieżącego wyszukiwania\",\n  \"apply\": \"Zastosuj\",\n  \"applyFilters\": \"Zastosuj filtry\",\n  \"autocompleteOptionsFound_few\": \"Znaleziono {{count}}{{label}} opcje autouzupełniania.\",\n  \"autocompleteOptionsFound_many\": \"Znaleziono {{count}}{{label}} opcji autouzupełniania.\",\n  \"autocompleteOptionsFound_one\": \"Znaleziono {{count}}{{label}} opcję autouzupełniania.\",\n  \"autocompleteOptionsFound_other\": \"Znaleziono {{count}}{{label}} opcji autouzupełniania.\",\n  \"autocompleteSuggestion\": \"sugestia autouzupełniania: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"Znaleziono {{count}} sugestie autouzupełniania.\",\n  \"autocompleteSuggestionsFound_many\": \"Znaleziono {{count}} sugestii autouzupełniania.\",\n  \"autocompleteSuggestionsFound_one\": \"Znaleziono {{count}} sugestię autouzupełniania.\",\n  \"autocompleteSuggestionsFound_other\": \"Znaleziono {{count}} sugestii autouzupełniania.\",\n  \"basedOnYourDevice\": \" (na podstawie Twojego urządzenia)\",\n  \"basedOnYourInternetAddress\": \" (na podstawie Twojego adresu internetowego)\",\n  \"categoriesText_few\": \"Następujące kategorie zwróciły wyniki dla – <strong>{{query}}</strong>\",\n  \"categoriesText_one\": \"Następująca kategoria zwróciła wyniki dla – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Następujących kategorii zwróciło wyniki dla – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Wyczyść wszystko\",\n  \"clearMinAndMax\": \"Wyczyść min i max\",\n  \"clearTheRangeToSelectOptions\": \"Wyczyść zakres, aby wybrać opcje.\",\n  \"clearTheSearchBar\": \"Wyczyść pasek wyszukiwania\",\n  \"conductASearch\": \"Przeprowadzić wyszukiwanie\",\n  \"currentLocation\": \"Aktualna lokalizacja\",\n  \"didYouMean\": \"Czy chodziło Ci o <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Gdy dostępne są wyniki autouzupełniania, użyj strzałek w górę i w dół, aby przejrzeć, a enter, aby wybrać.\",\n  \"feedback\": \"Informacja zwrotna\",\n  \"filterGroupSearchInputLabel\": \"Szukaj w opcjach {{title}}\",\n  \"invalidRange\": \"Nieprawidłowy zasięg\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Przejdź do strony następnych wyników\",\n  \"navigateToThePreviousResultsPage\": \"Przejdź do strony poprzednich wyników\",\n  \"noAutocompleteOptionsFound\": \"Znaleziono 0 opcji autouzupełniania.\",\n  \"noAutocompleteSuggestionsFound\": \"Znaleziono 0 sugestii autouzupełniania.\",\n  \"noResultsFoundIn\": \"Nie znaleziono wyników w {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"strona {{pageNumber}}\",\n  \"pagination\": \"Paginacja\",\n  \"readMoreAbout\": \"Czytaj więcej o <a>{{name}}</a>\",\n  \"recentSearch\": \"najnowsze wyszukiwanie: {{query}}\",\n  \"recentSearchesFound_few\": \"Znaleziono {{count}} ostatnie wyszukiwania.\",\n  \"recentSearchesFound_many\": \"Znaleziono {{count}} ostatnich wyszukiwań.\",\n  \"recentSearchesFound_one\": \"Znaleziono {{count}} ostatnie wyszukiwanie.\",\n  \"recentSearchesFound_other\": \"Znaleziono {{count}} ostatnich wyszukiwań.\",\n  \"removeFilter\": \"Usuń filtr „{{displayName}}“\",\n  \"resultPreview\": \"podgląd wyników: {{value}}\",\n  \"resultPreviewsFound_few\": \"Znaleziono {{count}} podglądy wyników.\",\n  \"resultPreviewsFound_many\": \"Znaleziono {{count}} podglądów wyników.\",\n  \"resultPreviewsFound_one\": \"Znaleziono {{count}} podgląd wyniku.\",\n  \"resultPreviewsFound_other\": \"Znaleziono {{count}} podglądów wyników.\",\n  \"resultsCountText_few\": \"{{count}} wyniki\",\n  \"resultsCountText_many\": \"{{count}} wyników\",\n  \"resultsCountText_one\": \"{{count}} wynik\",\n  \"resultsCountText_other\": \"{{count}} wyników\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} z {{resultsCount}} wyników\",\n  \"searchHere\": \"Wyszukaj tutaj…\",\n  \"showingAllInstead\": \"Wyświetlam wszystkie {{currentVerticalLabel}} zamiast tego.\",\n  \"showLess\": \"Pokaż mniej\",\n  \"showMore\": \"Pokaż więcej\",\n  \"sources_few\": \"Źródła ({{count}})\",\n  \"sources_many\": \"Źródeł ({{count}})\",\n  \"sources_one\": \"Źródło\",\n  \"sources_other\": \"Źródeł ({{count}})\",\n  \"submitSearch\": \"Prześlij wyszukiwanie\",\n  \"suggestionResultsCount_few\": \"{{label}} – {{count}} wyniki\",\n  \"suggestionResultsCount_many\": \"{{label}} – {{count}} wyników\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} wynik\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} wyników\",\n  \"thankYouForYourFeedback\": \"Dziękujemy za Twoją opinię!\",\n  \"thisAnsweredMyQuestion\": \"To odpowiedziało na moje pytanie\",\n  \"thisDidNotAnswerMyQuestion\": \"To nie odpowiedziało na moje pytanie\",\n  \"unselectAnOptionToEnterInARange\": \"Odznacz opcję, aby wpisać zakres.\",\n  \"updateYourLocation\": \"Zaktualizuj swoją lokalizację\",\n  \"useCurrentLocation\": \"Użyj aktualnej lokalizacji\",\n  \"useMyLocation\": \"Użyj mojej lokalizacji\",\n  \"viewAll\": \"Zobacz wszystkie\",\n  \"viewDetails\": \"Zobacz szczegóły\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Resposta Gerada por IA\",\n  \"allCategories\": \"Todas as Categorias\",\n  \"appliedFiltersToCurrentSearch\": \"Filtros aplicados à pesquisa atual\",\n  \"apply\": \"Aplicar\",\n  \"applyFilters\": \"Aplicar Filtros\",\n  \"autocompleteOptionsFound_many\": \"{{count}}{{label}} opções de preenchimento automático encontradas.\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} opção de preenchimento automático encontrada.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} opções de preenchimento automático encontradas.\",\n  \"autocompleteSuggestion\": \"sugestão de preenchimento automático: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_many\": \"{{count}} sugestões de preenchimento automático encontradas.\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} sugestão de preenchimento automático encontrada.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} sugestões de preenchimento automático encontradas.\",\n  \"basedOnYourDevice\": \" (baseado no seu dispositivo)\",\n  \"basedOnYourInternetAddress\": \" (baseado no seu endereço de internet)\",\n  \"categoriesText_one\": \"A seguinte categoria apresentou resultados para - <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"As seguintes categorias apresentaram resultados para - <strong>{{query}}</strong>\",\n  \"clearAll\": \"Limpar Tudo\",\n  \"clearMinAndMax\": \"Limpar mín e máx\",\n  \"clearTheRangeToSelectOptions\": \"Limpar o intervalo para selecionar opções.\",\n  \"clearTheSearchBar\": \"Limpar a barra de pesquisa\",\n  \"conductASearch\": \"Realizar uma busca\",\n  \"currentLocation\": \"Localização Atual\",\n  \"didYouMean\": \"Você quis dizer <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Quando os resultados de preenchimento automático estiverem disponíveis, use as setas para cima e para baixo para revisar e Enter para selecionar.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Pesquisar opções de {{title}}\",\n  \"invalidRange\": \"Intervalo inválido\",\n  \"max\": \"Máx\",\n  \"min\": \"Mín\",\n  \"navigateToTheNextResultsPage\": \"Navegar para a próxima página de resultados\",\n  \"navigateToThePreviousResultsPage\": \"Navegar para a página de resultados anterior\",\n  \"noAutocompleteOptionsFound\": \"0 opções de preenchimento automático encontradas.\",\n  \"noAutocompleteSuggestionsFound\": \"0 sugestões de preenchimento automático encontradas.\",\n  \"noResultsFoundIn\": \"Nenhum resultado encontrado em {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"página {{pageNumber}}\",\n  \"pagination\": \"Paginação\",\n  \"readMoreAbout\": \"Leia mais sobre <a>{{name}}</a>\",\n  \"recentSearch\": \"busca recente: {{query}}\",\n  \"recentSearchesFound_many\": \"{{count}} buscas recentes encontradas.\",\n  \"recentSearchesFound_one\": \"{{count}} busca recente encontrada.\",\n  \"recentSearchesFound_other\": \"{{count}} buscas recentes encontradas.\",\n  \"removeFilter\": \"Remover filtro «{{displayName}}»\",\n  \"resultPreview\": \"pré-visualização do resultado: {{value}}\",\n  \"resultPreviewsFound_many\": \"{{count}} pré-visualizações recentes encontradas.\",\n  \"resultPreviewsFound_one\": \"{{count}} pré-visualização do resultado encontrada.\",\n  \"resultPreviewsFound_other\": \"{{count}} pré-visualizações recentes encontradas.\",\n  \"resultsCountText_many\": \"{{count}} Resultados\",\n  \"resultsCountText_one\": \"{{count}} Resultado\",\n  \"resultsCountText_other\": \"{{count}} Resultados\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} de {{resultsCount}} Resultados\",\n  \"searchHere\": \"Pesquise aqui…\",\n  \"showingAllInstead\": \"Mostrando todos os {{currentVerticalLabel}} em vez disso.\",\n  \"showLess\": \"Mostrar Menos\",\n  \"showMore\": \"Mostrar Mais\",\n  \"sources_many\": \"Fontes ({{count}})\",\n  \"sources_one\": \"Fonte\",\n  \"sources_other\": \"Fontes ({{count}})\",\n  \"submitSearch\": \"Enviar pesquisa\",\n  \"suggestionResultsCount_many\": \"{{label}} - {{count}} resultados\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} resultado\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} resultados\",\n  \"thankYouForYourFeedback\": \"Obrigado pelo seu feedback!\",\n  \"thisAnsweredMyQuestion\": \"Isso respondeu à minha pergunta\",\n  \"thisDidNotAnswerMyQuestion\": \"Isso não respondeu à minha pergunta\",\n  \"unselectAnOptionToEnterInARange\": \"Desmarque uma opção para inserir um intervalo.\",\n  \"updateYourLocation\": \"Atualize sua localização\",\n  \"useCurrentLocation\": \"Usar Localização Atual\",\n  \"useMyLocation\": \"Usar minha localização\",\n  \"viewAll\": \"Ver tudo\",\n  \"viewDetails\": \"Ver Detalhes\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Răspuns generat de AI\",\n  \"allCategories\": \"Toate categoriile\",\n  \"appliedFiltersToCurrentSearch\": \"Filtre aplicate la căutarea curentă\",\n  \"apply\": \"Aplică\",\n  \"applyFilters\": \"Aplică filtre\",\n  \"autocompleteOptionsFound_few\": \"{{count}}{{label}} opțiuni de completare automată găsite.\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} opțiune de completare automată găsită.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} opțiuni de completare automată găsite.\",\n  \"autocompleteSuggestion\": \"sugestie completă automată: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"{{count}} sugestii de completare automată găsite.\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} sugestie de completare automată găsită.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} sugestii de completare automată găsite.\",\n  \"basedOnYourDevice\": \" (bazat pe dispozitivul tău)\",\n  \"basedOnYourInternetAddress\": \" (bazat pe adresa ta de internet)\",\n  \"categoriesText_few\": \"Următoarele categorii au generat rezultate pentru – <strong>{{query}}</strong>\",\n  \"categoriesText_one\": \"Următoarea categorie a generat rezultate pentru – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Următoarele categorii au generat rezultate pentru – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Ștergeți toate\",\n  \"clearMinAndMax\": \"Șterge min și max\",\n  \"clearTheRangeToSelectOptions\": \"Ștergeți intervalul pentru a selecta opțiuni.\",\n  \"clearTheSearchBar\": \"Ștergeți bara de căutare\",\n  \"conductASearch\": \"Efectuați o căutare\",\n  \"currentLocation\": \"Locația curentă\",\n  \"didYouMean\": \"Ai vrut să spui <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Când sunt disponibile rezultate de completare automată, folosește săgețile sus și jos pentru a naviga și Enter pentru a selecta.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Căutați în opțiunile pentru {{title}}\",\n  \"invalidRange\": \"Interval nevalid\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Navigați la pagina de rezultate următoare\",\n  \"navigateToThePreviousResultsPage\": \"Navigați la pagina de rezultate anterioare\",\n  \"noAutocompleteOptionsFound\": \"Nu a fost găsită nicio opțiune de completare automată.\",\n  \"noAutocompleteSuggestionsFound\": \"Nu a fost găsită nicio sugestie de completare automată.\",\n  \"noResultsFoundIn\": \"Niciun rezultat găsit în {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"pagina {{pageNumber}}\",\n  \"pagination\": \"Paginare\",\n  \"readMoreAbout\": \"Citește mai mult despre <a>{{name}}</a>\",\n  \"recentSearch\": \"căutare recentă: {{query}}\",\n  \"recentSearchesFound_few\": \"{{count}} căutări recente găsite.\",\n  \"recentSearchesFound_one\": \"{{count}} căutare recentă găsită.\",\n  \"recentSearchesFound_other\": \"{{count}} căutări recente găsite.\",\n  \"removeFilter\": \"Elimină filtrul „{{displayName}}“\",\n  \"resultPreview\": \"rezultat previzualizare: {{value}}\",\n  \"resultPreviewsFound_few\": \"{{count}} previzualizări ale rezultatelor găsite.\",\n  \"resultPreviewsFound_one\": \"{{count}} previzualizare a rezultatului găsită.\",\n  \"resultPreviewsFound_other\": \"{{count}} previzualizări ale rezultatelor găsite.\",\n  \"resultsCountText_few\": \"{{count}} rezultate\",\n  \"resultsCountText_one\": \"{{count}} rezultat\",\n  \"resultsCountText_other\": \"{{count}} de rezultate\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} din {{resultsCount}} rezultate\",\n  \"searchHere\": \"Căutați aici…\",\n  \"showingAllInstead\": \"Se afișează toate {{currentVerticalLabel}} în schimb.\",\n  \"showLess\": \"Arată mai puțin\",\n  \"showMore\": \"Arată mai mult\",\n  \"sources_few\": \"Surse ({{count}})\",\n  \"sources_one\": \"Sursă\",\n  \"sources_other\": \"Surse ({{count}})\",\n  \"submitSearch\": \"Trimiteți căutarea\",\n  \"suggestionResultsCount_few\": \"{{label}} – {{count}} rezultate\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} rezultat\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} rezultate\",\n  \"thankYouForYourFeedback\": \"Mulțumim pentru feedback!\",\n  \"thisAnsweredMyQuestion\": \"Aceasta a răspuns la întrebarea mea\",\n  \"thisDidNotAnswerMyQuestion\": \"Aceasta nu a răspuns la întrebarea mea\",\n  \"unselectAnOptionToEnterInARange\": \"Deselectează o opțiune pentru a introduce un interval.\",\n  \"updateYourLocation\": \"Actualizați -vă locația\",\n  \"useCurrentLocation\": \"Folosește locația curentă\",\n  \"useMyLocation\": \"Folosește locația mea\",\n  \"viewAll\": \"Vizualizați toate\",\n  \"viewDetails\": \"Vizualizați detalii\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Ответ, сгенерированный ИИ\",\n  \"allCategories\": \"Все категории\",\n  \"appliedFiltersToCurrentSearch\": \"Применённые фильтры к текущему поиску\",\n  \"apply\": \"Применить\",\n  \"applyFilters\": \"Применить фильтры\",\n  \"autocompleteOptionsFound_few\": \"Найдены {{count}} автозаполняющие опции {{label}}.\",\n  \"autocompleteOptionsFound_many\": \"Найдено {{count}} автозаполняющих опций {{label}}.\",\n  \"autocompleteOptionsFound_one\": \"Найдена {{count}} автозаполняющая опция {{label}}.\",\n  \"autocompleteOptionsFound_other\": \"Найдено {{count}} автозаполняющих опций {{label}}.\",\n  \"autocompleteSuggestion\": \"Подсказка автозаполнения: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"Найдены {{count}} подсказки автозаполнения.\",\n  \"autocompleteSuggestionsFound_many\": \"Найдено {{count}} подсказок автозаполнения.\",\n  \"autocompleteSuggestionsFound_one\": \"Найдена {{count}} подсказка автозаполнения.\",\n  \"autocompleteSuggestionsFound_other\": \"Найдено {{count}} подсказок автозаполнения.\",\n  \"basedOnYourDevice\": \" (на основе вашего устройства)\",\n  \"basedOnYourInternetAddress\": \" (на основе вашего интернет-адреса)\",\n  \"categoriesText_few\": \"В категориях — <strong>{{query}}</strong> найдены результаты\",\n  \"categoriesText_many\": \"В категориях — <strong>{{query}}</strong> найдено результатов\",\n  \"categoriesText_one\": \"В категории — <strong>{{query}}</strong> найден результат\",\n  \"categoriesText_other\": \"В категориях — <strong>{{query}}</strong> найдено результатов\",\n  \"clearAll\": \"Очистить всё\",\n  \"clearMinAndMax\": \"Очистить минимальное и максимальное значения\",\n  \"clearTheRangeToSelectOptions\": \"Очистите диапазон для выбора опций.\",\n  \"clearTheSearchBar\": \"Очистить строку поиска\",\n  \"conductASearch\": \"Выполнить поиск\",\n  \"currentLocation\": \"Текущее местоположение\",\n  \"didYouMean\": \"Вы имели в виду <button>{{correctedQuery}}</button>?\",\n  \"dropDownScreenReaderInstructions\": \"Когда доступны результаты автозаполнения, используйте стрелки вверх и вниз для просмотра и Enter для выбора.\",\n  \"feedback\": \"Обратная связь\",\n  \"filterGroupSearchInputLabel\": \"Искать среди вариантов {{title}}\",\n  \"invalidRange\": \"Недопустимый диапазон\",\n  \"max\": \"Макс\",\n  \"min\": \"Мин\",\n  \"navigateToTheNextResultsPage\": \"Перейти к следующей странице результатов\",\n  \"navigateToThePreviousResultsPage\": \"Перейти к предыдущей странице результатов\",\n  \"noAutocompleteOptionsFound\": \"Автозаполняющих опций не найдено.\",\n  \"noAutocompleteSuggestionsFound\": \"Подсказок автозаполнения не найдено.\",\n  \"noResultsFoundIn\": \"Результатов не найдено в {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"страница {{pageNumber}}\",\n  \"pagination\": \"Пагинация\",\n  \"readMoreAbout\": \"Подробнее о <a>{{name}}</a>\",\n  \"recentSearch\": \"недавний поиск: {{query}}\",\n  \"recentSearchesFound_few\": \"Найдены {{count}} недавних поиска.\",\n  \"recentSearchesFound_many\": \"Найдено {{count}} недавних поисков.\",\n  \"recentSearchesFound_one\": \"Найдён {{count}} недавний поиск.\",\n  \"recentSearchesFound_other\": \"Найдено {{count}} недавних поисков.\",\n  \"removeFilter\": \"Удалить фильтр «{{displayName}}»\",\n  \"resultPreview\": \"Превью результата: {{value}}\",\n  \"resultPreviewsFound_few\": \"Найдены {{count}} предварительных просмотра.\",\n  \"resultPreviewsFound_many\": \"Найдено {{count}} предварительных просмотров.\",\n  \"resultPreviewsFound_one\": \"Найдён {{count}} предварительный просмотр.\",\n  \"resultPreviewsFound_other\": \"Найдено {{count}} предварительных просмотров.\",\n  \"resultsCountText_few\": \"{{count}} результата\",\n  \"resultsCountText_many\": \"{{count}} результатов\",\n  \"resultsCountText_one\": \"{{count}} результат\",\n  \"resultsCountText_other\": \"{{count}} результата\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} из {{resultsCount}} результатов\",\n  \"searchHere\": \"Искать здесь…\",\n  \"showingAllInstead\": \"Показаны все {{currentVerticalLabel}} вместо этого.\",\n  \"showLess\": \"Показать меньше\",\n  \"showMore\": \"Показать больше\",\n  \"sources_few\": \"Источника ({{count}})\",\n  \"sources_many\": \"Источников ({{count}})\",\n  \"sources_one\": \"Источник\",\n  \"sources_other\": \"Источника ({{count}})\",\n  \"submitSearch\": \"Отправить поиск\",\n  \"suggestionResultsCount_few\": \"{{label}} - {{count}} результата\",\n  \"suggestionResultsCount_many\": \"{{label}} - {{count}} результатов\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} результат\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} результата\",\n  \"thankYouForYourFeedback\": \"Спасибо за ваш отзыв!\",\n  \"thisAnsweredMyQuestion\": \"Это ответило на мой вопрос\",\n  \"thisDidNotAnswerMyQuestion\": \"Это не ответило на мой вопрос\",\n  \"unselectAnOptionToEnterInARange\": \"Снимите выбор опции, чтобы ввести диапазон.\",\n  \"updateYourLocation\": \"Обновить ваше местоположение\",\n  \"useCurrentLocation\": \"Использовать текущее местоположение\",\n  \"useMyLocation\": \"Использовать моё местоположение\",\n  \"viewAll\": \"Показать все\",\n  \"viewDetails\": \"Просмотреть детали\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Odpoveď generovaná AI\",\n  \"allCategories\": \"Všetky kategórie\",\n  \"appliedFiltersToCurrentSearch\": \"Použité filtre na aktuálne vyhľadávanie\",\n  \"apply\": \"Použiť\",\n  \"applyFilters\": \"Použiť filtre\",\n  \"autocompleteOptionsFound_few\": \"Nájdené {{count}}{{label}} možnosti automatického dopĺňania.\",\n  \"autocompleteOptionsFound_many\": \"Nájdených {{count}}{{label}} možností automatického dopĺňania.\",\n  \"autocompleteOptionsFound_one\": \"Nájdená {{count}}{{label}} možnosť automatického dopĺňania.\",\n  \"autocompleteOptionsFound_other\": \"Nájdených {{count}}{{label}} možností automatického dopĺňania.\",\n  \"autocompleteSuggestion\": \"návrh automatického dopĺňania: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_few\": \"Nájdené {{count}} návrhy automatického dopĺňania.\",\n  \"autocompleteSuggestionsFound_many\": \"Nájdených {{count}} návrhov automatického dopĺňania.\",\n  \"autocompleteSuggestionsFound_one\": \"Nájdený {{count}} návrh automatického dopĺňania.\",\n  \"autocompleteSuggestionsFound_other\": \"Nájdených {{count}} návrhov automatického dopĺňania.\",\n  \"basedOnYourDevice\": \" (na základe vášho zariadenia)\",\n  \"basedOnYourInternetAddress\": \" (na základe vašej internetovej adresy)\",\n  \"categoriesText_few\": \"Nasledujúce kategórie priniesli výsledky pre – <strong>{{query}}</strong>\",\n  \"categoriesText_one\": \"Nasledujúca kategória priniesla výsledky pre – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Nasledujúcych kategórií prinieslo výsledky pre – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Vymazať všetko\",\n  \"clearMinAndMax\": \"Vymazať min a max\",\n  \"clearTheRangeToSelectOptions\": \"Vymazať rozsah na výber možností.\",\n  \"clearTheSearchBar\": \"Vymazať vyhľadávací panel\",\n  \"conductASearch\": \"Vykonať vyhľadávanie\",\n  \"currentLocation\": \"Aktuálna poloha\",\n  \"didYouMean\": \"Mali ste na mysli <button>{{correctedQuery}}</button>?\",\n  \"dropDownScreenReaderInstructions\": \"Keď sú k dispozícii výsledky automatického dokončenia, použite šípky nahor a nadol na preskúmanie a enter na výber.\",\n  \"feedback\": \"Spätná väzba\",\n  \"filterGroupSearchInputLabel\": \"Hľadať možnosti {{title}}\",\n  \"invalidRange\": \"Neplatný rozsah\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Prejsť na ďalšiu stránku výsledkov\",\n  \"navigateToThePreviousResultsPage\": \"Prejsť na predchádzajúcu stránku výsledkov\",\n  \"noAutocompleteOptionsFound\": \"0 nájdených možností automatického dokončenia.\",\n  \"noAutocompleteSuggestionsFound\": \"0 nájdených návrhov automatického dokončenia.\",\n  \"noResultsFoundIn\": \"Nenašli sa žiadne výsledky v {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"strana {{pageNumber}}\",\n  \"pagination\": \"Stránkovanie\",\n  \"readMoreAbout\": \"Čítať viac o <a>{{name}}</a>\",\n  \"recentSearch\": \"nedávne vyhľadávanie: {{query}}\",\n  \"recentSearchesFound_few\": \"Nájdené {{count}} nedávne vyhľadávania.\",\n  \"recentSearchesFound_many\": \"Nájdených {{count}} nedávnych vyhľadávaní.\",\n  \"recentSearchesFound_one\": \"Nájdené {{count}} nedávne vyhľadávanie.\",\n  \"recentSearchesFound_other\": \"Nájdených {{count}} nedávnych vyhľadávaní.\",\n  \"removeFilter\": \"Odstrániť filter „{{displayName}}“\",\n  \"resultPreview\": \"výsledkový náhľad: {{value}}\",\n  \"resultPreviewsFound_few\": \"Nájdené {{count}} náhľady výsledkov.\",\n  \"resultPreviewsFound_many\": \"Nájdených {{count}} náhľadov výsledkov.\",\n  \"resultPreviewsFound_one\": \"Nájdený {{count}} náhľad výsledku.\",\n  \"resultPreviewsFound_other\": \"Nájdených {{count}} náhľadov výsledkov.\",\n  \"resultsCountText_few\": \"{{count}} výsledky\",\n  \"resultsCountText_many\": \"{{count}} výsledkov\",\n  \"resultsCountText_one\": \"{{count}} výsledok\",\n  \"resultsCountText_other\": \"{{count}} výsledkov\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} z {{resultsCount}} výsledkov\",\n  \"searchHere\": \"Vyhľadajte tu…\",\n  \"showingAllInstead\": \"Zobrazujú sa všetky položky v {{currentVerticalLabel}}.\",\n  \"showLess\": \"Zobraziť menej\",\n  \"showMore\": \"Zobraziť viac\",\n  \"sources_few\": \"Zdroje ({{count}})\",\n  \"sources_many\": \"Zdroje ({{count}})\",\n  \"sources_one\": \"Zdroj\",\n  \"sources_other\": \"Zdroje ({{count}})\",\n  \"submitSearch\": \"Odovzdať\",\n  \"suggestionResultsCount_few\": \"{{label}} – {{count}} výsledky\",\n  \"suggestionResultsCount_many\": \"{{label}} – {{count}} výsledkov\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} výsledok\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} výsledkov\",\n  \"thankYouForYourFeedback\": \"Ďakujeme za vašu spätnú väzbu!\",\n  \"thisAnsweredMyQuestion\": \"Toto odpovedalo na moju otázku\",\n  \"thisDidNotAnswerMyQuestion\": \"Toto neodpovedalo na moju otázku\",\n  \"unselectAnOptionToEnterInARange\": \"Zrušte výber možnosti, aby ste mohli zadať rozsah.\",\n  \"updateYourLocation\": \"Aktualizujte svoju polohu\",\n  \"useCurrentLocation\": \"Použiť aktuálnu polohu\",\n  \"useMyLocation\": \"Použiť moju polohu\",\n  \"viewAll\": \"Zobraziť všetko\",\n  \"viewDetails\": \"Zobraziť podrobnosti\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI-genererat svar\",\n  \"allCategories\": \"Alla kategorier\",\n  \"appliedFiltersToCurrentSearch\": \"Tillämpade filter för aktuell sökning\",\n  \"apply\": \"Tillämpa\",\n  \"applyFilters\": \"Tillämpa filter\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} autofyllningsval hittades.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} autofyllningsval hittades.\",\n  \"autocompleteSuggestion\": \"autofyllningsförslag: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} autofyllningsförslag hittades.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} autofyllningsförslag hittades.\",\n  \"basedOnYourDevice\": \" (baserat på din enhet)\",\n  \"basedOnYourInternetAddress\": \" (baserat på din internetadress)\",\n  \"categoriesText_one\": \"Följande kategori gav resultat för – <strong>{{query}}</strong>\",\n  \"categoriesText_other\": \"Följande kategorier gav resultat för – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Rensa allt\",\n  \"clearMinAndMax\": \"Rensa min och max\",\n  \"clearTheRangeToSelectOptions\": \"Rensa intervallet för att välja alternativ.\",\n  \"clearTheSearchBar\": \"Rensa sökfältet\",\n  \"conductASearch\": \"Utför en sökning\",\n  \"currentLocation\": \"Aktuell plats\",\n  \"didYouMean\": \"Menade du <button>{{correctedQuery}}</button>?\",\n  \"dropDownScreenReaderInstructions\": \"När autofyllningsresultat är tillgängliga, använd upp- och nedpilar för att bläddra och enter för att välja.\",\n  \"feedback\": \"Feedback\",\n  \"filterGroupSearchInputLabel\": \"Sök bland alternativ för {{title}}\",\n  \"invalidRange\": \"Ogiltigt intervall\",\n  \"max\": \"Max\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Gå till nästa resultatsida\",\n  \"navigateToThePreviousResultsPage\": \"Gå till föregående resultatsida\",\n  \"noAutocompleteOptionsFound\": \"0 autofyllningsval hittades.\",\n  \"noAutocompleteSuggestionsFound\": \"0 autofyllningsförslag hittades.\",\n  \"noResultsFoundIn\": \"Inga resultat hittades i {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"sida {{pageNumber}}\",\n  \"pagination\": \"Pagination\",\n  \"readMoreAbout\": \"Läs mer om <a>{{name}}</a>\",\n  \"recentSearch\": \"senaste sökningen: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} senaste sökning hittades.\",\n  \"recentSearchesFound_other\": \"{{count}} senaste sökningar hittades.\",\n  \"removeFilter\": \"Ta bort filtret \\\"{{displayName}}\\\"\",\n  \"resultPreview\": \"resultatförhandsgranskning: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} förhandsgranskning hittades.\",\n  \"resultPreviewsFound_other\": \"{{count}} förhandsgranskningar hittades.\",\n  \"resultsCountText_one\": \"{{count}} resultat\",\n  \"resultsCountText_other\": \"{{count}} resultat\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} av {{resultsCount}} resultat\",\n  \"searchHere\": \"Sök här…\",\n  \"showingAllInstead\": \"Visar alla {{currentVerticalLabel}} i stället.\",\n  \"showLess\": \"Visa mindre\",\n  \"showMore\": \"Visa mer\",\n  \"sources_one\": \"Källa\",\n  \"sources_other\": \"Källor ({{count}})\",\n  \"submitSearch\": \"Skicka sökning\",\n  \"suggestionResultsCount_one\": \"{{label}} – {{count}} resultat\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} resultat\",\n  \"thankYouForYourFeedback\": \"Tack för din feedback!\",\n  \"thisAnsweredMyQuestion\": \"Detta besvarade min fråga\",\n  \"thisDidNotAnswerMyQuestion\": \"Detta besvarade inte min fråga\",\n  \"unselectAnOptionToEnterInARange\": \"Avmarkera ett alternativ för att ange ett intervall.\",\n  \"updateYourLocation\": \"Uppdatera din plats\",\n  \"useCurrentLocation\": \"Använd aktuell plats\",\n  \"useMyLocation\": \"Använd min plats\",\n  \"viewAll\": \"Visa alla\",\n  \"viewDetails\": \"Visa detaljer\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Yapay Zekâ Tarafından Oluşturulan Yanıt\",\n  \"allCategories\": \"Tüm Kategoriler\",\n  \"appliedFiltersToCurrentSearch\": \"Mevcut aramaya uygulanan filtreler\",\n  \"apply\": \"Uygula\",\n  \"applyFilters\": \"Filtreleri Uygula\",\n  \"autocompleteOptionsFound_one\": \"{{count}}{{label}} tamamlayıcı seçenek bulundu.\",\n  \"autocompleteOptionsFound_other\": \"{{count}}{{label}} tamamlayıcı seçenekler bulundu.\",\n  \"autocompleteSuggestion\": \"tamamlayıcı öneri: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_one\": \"{{count}} tamamlayıcı öneri bulundu.\",\n  \"autocompleteSuggestionsFound_other\": \"{{count}} tamamlayıcı öneri bulundu.\",\n  \"basedOnYourDevice\": \" (cihazınıza göre)\",\n  \"basedOnYourInternetAddress\": \" (internet adresinize göre)\",\n  \"categoriesText_other\": \"Aşağıdaki kategoriler için sonuçlar bulundu – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Tümünü Temizle\",\n  \"clearMinAndMax\": \"Min ve maks değerleri temizle\",\n  \"clearTheRangeToSelectOptions\": \"Seçenekleri seçmek için aralığı temizle.\",\n  \"clearTheSearchBar\": \"Arama çubuğunu temizle\",\n  \"conductASearch\": \"Arama yap\",\n  \"currentLocation\": \"Mevcut Konum\",\n  \"didYouMean\": \"Demek istediniz mi <button>{{correctedQuery}}</button>\",\n  \"dropDownScreenReaderInstructions\": \"Tamamlayıcı sonuçlar mevcut olduğunda, yukarı/aşağı okları kullanarak gezinip enter ile seçin.\",\n  \"feedback\": \"Geri bildirim\",\n  \"filterGroupSearchInputLabel\": \"{{title}} seçeneklerinde ara\",\n  \"invalidRange\": \"Geçersiz aralık\",\n  \"max\": \"Maks\",\n  \"min\": \"Min\",\n  \"navigateToTheNextResultsPage\": \"Sonraki sonuç sayfasına git\",\n  \"navigateToThePreviousResultsPage\": \"Önceki sonuç sayfasına git\",\n  \"noAutocompleteOptionsFound\": \"0 tamamlayıcı seçenek bulundu.\",\n  \"noAutocompleteSuggestionsFound\": \"0 tamamlayıcı öneri bulundu.\",\n  \"noResultsFoundIn\": \"{{currentVerticalLabel}} içinde sonuç bulunamadı.\",\n  \"paginationPage\": \"sayfa {{pageNumber}}\",\n  \"pagination\": \"Sayfalandırma\",\n  \"readMoreAbout\": \"<a>{{name}}</a> hakkında daha fazla oku\",\n  \"recentSearch\": \"son arama: {{query}}\",\n  \"recentSearchesFound_one\": \"{{count}} son arama bulundu.\",\n  \"recentSearchesFound_other\": \"{{count}} son arama bulundu.\",\n  \"removeFilter\": \"“{{displayName}}” filtresini kaldır\",\n  \"resultPreview\": \"sonuç önizlemesi: {{value}}\",\n  \"resultPreviewsFound_one\": \"{{count}} sonuç önizlemesi bulundu.\",\n  \"resultPreviewsFound_other\": \"{{count}} yakın zamanda önizleme bulundu.\",\n  \"resultsCountText_one\": \"{{count}} Sonuç\",\n  \"resultsCountText_other\": \"{{count}} Sonuç\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} toplam {{resultsCount}} sonuç\",\n  \"searchHere\": \"Burada ara…\",\n  \"showingAllInstead\": \"Bunun yerine tüm {{currentVerticalLabel}} gösteriliyor.\",\n  \"showLess\": \"Daha az göster\",\n  \"showMore\": \"Daha fazla göster\",\n  \"sources_one\": \"Kaynak\",\n  \"sources_other\": \"Kaynaklar ({{count}})\",\n  \"submitSearch\": \"Aramayı Gönder\",\n  \"suggestionResultsCount_one\": \"{{label}} - {{count}} sonuç\",\n  \"suggestionResultsCount_other\": \"{{label}} - {{count}} sonuç\",\n  \"thankYouForYourFeedback\": \"Geri bildiriminiz için teşekkürler!\",\n  \"thisAnsweredMyQuestion\": \"Bu sorumu yanıtladı\",\n  \"thisDidNotAnswerMyQuestion\": \"Bu sorumu yanıtlamadı\",\n  \"unselectAnOptionToEnterInARange\": \"Aralık girmek için bir seçeneğin seçimini kaldırın.\",\n  \"updateYourLocation\": \"Konumunuzu güncelleyin\",\n  \"useCurrentLocation\": \"Mevcut Konumu Kullan\",\n  \"useMyLocation\": \"Konumumu kullan\",\n  \"viewAll\": \"Tümünü Gör\",\n  \"viewDetails\": \"Detayları Görüntüle\"\n}\n","{\n  \"aiGeneratedAnswer\": \"Trả lời do AI tạo\",\n  \"allCategories\": \"Tất cả danh mục\",\n  \"appliedFiltersToCurrentSearch\": \"Bộ lọc được áp dụng cho tìm kiếm hiện tại\",\n  \"apply\": \"Áp dụng\",\n  \"applyFilters\": \"Áp dụng bộ lọc\",\n  \"autocompleteOptionsFound_other\": \"Đã tìm thấy {{count}} tùy chọn tự động hoàn thành{{label}}.\",\n  \"autocompleteSuggestion\": \"đề xuất tự động hoàn thành: {{suggestion}}\",\n  \"autocompleteSuggestionsFound_other\": \"Đã tìm thấy {{count}} đề xuất tự động hoàn thành.\",\n  \"basedOnYourDevice\": \" (dựa trên thiết bị của bạn)\",\n  \"basedOnYourInternetAddress\": \" (dựa trên địa chỉ internet của bạn)\",\n  \"categoriesText_other\": \"Các danh mục sau có kết quả cho – <strong>{{query}}</strong>\",\n  \"clearAll\": \"Xóa tất cả\",\n  \"clearMinAndMax\": \"Xóa giá trị tối thiểu và tối đa\",\n  \"clearTheRangeToSelectOptions\": \"Xóa phạm vi để chọn các tùy chọn.\",\n  \"clearTheSearchBar\": \"Xóa thanh tìm kiếm\",\n  \"conductASearch\": \"Tiến hành tìm kiếm\",\n  \"currentLocation\": \"Vị trí hiện tại\",\n  \"didYouMean\": \"Ý bạn là <button>{{correctedQuery}}</button> phải không\",\n  \"dropDownScreenReaderInstructions\": \"Khi có kết quả tự động hoàn thành, dùng phím mũi lên/xuống để duyệt và Enter để chọn.\",\n  \"feedback\": \"Phản hồi\",\n  \"filterGroupSearchInputLabel\": \"Tìm kiếm trong các tùy chọn {{title}}\",\n  \"invalidRange\": \"Phạm vi không hợp lệ\",\n  \"max\": \"Tối đa\",\n  \"min\": \"Tối thiểu\",\n  \"navigateToTheNextResultsPage\": \"Điều hướng đến trang kết quả tiếp theo\",\n  \"navigateToThePreviousResultsPage\": \"Điều hướng đến trang kết quả trước đó\",\n  \"noAutocompleteOptionsFound\": \"0 tùy chọn tự động hoàn thành được tìm thấy.\",\n  \"noAutocompleteSuggestionsFound\": \"0 đề xuất tự động hoàn thành được tìm thấy.\",\n  \"noResultsFoundIn\": \"Không tìm thấy kết quả trong {{currentVerticalLabel}}.\",\n  \"paginationPage\": \"trang {{pageNumber}}\",\n  \"pagination\": \"Phân trang\",\n  \"readMoreAbout\": \"Tìm hiểu thêm về <a>{{name}}</a>\",\n  \"recentSearch\": \"Tìm kiếm gần đây: {{query}}\",\n  \"recentSearchesFound_other\": \"Đã tìm thấy {{count}} lượt tìm kiếm gần đây.\",\n  \"removeFilter\": \"Xóa bộ lọc “{{displayName}}”\",\n  \"resultPreview\": \"Xem trước kết quả: {{value}}\",\n  \"resultPreviewsFound_other\": \"Đã tìm thấy {{count}} bản xem trước kết quả.\",\n  \"resultsCountText_other\": \"{{count}} kết quả\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}}–{{paginateEnd}} trên tổng {{resultsCount}} kết quả\",\n  \"searchHere\": \"Tìm kiếm ở đây…\",\n  \"showingAllInstead\": \"Hiển thị tất cả {{currentVerticalLabel}} thay vào đó.\",\n  \"showLess\": \"Ẩn bớt\",\n  \"showMore\": \"Xem thêm\",\n  \"sources_other\": \"Nguồn ({{count}})\",\n  \"submitSearch\": \"Gửi tìm kiếm\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} kết quả\",\n  \"thankYouForYourFeedback\": \"Cảm ơn bạn đã phản hồi!\",\n  \"thisAnsweredMyQuestion\": \"Điều này đã trả lời câu hỏi của tôi\",\n  \"thisDidNotAnswerMyQuestion\": \"Điều này không trả lời câu hỏi của tôi\",\n  \"unselectAnOptionToEnterInARange\": \"Bỏ chọn một tùy chọn để nhập khoảng giá trị.\",\n  \"updateYourLocation\": \"Cập nhật vị trí của bạn\",\n  \"useCurrentLocation\": \"Dùng vị trí hiện tại\",\n  \"useMyLocation\": \"Dùng vị trí của tôi\",\n  \"viewAll\": \"Xem tất cả\",\n  \"viewDetails\": \"Xem chi tiết\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI 生成的答案\",\n  \"allCategories\": \"所有类别\",\n  \"appliedFiltersToCurrentSearch\": \"已应用于当前搜索的筛选条件\",\n  \"apply\": \"应用\",\n  \"applyFilters\": \"应用筛选条件\",\n  \"autocompleteOptionsFound_other\": \"找到 {{count}} 个{{label}}自动完成选项。\",\n  \"autocompleteSuggestion\": \"自动完成建议：{{suggestion}}\",\n  \"autocompleteSuggestionsFound_other\": \"找到 {{count}} 个自动完成建议。\",\n  \"basedOnYourDevice\": \"（基于您的设备）\",\n  \"basedOnYourInternetAddress\": \"（基于您的 IP 地址）\",\n  \"categoriesText_other\": \"以下分类包含与<strong>{{query}}</strong>相关的结果\",\n  \"clearAll\": \"清除全部\",\n  \"clearMinAndMax\": \"清除最小值和最大值\",\n  \"clearTheRangeToSelectOptions\": \"清除以选择选项的范围。\",\n  \"clearTheSearchBar\": \"清除搜索栏\",\n  \"conductASearch\": \"进行搜索\",\n  \"currentLocation\": \"当前位置\",\n  \"didYouMean\": \"您的意思是 <button>{{correctedQuery}}</button> 吗\",\n  \"dropDownScreenReaderInstructions\": \"当有自动完成结果时，使用上下箭头浏览，按回车键选择。\",\n  \"feedback\": \"反馈\",\n  \"filterGroupSearchInputLabel\": \"搜索{{title}}选项\",\n  \"invalidRange\": \"无效范围\",\n  \"max\": \"最大\",\n  \"min\": \"最小\",\n  \"navigateToTheNextResultsPage\": \"导航到下一个结果页面\",\n  \"navigateToThePreviousResultsPage\": \"导航到上一个结果页面\",\n  \"noAutocompleteOptionsFound\": \"0已找到自动完成选项。\",\n  \"noAutocompleteSuggestionsFound\": \"0发现自动完成建议。\",\n  \"noResultsFoundIn\": \"在{{currentVerticalLabel}}中未找到结果。\",\n  \"paginationPage\": \"第 {{pageNumber}} 页\",\n  \"pagination\": \"分页\",\n  \"readMoreAbout\": \"阅读关于<a>{{name}}</a>的更多内容\",\n  \"recentSearch\": \"最近的搜索：{{query}}\",\n  \"recentSearchesFound_other\": \"找到 {{count}} 个最近的搜索记录。\",\n  \"removeFilter\": \"移除“{{displayName}}”筛选器\",\n  \"resultPreview\": \"结果预览：{{value}}\",\n  \"resultPreviewsFound_other\": \"找到 {{count}} 个结果预览。\",\n  \"resultsCountText_other\": \"{{count}} 条结果\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} / 共 {{resultsCount}} 个结果\",\n  \"searchHere\": \"在此搜索…\",\n  \"showingAllInstead\": \"正在显示所有{{currentVerticalLabel}}。\",\n  \"showLess\": \"收起\",\n  \"showMore\": \"查看更多\",\n  \"sources_other\": \"来源（{{count}}）\",\n  \"submitSearch\": \"提交搜索\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} 个结果\",\n  \"thankYouForYourFeedback\": \"感谢您的反馈！\",\n  \"thisAnsweredMyQuestion\": \"这个回答了我的问题\",\n  \"thisDidNotAnswerMyQuestion\": \"这个没有回答我的问题\",\n  \"unselectAnOptionToEnterInARange\": \"取消选择某个选项以输入范围。\",\n  \"updateYourLocation\": \"更新您的位置\",\n  \"useCurrentLocation\": \"使用当前位置\",\n  \"useMyLocation\": \"使用我的位置\",\n  \"viewAll\": \"查看全部\",\n  \"viewDetails\": \"查看详细信息\"\n}\n","{\n  \"aiGeneratedAnswer\": \"AI 產生的答案\",\n  \"allCategories\": \"所有分類\",\n  \"appliedFiltersToCurrentSearch\": \"已套用至目前搜尋的篩選器\",\n  \"apply\": \"套用\",\n  \"applyFilters\": \"套用篩選器\",\n  \"autocompleteOptionsFound_other\": \"找到 {{count}} 個{{label}}自動完成選項。\",\n  \"autocompleteSuggestion\": \"自動完成建議：{{suggestion}}\",\n  \"autocompleteSuggestionsFound_other\": \"找到 {{count}} 個自動完成建議。\",\n  \"basedOnYourDevice\": \"（依據您的裝置）\",\n  \"basedOnYourInternetAddress\": \"（依據您的網際網路位址）\",\n  \"categoriesText_other\": \"以下分類包含與<strong>{{query}}</strong>相關的結果\",\n  \"clearAll\": \"清除全部\",\n  \"clearMinAndMax\": \"清除最小值與最大值\",\n  \"clearTheRangeToSelectOptions\": \"清除範圍以選擇選項。\",\n  \"clearTheSearchBar\": \"清除搜尋欄\",\n  \"conductASearch\": \"進行搜尋\",\n  \"currentLocation\": \"目前位置\",\n  \"didYouMean\": \"您的意思是 <button>{{correctedQuery}}</button> 嗎\",\n  \"dropDownScreenReaderInstructions\": \"有自動完成結果時，請使用上下鍵瀏覽並按 Enter 鍵選取。\",\n  \"feedback\": \"回饋\",\n  \"filterGroupSearchInputLabel\": \"搜尋{{title}}選項\",\n  \"invalidRange\": \"無效範圍\",\n  \"max\": \"最大\",\n  \"min\": \"最小\",\n  \"navigateToTheNextResultsPage\": \"前往下一頁結果\",\n  \"navigateToThePreviousResultsPage\": \"前往上一頁結果\",\n  \"noAutocompleteOptionsFound\": \"未找到自動完成選項。\",\n  \"noAutocompleteSuggestionsFound\": \"未找到自動完成建議。\",\n  \"noResultsFoundIn\": \"在{{currentVerticalLabel}}中找不到結果。\",\n  \"paginationPage\": \"第 {{pageNumber}} 頁\",\n  \"pagination\": \"分頁\",\n  \"readMoreAbout\": \"閱讀更多關於<a>{{name}}</a>的資訊\",\n  \"recentSearch\": \"最近搜尋：{{query}}\",\n  \"recentSearchesFound_other\": \"找到 {{count}} 筆最近搜尋。\",\n  \"removeFilter\": \"移除「{{displayName}}」篩選器\",\n  \"resultPreview\": \"結果預覽：{{value}}\",\n  \"resultPreviewsFound_other\": \"找到 {{count}} 筆結果預覽。\",\n  \"resultsCountText_other\": \"{{count}} 筆結果\",\n  \"resultsCountWithPaginationText\": \"{{paginateStart}} - {{paginateEnd}} / 共 {{resultsCount}} 筆結果\",\n  \"searchHere\": \"請在此搜尋…\",\n  \"showingAllInstead\": \"顯示所有 {{currentVerticalLabel}}。\",\n  \"showLess\": \"顯示較少\",\n  \"showMore\": \"顯示更多\",\n  \"sources_other\": \"來源（{{count}}）\",\n  \"submitSearch\": \"提交搜尋\",\n  \"suggestionResultsCount_other\": \"{{label}} – {{count}} 筆結果\",\n  \"thankYouForYourFeedback\": \"感謝您的意見回饋！\",\n  \"thisAnsweredMyQuestion\": \"這有回答到我的問題\",\n  \"thisDidNotAnswerMyQuestion\": \"這沒有回答到我的問題\",\n  \"unselectAnOptionToEnterInARange\": \"取消選擇一個選項以輸入範圍。\",\n  \"updateYourLocation\": \"更新您的位置\",\n  \"useCurrentLocation\": \"使用目前位置\",\n  \"useMyLocation\": \"使用我的位置\",\n  \"viewAll\": \"查看全部\",\n  \"viewDetails\": \"查看詳細資料\"\n}\n","/**\n * The locales that have default translation support.\n *\n * @internal\n */\nconst supportedLocales =\n[\n  'ar',\n  'cs',\n  'da',\n  'de',\n  'el',\n  'en-GB',\n  'en',\n  'es',\n  'et',\n  'fi',\n  'fr',\n  'hi',\n  'hr',\n  'hu',\n  'it',\n  'ja',\n  'ko',\n  'lt',\n  'lv',\n  'nb',\n  'nl',\n  'pl',\n  'pt',\n  'ro',\n  'ru',\n  'sk',\n  'sv',\n  'tr',\n  'vi',\n  'zh-CN',\n  'zh-TW',\n];\n\nmodule.exports = { supportedLocales };","import { useTranslation } from 'react-i18next';\nimport {\n  SearchHeadless,\n  QuerySource,\n  SearchTypeEnum,\n  UniversalLimit,\n  useSearchActions,\n  useSearchState,\n  useSearchUtilities,\n  VerticalResults as VerticalResultsData\n} from '@yext/search-headless-react';\nimport classNames from 'classnames';\nimport React, { Fragment, isValidElement, PropsWithChildren, ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { useEntityPreviews } from '../hooks/useEntityPreviews';\nimport { useRecentSearches } from '../hooks/useRecentSearches';\nimport { useSearchWithNearMeHandling } from '../hooks/useSearchWithNearMeHandling';\nimport { useSynchronizedRequest } from '../hooks/useSynchronizedRequest';\nimport { useDebouncedFunction } from '../hooks/useDebouncedFunction';\nimport { VerticalDividerIcon } from '../icons/VerticalDividerIcon';\nimport { HistoryIcon as RecentSearchIcon } from '../icons/HistoryIcon';\nimport { CloseIcon } from '../icons/CloseIcon';\nimport { MagnifyingGlassIcon } from '../icons/MagnifyingGlassIcon';\nimport { Dropdown } from './Dropdown/Dropdown';\nimport { useDropdownContext } from './Dropdown/DropdownContext';\nimport { DropdownInput } from './Dropdown/DropdownInput';\nimport { DropdownItem } from './Dropdown/DropdownItem';\nimport { DropdownMenu } from './Dropdown/DropdownMenu';\nimport { FocusedItemData } from './Dropdown/FocusContext';\nimport { useComposedCssClasses, twMerge } from '../hooks/useComposedCssClasses';\nimport { SearchButton } from './SearchButton';\nimport {\n  renderAutocompleteResult,\n  AutocompleteResultCssClasses,\n  builtInCssClasses as AutocompleteResultBuiltInCssClasses\n} from './utils/renderAutocompleteResult';\nimport { useSearchBarAnalytics } from '../hooks/useSearchBarAnalytics';\nimport { isVerticalLink, VerticalLink } from '../models/verticalLink';\nimport { executeAutocomplete as executeAutocompleteSearch } from '../utils/search-operations';\nimport { clearStaticRangeFilters } from '../utils/filterutils';\nimport { recursivelyMapChildren } from './utils/recursivelyMapChildren';\n\nconst builtInCssClasses: Readonly<SearchBarCssClasses> = {\n  searchBarContainer: 'h-12 mb-6',\n  inputDivider: 'border-t border-gray-200 mx-2.5',\n  inputElement: 'outline-none flex-grow border-none h-11 pl-5 pr-2 text-neutral-dark text-base placeholder:text-neutral-light',\n  searchButtonContainer: ' w-8 h-full mx-2 flex flex-col justify-center items-center',\n  searchButton: 'h-7 w-7',\n  focusedOption: 'bg-gray-100',\n  clearButton: 'h-3 w-3 mr-3.5',\n  verticalDivider: 'mr-0.5',\n  recentSearchesIcon: 'w-5 mr-1 flex-shrink-0 h-full text-gray-400',\n  recentSearchesOption: 'whitespace-no-wrap max-w-full px-3 text-neutral-dark truncate',\n  recentSearchesNonHighlighted: 'font-normal', // Swap this to semibold once we apply highlighting to recent searches\n  verticalLink: 'ml-12 pl-1 text-neutral italic',\n  entityPreviewsDivider: 'h-px bg-gray-200 mt-1 mb-4 mx-3.5',\n  ...AutocompleteResultBuiltInCssClasses\n};\n\n/**\n * The CSS class interface for the {@link SearchBar}.\n *\n * @public\n */\nexport interface SearchBarCssClasses extends AutocompleteResultCssClasses {\n  searchBarContainer?: string,\n  inputElement?: string,\n  inputDivider?: string,\n  clearButton?: string,\n  searchButton?: string,\n  searchButtonContainer?: string,\n  focusedOption?: string,\n  recentSearchesIcon?: string,\n  recentSearchesOption?: string,\n  recentSearchesNonHighlighted?: string,\n  verticalLink?: string,\n  verticalDivider?: string,\n  entityPreviewsDivider?: string\n}\n\n/**\n * The type of a functional React component which renders entity previews using\n * a map of vertical key to the corresponding VerticalResults data.\n *\n * @remarks\n * The autocomplete loading state is passed in as an optional param.\n *\n * Default props for rendering corresponding DropdownItems are passed in:\n * an onClick function to allow an entity preview to be submitted, and\n * an ariaLabel function that returns text for the screenreader\n *\n * For the entity previews to be navigable in the search bar's dropdown section,\n * wrap each entity preview in a {@link DropdownItem} component.\n *\n * @public\n */\nexport type RenderEntityPreviews = (\n  autocompleteLoading: boolean,\n  verticalKeyToResults: Record<string, VerticalResultsData>,\n  dropdownItemProps: {\n    onClick: (value: string, _index: number, itemData?: FocusedItemData) => void,\n    ariaLabel: (value: string) => string\n  }\n) => React.JSX.Element | null;\n\n/**\n * The configuration options for Visual Autocomplete.\n *\n * @public\n */\nexport interface VisualAutocompleteConfig {\n  /** The Search Headless instance used to perform visual autocomplete searches. */\n  entityPreviewSearcher: SearchHeadless,\n  /** Renders entity previews based on the autocomplete loading state and results. */\n  renderEntityPreviews: RenderEntityPreviews,\n  /** Specify which verticals to include for VisualAutocomplete. */\n  includedVerticals: string[],\n  /** Specify the number of entities to return per vertical. **/\n  universalLimit?: UniversalLimit,\n  /** The debouncing time, in milliseconds, for making API requests for entity previews. */\n  entityPreviewsDebouncingTime?: number\n}\n\n/**\n * The interface of a function which is called on a search.\n *\n * @public\n */\nexport type onSearchFunc = (searchEventData: { verticalKey?: string, query?: string }) => void;\n\n/**\n * The props for the {@link SearchBar} component.\n *\n * @public\n */\nexport interface SearchBarProps {\n  /** The search bar's placeholder text. */\n  placeholder?: string,\n  /** {@inheritDoc LocationBiasProps.geolocationOptions} */\n  geolocationOptions?: PositionOptions,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: SearchBarCssClasses,\n  /** {@inheritDoc VisualAutocompleteConfig} */\n  visualAutocompleteConfig?: VisualAutocompleteConfig,\n  /** Shows vertical links if true, set to false on default. */\n  showVerticalLinks?: boolean,\n  /** A function which is called when a vertical link is selected. */\n  onSelectVerticalLink?: (data: { verticalLink: VerticalLink, querySource: QuerySource }) => void,\n  /** A function which returns a display label for the given verticalKey. */\n  verticalKeyToLabel?: (verticalKey: string) => string,\n  /** Hides recent searches if true. */\n  hideRecentSearches?: boolean,\n  /** Limits the number of recent searches shown. */\n  recentSearchesLimit?: number,\n  /** Limits the number of universal query suggestions returned by autocomplete. */\n  universalAutocompleteLimit?: number,\n  /**\n   * Limits the number of query suggestions returned by autocomplete for verticals.\n   * The keys of the record correspond to the vertical keys, and the values correspond\n   * to the maximum number of suggestions to return for that vertical.\n   * If a limit for the current vertical is not specified, the default limit will be used.\n   */\n  verticalAutocompleteLimits?: Record<string, number>,\n  /** A callback which is called when a search is ran. */\n  onSearch?: onSearchFunc,\n  /** Disable autocomplete if true, set to false on default. */\n  autocompleteDisabled?: boolean\n}\n\n/**\n * Renders a SearchBar that is hooked up with an InputDropdown component.\n *\n * @public\n */\nexport function SearchBar({\n  placeholder,\n  geolocationOptions,\n  hideRecentSearches,\n  visualAutocompleteConfig,\n  showVerticalLinks = false,\n  onSelectVerticalLink,\n  verticalKeyToLabel,\n  recentSearchesLimit = 5,\n  universalAutocompleteLimit,\n  verticalAutocompleteLimits,\n  customCssClasses,\n  onSearch,\n  autocompleteDisabled = false\n}: SearchBarProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const {\n    entityPreviewSearcher,\n    renderEntityPreviews,\n    includedVerticals,\n    universalLimit,\n    entityPreviewsDebouncingTime = 500\n  } = visualAutocompleteConfig ?? {};\n  const searchActions = useSearchActions();\n  const searchUtilities = useSearchUtilities();\n  const reportAnalyticsEvent = useSearchBarAnalytics();\n\n  const query = useSearchState(state => state.query.input) ?? '';\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const isVertical = useSearchState(state => state.meta.searchType) === SearchTypeEnum.Vertical;\n  const verticalKey = useSearchState(state => state.vertical.verticalKey);\n  const debouncedExecuteAutocompleteSearch = useDebouncedFunction(\n    () => executeAutocompleteSearch(searchActions),\n    200\n  );\n  const [autocompleteResponse, executeAutocomplete, clearAutocompleteData] = useSynchronizedRequest(\n    async () => {\n      return !autocompleteDisabled && debouncedExecuteAutocompleteSearch ?\n        debouncedExecuteAutocompleteSearch() :\n        undefined;\n    }\n  );\n  const [\n    executeQueryWithNearMeHandling,\n    autocompletePromiseRef,\n  ] = useSearchWithNearMeHandling(geolocationOptions, onSearch);\n  const [\n    recentSearches,\n    setRecentSearch,\n    clearRecentSearches,\n  ] = useRecentSearches(recentSearchesLimit, verticalKey);\n  const filteredRecentSearches = recentSearches?.filter(search =>\n    searchUtilities.isCloseMatch(search.query, query)\n  );\n\n  useEffect(() => {\n    if (hideRecentSearches) {\n      clearRecentSearches();\n    }\n  }, [clearRecentSearches, hideRecentSearches]);\n\n  useEffect(() => {\n    if (universalAutocompleteLimit) {\n      searchActions.setUniversalAutocompleteLimit(universalAutocompleteLimit);\n    } else {\n      searchActions.setUniversalAutocompleteLimit(undefined);\n    }\n    if (verticalKey && verticalAutocompleteLimits?.[verticalKey]) {\n      searchActions.setVerticalAutocompleteLimit(verticalAutocompleteLimits[verticalKey]);\n    } else {\n      searchActions.setVerticalAutocompleteLimit(undefined);\n    }\n  }, [searchActions, universalAutocompleteLimit, verticalAutocompleteLimits, verticalKey]);\n\n  const clearAutocomplete = useCallback(() => {\n    clearAutocompleteData();\n    autocompletePromiseRef.current = undefined;\n  }, [autocompletePromiseRef, clearAutocompleteData]);\n\n  const executeQuery = useCallback(() => {\n    if (!hideRecentSearches) {\n      const input = searchActions.state.query.input;\n      input && setRecentSearch(input);\n    }\n    executeQueryWithNearMeHandling();\n  }, [\n    searchActions.state.query.input,\n    executeQueryWithNearMeHandling,\n    hideRecentSearches,\n    setRecentSearch\n  ]);\n\n  const handleSubmit = useCallback((value?: string, index?: number, itemData?: FocusedItemData) => {\n    value !== undefined && searchActions.setQuery(value);\n    searchActions.setOffset(0);\n    searchActions.setFacets([]);\n    clearStaticRangeFilters(searchActions);\n    if (itemData && isVerticalLink(itemData.verticalLink) && onSelectVerticalLink) {\n      onSelectVerticalLink({ verticalLink: itemData.verticalLink, querySource: QuerySource.Autocomplete });\n    } else {\n      executeQuery();\n    }\n    if (typeof index === 'number' && index >= 0 && !itemData?.isEntityPreview) {\n      reportAnalyticsEvent('AUTO_COMPLETE_SELECTION');\n    }\n  }, [searchActions, executeQuery, onSelectVerticalLink, reportAnalyticsEvent]);\n\n  const [\n    entityPreviewsState,\n    executeEntityPreviewsQuery\n  ] = useEntityPreviews(entityPreviewSearcher, entityPreviewsDebouncingTime);\n  const { verticalKeyToResults, isLoading: entityPreviewsLoading } = entityPreviewsState;\n  const getAriaLabelText = useCallback((value: string) => {\n    return t('resultPreview', { value });\n  }, [t]);\n  const entityPreviews = renderEntityPreviews?.(\n    entityPreviewsLoading,\n    verticalKeyToResults,\n    { onClick: handleSubmit, ariaLabel: getAriaLabelText }\n  );\n  const updateEntityPreviews = useCallback((query: string) => {\n    if (!renderEntityPreviews || !includedVerticals) {\n      return;\n    }\n    executeEntityPreviewsQuery(query, universalLimit ?? {}, includedVerticals);\n  }, [executeEntityPreviewsQuery, renderEntityPreviews, includedVerticals, universalLimit]);\n\n  const handleInputFocus = useCallback((value = '') => {\n    searchActions.setQuery(value);\n    updateEntityPreviews(value);\n    autocompletePromiseRef.current = executeAutocomplete();\n  }, [searchActions, autocompletePromiseRef, executeAutocomplete, updateEntityPreviews]);\n\n  const handleInputChange = useCallback((value = '') => {\n    searchActions.setQuery(value);\n    updateEntityPreviews(value);\n    autocompletePromiseRef.current = executeAutocomplete();\n  }, [searchActions, autocompletePromiseRef, executeAutocomplete, updateEntityPreviews]);\n\n  const handleClickClearButton = useCallback(() => {\n    updateEntityPreviews('');\n    searchActions.setQuery('');\n    reportAnalyticsEvent('SEARCH_CLEAR_BUTTON');\n  }, [reportAnalyticsEvent, searchActions, updateEntityPreviews]);\n\n  function renderInput() {\n    return (\n      <DropdownInput\n        className={cssClasses.inputElement}\n        placeholder={placeholder}\n        onSubmit={handleSubmit}\n        onFocus={handleInputFocus}\n        onChange={handleInputChange}\n        ariaLabel={t('conductASearch')}\n      />\n    );\n  }\n\n  function renderRecentSearches() {\n    const recentSearchesCssClasses = {\n      icon: cssClasses.recentSearchesIcon,\n      option: cssClasses.recentSearchesOption,\n      nonHighlighted: cssClasses.recentSearchesNonHighlighted\n    };\n\n    return filteredRecentSearches?.map((result, i) => (\n      <DropdownItem\n        className='flex items-center h-6.5 px-3.5 py-1.5 cursor-pointer hover:bg-gray-100'\n        focusedClassName={twMerge('flex items-center h-6.5 px-3.5 py-1.5 cursor-pointer hover:bg-gray-100', cssClasses.focusedOption)}\n        key={i}\n        value={result.query}\n        onClick={handleSubmit}\n        ariaLabel={t('recentSearch', {\n          query: result.query\n        })}\n      >\n        {renderAutocompleteResult(\n          { value: result.query, inputIntents: [] },\n          recentSearchesCssClasses,\n          RecentSearchIcon\n        )}\n      </DropdownItem>\n    ));\n  }\n\n  const itemDataMatrix = useMemo(() => {\n    return autocompleteResponse?.results.map(result => {\n      return result.verticalKeys?.map(verticalKey => ({\n        verticalLink: { verticalKey, query: result.value }\n      })) ?? [];\n    }) ?? [];\n  }, [autocompleteResponse?.results]);\n\n  function renderQuerySuggestions() {\n    return autocompleteResponse?.results.map((result, i) => (\n      <Fragment key={i}>\n        <DropdownItem\n          className='flex items-stretch py-1.5 px-3.5 cursor-pointer hover:bg-gray-100'\n          focusedClassName={twMerge('flex items-stretch py-1.5 px-3.5 cursor-pointer hover:bg-gray-100', cssClasses.focusedOption)}\n          value={result.value}\n          onClick={handleSubmit}\n          ariaLabel={t('autocompleteSuggestion', { suggestion: result.value })}\n        >\n          {renderAutocompleteResult(\n            result,\n            cssClasses,\n            MagnifyingGlassIcon\n          )}\n        </DropdownItem>\n        {showVerticalLinks && !isVertical && result.verticalKeys?.map((verticalKey, j) => (\n          <DropdownItem\n            key={j}\n            className='flex items-stretch py-1.5 px-3.5 cursor-pointer hover:bg-gray-100'\n            focusedClassName={twMerge('flex items-stretch py-1.5 px-3.5 cursor-pointer hover:bg-gray-100', cssClasses.focusedOption)}\n            value={result.value}\n            itemData={itemDataMatrix[i][j]}\n            onClick={handleSubmit}\n          >\n            {renderAutocompleteResult(\n              {\n                value: `in ${verticalKeyToLabel ? verticalKeyToLabel(verticalKey) : verticalKey}`,\n                inputIntents: []\n              },\n              { ...cssClasses, option: cssClasses.verticalLink }\n            )}\n          </DropdownItem>\n        ))}\n      </Fragment>\n    ));\n  }\n\n  function renderClearButton() {\n    return (\n      <>\n        <button\n          aria-label={t('clearTheSearchBar')}\n          className={cssClasses.clearButton}\n          onClick={handleClickClearButton}\n        >\n          <CloseIcon />\n        </button>\n        <VerticalDividerIcon className={cssClasses.verticalDivider} />\n      </>\n    );\n  }\n\n  const entityPreviewsCount = calculateEntityPreviewsCount(entityPreviews);\n  const showEntityPreviewsDivider = entityPreviews\n    && !!(autocompleteResponse?.results.length || filteredRecentSearches?.length);\n  const hasItems = !!(autocompleteResponse?.results.length\n    || filteredRecentSearches?.length || entityPreviews);\n  const screenReaderText = getScreenReaderText(\n    autocompleteResponse?.results.length,\n    filteredRecentSearches?.length,\n    entityPreviewsCount,\n    t\n  );\n  const activeClassName = classNames('relative z-10 bg-white border rounded-3xl border-gray-200 w-full overflow-hidden', {\n    'shadow-lg': hasItems\n  });\n\n  const handleToggleDropdown = useCallback((isActive: boolean) => {\n    if (!isActive) {\n      clearAutocomplete();\n    }\n  }, [clearAutocomplete]);\n\n  return (\n    <div className={cssClasses.searchBarContainer}>\n      <Dropdown\n        className='relative bg-white border rounded-3xl border-gray-200 w-full overflow-hidden'\n        activeClassName={activeClassName}\n        screenReaderText={screenReaderText}\n        parentQuery={query}\n        onToggle={handleToggleDropdown}\n      >\n        <div className='inline-flex items-center justify-between w-full'>\n          {renderInput()}\n          {query && renderClearButton()}\n          <DropdownSearchButton\n            handleSubmit={handleSubmit}\n            cssClasses={cssClasses}\n          />\n        </div>\n        {hasItems &&\n          <StyledDropdownMenu cssClasses={cssClasses}>\n            {renderRecentSearches()}\n            {renderQuerySuggestions()}\n            {entityPreviews && (\n              <div role='group'>\n                {showEntityPreviewsDivider && <div className={cssClasses.entityPreviewsDivider} aria-hidden='true' />}\n                {entityPreviews}\n              </div>\n            )}\n          </StyledDropdownMenu>\n        }\n      </Dropdown>\n    </div>\n  );\n}\n\nfunction StyledDropdownMenu({ cssClasses, children }: PropsWithChildren<{\n  cssClasses: {\n    inputDivider?: string\n  }\n}>) {\n  return (\n    <div>\n      <div className={cssClasses.inputDivider} aria-hidden='true' />\n      <DropdownMenu className='bg-white py-4'>\n        {children}\n      </DropdownMenu>\n    </div>\n  );\n}\n\nfunction getScreenReaderText(\n  autocompleteOptions = 0,\n  recentSearchesOptions = 0,\n  entityPreviewsCount = 0,\n  t: ReturnType<typeof useTranslation>['t']\n): string {\n  const texts: string[] = [];\n  recentSearchesOptions > 0 && texts.push(t('recentSearchesFound', {\n    count: recentSearchesOptions\n  }));\n  entityPreviewsCount > 0 && texts.push(t('resultPreviewsFound', {\n    count: entityPreviewsCount\n  }));\n  autocompleteOptions > 0 && texts.push(t('autocompleteSuggestionsFound', {\n    count: autocompleteOptions\n  }));\n\n  const text = texts.join(' ');\n  if (text === '') {\n    return t('noAutocompleteSuggestionsFound');\n  }\n  return text.trim();\n}\n\nfunction DropdownSearchButton({ handleSubmit, cssClasses }: {\n  handleSubmit: () => void,\n  cssClasses: {\n    searchButtonContainer?: string,\n    searchButton?: string\n  }\n}) {\n  const { toggleDropdown } = useDropdownContext();\n  const handleClick = useCallback(() => {\n    handleSubmit();\n    toggleDropdown(false);\n  }, [handleSubmit, toggleDropdown]);\n  return (\n    <div className={cssClasses.searchButtonContainer}>\n      <SearchButton\n        className={cssClasses.searchButton}\n        handleClick={handleClick}\n      />\n    </div>\n  );\n}\n\n/**\n * Calculates the number of navigable entity previews from a ReactNode containing DropdownItems.\n */\nexport function calculateEntityPreviewsCount(children: ReactNode): number {\n  let count = 0;\n  recursivelyMapChildren(children, c => {\n    if (isValidElement(c) && c.type === DropdownItem) {\n      count++;\n    }\n    return c;\n  });\n  return count;\n}\n","import { SearchHeadless, UniversalLimit, VerticalResults as VerticalResultsData } from '@yext/search-headless-react';\nimport { useState } from 'react';\nimport { useComponentMountStatus } from './useComponentMountStatus';\nimport { useDebouncedFunction } from './useDebouncedFunction';\n\ninterface EntityPreviewsState {\n  verticalKeyToResults: Record<string, VerticalResultsData>,\n  isLoading: boolean\n}\n\ntype ExecuteEntityPreviewsQuery = (\n  query: string,\n  universalLimit: UniversalLimit,\n  restrictVerticals: string[]\n) => void;\n\n/**\n * useEntityPreviews provides state surrounding the visual entities portion of visual autocomplete,\n * which performs debounced universal searches.\n *\n * @param entityPreviewSearcher - the headless instance use as searcher for entity preview related queries\n * @param debounceTime - the time in milliseconds to debounce the universal search request\n */\nexport function useEntityPreviews(\n  entityPreviewSearcher: SearchHeadless | undefined,\n  debounceTime: number\n): [EntityPreviewsState, ExecuteEntityPreviewsQuery] {\n  const isMountedRef = useComponentMountStatus();\n  const [\n    verticalKeyToResults,\n    setVerticalKeyToResults\n  ] = useState<Record<string, VerticalResultsData>>({});\n  const debouncedUniversalSearch = useDebouncedFunction(async () => {\n    if (!entityPreviewSearcher) {\n      return;\n    }\n    await entityPreviewSearcher.executeUniversalQuery();\n    /**\n     * Avoid performing a React state update on an unmounted component\n     * (e.g unmounted during async await)\n     */\n    if (!isMountedRef.current) {\n      return;\n    }\n    const results = entityPreviewSearcher.state.universal.verticals || [];\n    setVerticalKeyToResults(getVerticalKeyToResults(results));\n    setLoadingState(false);\n  }, debounceTime);\n  const [isLoading, setLoadingState] = useState<boolean>(false);\n\n  function executeEntityPreviewsQuery(\n    query: string,\n    universalLimit: UniversalLimit,\n    restrictVerticals: string[]\n  ) {\n    if (!entityPreviewSearcher) {\n      return;\n    }\n    if (query === entityPreviewSearcher.state.query.input) {\n      return;\n    }\n    setLoadingState(true);\n    entityPreviewSearcher.setQuery(query);\n    entityPreviewSearcher.setRestrictVerticals(restrictVerticals);\n    entityPreviewSearcher.setUniversalLimit(universalLimit);\n    debouncedUniversalSearch?.();\n  }\n  return [{ verticalKeyToResults, isLoading }, executeEntityPreviewsQuery];\n}\n\n/**\n * @returns a mapping of vertical key to VerticalResults\n */\nfunction getVerticalKeyToResults(\n  verticalResultsArray: VerticalResultsData[]\n): Record<string, VerticalResultsData> {\n  return verticalResultsArray.reduce<Record<string, VerticalResultsData>>((prev, current) => {\n    prev[current.verticalKey] = current;\n    return prev;\n  }, {});\n}","import { useEffect, useRef } from 'react';\n\n/**\n * This is use to prevent react errors due to performing state update on unmounted component.\n * This error does not need to be suppressed as it will be remove in the next version of React.\n *\n * React PR regarding the issue: https://github.com/facebook/react/pull/22114\n */\nexport function useComponentMountStatus(): React.MutableRefObject<boolean> {\n  const isMountedRef = useRef<boolean>(false);\n  useEffect(() => {\n    isMountedRef.current = true;\n    return () => { isMountedRef.current = false; };\n  }, []);\n\n  return isMountedRef;\n}","import { useCallback, useEffect, useRef } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Func = (...args: any[]) => any;\ntype DebouncedFunction<F extends Func> = (...args: Parameters<F>) => Promise<undefined | ReturnType<F>>;\n\n/**\n * Returns a debounced version of the provided function.\n *\n * @remarks\n * The returned function delays invoking {@link func} until `milliseconds` have elapsed since the\n * most recent call. Repeated calls within the debounce window cancel the previous timeout and only\n * the latest call is eventually executed.\n *\n * @param func - The callback to debounce.\n * @param milliseconds - The debounce delay in milliseconds.\n * @returns A debounced callback, or `undefined` when no callback was provided.\n */\nexport function useDebouncedFunction<F extends Func>(\n  func: F | undefined,\n  milliseconds: number\n): DebouncedFunction<F> | undefined {\n  const timeoutIdRef = useRef<number | undefined>(undefined);\n  // Keep the latest callback available to the timeout without recreating the debounced wrapper.\n  const funcRef = useRef<F | undefined>(func);\n\n  useEffect(() => {\n    funcRef.current = func;\n  }, [func]);\n\n  // The debounced wrapper is memoized so its identity stays stable across renders unless the debounce\n  // duration changes. This makes it safe to use in effect dependency arrays or event subscription\n  // setup without unintentionally tearing down and recreating listeners on every render.\n  const debounced: DebouncedFunction<F> = useCallback((...args: Parameters<F>) => {\n    return new Promise(resolve => {\n      if (timeoutIdRef.current !== undefined) {\n        clearTimeout(timeoutIdRef.current);\n      }\n\n      timeoutIdRef.current = window.setTimeout(() => {\n        resolve(funcRef.current?.(...args) as ReturnType<F> | undefined);\n        timeoutIdRef.current = undefined;\n      }, milliseconds);\n    });\n  }, [milliseconds]);\n\n  return func ? debounced : undefined;\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { RecentSearches, ISearch } from 'recent-searches';\n\nexport function useRecentSearches(\n  recentSearchesLimit: number,\n  verticalKey: string | undefined\n): [ISearch[] | undefined, (input: string) => void, () => void] {\n  const recentSearchesKey = getRecentSearchesKey(verticalKey);\n  const [recentSearches, setRecentSeaches] = useState<RecentSearches>(\n    new RecentSearches({\n      limit: recentSearchesLimit,\n      namespace: recentSearchesKey\n    })\n  );\n\n  const clearRecentSearches = useCallback(() => {\n    localStorage.removeItem(recentSearchesKey);\n    setRecentSeaches(new RecentSearches({\n      limit: recentSearchesLimit,\n      namespace: recentSearchesKey\n    }));\n    localStorage.removeItem(recentSearchesKey);\n  }, [recentSearchesKey, recentSearchesLimit]);\n\n  const setRecentSearch = useCallback((input: string) => {\n    recentSearches.setRecentSearch(input);\n  }, [recentSearches]);\n\n  useEffect(() => {\n    setRecentSeaches(new RecentSearches({\n      limit: recentSearchesLimit,\n      namespace: recentSearchesKey\n    }));\n  }, [recentSearchesKey, recentSearchesLimit]);\n\n  return [recentSearches?.getRecentSearches(), setRecentSearch, clearRecentSearches];\n}\n\nfunction getRecentSearchesKey(verticalKey: string | undefined): string {\n  if (verticalKey) {\n    return `__yxt_recent_searches_${verticalKey}__`;\n  } else {\n    return '__yxt_recent_searches_universal__';\n  }\n}","import { useSearchActions, AutocompleteResponse, SearchIntent } from '@yext/search-headless-react';\nimport { executeSearch, executeAutocomplete } from '../utils/search-operations';\nimport { updateLocationIfNeeded } from '../utils/location-operations';\nimport { MutableRefObject, useRef } from 'react';\nimport { onSearchFunc } from '../components/SearchBar';\n\n/** The type of a function for executing a query and returning a promise. @public */\nexport type QueryFunc = () => Promise<void>;\n/**\n * A ref which contains a promise of the latest autocomplete response in order get the\n * latest search intents.\n */\nexport type AutocompleteRef = MutableRefObject<Promise<AutocompleteResponse | undefined> | undefined>;\n\n/**\n * Returns a search action that will handle near me searches, by first checking\n * for near me intents using an autocomplete request.\n *\n * @remarks\n * You can optionally use the provided ref to store autocomplete responses, to avoid\n * making unnecessary autocomplete requests.\n */\nexport function useSearchWithNearMeHandling(\n  geolocationOptions?: PositionOptions,\n  onSearch?: onSearchFunc\n): [QueryFunc, AutocompleteRef] {\n  /**\n   * Allow a query search to wait on the response to the autocomplete request right\n   * before the search execution in order to retrieve the search intents.\n   */\n  const autocompletePromiseRef = useRef<Promise<AutocompleteResponse | undefined>>(undefined);\n  const searchActions = useSearchActions();\n\n  async function executeQuery() {\n    try {\n      let intents: SearchIntent[] = [];\n      if (!searchActions.state.location.userLocation) {\n        if (!autocompletePromiseRef.current) {\n          autocompletePromiseRef.current = executeAutocomplete(searchActions);\n        }\n        const autocompleteResponseBeforeSearch = await autocompletePromiseRef.current;\n        intents = autocompleteResponseBeforeSearch?.inputIntents || [];\n        await updateLocationIfNeeded(searchActions, intents, geolocationOptions);\n      }\n    } catch (e) {\n      console.error('Error executing autocomplete before search:', e);\n      await updateLocationIfNeeded(searchActions, [], geolocationOptions);\n    }\n    const verticalKey = searchActions.state.vertical.verticalKey ?? '';\n    const query = searchActions.state.query.input ?? '';\n    onSearch\n      ? onSearch({ verticalKey, query })\n      : executeSearch(searchActions);\n  }\n  return [executeQuery, autocompletePromiseRef];\n}","import {\n  SearchActions,\n  AutocompleteResponse,\n  GenerativeDirectAnswerResponse,\n  SearchIntent,\n  SearchTypeEnum\n} from '@yext/search-headless-react';\n\n/**\n * Executes a universal/vertical search.\n *\n * @public\n */\nexport async function executeSearch(searchActions: SearchActions): Promise<void> {\n  const isVertical = searchActions.state.meta.searchType === SearchTypeEnum.Vertical;\n  try {\n    isVertical\n      ? searchActions.executeVerticalQuery()\n      : searchActions.executeUniversalQuery();\n  } catch (e) {\n    console.error(`Error occured executing a ${isVertical ? 'vertical' : 'universal'} search.\\n`, e);\n  }\n}\n\n/**\n * Executes a universal/vertical autocomplete search and return the corresponding response.\n *\n * @public\n */\nexport async function executeAutocomplete(\n  searchActions: SearchActions\n): Promise<AutocompleteResponse | undefined> {\n  const isVertical = searchActions.state.meta.searchType === SearchTypeEnum.Vertical;\n  try {\n    return isVertical\n      ? searchActions.executeVerticalAutocomplete()\n      : searchActions.executeUniversalAutocomplete();\n  } catch (e) {\n    console.error(`Error occured executing a ${isVertical ? 'vertical' : 'universal'} autocomplete search.\\n`, e);\n  }\n}\n\n/**\n * Get search intents of the current query stored in headless using autocomplete request.\n *\n * @public\n */\nexport async function getSearchIntents(\n  searchActions: SearchActions\n): Promise<SearchIntent[] | undefined> {\n  const results = await executeAutocomplete(searchActions);\n  return results?.inputIntents;\n}\n\n/**\n * Executes a generative direct answer and return the corresponding response.\n *\n * @public\n */\nexport async function executeGenerativeDirectAnswer(\n  searchActions: SearchActions\n): Promise<GenerativeDirectAnswerResponse | undefined> {\n  try {\n    return await searchActions.executeGenerativeDirectAnswer();\n  } catch (e) {\n    console.error('Error occured executing generative direct answer.\\n', e);\n  }\n}\n","import {\n  SearchActions,\n  SearchIntent,\n} from '@yext/search-headless-react';\n\nconst defaultGeolocationOptions: PositionOptions = {\n  enableHighAccuracy: false,\n  timeout: 6000,\n  maximumAge: 300000,\n};\n\n/**\n * If the provided search intents include a 'NEAR_ME' intent and there's no existing\n * user's location in state, retrieve and store user's location in headless state.\n *\n * @public\n */\nexport async function updateLocationIfNeeded(\n  searchActions: SearchActions,\n  intents: SearchIntent[],\n  geolocationOptions?: PositionOptions\n): Promise<void> {\n  if (intents.includes(SearchIntent.NearMe) && !searchActions.state.location.userLocation) {\n    try {\n      const position = await getUserLocation(geolocationOptions);\n      searchActions.setUserLocation({\n        latitude: position.coords.latitude,\n        longitude: position.coords.longitude,\n      });\n    } catch (e) {\n      console.error(e);\n    }\n  }\n}\n\n/**\n * Retrieves user's location using navigator.geolocation API.\n *\n * @public\n */\nexport async function getUserLocation(geolocationOptions?: PositionOptions): Promise<GeolocationPosition> {\n  return new Promise((resolve, reject) => {\n    if ('geolocation' in navigator) {\n      navigator.geolocation.getCurrentPosition(\n        position => resolve(position),\n        err => {\n          console.error('Error occured using geolocation API. Unable to determine user\\'s location.');\n          reject(err);\n        },\n        { ...defaultGeolocationOptions, ...geolocationOptions }\n      );\n    } else {\n      reject('No access to geolocation API. Unable to determine user\\'s location.');\n    }\n  });\n}\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { useComponentMountStatus } from './useComponentMountStatus';\n\n/**\n * Handles the network request race condition by synchronizing requests with their responses. If multiple\n * requests are sent before getting a response, only the response corresponding to the latest request will\n * be returned.\n *\n * @param executeRequest - Function that executes the network request\n * @param handleRejectedPromise - Function that executes when a rejected promise is received from the request\n *\n * @returns Reponse to the latest request and a function to execute the request in a synchronized manner\n */\nexport function useSynchronizedRequest<RequestDataType, ResponseType>(\n  executeRequest: (data?: RequestDataType) => Promise<ResponseType | undefined>,\n  handleRejectedPromise?: (error: unknown) => void\n): [\n    ResponseType | undefined,\n    (data?: RequestDataType) => Promise<ResponseType | undefined>,\n    () => void\n  ]\n{\n  const executeRequestRef = useRef(executeRequest);\n  const handleRejectedPromiseRef = useRef(handleRejectedPromise);\n  const isMountedRef = useComponentMountStatus();\n  const networkIds = useRef({ latestRequest: 0, responseInState: 0 });\n  const [synchronizedResponse, setSynchronizedResponse] = useState<ResponseType>();\n\n  const executeSynchronizedRequest = useCallback(async (data?: RequestDataType):\n  Promise<ResponseType | undefined> => {\n    const requestId = ++networkIds.current.latestRequest;\n    return new Promise(async (resolve) => {\n      let response: ResponseType | undefined = undefined;\n      try {\n        response = await executeRequestRef.current(data);\n      } catch (e) {\n        handleRejectedPromiseRef.current ? handleRejectedPromiseRef.current(e) : console.error(e);\n      }\n      if (requestId >= networkIds.current.responseInState) {\n        /**\n         * Avoid performing a React state update on an unmounted component\n         * (e.g unmounted during async await)\n         */\n        if (!isMountedRef.current) {\n          return;\n        }\n        setSynchronizedResponse(response);\n        networkIds.current.responseInState = requestId;\n      }\n      resolve(response);\n    });\n  }, [isMountedRef]);\n\n  const clearResponseData = useCallback(() => {\n    setSynchronizedResponse(undefined);\n  }, [setSynchronizedResponse]);\n\n  useEffect(() => {\n    executeRequestRef.current = executeRequest;\n    handleRejectedPromiseRef.current = handleRejectedPromise;\n  });\n\n  return [synchronizedResponse, executeSynchronizedRequest, clearResponseData];\n}","import React from 'react';\n\nexport function VerticalDividerIcon({ className }: { className?: string }): React.JSX.Element {\n  return (\n    <svg className={className}\n      width=\"1\" height=\"24\" viewBox=\"0 0 1 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <rect width=\"1\" height=\"24\" rx=\"0.5\" fill=\"#E1E5E8\" />\n    </svg>\n  );\n}","import React from 'react';\n\nexport function HistoryIcon(): React.JSX.Element {\n  return (\n    <svg viewBox=\"0 0 14 15\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M13.7813 7.75C13.7539 4.00391 10.7188 0.96875 7 0.96875C5.11328 0.96875 3.39063 1.76172 2.16016 2.99219L0.929688 1.76172C0.738281 1.57031 0.382813 1.70703 0.382813 2.00781L0.382813 5.45312C0.382813 5.64453 0.519531 5.78125 0.710938 5.78125L4.21094 5.78125C4.51172 5.78125 4.64844 5.42578 4.45703 5.23437L3.11719 3.92188C4.10156 2.91016 5.46875 2.28125 7 2.28125C10.0078 2.28125 12.4688 4.74219 12.4688 7.75C12.4688 10.7852 10.0078 13.2187 7 13.2188C5.57813 13.2188 4.32031 12.6992 3.33594 11.8516C3.22656 11.7422 3.00781 11.7422 2.89844 11.8516L2.43359 12.3164C2.29688 12.4531 2.29688 12.6719 2.43359 12.8086C3.63672 13.875 5.25 14.5586 7 14.5312C10.7188 14.5312 13.7813 11.4961 13.7813 7.75ZM9.1875 10.2109L9.59766 9.69141C9.67969 9.52734 9.65234 9.33594 9.51563 9.22656L7.65625 7.85937V3.92187C7.65625 3.75781 7.49219 3.59375 7.32813 3.59375H6.67188C6.48047 3.59375 6.34375 3.75781 6.34375 3.92187V8.54297L8.75 10.293C8.88672 10.4023 9.10547 10.375 9.1875 10.2109Z\"/>\n    </svg>\n  );\n}","import React from 'react';\n\nexport function CloseIcon({ className }: { className?: string }): React.JSX.Element {\n  return (\n    <svg\n      className={className}\n      viewBox=\"0 0 18 18\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      fill='currentColor'\n      aria-hidden=\"true\"\n    >\n      <path d=\"M10.9095 9.00028L16.6786 3.2311L17.8684 2.04138C18.0439 1.86587 18.0439 1.58067 17.8684 1.40517L16.5954 0.132192C16.4199 -0.0433137 16.1347 -0.0433137 15.9592 0.132192L9.00028 7.0911L2.04138 0.131629C1.86587 -0.0438764 1.58067 -0.0438764 1.40517 0.131629L0.131629 1.40461C-0.0438764 1.58011 -0.0438764 1.86531 0.131629 2.04081L7.0911 9.00028L0.131629 15.9592C-0.0438764 16.1347 -0.0438764 16.4199 0.131629 16.5954L1.40461 17.8684C1.58011 18.0439 1.86531 18.0439 2.04081 17.8684L9.00028 10.9095L14.7695 16.6786L15.9592 17.8684C16.1347 18.0439 16.4199 18.0439 16.5954 17.8684L17.8684 16.5954C18.0439 16.4199 18.0439 16.1347 17.8684 15.9592L10.9095 9.00028Z\" fill=\"#6b7280\"/>\n    </svg>\n  );\n}\n","import React from 'react';\n\nexport function MagnifyingGlassIcon(): React.JSX.Element {\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n      <path d=\"M0 0h24v24H0V0z\" fill=\"none\" />\n      <path\n        d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n    </svg>\n  );\n}","import { useTranslation } from 'react-i18next';\nimport React, {\n  createElement,\n  isValidElement,\n  KeyboardEvent,\n  PropsWithChildren,\n  ReactNode,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { DropdownContext, DropdownContextType } from './DropdownContext';\nimport { InputContext, InputContextType } from './InputContext';\nimport useRootClosePkg from '@restart/ui/useRootClose';\nimport { FocusContext, FocusContextType } from './FocusContext';\nimport { ScreenReader } from '../ScreenReader';\nimport { recursivelyMapChildren } from '../utils/recursivelyMapChildren';\nimport { DropdownItem, DropdownItemProps, DropdownItemWithIndex } from './DropdownItem';\nimport { useLayoutEffect } from '../../hooks/useLayoutEffect';\nimport { useId } from '../../hooks/useId';\n\nconst useRootClose = typeof useRootClosePkg === 'function' ? useRootClosePkg : useRootClosePkg['default'];\n\ninterface DropdownItemData {\n  value: string,\n  itemData?: Record<string, unknown>\n}\n\nexport interface DropdownProps {\n  screenReaderText: string,\n  screenReaderInstructions?: string,\n  parentQuery?: string,\n  onSelect?: (value: string, index: number, focusedItemData: Record<string, unknown> | undefined) => void,\n  onToggle?: (\n    isActive: boolean,\n    prevValue: string,\n    value: string,\n    index: number,\n    focusedItemData: Record<string, unknown> | undefined\n  ) => void,\n  className?: string,\n  activeClassName?: string,\n  alwaysSelectOption?: boolean\n}\n\n/**\n * Dropdown is the parent component for a set of Dropdown-related components.\n *\n * @remarks\n * It provides multiple shared contexts, which are consumed by its child components,\n * and also registers some global event listeners.\n */\nexport function Dropdown(props: PropsWithChildren<DropdownProps>): React.JSX.Element {\n  const { t } = useTranslation();\n  const {\n    children,\n    screenReaderText,\n    screenReaderInstructions,\n    onSelect,\n    onToggle,\n    className,\n    activeClassName,\n    parentQuery,\n    alwaysSelectOption = false\n  } = props;\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const screenReaderUUID = useId('dropdown');\n  const dropdownListUUID = useId('dropdown-list');\n  const [screenReaderKey, setScreenReaderKey] = useState<number>(0);\n  const [hasTyped, setHasTyped] = useState<boolean>(false);\n  const [childrenWithDropdownItemsTransformed, items] = useMemo(() => {\n    return getTransformedChildrenAndItemData(children);\n  }, [children]);\n\n  const inputContext = useInputContextInstance();\n  const { value, setValue, lastTypedOrSubmittedValue, setLastTypedOrSubmittedValue } = inputContext;\n\n  const focusContext = useFocusContextInstance(\n    items,\n    lastTypedOrSubmittedValue,\n    setValue,\n    setScreenReaderKey,\n    alwaysSelectOption\n  );\n  const { focusedIndex, focusedItemData, updateFocusedItem } = focusContext;\n\n  const dropdownContext = useDropdownContextInstance(\n    lastTypedOrSubmittedValue,\n    value,\n    focusedIndex,\n    focusedItemData,\n    screenReaderUUID,\n    dropdownListUUID,\n    setHasTyped,\n    onToggle,\n    onSelect\n  );\n  const { toggleDropdown, isActive } = dropdownContext;\n\n  useLayoutEffect(() => {\n    if (parentQuery !== undefined && parentQuery !== lastTypedOrSubmittedValue) {\n      setLastTypedOrSubmittedValue(parentQuery);\n      updateFocusedItem(-1, parentQuery);\n    }\n  }, [\n    parentQuery,\n    lastTypedOrSubmittedValue,\n    updateFocusedItem,\n    setLastTypedOrSubmittedValue\n  ]);\n\n  useRootClose(containerRef as React.RefObject<Element>, () => {\n    toggleDropdown(false);\n  }, { disabled: !isActive });\n\n  function handleKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n    if (!isActive) {\n      return;\n    }\n\n    if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n      e.preventDefault();\n    }\n\n    if (e.key === 'ArrowDown') {\n      if (alwaysSelectOption && focusedIndex === items.length - 1) {\n        updateFocusedItem(0);\n      } else {\n        updateFocusedItem(focusedIndex + 1);\n      }\n    } else if (e.key === 'ArrowUp') {\n      if (alwaysSelectOption && focusedIndex === 0) {\n        updateFocusedItem(items.length - 1);\n      } else {\n        updateFocusedItem(focusedIndex - 1);\n      }\n    } else if (e.key === 'Tab' && !e.shiftKey) {\n      updateFocusedItem(-1);\n      toggleDropdown(false);\n    } else if (!hasTyped) {\n      setHasTyped(true);\n    }\n  }\n\n  return (\n    <div ref={containerRef} className={isActive ? activeClassName : className} onKeyDown={handleKeyDown}>\n      <DropdownContext.Provider value={dropdownContext}>\n        <InputContext.Provider value={inputContext}>\n          <FocusContext.Provider value={focusContext}>\n            {childrenWithDropdownItemsTransformed}\n          </FocusContext.Provider>\n        </InputContext.Provider>\n      </DropdownContext.Provider>\n\n      <ScreenReader\n        announcementKey={screenReaderKey}\n        announcementText={isActive && (hasTyped || items.length || value) ? screenReaderText : ''}\n        instructionsId={screenReaderUUID}\n        instructions={screenReaderInstructions ?? t('dropDownScreenReaderInstructions')}\n      />\n    </div>\n  );\n}\n\nfunction useInputContextInstance(): InputContextType {\n  const [value, setValue] = useState('');\n  const [lastTypedOrSubmittedValue, setLastTypedOrSubmittedValue] = useState('');\n  return {\n    value,\n    setValue,\n    lastTypedOrSubmittedValue,\n    setLastTypedOrSubmittedValue\n  };\n}\n\nfunction useFocusContextInstance(\n  items: DropdownItemData[],\n  lastTypedOrSubmittedValue: string,\n  setValue: (newValue: string) => void,\n  setScreenReaderKey: React.Dispatch<React.SetStateAction<number>>,\n  alwaysSelectOption: boolean\n): FocusContextType {\n  const [focusedIndex, setFocusedIndex] = useState(-1);\n  const [focusedValue, setFocusedValue] = useState<string | null>(null);\n  const [focusedItemData, setFocusedItemData] = useState<Record<string, unknown> | undefined>(undefined);\n  useEffect(() => {\n    if (alwaysSelectOption) {\n      if (items.length > 0) {\n        const index = focusedIndex === -1 || focusedIndex >= items.length ? 0 : focusedIndex;\n        setFocusedIndex(index);\n        setFocusedValue(items[index].value);\n        setFocusedItemData(items[index].itemData);\n      } else {\n        setFocusedIndex(-1);\n        setFocusedValue(null);\n        setFocusedItemData(undefined);\n      }\n    }\n  }, [alwaysSelectOption, focusedIndex, items]);\n\n  function updateFocusedItem(updatedFocusedIndex: number, value?: string) {\n    const numItems = items.length;\n    let updatedValue;\n    if (updatedFocusedIndex === -1 || updatedFocusedIndex >= numItems || numItems === 0) {\n      updatedValue = value ?? lastTypedOrSubmittedValue;\n      if (alwaysSelectOption && numItems !== 0) {\n        setFocusedIndex(0);\n        setFocusedItemData(items[0].itemData);\n        setScreenReaderKey(prev => prev + 1);\n      } else {\n        setFocusedIndex(-1);\n        setFocusedItemData(undefined);\n        setScreenReaderKey(prev => prev + 1);\n      }\n    } else if (updatedFocusedIndex < -1) {\n      const loopedAroundIndex = (numItems + updatedFocusedIndex + 1) % numItems;\n      updatedValue = value ?? items[loopedAroundIndex].value;\n      setFocusedIndex(loopedAroundIndex);\n      setFocusedItemData(items[loopedAroundIndex].itemData);\n    } else {\n      updatedValue = value ?? items[updatedFocusedIndex].value;\n      setFocusedIndex(updatedFocusedIndex);\n      setFocusedItemData(items[updatedFocusedIndex].itemData);\n    }\n    setFocusedValue(updatedValue);\n    setValue(alwaysSelectOption ? (value ?? lastTypedOrSubmittedValue) : updatedValue);\n  }\n\n  return {\n    focusedIndex,\n    focusedValue,\n    focusedItemData,\n    updateFocusedItem\n  };\n}\n\nfunction useDropdownContextInstance(\n  prevValue: string,\n  value: string,\n  index: number,\n  focusedItemData: Record<string, unknown> | undefined,\n  screenReaderUUID: string | undefined,\n  dropdownListUUID: string | undefined,\n  setHasTyped: (hasTyped: boolean) => void,\n  onToggle?: (\n    isActive: boolean,\n    prevValue: string,\n    value: string,\n    index: number,\n    focusedItemData: Record<string, unknown> | undefined\n  ) => void,\n  onSelect?: (value: string, index: number, focusedItemData: Record<string, unknown> | undefined) => void\n): DropdownContextType {\n  const [isActive, _toggleDropdown] = useState(false);\n  const toggleDropdown = (willBeOpen: boolean) => {\n    if (!willBeOpen) {\n      setHasTyped(false);\n    }\n    _toggleDropdown(willBeOpen);\n    onToggle?.(willBeOpen, prevValue, value, index, focusedItemData);\n  };\n  return {\n    isActive,\n    toggleDropdown,\n    onSelect,\n    screenReaderUUID,\n    dropdownListUUID\n  };\n}\n\nfunction getTransformedChildrenAndItemData(children: ReactNode): [ReactNode, DropdownItemData[]] {\n  const items: DropdownItemData [] = [];\n  const childrenWithDropdownItemsTransformed = recursivelyMapChildren(children, (child => {\n    if (!(isValidElement(child) && child.type === DropdownItem)) {\n      return child;\n    }\n    const props = child.props as DropdownItemProps;\n    items.push({\n      value: props.value,\n      itemData: props.itemData\n    });\n    return createElement(DropdownItemWithIndex, { ...props, index: items.length - 1 });\n  }));\n  return [childrenWithDropdownItemsTransformed, items];\n}\n","import { createContext, useContext } from 'react';\n\n/**\n * The Context responsible for the Dropdown state.\n */\nexport type DropdownContextType = {\n  isActive: boolean,\n  screenReaderUUID?: string,\n  dropdownListUUID?: string,\n  toggleDropdown: (visible: boolean) => void,\n  onSelect?: (value: string, index: number, focusedItemData: Record<string, unknown> | undefined) => void\n};\n\nexport const DropdownContext = createContext<DropdownContextType | null>(null);\n\nexport function useDropdownContext(): DropdownContextType {\n  const dropdownContextInstance = useContext(DropdownContext);\n  if (dropdownContextInstance === null) {\n    throw new Error('Tried to use DropdownContext when none exists.');\n  }\n  return dropdownContextInstance;\n}","import { useContext, createContext } from 'react';\n\n/**\n * A Context for a string state value.\n */\nexport type InputContextType = {\n  value: string,\n  setValue: (newValue: string) => void,\n  lastTypedOrSubmittedValue: string,\n  setLastTypedOrSubmittedValue: (newValue: string) => void\n};\n\nexport const InputContext = createContext<InputContextType | null>(null);\n\nexport function useInputContext(): InputContextType {\n  const inputContextInstance = useContext(InputContext);\n  if (inputContextInstance === null) {\n    throw new Error('Tried to use InputContext when none exists.');\n  }\n  return inputContextInstance;\n}","import { createContext, useContext } from 'react';\n\n/**\n * The data associated with the currently focused item.\n *\n * @public\n */\nexport type FocusedItemData = Record<string, unknown>;\n\n/**\n * The Context responsible for the currently focused item in a Dropdown.\n */\nexport type FocusContextType = {\n  focusedIndex: number,\n  focusedValue: string | null,\n  focusedItemData: FocusedItemData | undefined,\n  updateFocusedItem: (index: number, value?: string) => void\n};\n\nexport const FocusContext = createContext<FocusContextType | null>(null);\n\nexport function useFocusContext(): FocusContextType {\n  const focusContextInstance = useContext(FocusContext);\n  if (focusContextInstance === null) {\n    throw new Error('Tried to use FocusContext when none exists.');\n  }\n  return focusContextInstance;\n}\n","import React from 'react';\n\ninterface Props {\n  instructionsId?: string,\n  instructions: string,\n  announcementKey: number,\n  announcementText: string\n}\n\nexport function ScreenReader({\n  instructionsId,\n  instructions,\n  announcementKey,\n  announcementText,\n}: Props): React.JSX.Element | null {\n\n  return (\n    <>\n      <div\n        id={instructionsId}\n        className='sr-only'\n      >\n        {instructions}\n      </div>\n      <div\n        className='sr-only'\n        key={announcementKey}\n        aria-live='polite'\n        aria-atomic='true'\n      >\n        {announcementText}\n      </div>\n    </>\n  );\n}\n","import { Children, cloneElement, isValidElement, ReactElement, ReactNode, ReactPortal } from 'react';\n\n/**\n * Recursively performs React.Children.map on a given ReactNode.\n */\nexport function recursivelyMapChildren(\n  children: ReactNode,\n  elementReplacer: (c: ReactElement | ReactPortal, index: number) => ReactNode | null\n): ReactNode {\n  return Children.map<ReactNode, ReactNode>(children, (c, index) => {\n    if (!isValidElement(c)) {\n      return c;\n    }\n    const replacedElement = elementReplacer(c, index);\n    if (!replacedElement || !isValidElement(replacedElement)) {\n      return replacedElement;\n    }\n    if (!('props' in replacedElement)) {\n      return replacedElement;\n    }\n    const grandchildren = (replacedElement as ReactElement<{ children?: ReactNode }>).props.children;\n    if (!grandchildren) {\n      return replacedElement;\n    }\n    const replacedGrandchildren = recursivelyMapChildren(grandchildren, elementReplacer);\n    return cloneElement(replacedElement, {}, [replacedGrandchildren]);\n  });\n}","import React, { PropsWithChildren, useCallback } from 'react';\nimport { useDropdownContext } from './DropdownContext';\nimport { FocusedItemData, useFocusContext } from './FocusContext';\nimport { generateDropdownId } from './generateDropdownId';\nimport { useInputContext } from './InputContext';\nimport { twMerge } from '../../hooks/useComposedCssClasses';\n\n/**\n * Props for the {@link DropdownItem}.\n *\n * @public\n */\nexport type DropdownItemProps = PropsWithChildren<{\n  /** The value associated with the dropdown item. */\n  value: string,\n  /** The CSS classes which put on the dropdown item. */\n  className?: string,\n  /** The CSS classes put on the dropdown item when it is focused. */\n  focusedClassName?: string,\n  /** Data associated with the dropdown item which is passed to the onClick and the onSelect handlers. */\n  itemData?: Record<string, unknown> | undefined,\n  /** A function which is fired when the item is clicked. */\n  onClick?: (value: string, index: number, focusedItemData: FocusedItemData | undefined) => void,\n  /** Screenreader text. */\n  ariaLabel?: string | ((value: string) => string)\n}>;\n\n/**\n * A wrapper component for specifying a DropdownItemWithIndex.\n * The index will be automatically provided by the Dropdown component instance.\n *\n * @public\n */\nexport function DropdownItem(_props: DropdownItemProps): React.JSX.Element | null { return null; }\n\nexport function DropdownItemWithIndex(props: DropdownItemProps & { index: number }): React.JSX.Element {\n  const {\n    children,\n    value,\n    index,\n    className,\n    focusedClassName,\n    itemData,\n    onClick,\n    ariaLabel\n  } = props;\n\n  const { toggleDropdown, onSelect, screenReaderUUID } = useDropdownContext();\n  const { focusedIndex, updateFocusedItem } = useFocusContext();\n  const { setValue, setLastTypedOrSubmittedValue } = useInputContext();\n\n  const isFocused = focusedIndex === index;\n\n  const handleClick = useCallback(() => {\n    toggleDropdown(false);\n    updateFocusedItem(-1);\n    setLastTypedOrSubmittedValue(value);\n    setValue(value);\n    onSelect?.(value, index, itemData);\n    onClick?.(value, index, itemData);\n  }, [\n    index,\n    itemData,\n    onClick,\n    onSelect,\n    setLastTypedOrSubmittedValue,\n    setValue,\n    toggleDropdown,\n    updateFocusedItem,\n    value\n  ]);\n\n  const baseButtonClasses = 'bg-transparent border-0 p-0 m-0 font-inherit text-inherit text-left '\n    + 'cursor-pointer w-full self-stretch box-border';\n  const combinedClassName = twMerge(\n    baseButtonClasses,\n    isFocused ? focusedClassName ?? '' : className ?? ''\n  );\n\n  return (\n    <button\n      id={generateDropdownId(screenReaderUUID, index)}\n      type=\"button\"\n      tabIndex={-1}\n      className={combinedClassName}\n      onClick={handleClick}\n      aria-label={typeof ariaLabel === 'function' ? ariaLabel(value) : ariaLabel}\n      role=\"option\"\n      aria-selected={isFocused}\n    >\n      {children}\n    </button>\n  );\n}\n","/**\n * Generates an id for a {@link DropdownItem}, for use with aria\n * attributes like aria-activedescendant.\n *\n * @param screenReaderUUID - the shared UUID for the {@link Dropdown} instance\n * @param index - the index of the dropdown item in question\n */\nexport function generateDropdownId(screenReaderUUID: string | undefined, index: number): string {\n  if (!screenReaderUUID) return '';\n  return screenReaderUUID + '_' + index;\n}","import { useMemo } from 'react';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n/**\n * We extend the base tailwind-merge so that conflicts between custom classes can be\n * handled correctly.\n *\n * When new tailwind classes are introduced they should be added to the `classGroups` object below.\n *\n * @example\n * tailwindcss/forms adds the form-input, form-checkbox, etc. classes,\n * so we need to add the 'form' class group here for twMerge to recognize form-input\n * and form-checkbox as conflicting classes.\n */\nexport const twMerge = extendTailwindMerge({\n  classGroups: {\n    form: ['input', 'checkbox', 'textarea', 'select', 'multiselect', 'radio'].map(v => 'form-' + v)\n  }\n});\n\n/**\n * useComposedCssClasses merges a component's built-in tailwind classes with custom tailwind classes.\n *\n * @remarks\n * Tailwind classes will be merged without conflict, with custom classes having higher priority\n * than built-in ones.\n *\n * @example\n * Suppose a component has built-in classes of `{ container: 'px-4 text-slate-700' }`.\n *\n * Passing in the custom classes:\n *\n * ```ts\n * { container: 'text-red-200 mb-3' }\n * ```\n *\n * results in the merged classes of:\n *\n * ```ts\n * { container: 'px-4 text-red-200 mb-3' }\n * ```\n *\n * @public\n *\n * @param builtInClasses - The component's built-in tailwind classes\n * @param customClasses - The custom tailwind classes to merge with the built-in ones\n * @param disableBuiltInClasses - If set to true, the customClasses with replace\n * (not merge with) the builtInClasses\n * @returns The composed CSS classes\n */\nexport function useComposedCssClasses<\n  ClassInterface extends Partial<Record<keyof ClassInterface & string, string>>\n>(\n  builtInClasses: Readonly<ClassInterface>,\n  customClasses?: Partial<ClassInterface>,\n  disableBuiltInClasses = false\n): ClassInterface {\n  return useMemo(() => {\n    if (disableBuiltInClasses && customClasses) {\n      return customClasses as Readonly<ClassInterface>;\n    }\n    const mergedCssClasses = { ...builtInClasses };\n    if (!customClasses) {\n      return mergedCssClasses;\n    }\n    Object.keys(customClasses).forEach(key => {\n      const builtIn = (builtInClasses as any)[key];\n      const custom = (customClasses as any)[key];\n      if (!builtIn || !custom) {\n        (mergedCssClasses as any)[key] = custom || builtIn;\n      } else {\n        (mergedCssClasses as any)[key] = twMerge(builtIn, custom);\n      }\n    });\n    return mergedCssClasses;\n  }, [builtInClasses, customClasses, disableBuiltInClasses]);\n}\n","import useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\n\nexport const useLayoutEffect = typeof useIsomorphicLayoutEffect === 'function'\n  ? useIsomorphicLayoutEffect\n  : useIsomorphicLayoutEffect['default'];\n","// Copied with minor modifications from\n// https://github.com/reach/reach-ui/blob/dev/packages/auto-id/src/reach-auto-id.ts\n\nimport React, { useEffect, useState } from 'react';\nimport { useLayoutEffect } from './useLayoutEffect';\n\nlet serverHandoffComplete = false;\nlet id = 0;\nfunction genId(baseName: string): string {\n  ++id;\n  return baseName + '-' + id.toString();\n}\n\n// Workaround for https://github.com/webpack/webpack/issues/14814\n// https://github.com/eps1lon/material-ui/blob/8d5f135b4d7a58253a99ab56dce4ac8de61f5dc1/packages/mui-utils/src/useId.ts#L21\nconst maybeReactUseId: undefined | (() => string) = (React as any)[\n  'useId'.toString()\n];\n\n/**\n * useId\n *\n * Autogenerate IDs to facilitate WAI-ARIA and server rendering.\n *\n * Note: The returned ID will initially be empty string and will update after a\n * component mounts.\n *\n * @see Docs https://reach.tech/auto-id\n */\n\nexport function useId(baseName: string): string {\n  const reactId = maybeReactUseId?.();\n\n  // If this instance isn't part of the initial render, we don't have to do the\n  // double render/patch-up dance. We can just generate the ID and return it.\n  const initialId = (serverHandoffComplete ? genId(baseName) : '');\n  const [id, setId] = useState(initialId);\n\n  useLayoutEffect(() => {\n    if (id === '') {\n      // Patch the ID after render. We do this in `useLayoutEffect` to avoid any\n      // rendering flicker, though it'll make the first render slower (unlikely\n      // to matter, but you're welcome to measure your app and let us know if\n      // it's a problem).\n      setId(genId(baseName));\n    }\n  }, [baseName, id]);\n\n  useEffect(() => {\n    if (serverHandoffComplete === false) {\n      // Flag all future uses of `useId` to skip the update dance. This is in\n      // `useEffect` because it goes after `useLayoutEffect`, ensuring we don't\n      // accidentally bail out of the patch-up dance prematurely.\n      serverHandoffComplete = true;\n    }\n  }, []);\n\n  return reactId ?? id;\n}\n","import React, { ChangeEvent, KeyboardEvent, useCallback, useRef, useState } from 'react';\nimport { useDropdownContext } from './DropdownContext';\nimport { useFocusContext, FocusedItemData } from './FocusContext';\nimport { generateDropdownId } from './generateDropdownId';\nimport { useInputContext } from './InputContext';\n\n/**\n * An input component for use within a Dropdown.\n */\nexport function DropdownInput(props: {\n  className?: string,\n  placeholder?: string,\n  inputId?: string,\n  ariaLabel?: string,\n  ariaLabelledBy?: string,\n  ariaDescribedBy?: string,\n  onSubmit?: (value: string, index: number, focusedItemData: FocusedItemData | undefined ) => void,\n  onFocus?: (value: string) => void,\n  onChange?: (value: string) => void,\n  submitCriteria?: (index: number) => boolean\n}): React.JSX.Element {\n  const {\n    className,\n    placeholder,\n    inputId,\n    ariaLabel,\n    ariaLabelledBy,\n    ariaDescribedBy,\n    onSubmit,\n    onFocus,\n    onChange,\n    submitCriteria\n  } = props;\n\n  const inputRef = useRef<HTMLInputElement>(null);\n  const { toggleDropdown, onSelect, screenReaderUUID, dropdownListUUID, isActive } = useDropdownContext();\n  const { value = '', setLastTypedOrSubmittedValue } = useInputContext();\n  const {\n    focusedIndex = -1,\n    focusedItemData,\n    focusedValue,\n    updateFocusedItem\n  } = useFocusContext();\n  const [isTyping, setIsTyping] = useState<boolean>(true);\n  const describedBy = [screenReaderUUID, ariaDescribedBy].filter(Boolean).join(' ') || undefined;\n  const resolvedAriaLabel = ariaLabelledBy ? undefined : ariaLabel;\n\n  const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n    setIsTyping(true);\n    toggleDropdown(true);\n    onChange?.(e.target.value);\n    updateFocusedItem(-1, e.target.value);\n    setLastTypedOrSubmittedValue(e.target.value);\n  }, [onChange, setLastTypedOrSubmittedValue, toggleDropdown, updateFocusedItem]);\n\n  const handleKeyDown = useCallback((e: KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Tab') {\n      setIsTyping(false);\n    }\n    if (e.key === 'Enter' && (!submitCriteria || submitCriteria(focusedIndex))) {\n      updateFocusedItem(focusedIndex);\n      toggleDropdown(false);\n      inputRef.current?.blur();\n      onSubmit?.(value, focusedIndex, focusedItemData);\n      if (focusedIndex >= 0) {\n        onSelect?.(value, focusedIndex, focusedItemData);\n      }\n      updateFocusedItem(-1, focusedValue ?? undefined);\n    }\n  }, [\n    focusedIndex,\n    focusedValue,\n    focusedItemData,\n    onSelect,\n    onSubmit,\n    submitCriteria,\n    toggleDropdown,\n    updateFocusedItem,\n    value\n  ]);\n\n  const handleFocus = useCallback(() => {\n    toggleDropdown(true);\n    updateFocusedItem(-1);\n    onFocus?.(value);\n  }, [onFocus, toggleDropdown, updateFocusedItem, value]);\n\n  return (\n    <input\n      ref={inputRef}\n      className={className}\n      placeholder={placeholder}\n      value={value}\n      onChange={handleChange}\n      onKeyDown={handleKeyDown}\n      onFocus={handleFocus}\n      id={inputId ?? generateDropdownId(screenReaderUUID, -1)}\n      autoComplete='off'\n      aria-describedby={describedBy}\n      aria-activedescendant={\n        !isTyping ? generateDropdownId(screenReaderUUID, focusedIndex) : undefined\n      }\n      aria-label={resolvedAriaLabel}\n      aria-labelledby={ariaLabelledBy}\n      aria-autocomplete=\"list\"\n      role=\"combobox\"\n      aria-controls={dropdownListUUID}\n      aria-expanded={isActive ? 'true' : 'false'}\n      aria-haspopup=\"listbox\"\n    />\n  );\n}","import React, { PropsWithChildren } from 'react';\nimport { useDropdownContext } from './DropdownContext';\n\ntype DropdownMenuProps = PropsWithChildren<{\n  className?: string\n}>;\n\n/**\n * DropdownMenu is a container for the overlay portion of a Dropdown.\n */\nexport function DropdownMenu(\n  { children, className }: DropdownMenuProps\n): React.JSX.Element | null {\n  const { isActive, dropdownListUUID } = useDropdownContext();\n  if (!isActive) {\n    return null;\n  }\n\n  return (\n    <div\n      id={dropdownListUUID}\n      className={className}\n      role='listbox'\n    >\n      {children}\n    </div>\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport { MagnifyingGlassIcon } from '../icons/MagnifyingGlassIcon';\nimport React from 'react';\n\ninterface Props {\n  handleClick: () => void,\n  className?: string\n}\n\nexport function SearchButton({ handleClick, className }: Props): React.JSX.Element {\n  const { t } = useTranslation();\n  return (\n    <button\n      className={className}\n      onClick={handleClick}\n      aria-label={t('submitSearch')}\n    >\n      <MagnifyingGlassIcon />\n    </button>\n  );\n}","import { HighlightedValue } from '@yext/search-headless-react';\nimport React from 'react';\n\nconst defaultCssClasses: HighlightedValueCssClasses = {\n  highlighted: 'font-normal',\n  nonHighlighted: 'font-semibold'\n};\n\n/**\n * The CSS class interface for {@link renderHighlightedValue}.\n *\n * @public\n */\nexport interface HighlightedValueCssClasses {\n  highlighted?: string,\n  nonHighlighted?: string\n}\n\n/**\n * Renders a HighlightedValue with highlighting based on its matchedSubstrings.\n * @returns React.JSX.Element\n *\n * @public\n *\n * @param highlightedValueOrString - the text to add highlight to.\n * @param customCssClasses - css classes use for the non-highlighted and highlighted text.\n */\nexport function renderHighlightedValue(\n  highlightedValueOrString: Partial<HighlightedValue> | string,\n  customCssClasses?: HighlightedValueCssClasses\n): React.JSX.Element {\n  const { value = '', matchedSubstrings } =\n    typeof highlightedValueOrString === 'string'\n      ? { value: highlightedValueOrString, matchedSubstrings: [] }\n      : highlightedValueOrString;\n\n  const cssClasses = { ...defaultCssClasses, ...customCssClasses };\n  if (!matchedSubstrings || matchedSubstrings.length === 0) {\n    return <span>{value}</span>;\n  }\n  const substrings = [...matchedSubstrings];\n  substrings.sort((a, b) => a.offset - b.offset);\n  const highlightedJSX: React.JSX.Element[] = [];\n  let curr = 0;\n  for (const { offset, length } of substrings) {\n    if (offset > curr) {\n      highlightedJSX.push(\n        <span key={curr} className={cssClasses.nonHighlighted} >{value.substring(curr, offset)}</span>\n      );\n    }\n    highlightedJSX.push(\n      <span key={offset} className={cssClasses.highlighted}>{value.substring(offset, offset + length)}</span>\n    );\n    curr = offset + length;\n  }\n  if (curr < value.length) {\n    highlightedJSX.push(\n      <span key={curr} className={cssClasses.nonHighlighted} >{value.substring(curr)}</span>\n    );\n  }\n  return <>{highlightedJSX}</>;\n}","import { AutocompleteResult } from '@yext/search-headless-react';\nimport { renderHighlightedValue } from './renderHighlightedValue';\nimport React from 'react';\n\n/**\n * The CSS class interface for the Autocomplete Result.\n *\n * @public\n */\nexport interface AutocompleteResultCssClasses {\n  option?: string,\n  icon?: string,\n  highlighted?: string,\n  nonHighlighted?: string\n}\n\nexport const builtInCssClasses: Readonly<AutocompleteResultCssClasses> = {\n  option: 'whitespace-no-wrap max-w-full px-3 text-neutral-dark truncate',\n  icon: 'w-6 h-full flex-shrink-0 text-gray-400'\n};\n\n/**\n * Renders an autocomplete result, including an icon to the left if provided.\n * @param result - The result to render\n * @returns React.JSX.Element\n */\nexport function renderAutocompleteResult(\n  result: AutocompleteResult,\n  cssClasses: AutocompleteResultCssClasses = {},\n  Icon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>>\n): React.JSX.Element {\n  return (<>\n    {Icon && <div className={cssClasses.icon}>\n      <Icon />\n    </div>}\n    <div className={cssClasses.option}>\n      {renderHighlightedValue(result, cssClasses)}\n    </div>\n  </>);\n}\n","import { createContext, useContext } from 'react';\nimport { SearchAnalyticsEventService } from '../models/SearchAnalyticsEventService';\n\nexport const AnalyticsContext = createContext<SearchAnalyticsEventService | null>(null);\n\n/**\n * Returns a service that can be used to report analytics events.\n *\n * @public\n */\nexport function useAnalytics(): SearchAnalyticsEventService | null {\n  return useContext(AnalyticsContext);\n}\n","import { useAnalytics } from './useAnalytics';\nimport { useSearchState } from '@yext/search-headless-react';\n\ntype SearchBarAnalyticsType = 'AUTO_COMPLETE_SELECTION' | 'SEARCH_CLEAR_BUTTON';\n\nexport function useSearchBarAnalytics(): (\n  analyticsEventType: SearchBarAnalyticsType\n) => void {\n  const analytics = useAnalytics();\n  const verticalKey = useSearchState(state => state.vertical.verticalKey);\n  const queryId = useSearchState(state => state.query.queryId);\n  const searchId = useSearchState(state => state.meta.uuid);\n  const locale = useSearchState(state => state.meta.locale);\n  const experienceKey = useSearchState(state => state.meta.experienceKey);\n  const searchTerm = useSearchState(state => state.query.mostRecentSearch);\n\n  const reportAutocompleteEvent = () => {\n    if (!experienceKey) {\n      console.error('Unable to report an autocomplete event. Missing field: experienceKey.');\n      return;\n    }\n    analytics?.report({\n      action: 'AUTO_COMPLETE_SELECTION',\n      locale,\n      searchId,\n      queryId,\n      verticalKey,\n      experienceKey,\n      searchTerm,\n    });\n  };\n  const reportSearchClearEvent = () => {\n    if (!experienceKey) {\n      console.error('Unable to report a search clear event. Missing field: experienceKey.');\n      return;\n    }\n    analytics?.report({\n      action: 'SEARCH_CLEAR_BUTTON',\n      locale,\n      searchId,\n      queryId,\n      verticalKey,\n      experienceKey,\n      searchTerm,\n    });\n  };\n  return (\n    analyticsEventType: SearchBarAnalyticsType\n  ) => {\n    if (!analytics) {\n      return;\n    }\n    analyticsEventType === 'AUTO_COMPLETE_SELECTION'\n      ? reportAutocompleteEvent()\n      : reportSearchClearEvent();\n  };\n}\n","/**\n * Data needed to create a URL to a vertical search page.\n *\n * @public\n */\nexport interface VerticalLink {\n  /** The vertical key associated with the vertical link. */\n  verticalKey: string,\n  /** The query used when the vertical link is selected. */\n  query?: string\n}\n\nexport const isVerticalLink = (obj: unknown): obj is VerticalLink => {\n  return typeof obj === 'object' && !!obj && 'verticalKey' in obj;\n};","import { NearFilterValue, FieldValueFilter, NumberRangeValue, Matcher, SearchActions, DisplayableFacet, SelectableStaticFilter, StaticFilter } from '@yext/search-headless-react';\nimport isEqual from 'lodash/isEqual.js';\nimport { isNumberRangeFilter } from '../models/NumberRangeFilter';\nimport { SelectableFieldValueFilter } from '../models/SelectableFieldValueFilter';\n\n/**\n * Check if the object follows NearFilterValue interface.\n */\nexport function isNearFilterValue(obj: unknown): obj is NearFilterValue {\n  return typeof obj === 'object' && !!obj && 'radius' in obj && 'lat' in obj && 'long' in obj;\n}\n\n/**\n * Checks if the object follows the NumberRangeValue interface.\n */\nexport function isNumberRangeValue(obj: unknown): obj is NumberRangeValue {\n  return typeof obj === 'object' && !!obj && ('start' in obj || 'end' in obj);\n}\n\n/**\n * Checks if the facet is a string facet with string options.\n */\nexport function isStringFacet(facet: DisplayableFacet): boolean {\n  return facet.options.length > 0 && typeof facet.options[0].value === 'string';\n}\n\n/**\n * Checks if the facet is a numerical facet with number range filter options.\n */\nexport function isNumericalFacet(facet: DisplayableFacet): boolean {\n  return facet.options.length > 0 &&\n    facet.options.some(option => isNumberRangeFilter(option));\n}\n\n/**\n * Returns true if the two given field value filters are the same.\n */\nexport function isDuplicateFieldValueFilter(\n  thisFilter: FieldValueFilter,\n  otherFilter: FieldValueFilter\n): boolean {\n  if (thisFilter.fieldId !== otherFilter.fieldId) {\n    return false;\n  }\n  if (thisFilter.matcher !== otherFilter.matcher) {\n    return false;\n  }\n  return isEqual(thisFilter.value, otherFilter.value);\n}\n\n/**\n * Returns true if the two given static filters are the same.\n */\nexport function isDuplicateStaticFilter(thisFilter: StaticFilter, otherFilter: StaticFilter): boolean {\n  if (thisFilter.kind === 'fieldValue') {\n    return otherFilter.kind === 'fieldValue'\n      ? isDuplicateFieldValueFilter(thisFilter, otherFilter)\n      : false;\n  }\n\n  if (otherFilter.kind === 'fieldValue') {\n    return false;\n  }\n\n  return thisFilter.combinator === otherFilter.combinator\n    && thisFilter.filters.length === otherFilter.filters.length\n    && thisFilter.filters.every(t => otherFilter.filters.some(o => isDuplicateStaticFilter(t, o)))\n    && otherFilter.filters.every(o => thisFilter.filters.some(t => isDuplicateStaticFilter(o, t)));\n}\n\n/**\n * Finds the {@link SelectableFieldValueFilter} from the list provided that matches\n * the given {@link FieldValueFilter}. If no matching {@link SelectableFieldValueFilter}\n * can be found, undefined is returned.\n *\n * @param filter - The filter to match against\n * @param selectableFilters - The list of {@link SelectableFieldValueFilter}s to search against\n */\nexport function findSelectableFieldValueFilter(\n  filter: FieldValueFilter,\n  selectableFilters: SelectableFieldValueFilter[]\n): SelectableFieldValueFilter | undefined {\n  return selectableFilters.find(selectableFilter => {\n    const { displayName: _, ...storedFilter } = selectableFilter;\n    return isDuplicateFieldValueFilter(storedFilter, filter);\n  });\n}\n\n/**\n * Creates a number range value based on a min and max from user input.\n */\nexport function parseNumberRangeInput(minRangeInput: string, maxRangeInput: string): NumberRangeValue {\n  const minRange = parseNumber(minRangeInput);\n  const maxRange = parseNumber(maxRangeInput);\n\n  return {\n    ...(minRange !== undefined && {\n      start: {\n        matcher: Matcher.GreaterThanOrEqualTo,\n        value: minRange\n      }\n    }),\n    ...(maxRange !== undefined && {\n      end: {\n        matcher: Matcher.LessThanOrEqualTo,\n        value: maxRange\n      }\n    })\n  };\n}\n\n/**\n * Given a string, returns the corresponding number, or undefined if it is NaN.\n */\nfunction parseNumber(num: string) {\n  const parsedNum = parseFloat(num);\n  if (isNaN(parsedNum)) {\n    return undefined;\n  }\n  return parsedNum;\n}\n\n/**\n * Deselects the selected static number range filters in state. If fieldIds are\n * provided, only filters corresponding to one of those fieldIds are deselected.\n * Otherwise, all selected filters are deselected.\n */\nexport function clearStaticRangeFilters(searchActions: SearchActions, fieldIds?: Set<string>) {\n  const selectedStaticRangeFilters = searchActions.state?.filters?.static?.filter(filter =>\n    isNumberRangeFilter(filter)\n    && filter.selected === true\n    && (!fieldIds || fieldIds.has(filter.fieldId))\n  );\n  selectedStaticRangeFilters?.forEach(filter => {\n    searchActions.setFilterOption({\n      ...filter,\n      selected: false\n    });\n  });\n}\n\n/**\n * Returns a set of fieldIds of the numerical facets in state that have at\n * least one option selected.\n */\nexport function getSelectedNumericalFacetFields(searchActions: SearchActions): Set<string> {\n  const selectedNumericalFacets = searchActions.state.filters.facets?.filter(\n    f => isNumericalFacet(f) && f.options.some(o => o.selected)\n  ) ?? [];\n  return new Set(selectedNumericalFacets.map(f => f.fieldId));\n}\n\n/**\n * Goes through the provided static filters and returns all that are field value\n * filters.\n *\n * @param staticFilters - The list of {@link SelectableStaticFilter}s to search through\n * @returns All filters that are {@link SelectableFieldValueFilter}s\n */\nexport function getSelectableFieldValueFilters(\n  staticFilters: SelectableStaticFilter[]\n): SelectableFieldValueFilter[] {\n  return staticFilters.map(s => {\n    const { filter: { kind, ...filterFields }, ...displayFields } = s;\n    if (kind === 'fieldValue') {\n      return {\n        ...displayFields,\n        ...filterFields\n      };\n    }\n    return undefined;\n  }).filter((s): s is SelectableFieldValueFilter => !!s);\n}\n\n/**\n * Creates the filter's display name based on the number range.\n */\nexport function getDefaultFilterDisplayName(numberRange: NumberRangeValue) {\n  const start = numberRange.start;\n  const end = numberRange.end;\n\n  if (start && end) {\n    return `${start.value} - ${end.value}`;\n  } else if (start && !end) {\n    return `Over ${start.value}`;\n  } else if (end && !start) {\n    return `Up to ${end.value}`;\n  }\n  return '';\n}\n","import { FieldValueFilter, Matcher, NumberRangeValue } from '@yext/search-headless-react';\nimport { isNumberRangeValue } from '../utils/filterutils';\n\nexport interface NumberRangeFilter extends FieldValueFilter {\n  value: NumberRangeValue,\n  matcher: Matcher.Between\n}\n\nexport function isNumberRangeFilter(unknownFilter: unknown = {}): unknownFilter is NumberRangeFilter {\n  const filter = unknownFilter as NumberRangeFilter;\n  return (filter.matcher === Matcher.Between) && isNumberRangeValue(filter.value);\n}","import { Trans } from 'react-i18next';\nimport { useSearchState, useSearchActions } from '@yext/search-headless-react';\nimport classNames from 'classnames';\nimport React, { useCallback, useMemo } from 'react';\nimport { useComposedCssClasses } from '../hooks';\nimport { executeSearch } from '../utils';\n\n/**\n * The CSS Class interface for SpellCheck.\n *\n * @public\n */\nexport interface SpellCheckCssClasses {\n  spellCheckLoading?: string,\n  spellCheckContainer?: string,\n  helpText?: string,\n  link?: string\n}\n\nconst builtInCssClasses: Readonly<SpellCheckCssClasses> = {\n  spellCheckLoading: 'opacity-50',\n  spellCheckContainer: 'text-lg pb-3',\n  helpText: 'text-neutral',\n  link: 'text-primary font-bold hover:underline focus:underline'\n};\n\n/**\n * The props for the {@link SpellCheck} component.\n *\n * @public\n */\nexport interface SpellCheckProps {\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: SpellCheckCssClasses,\n  /** A function which is called when a spell check suggestion is clicked. */\n  onClick?: (data: { correctedQuery: string, verticalKey: string }) => void\n}\n\n/**\n * Renders a suggested query if the Search API provides one.\n *\n * @public\n *\n * @param props - {@link SpellCheckProps}\n * @returns A react component for spell check, or null if none exists\n */\nexport function SpellCheck({\n  customCssClasses,\n  onClick\n}: SpellCheckProps): React.JSX.Element | null {\n  const verticalKey = useSearchState(state => state.vertical.verticalKey) ?? '';\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const correctedQuery = useSearchState(state => state.spellCheck.correctedQuery) ?? '';\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n  const containerClassNames = classNames(cssClasses.spellCheckContainer, {\n    [cssClasses.spellCheckLoading ?? '']: isLoading\n  });\n  const searchActions = useSearchActions();\n  const handleClickSuggestion = useCallback(() => {\n    searchActions.setQuery(correctedQuery);\n    onClick\n      ? onClick({ correctedQuery, verticalKey })\n      : executeSearch(searchActions);\n  }, [searchActions, correctedQuery, onClick, verticalKey]);\n\n  const suggestionComponents = useMemo(() => ({\n    button: (\n      <button\n        className={cssClasses.link}\n        onClick={handleClickSuggestion}\n      />\n    )\n  }), [cssClasses.link, handleClickSuggestion]);\n  const suggestionValues = useMemo(() => ({ correctedQuery }), [correctedQuery]);\n\n  if (!correctedQuery) {\n    return null;\n  }\n\n  return (\n    <div className={containerClassNames}>\n      <span className={cssClasses.helpText}>\n        <Trans\n          i18nKey='didYouMean'\n          components={suggestionComponents}\n          values={suggestionValues}\n        />\n      </span>\n    </div>\n  );\n}\n","import { useCallback } from 'react';\nimport { DefaultRawDataType } from '../models/index';\nimport {\n  CardAnalyticsDataType,\n  CardAnalyticsType,\n  useCardAnalytics\n} from './useCardAnalytics';\n\n/**\n * Creates a memoized function for reporting card analytics.\n *\n * @public\n *\n * @param result - result that contains data use in the card analytics event.\n * @param analyticsType - the card analytics event type to report.\n */\nexport function useCardAnalyticsCallback<T = DefaultRawDataType>(\n  result: CardAnalyticsDataType<T>,\n  analyticsType: CardAnalyticsType\n): () => void {\n  const reportAnalyticsEvent = useCardAnalytics<T>();\n  return useCallback(() => {\n    reportAnalyticsEvent(result, analyticsType);\n  }, [analyticsType, reportAnalyticsEvent, result]);\n}\n\n","import { DirectAnswer as DirectAnswerData, DirectAnswerType, Result, useSearchState } from '@yext/search-headless-react';\nimport { useCallback } from 'react';\nimport { FeedbackType } from '../components/ThumbsFeedback';\nimport { DefaultRawDataType } from '../models/index';\nimport { useAnalytics } from './useAnalytics';\nimport { GdaClickEventData } from '../components/GenerativeDirectAnswer';\nimport { SearchAction } from '../models/SearchEventPayload';\n\n/**\n * Analytics event types for cta click, title click, and citation click.\n *\n * @public\n */\nexport type CardCtaEventType = 'CTA_CLICK' | 'TITLE_CLICK' | 'CITATION_CLICK' | 'DRIVING_DIRECTIONS' | 'VIEW_WEBSITE' | 'TAP_TO_CALL';\n\n/**\n * The data types use to construct the payload in the analytics event.\n *\n * @public\n */\nexport type CardAnalyticsDataType<T = DefaultRawDataType> = DirectAnswerData | Result<T> | GdaClickEventData;\n\n/**\n * Analytics event types for interactions on a card.\n *\n * @public\n */\nexport type CardAnalyticsType = CardCtaEventType | FeedbackType;\n\nfunction isDirectAnswer(data: unknown): data is DirectAnswerData {\n  return (data as DirectAnswerData)?.type === DirectAnswerType.FeaturedSnippet ||\n      (data as DirectAnswerData)?.type === DirectAnswerType.FieldValue;\n}\n\nfunction isGenerativeDirectAnswer(data: unknown): data is GdaClickEventData {\n  return !!(data as GdaClickEventData)?.destinationUrl;\n}\n\nexport function useCardAnalytics<T>(): (\n  cardResult: CardAnalyticsDataType<T>, analyticsEventType: CardAnalyticsType\n) => void {\n  const analytics = useAnalytics();\n  const verticalKey = useSearchState(state => state.vertical?.verticalKey);\n  const queryId = useSearchState(state => state.query.queryId);\n  const searchId = useSearchState(state => state.meta.uuid);\n  const locale = useSearchState(state => state.meta.locale);\n  const experienceKey = useSearchState(state => state.meta.experienceKey);\n  const searchTerm = useSearchState(state => state.query.mostRecentSearch);\n\n  const reportCtaEvent = useCallback((\n    result: CardAnalyticsDataType<T>,\n    eventType: CardCtaEventType\n  ) => {\n    let url: string | undefined, entityId: string | undefined;\n    let directAnswer = false;\n    let generativeDirectAnswer = false;\n    if (isDirectAnswer(result)) {\n      url = result.relatedResult.link;\n      entityId = result.relatedResult.id;\n      directAnswer = true;\n    } else if (isGenerativeDirectAnswer(result)) {\n      url = result.destinationUrl;\n      entityId = result.searchResult?.id;\n      directAnswer = true;\n      generativeDirectAnswer = true;\n    } else {\n      url = result.link;\n      entityId = result.id;\n    }\n\n    if (!queryId) {\n      console.error('Unable to report a CTA event. Missing field: queryId.');\n      return;\n    }\n    if (!searchId) {\n      console.error('Unable to report a CTA event. Missing field: searchId.');\n      return;\n    }\n    if (!experienceKey) {\n      console.error('Unable to report a CTA event. Missing field: experienceKey.');\n      return;\n    }\n    // convert the legacy card event type to the format the current reporter expects.\n    const action: SearchAction = eventType === 'TITLE_CLICK'\n      ? 'TITLE'\n      : eventType === 'VIEW_WEBSITE'\n        ? 'WEBSITE'\n        : eventType;\n    analytics?.report({\n      action: action,\n      destinationUrl: url,\n      entity: entityId,\n      locale,\n      searchId,\n      queryId,\n      verticalKey: verticalKey || '',\n      isDirectAnswer: directAnswer,\n      isGenerativeDirectAnswer: generativeDirectAnswer,\n      experienceKey,\n      searchTerm,\n    });\n  }, [analytics, experienceKey, locale, queryId, searchId, searchTerm, verticalKey]);\n\n  const reportFeedbackEvent = useCallback((\n    result: CardAnalyticsDataType<T>,\n    feedbackType: FeedbackType\n  ) => {\n    if (!queryId) {\n      console.error('Unable to report a result feedback event. Missing field: queryId.');\n      return;\n    }\n    if (!searchId) {\n      console.error('Unable to report a result feedback event. Missing field: searchId.');\n      return;\n    }\n    if (!experienceKey) {\n      console.error('Unable to report a result feedback event. Missing field: experienceKey.');\n      return;\n    }\n    let directAnswer = false;\n    let generativeDirectAnswer = false;\n    let entityId: string | undefined;\n    if (isDirectAnswer(result)) {\n      directAnswer = true;\n      entityId = result.relatedResult.id;\n    } else if (isGenerativeDirectAnswer(result)) {\n      directAnswer = true;\n      generativeDirectAnswer = true;\n      entityId = result.searchResult?.id;\n    } else {\n      entityId = result.id;\n    }\n    analytics?.report({\n      action: feedbackType,\n      entity: entityId,\n      locale,\n      searchId,\n      queryId,\n      verticalKey: verticalKey || '',\n      isDirectAnswer: directAnswer,\n      isGenerativeDirectAnswer: generativeDirectAnswer,\n      experienceKey,\n      searchTerm\n    });\n  }, [analytics, experienceKey, locale, queryId, searchId, searchTerm, verticalKey]);\n\n  return useCallback((\n    cardResult: CardAnalyticsDataType<T>,\n    analyticsEventType: CardAnalyticsType\n  ) => {\n    if (!analytics) {\n      return;\n    }\n    if (analyticsEventType === 'TITLE_CLICK' || analyticsEventType === 'CTA_CLICK' || analyticsEventType === 'CITATION_CLICK' || analyticsEventType === 'DRIVING_DIRECTIONS' || analyticsEventType === 'VIEW_WEBSITE' || analyticsEventType === 'TAP_TO_CALL') {\n      reportCtaEvent(cardResult, analyticsEventType);\n    }\n    if (analyticsEventType === 'THUMBS_DOWN' || analyticsEventType === 'THUMBS_UP') {\n      reportFeedbackEvent(cardResult, analyticsEventType);\n    }\n  }, [analytics, reportCtaEvent, reportFeedbackEvent]);\n}\n","import { useCallback } from 'react';\nimport { FeedbackType } from '../components/ThumbsFeedback';\nimport { DefaultRawDataType } from '../models/index';\nimport { CardAnalyticsDataType, useCardAnalytics } from './useCardAnalytics';\n\n/**\n * Creates a memoized function for reporting card feedback analytics.\n *\n * @public\n *\n * @param result - card result that contains data use in the feedback analytics event.\n */\nexport function useCardFeedbackCallback<T = DefaultRawDataType>(\n  result: CardAnalyticsDataType<T>,\n): (analyticsType: FeedbackType) => void {\n  const reportAnalyticsEvent = useCardAnalytics<T>();\n  return useCallback((analyticsType: FeedbackType) => {\n    reportAnalyticsEvent(result, analyticsType);\n  }, [reportAnalyticsEvent, result]);\n}\n\n","import i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nconst { supportedLocales } = require('./supportedLocales.ts');\n\nconst NAMESPACE = 'search-ui-react';\nconst resources: Record<string, any> = {};\n\nsupportedLocales.forEach((locale: string) => {\n  resources[locale] = {\n    [NAMESPACE]: require(`../../locales/${locale}/search-ui-react.json`),\n  };\n});\n\n/**\n * A custom i18next instance with React integration for search-ui-react.\n *\n * @internal\n */\nconst i18nInstance = i18next.createInstance();\ni18nInstance.use(initReactI18next).init({\n  fallbackLng: 'en',\n  ns: [NAMESPACE],\n  defaultNS: NAMESPACE,\n  interpolation: { escapeValue: false },\n  resources\n});\n\nexport { i18nInstance };\n","import {\n  useSearchState,\n  DirectAnswerType,\n  DirectAnswer as DirectAnswerData,\n  UnknownFieldValueDirectAnswer,\n} from '@yext/search-headless-react';\nimport {\n  ThumbsFeedbackCssClasses,\n  ThumbsFeedback,\n  builtInCssClasses as thumbsFeedbackCssClasses\n} from './ThumbsFeedback';\nimport { twMerge, useComposedCssClasses } from '../hooks/useComposedCssClasses';\nimport { useCardAnalyticsCallback } from '../hooks';\nimport { useCardFeedbackCallback } from '../hooks';\nimport { FieldValueDirectAnswer } from './FieldValueDirectAnswer';\nimport { FeaturedSnippetDirectAnswer } from './FeaturedSnippetDirectAnswer';\nimport React from 'react';\n\n/**\n * Props for {@link UnknownFieldTypeDisplayComponent}.\n *\n * @public\n */\nexport interface UnknownFieldTypeDisplayProps {\n  result: UnknownFieldValueDirectAnswer\n}\n\n/**\n * A React component interface to render results with \"unknown\" field type in field value direct answer.\n *\n * @public\n */\nexport type UnknownFieldTypeDisplayComponent = (\n  props: UnknownFieldTypeDisplayProps\n) => React.JSX.Element;\n\n/**\n * Props for {@link DirectAnswer}.\n *\n * @public\n */\nexport interface DirectAnswerProps {\n  /** A component to handle rendering results with \"unknown\" field type in field value direct answer. */\n  UnknownFieldTypeDisplay?: UnknownFieldTypeDisplayComponent,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: DirectAnswerCssClasses\n}\n\n/**\n *  The CSS class interface for {@link DirectAnswer}.\n *\n * @public\n */\nexport interface DirectAnswerCssClasses extends ThumbsFeedbackCssClasses {\n  directAnswerContainer?: string,\n  directAnswerLoading?: string,\n  answer?: string,\n  description?: string,\n  content?: string,\n  highlighted?: string,\n  answerContainer?: string\n}\n\nconst builtInCssClasses: Readonly<DirectAnswerCssClasses> = {\n  directAnswerContainer: '',\n  directAnswerLoading: 'opacity-50',\n  answer: 'font-bold text-xl text-neutral-dark',\n  description: 'text-neutral',\n  content: 'mt-4',\n  highlighted: 'bg-primary-light',\n  answerContainer: 'p-4 border border-gray-200 rounded-lg shadow-sm',\n  thumbsFeedbackContainer: thumbsFeedbackCssClasses.thumbsFeedbackContainer,\n  thumbsUpIcon: thumbsFeedbackCssClasses.thumbsUpIcon,\n  thumbsDownIcon: thumbsFeedbackCssClasses.thumbsDownIcon\n};\n\n/**\n * Renders Direct Answers provided by the Search API.\n *\n * @public\n *\n * @param props - {@link DirectAnswerProps}\n * @returns A react element for DirectAnswer\n */\nexport function DirectAnswer({\n  customCssClasses,\n  UnknownFieldTypeDisplay\n}: DirectAnswerProps): React.JSX.Element | null {\n  const directAnswerResult = useSearchState(state => state.directAnswer.result);\n  const isLoading = useSearchState(state => state.searchStatus.isLoading || false);\n  const composedCssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  const handleClickViewDetails = useCardAnalyticsCallback(directAnswerResult as DirectAnswerData, 'CTA_CLICK');\n  const handleClickFeedbackButton = useCardFeedbackCallback(directAnswerResult as DirectAnswerData);\n\n  if (!directAnswerResult) {\n    return null;\n  }\n\n  const cssClasses = getCssClassesForAnswerType(composedCssClasses, directAnswerResult.type);\n  const containerCssClasses = twMerge(\n    cssClasses.directAnswerContainer,\n    isLoading && cssClasses.directAnswerLoading\n  );\n\n  return (\n    <div className={containerCssClasses}>\n      {directAnswerResult.type === DirectAnswerType.FieldValue\n        ? <FieldValueDirectAnswer\n          result={directAnswerResult}\n          cssClasses={cssClasses}\n          viewDetailsClickHandler={handleClickViewDetails}\n          UnknownFieldTypeDisplay={UnknownFieldTypeDisplay}\n        />\n        : <FeaturedSnippetDirectAnswer\n          result={directAnswerResult}\n          readMoreClickHandler={handleClickViewDetails}\n          cssClasses={cssClasses}\n        />\n      }\n      <ThumbsFeedback\n        onClick={handleClickFeedbackButton}\n        customCssClasses={composedCssClasses}\n      />\n    </div>\n  );\n}\n\nfunction getCssClassesForAnswerType(cssClasses: DirectAnswerCssClasses, type: DirectAnswerType) {\n  const isSnippet = type === DirectAnswerType.FeaturedSnippet;\n  return {\n    ...cssClasses,\n    header: isSnippet ? cssClasses.answer : cssClasses.description,\n    body: isSnippet ? cssClasses.description : cssClasses.answer\n  };\n}\n","import { useTranslation } from 'react-i18next';\nimport { useSearchState } from '@yext/search-headless-react';\nimport React, { useCallback, useState } from 'react';\nimport { ThumbIcon } from '../icons/ThumbIcon';\nimport { useComposedCssClasses } from '../hooks';\nimport { useLayoutEffect } from '../hooks/useLayoutEffect';\n\n/**\n * Analytics event types for quality feedback.\n *\n * @public\n */\nexport type FeedbackType = 'THUMBS_UP' | 'THUMBS_DOWN';\n\n/**\n * The CSS class interface used for {@link ThumbsFeedback}.\n *\n * @public\n */\nexport interface ThumbsFeedbackCssClasses {\n  thumbsFeedbackContainer?: string,\n  thumbsUpIcon?: string,\n  thumbsDownIcon?: string\n}\n\n/**\n * Props for {@link ThumbsFeedback}.\n *\n * @public\n */\nexport interface ThumbsFeedbackProps {\n  /** A function which is called when a quality feedback button is clicked. */\n  onClick: (feedbackType: FeedbackType) => void,\n  /** Text to display alongside the quality feedback buttons. */\n  feedbackText?: string,\n  /** Text to display after a quality feedback button is clicked. */\n  feedbackTextOnSubmission?: string,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: ThumbsFeedbackCssClasses\n}\n\nexport const builtInCssClasses: Readonly<ThumbsFeedbackCssClasses> = {\n  thumbsFeedbackContainer: 'flex justify-end mt-2 text-sm text-gray-500 font-medium',\n  thumbsUpIcon: 'ml-3 w-5',\n  thumbsDownIcon: 'w-5 ml-1 transform rotate-180'\n};\n\n/**\n * Renders a quality feedback widget composed of thumbs up and thumbs down buttons.\n *\n * @public\n *\n * @param props - The configuration for the the feedback component.\n * @returns A React element for quality feedback widget.\n */\nexport function ThumbsFeedback(props: ThumbsFeedbackProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const {\n    onClick,\n    feedbackText,\n    feedbackTextOnSubmission,\n  } = props;\n  const cssClasses = useComposedCssClasses(builtInCssClasses, props.customCssClasses);\n  const query = useSearchState(state => state.query.mostRecentSearch);\n  const [isFeedbackProvided, setIsFeedbackProvided] = useState(false);\n\n  const handleClickThumbsUp = useCallback(() => {\n    onClick('THUMBS_UP');\n    setIsFeedbackProvided(true);\n  }, [onClick]);\n\n  const handleClickThumbsDown = useCallback(() => {\n    onClick('THUMBS_DOWN');\n    setIsFeedbackProvided(true);\n  }, [onClick]);\n\n  // Changes to most recent search query will trigger re-render to reset quality feedback submission.\n  useLayoutEffect(() => {\n    setIsFeedbackProvided(false);\n  }, [query]);\n\n  return (\n    <div className={cssClasses.thumbsFeedbackContainer}>\n      {isFeedbackProvided\n        ? feedbackTextOnSubmission ?? t('thankYouForYourFeedback')\n        : <>\n          {feedbackText ?? t('feedback', 'Feedback')}\n          <button\n            className={cssClasses.thumbsUpIcon}\n            onClick={handleClickThumbsUp}\n            aria-label={t('thisAnsweredMyQuestion')}\n          >\n            <ThumbIcon/>\n          </button>\n          <button\n            className={cssClasses.thumbsDownIcon}\n            onClick={handleClickThumbsDown}\n            aria-label={t('thisDidNotAnswerMyQuestion')}\n          >\n            <ThumbIcon/>\n          </button>\n        </>\n      }\n    </div>\n  );\n}","import React from 'react';\n\nexport function ThumbIcon({ className }: { className?: string }): React.JSX.Element {\n  return (\n    <svg className={className} viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M10.6667 7.33333H14.6366C15.8756 7.33333 16.6814 8.63719 16.1273 9.74536L13.2107 15.5787C12.9283 16.1433 12.3512 16.5 11.7199 16.5H8.37184C8.23557 16.5 8.09982 16.4833 7.96762 16.4502L4.83333 15.6667M10.6667 7.33333V3.16667C10.6667 2.24619 9.92047 1.5 9 1.5H8.92044C8.50414 1.5 8.16667 1.83748 8.16667 2.25377C8.16667 2.84903 7.99047 3.43096 7.66028 3.92624L4.83333 8.16667V15.6667M10.6667 7.33333H9M4.83333 15.6667H3.16667C2.24619 15.6667 1.5 14.9205 1.5 14V9C1.5 8.07953 2.24619 7.33333 3.16667 7.33333H5.25\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n    </svg>\n  );\n}","import { useTranslation } from 'react-i18next';\nimport {\n  FieldValueDirectAnswer as FieldValueDirectAnswerType,\n  BuiltInFieldType,\n  Address,\n  UnknownFieldValueDirectAnswer\n} from '@yext/search-headless-react';\nimport React, { useMemo } from 'react';\nimport { UnknownFieldTypeDisplayComponent } from './DirectAnswer';\n\n/**\n * Props for FieldValueDirectAnswer.\n */\ninterface FieldValueDirectAnswerProps {\n  /** A field value direct answer result. */\n  result: FieldValueDirectAnswerType,\n  /** Handle onClick event for \"View Details\" link. */\n  viewDetailsClickHandler?: () => void,\n  /** {@inheritDoc DirectAnswerProps.UnknownFieldTypeDisplay} */\n  UnknownFieldTypeDisplay?: UnknownFieldTypeDisplayComponent,\n  /** CSS classes for customizing the component styling. */\n  cssClasses?: FieldValueDirectAnswerCssClasses\n}\n\n/**\n * The CSS class interface for FieldValueDirectAnswer.\n */\ninterface FieldValueDirectAnswerCssClasses {\n  header?: string,\n  body?: string,\n  content?: string,\n  answerContainer?: string\n}\n\n/**\n * Renders a field value direct answer provided by the Search API.\n *\n * @internal\n */\nexport function FieldValueDirectAnswer({\n  result,\n  viewDetailsClickHandler,\n  UnknownFieldTypeDisplay,\n  cssClasses = {}\n}: FieldValueDirectAnswerProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const title = `${result.entityName} / ${result.fieldName}`;\n  const link = result.relatedResult.link ?? result.relatedResult.rawData.landingPageUrl as string;\n  const resultContent = useMemo(() => {\n    return getResultContent(result, UnknownFieldTypeDisplay);\n  }, [result, UnknownFieldTypeDisplay]);\n\n  return (\n    <div className={cssClasses.answerContainer}>\n      {title &&\n      <div className={cssClasses.header}>{title}</div>}\n      <div className={cssClasses.content}>\n        <div className={cssClasses.body}>{resultContent}</div>\n        {link && <div className='mt-4'>\n          <a href={link} className='text-primary' onClick={viewDetailsClickHandler}>{t('viewDetails')}</a>\n        </div>\n        }\n      </div>\n    </div>\n  );\n}\n\nfunction DefaultUnknownFieldTypeDisplay(\n  { result }: { result: UnknownFieldValueDirectAnswer }\n): React.JSX.Element {\n  let val: string | number;\n  if (typeof result.value !== 'string' && typeof result.value !== 'number') {\n    console.warn(`Unknown field type for direct answer with \"${result.fieldApiName}\" fieldApiName. Rendering result's value as a string.`\n      + '\\nConsider using prop \"UnknownFieldTypeDisplay\" in DirectAnswer component to properly render result of unknown field type.');\n    val = JSON.stringify(result.value);\n  } else {\n    val = result.value;\n  }\n  return getTextJsxElement(val);\n}\n\nfunction getResultContent(\n  result: FieldValueDirectAnswerType,\n  UnknownFieldTypeDisplay: UnknownFieldTypeDisplayComponent = DefaultUnknownFieldTypeDisplay\n): React.JSX.Element {\n  switch (result.fieldType) {\n    case BuiltInFieldType.InstagramHandle:\n      return getAnchorTagJsxElement(`https://www.instagram.com/${result.value}`, result.value);\n    case BuiltInFieldType.TwitterHandle:\n      return getAnchorTagJsxElement(`https://twitter.com/${result.value}`, `@${result.value}`);\n    case BuiltInFieldType.FacebookURL:\n    case BuiltInFieldType.AndroidAppURL:\n    case BuiltInFieldType.IOSAppURL:\n      return getAnchorTagJsxElement(result.value);\n    case BuiltInFieldType.ComplexURL:\n      const url = result.value.url;\n      const displayUrl = result.value.preferDisplayUrl ? result.value.displayUrl : url;\n      return getAnchorTagJsxElement(url, displayUrl);\n    case BuiltInFieldType.URL:\n      return Array.isArray(result.value)\n        ? getListJsxElement(result.value, url => getAnchorTagJsxElement(url))\n        : getAnchorTagJsxElement(result.value);\n    case BuiltInFieldType.Phone:\n      return getAnchorTagJsxElement(`tel:${result.value}`, result.value);\n    case BuiltInFieldType.Email:\n      return getListJsxElement(result.value, e => getAnchorTagJsxElement(`mailto:${e}`, e));\n    case BuiltInFieldType.Address:\n      return getAddressJsxElement(result.value);\n    case BuiltInFieldType.RichText:\n      //TODO: SLAP-2340\n      console.warn('Rendering markdown for rich text direct answer is currently not supported. Displaying the unrendered markdown string(s) as is.');\n      return Array.isArray(result.value)\n        ? getListJsxElement(result.value, val => getTextJsxElement(val))\n        : getTextJsxElement(result.value);\n    case BuiltInFieldType.Hours:\n      return <div>{JSON.stringify(result.value)}</div>;\n    case 'unknown':\n      return <UnknownFieldTypeDisplay result={result}/>;\n    default:\n      return Array.isArray(result.value)\n        ? getListJsxElement(result.value as (string | number)[], val => getTextJsxElement(val))\n        : getTextJsxElement(result.value as string | number);\n  }\n}\n\nfunction getListJsxElement<T>(\n  list: T[],\n  getItemJsxElement: (el: T) => React.JSX.Element\n): React.JSX.Element {\n  return (<ul className='list-disc list-inside'>\n    {list.map((el, i) =>\n      <li key={i}>\n        {getItemJsxElement(el)}\n      </li>)}\n  </ul>);\n}\n\nfunction getTextJsxElement(text: string | number): React.JSX.Element {\n  return <p className='whitespace-pre-wrap'>{text}</p>;\n}\n\nfunction getAnchorTagJsxElement(href: string, displayText?: string): React.JSX.Element {\n  return <a href={href} className='text-primary'>{displayText ?? href}</a>;\n}\n\nfunction getAddressJsxElement(address: Address): React.JSX.Element {\n  // user specified display Address in KM\n  if (address.extraDescription) {\n    return <div>{address.extraDescription}</div>;\n  }\n  const formattedCity = address.city ? address.city + ',' : '';\n  const formattedCityRegionPostalCode = [formattedCity, address.region, address.postalCode].join(' ').trim();\n\n  return <div>\n    {address.line1 && <p>{address.line1}</p>}\n    {address.line2 && <p>{address.line2}</p>}\n    {address.line3 && <p>{address.line3}</p>}\n    {formattedCityRegionPostalCode && <p>{formattedCityRegionPostalCode}</p>}\n    <p>{address.countryCode}</p>\n  </div>;\n}\n","import { Trans } from 'react-i18next';\nimport { FeaturedSnippetDirectAnswer as FeaturedSnippetDirectAnswerType } from '@yext/search-headless-react';\nimport { renderHighlightedValue } from './utils/renderHighlightedValue';\nimport React, { useMemo } from 'react';\n\n/**\n * Props for {@link FeaturedSnippetDirectAnswer}.\n */\ninterface FeaturedSnippetDirectAnswerProps {\n  /** A featured snippet direct answer result. */\n  result: FeaturedSnippetDirectAnswerType,\n  /** Handle onClick event for \"Read more about\" link. */\n  readMoreClickHandler?: () => void,\n  /** CSS classes for customizing the component styling. */\n  cssClasses?: FeaturedSnippetDirectAnswerCssClasses\n}\n\n/**\n *  The CSS class interface for {@link FeaturedSnippetDirectAnswer}.\n */\ninterface FeaturedSnippetDirectAnswerCssClasses {\n  header?: string,\n  body?: string,\n  content?: string,\n  answerContainer?: string,\n  highlighted?: string\n}\n\n/**\n * Renders a featured snippet direct answer provided by the Search API.\n *\n * @internal\n */\n\nconst unsupportedTextFormats: string[] = ['rich_text', 'rich_text_v2', 'markdown'];\n\nexport function FeaturedSnippetDirectAnswer({\n  result,\n  readMoreClickHandler,\n  cssClasses = {}\n}: FeaturedSnippetDirectAnswerProps): React.JSX.Element {\n  const answer = result.fieldType === 'multi_line_text' && result.value;\n  if (unsupportedTextFormats.includes(result.fieldType)) {\n    console.warn('Rendering ' + result.fieldType + ' direct answer is currently not supported. ' +\n        'You can modify your search configuration to convert ' + result.fieldType + ' to HTML to be rendered '\n        + 'on the page.');\n  }\n  let snippet: React.JSX.Element;\n  const snippetValue = useMemo(() =>\n  { return { __html: result.snippet?.value }; }, [result.snippet?.value]);\n\n  if (result.fieldType === 'html') {\n    snippet = (\n      <div dangerouslySetInnerHTML={snippetValue}></div>\n    );\n  }\n  else {\n    snippet = renderHighlightedValue(result.snippet, { highlighted: cssClasses.highlighted });\n  }\n  const link = result.relatedResult.link || result.relatedResult.rawData.landingPageUrl as string;\n  const name = result.relatedResult.name;\n\n  const readMoreComponents = useMemo(() => ({\n    a: (\n      <a\n        className=\"text-primary\"\n        href={link}\n        onClick={readMoreClickHandler}\n        aria-label={name}\n      />\n    )\n  }), [link, name, readMoreClickHandler]);\n  const readMoreValues = useMemo(() => ({ name }), [name]);\n\n  return (\n    <div className={cssClasses.answerContainer}>\n      {answer &&\n        <div className={cssClasses.header}>{answer}</div>}\n      <div className={cssClasses.content}>\n        <div className={cssClasses.body}>{snippet}</div>\n        {link && name && <div className='pt-4 text-neutral'>\n          <Trans\n            i18nKey='readMoreAbout'\n            components={readMoreComponents}\n            values={readMoreValues}\n          />\n        </div>}\n      </div>\n    </div>\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport { AutocompleteResult, FieldValueStaticFilter, FilterSearchResponse, SearchParameterField, SelectableStaticFilter, StaticFilter, useSearchActions, useSearchState } from '@yext/search-headless-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useComposedCssClasses } from '../hooks';\nimport { useSynchronizedRequest } from '../hooks/useSynchronizedRequest';\nimport { useDebouncedFunction } from '../hooks/useDebouncedFunction';\nimport { executeSearch } from '../utils';\nimport { isDuplicateStaticFilter } from '../utils/filterutils';\nimport { useId } from '../hooks/useId';\nimport { Dropdown } from './Dropdown/Dropdown';\nimport { DropdownInput } from './Dropdown/DropdownInput';\nimport { DropdownItem } from './Dropdown/DropdownItem';\nimport { DropdownMenu } from './Dropdown/DropdownMenu';\nimport { Geolocation, GeolocationProps } from './Geolocation';\nimport { CurrentLocationIcon } from '../icons/CurrentLocationIcon';\nimport { renderAutocompleteResult, AutocompleteResultCssClasses } from './utils/renderAutocompleteResult';\n\n/**\n * The CSS class interface for {@link FilterSearch}.\n *\n * @public\n */\nexport interface FilterSearchCssClasses extends AutocompleteResultCssClasses {\n  filterSearchContainer?: string,\n  label?: string,\n  inputElement?: string,\n  sectionLabel?: string,\n  focusedOption?: string,\n  optionsContainer?: string,\n  currentLocationButton?: string,\n  currentLocationAndInputContainer?: string\n}\n\nconst builtInCssClasses: Readonly<FilterSearchCssClasses> = {\n  filterSearchContainer: 'relative mb-2',\n  label: 'mb-4 text-sm font-medium text-neutral-dark',\n  inputElement: 'text-sm bg-white outline-none h-9 w-full p-2 rounded-md border border-gray-300 focus:border-primary text-neutral-dark placeholder:text-neutral',\n  sectionLabel: 'text-sm text-neutral-dark font-semibold py-2 px-4',\n  focusedOption: 'bg-gray-100',\n  option: 'text-sm text-neutral-dark py-1 cursor-pointer hover:bg-gray-100 px-4',\n  currentLocationButton: 'h-5 w-5',\n  currentLocationAndInputContainer: 'w-full flex items-center justify-start gap-2'\n};\n\n/**\n * The parameters that are passed into {@link FilterSearchProps.onSelect}.\n *\n * @public\n */\nexport interface OnSelectParams {\n  /** The newly selected filter. */\n  newFilter: FieldValueStaticFilter,\n  /** The display name of the newly selected filter. */\n  newDisplayName: string,\n  /** The previously selected filter. */\n  currentFilter: StaticFilter | undefined,\n  /** A function that sets which filter the component is currently associated with. */\n  setCurrentFilter: (filter: StaticFilter) => void,\n  /**\n   * A function that executes a filter search and updates the input and dropdown options\n   * with the response.\n   */\n  executeFilterSearch: (query?: string) => Promise<FilterSearchResponse | undefined>\n}\n\n/**\n * The parameters that are passed into {@link FilterSearchProps.onDropdownInputChange}.\n *\n * @public\n */\nexport interface OnDropdownInputChangeProps {\n  /** The input element's new value after the change */\n  value: string,\n  /**\n   * A function that executes a filter search and updates the input and dropdown options\n   * with the response.\n   */\n  executeFilterSearch: (query?: string) => Promise<FilterSearchResponse | undefined>\n}\n\n/**\n * The parameters that are passed into {@link FilterSearchProps.afterDropdownInputFocus}.\n *\n * @public\n */\nexport interface AfterDropdownInputFocusProps {\n  /** The input element's value. */\n  value: string\n}\n\n/**\n * The props for the {@link FilterSearch} component.\n *\n * @public\n */\nexport interface FilterSearchProps {\n  /** An array of fieldApiName and entityType which indicates what to perform the filter search against. */\n  searchFields: Omit<SearchParameterField, 'fetchEntities'>[],\n  /** The display label for the component. */\n  label?: string,\n  /**\n   * The search input's placeholder text when no text has been entered by the user.\n   * Defaults to \"Search here...\".\n   */\n  placeholder?: string,\n  /**\n   * Whether to trigger a search when an option is selected. Defaults to false.\n   *\n   * @deprecated Use the `onSelect` prop instead.\n   */\n  searchOnSelect?: boolean,\n  /** A function which is called when a filter is selected. */\n  onSelect?: (params: OnSelectParams) => void,\n  /** A function which is called when the input element's value changes. Replaces the default behavior. */\n  onDropdownInputChange?: (params: OnDropdownInputChangeProps) => void,\n  /**\n   * A function which is called immediately after the input gains focus.\n   * It does not replace the default focus behavior.\n   */\n  afterDropdownInputFocus?: (params: AfterDropdownInputFocusProps) => void,\n  /** Determines whether or not the results of the filter search are separated by field. Defaults to false. */\n  sectioned?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: FilterSearchCssClasses,\n  /** Whether to disable the default CSS classes entirely  */\n  disableBuiltInClasses?: boolean,\n  /** The accessible label for the dropdown input. */\n  ariaLabel?: string,\n  /**\n   * The accessible label for the region which contains the filter search input and its filtered content.\n   * If provided, this overrides `label` for the region accessible label.\n   */\n  resultsRegionAriaLabel?: string,\n  /** Whether to include a button to search on the user's location. Defaults to false. */\n  showCurrentLocationButton?: boolean,\n  /** The props for the geolocation component, if the current location button is enabled. */\n  geolocationProps?: GeolocationProps\n}\n\n/**\n * A component which allows a user to search for filters associated with specific entities and fields.\n *\n * @public\n *\n * @param props - {@link FilterSearchProps}\n * @returns A react component for Filter Search\n */\nexport function FilterSearch({\n  searchFields,\n  label,\n  placeholder,\n  searchOnSelect,\n  onSelect,\n  onDropdownInputChange,\n  afterDropdownInputFocus,\n  sectioned = false,\n  customCssClasses,\n  disableBuiltInClasses = false,\n  ariaLabel,\n  resultsRegionAriaLabel,\n  showCurrentLocationButton = false,\n  geolocationProps = {}\n}: FilterSearchProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const searchActions = useSearchActions();\n  const inputId = useId('filter-search-input');\n  const labelId = useId('filter-search-label');\n  const searchParamFields = searchFields.map((searchField) => {\n    return { ...searchField, fetchEntities: false };\n  });\n  const matchingFieldIds: Set<string> = useMemo(() => {\n    const fieldIds = new Set(searchFields.map(s => s.fieldApiName));\n    if (fieldIds.has('builtin.location')) {\n      ['builtin.region', 'address.countryCode'].forEach(s => fieldIds.add(s));\n    }\n    return fieldIds;\n  }, [searchFields]);\n\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses, disableBuiltInClasses);\n  const [currentFilter, setCurrentFilter] = useState<StaticFilter>();\n  const [filterQuery, setFilterQuery] = useState<string>();\n  const staticFilters = useSearchState(state => state.filters.static);\n  const matchingFilters: SelectableStaticFilter[] = useMemo(() => {\n    return staticFilters?.filter(({ filter, selected }) =>\n      selected\n      && filter.kind === 'fieldValue'\n      && matchingFieldIds.has(filter.fieldId)\n    ) ?? [];\n  }, [staticFilters, matchingFieldIds]);\n\n  const debouncedExecuteFilterSearch = useDebouncedFunction(\n    (query: string) => searchActions.executeFilterSearch(query, sectioned, searchParamFields),\n    200\n  );\n\n  const [\n    filterSearchResponse,\n    executeFilterSearch,\n    clearFilterSearchResponse\n  ] = useSynchronizedRequest<string, FilterSearchResponse>(\n    async (inputValue) => {\n      setFilterQuery(inputValue);\n      return debouncedExecuteFilterSearch\n        ? debouncedExecuteFilterSearch(inputValue ?? '')\n        : undefined;\n    },\n    (e) => console.error('Error occurred executing a filter search request.\\n', e)\n  );\n\n  useEffect(() => {\n    if (matchingFilters.length > 1 && !onSelect) {\n      console.warn('More than one selected static filter found that matches the filter search fields: ['\n        + [...matchingFieldIds].join(', ')\n        + ']. Please update the state to remove the extra filters.'\n        + ' Picking one filter to display in the input.');\n    }\n\n    if (currentFilter && staticFilters?.find(f =>\n      isDuplicateStaticFilter(f.filter, currentFilter) && f.selected\n    )) {\n      return;\n    }\n\n    if (matchingFilters.length === 0) {\n      clearFilterSearchResponse();\n      setCurrentFilter(undefined);\n      setFilterQuery('');\n    } else {\n      setCurrentFilter(matchingFilters[0].filter);\n      executeFilterSearch(matchingFilters[0].displayName);\n    }\n  }, [\n    clearFilterSearchResponse,\n    currentFilter,\n    staticFilters,\n    executeFilterSearch,\n    onSelect,\n    matchingFilters,\n    matchingFieldIds\n  ]);\n\n  const currentLocationCssClasses = useMemo(() => ({\n    button: cssClasses.currentLocationButton,\n    iconContainer: 'w-full h-full ml-0'\n  }), [cssClasses.currentLocationButton]);\n\n  const sections = useMemo(() => {\n    return filterSearchResponse?.sections.filter(section => section.results.length > 0) ?? [];\n  }, [filterSearchResponse?.sections]);\n\n  const hasResults = sections.flatMap(s => s.results).length > 0;\n  const regionAriaLabel = resultsRegionAriaLabel ?? label;\n\n  const handleSelectDropdown = useCallback(async (\n    _value: string,\n    _index: number,\n    itemData: Record<string, unknown> | undefined\n  ) => {\n    const newFilter = itemData?.filter as FieldValueStaticFilter;\n    const newDisplayName = itemData?.displayName as string;\n    if (!newFilter || !newDisplayName) {\n      return;\n    }\n\n    if (onSelect) {\n      if (searchOnSelect) {\n        console.warn('Both searchOnSelect and onSelect props were passed to the component.'\n          + ' Using onSelect instead of searchOnSelect as the latter is deprecated.');\n      }\n      return onSelect({\n        newFilter,\n        newDisplayName,\n        currentFilter,\n        setCurrentFilter,\n        executeFilterSearch\n      });\n    }\n\n    if (matchingFilters.length > 1) {\n      console.warn('More than one selected static filter found that matches the filter search fields: ['\n        + [...matchingFieldIds].join(', ')\n        + ']. Unselecting all existing matching filters and selecting the new filter.');\n    }\n    matchingFilters.forEach(f => searchActions.setFilterOption({ filter: f.filter, selected: false }));\n    if (currentFilter) {\n      searchActions.setFilterOption({ filter: currentFilter, selected: false });\n    }\n    searchActions.setFilterOption({ filter: newFilter, displayName: newDisplayName, selected: true });\n    setCurrentFilter(newFilter);\n    executeFilterSearch(newDisplayName);\n\n    if (searchOnSelect) {\n      searchActions.setOffset(0);\n      searchActions.resetFacets();\n      executeSearch(searchActions);\n    }\n  }, [\n    currentFilter,\n    searchActions,\n    executeFilterSearch,\n    onSelect,\n    searchOnSelect,\n    matchingFilters,\n    matchingFieldIds\n  ]);\n\n  const handleInputChange = useCallback((value: string) => {\n    onDropdownInputChange ? onDropdownInputChange({\n      value,\n      executeFilterSearch\n    }) : executeFilterSearch(value);\n  }, [\n    onDropdownInputChange,\n    executeFilterSearch\n  ]);\n\n  const meetsSubmitCritera = useCallback((index: number) => index >= 0, []);\n\n  const itemDataMatrix = useMemo(() => {\n    return sections.map(section => {\n      return section.results.map(result => ({\n        filter: { ...result.filter, kind: 'fieldValue' },\n        displayName: result.value\n      }));\n    });\n  }, [sections]);\n\n  function renderDropdownItems() {\n    return sections.map((section, sectionIndex) => {\n      const sectionLabelId = section.label ? `${inputId}-section-${sectionIndex}` : undefined;\n\n      return (\n        <div\n          className='pb-2'\n          key={sectionIndex}\n          role='group'\n          aria-labelledby={sectionLabelId}\n        >\n          {section.label &&\n            <div id={sectionLabelId} className={cssClasses.sectionLabel}>\n              {section.label}\n            </div>\n          }\n          <div className={cssClasses.optionsContainer} role='presentation'>\n            {section.results.map((result, index) => (\n              <DropdownItem\n                key={index}\n                focusedClassName={cssClasses.focusedOption}\n                value={result.value}\n                itemData={itemDataMatrix[sectionIndex][index]}\n              >\n                {renderAutocompleteResult(result, cssClasses)}\n              </DropdownItem>\n            ))}\n          </div>\n        </div>\n      );\n    });\n  }\n\n  const handleInputFocus = useCallback((value = '') => {\n    if (value) {\n      executeFilterSearch(value);\n    }\n\n    afterDropdownInputFocus?.({ value });\n  }, [afterDropdownInputFocus, executeFilterSearch]);\n\n  const dropdownInput = (\n    <DropdownInput\n      className={cssClasses.inputElement}\n      placeholder={placeholder ?? t('searchHere')}\n      onChange={handleInputChange}\n      onFocus={handleInputFocus}\n      submitCriteria={meetsSubmitCritera}\n      inputId={inputId}\n      ariaLabel={ariaLabel}\n      ariaLabelledBy={label ? labelId : undefined}\n    />\n  );\n\n  const dropdownMenu = hasResults ? (\n    <DropdownMenu\n      className='absolute z-10 w-full shadow-lg rounded-md border border-gray-300 bg-white pt-3 pb-1 mt-1'\n    >\n      {renderDropdownItems()}\n    </DropdownMenu>\n  ) : null;\n\n  return (\n    <div\n      className={cssClasses.filterSearchContainer}\n      role={regionAriaLabel ? 'region' : undefined}\n      aria-label={regionAriaLabel}\n    >\n      {label && (\n        <label id={labelId} htmlFor={inputId} className={cssClasses.label}>\n          {label}\n        </label>\n      )}\n      <Dropdown\n        screenReaderText={getScreenReaderText(sections, t)}\n        onSelect={handleSelectDropdown}\n        alwaysSelectOption={true}\n        parentQuery={filterQuery}\n      >\n        {showCurrentLocationButton ? (\n          <div className={cssClasses.currentLocationAndInputContainer}>\n            <div className='relative flex-1'>\n              {dropdownInput}\n              {dropdownMenu}\n            </div>\n            <Geolocation\n              GeolocationIcon={CurrentLocationIcon}\n              customCssClasses={currentLocationCssClasses}\n              useIconAsButton={true}\n              {...geolocationProps}\n            />\n          </div>\n        ) : (\n          <>\n            {dropdownInput}\n            {dropdownMenu}\n          </>\n        )}\n      </Dropdown>\n    </div>\n  );\n}\n\nfunction getScreenReaderText(\n  sections: {\n    results: AutocompleteResult[],\n    label?: string\n  }[],\n  t: ReturnType<typeof useTranslation>['t']\n) {\n  if (sections.length === 0) {\n    return t('noAutocompleteOptionsFound');\n  }\n  const screenReaderPhrases = sections.map(section => {\n    const label = section.label ? ` ${section.label}` : '';\n    const count = section.results.length;\n    return t('autocompleteOptionsFound', {\n      count,\n      label,\n    });\n  });\n  return screenReaderPhrases.join(' ');\n}\n","import { useTranslation } from 'react-i18next';\nimport { useComposedCssClasses } from '../hooks';\nimport LoadingIndicator from '../icons/LoadingIndicator';\nimport { YextIcon } from '../icons/YextIcon';\nimport { useGeolocationHandler } from '../hooks/useGeolocationHandler';\nimport React from 'react';\n\n/**\n * The CSS class interface for the Geolocation component.\n *\n * @public\n */\nexport interface GeolocationCssClasses {\n  geolocationContainer?: string,\n  button?: string,\n  iconContainer?: string\n}\n\nconst builtInCssClasses: Readonly<GeolocationCssClasses> = {\n  geolocationContainer: 'text-sm text-neutral text-center justify-center items-center flex flex-row',\n  button: 'text-primary font-semibold hover:underline focus:underline',\n  iconContainer: 'w-4 ml-2'\n};\n\n/**\n * The props for the Geolocation component.\n *\n * @public\n */\nexport interface GeolocationProps {\n  /**\n   * Configuration used when collecting the user's location.\n   * Definition: {@link https://w3c.github.io/geolocation-api/#position_options_interface}.\n   */\n  geolocationOptions?: PositionOptions,\n  /**\n   * The radius, in miles, around the user's location to find results. Defaults to 50.\n   * If location accuracy is low, a larger radius may be used automatically.\n   */\n  radius?: number,\n  /** The label for the button. Defaults to 'Use my location'. */\n  label?: string,\n  /** Custom icon component to display along with the button. */\n  GeolocationIcon?: React.FunctionComponent,\n  /**\n   * A function which is called when the geolocation button is clicked,\n   * after user's position is successfully determined.\n   */\n  handleClick?: (position: GeolocationPosition) => void,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: GeolocationCssClasses,\n  /** Whether to use the icon as a button, rather than the label. */\n  useIconAsButton?: boolean,\n  /** Whether to disable built-in classes and use only custom classes. */\n  disableBuiltInClasses?: boolean\n}\n\n/**\n * A React Component which collects location information to create a\n * location filter and perform a new search.\n *\n * @public\n *\n * @param props - {@link GeolocationProps}\n * @returns A react component for geolocation\n */\nexport function Geolocation({\n  geolocationOptions,\n  radius = 50,\n  label,\n  //TODO: replace default icon with SVG create from design team\n  GeolocationIcon = YextIcon,\n  handleClick,\n  customCssClasses,\n  useIconAsButton = false,\n  disableBuiltInClasses = false\n}: GeolocationProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses, disableBuiltInClasses);\n  const [handleGeolocationClick, isFetchingUserLocation] = useGeolocationHandler({\n    geolocationOptions,\n    radius,\n    handleUserPosition: handleClick\n  });\n\n  const iconContainer = (\n    <div className={cssClasses.iconContainer}>\n      {isFetchingUserLocation ? <LoadingIndicator /> : <GeolocationIcon />}\n    </div>\n  );\n\n  if (useIconAsButton) {\n    return (\n      <button\n        className={cssClasses.button}\n        onClick={handleGeolocationClick}\n        aria-label={t('useCurrentLocation')}\n      >\n        {iconContainer}\n      </button>\n    );\n  } else {\n    return (\n      <div className={cssClasses.geolocationContainer}>\n        <button className={cssClasses.button} onClick={handleGeolocationClick}>\n          {label ?? t('useMyLocation')}\n        </button>\n        {iconContainer}\n      </div>\n    );\n  }\n}\n","import React from 'react';\n\nexport default function LoadingIndicator() {\n  return (\n    <div className=\"animate-[rotate_1.4s_linear_infinite]\">\n      <svg className=\"[stroke-dasharray:208] origin-[50%_50%] animate-[dash_1.4s_ease-in-out_infinite]\" viewBox=\"0 0 72 72\">\n        <circle className=\"\" cx=\"36\" cy=\"36\" r=\"33\" stroke=\"black\" strokeWidth=\"3\" fill=\"none\"/>\n      </svg>\n    </div>\n  );\n}","import React from 'react';\n\nexport function YextIcon(): React.JSX.Element {\n  return (\n    <svg viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M25.517 28.142v.095h-.204v.905h-.066v-.905h-.197v-.095h.467zm.667 0h.066v1h-.066v-.825l-.24.595h-.013l-.24-.595v.825h-.066v-1h.066l.247.61.246-.61zM15 28.8c7.622 0 13.8-6.178 13.8-13.8 0-7.622-6.178-13.8-13.8-13.8C7.378 1.2 1.2 7.378 1.2 15c0 7.622 6.178 13.8 13.8 13.8zM15 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-8.284 0-15-6.716-15-15C0 6.716 6.716 0 15 0zm.45 16.65v-1.2h6.6v1.2h-2.7v5.4h-1.2v-5.4h-2.7zm-1.599-1.35l.849.849-2.601 2.601 2.601 2.601-.849.849-2.601-2.601L8.649 22.2l-.849-.849 2.601-2.601L7.8 16.149l.849-.849 2.601 2.601 2.601-2.601zM18.675 9a2.175 2.175 0 00-1.847 3.323l2.995-2.995A2.163 2.163 0 0018.675 9zm0 5.55a3.375 3.375 0 112.833-5.209l-3.789 3.788a2.175 2.175 0 003.13-1.954h1.201a3.375 3.375 0 01-3.375 3.375zm-7.425-3.734L13.78 7.8l.92.771-2.85 3.397v2.582h-1.2v-2.582L7.8 8.57l.92-.771 2.53 3.016z\"></path>\n    </svg>\n  );\n}","import { useTranslation } from 'react-i18next';\nimport { Matcher, SelectableStaticFilter, useSearchActions, useSearchState } from '@yext/search-headless-react';\nimport { executeSearch } from '../utils/search-operations';\nimport { getUserLocation } from '../utils/location-operations';\nimport { useCallback, useState } from 'react';\n\nconst GEOLOCATION_FIELD_ID = 'builtin.location';\nconst LOCATION_FIELD_IDS = [GEOLOCATION_FIELD_ID, 'builtin.region', 'address.countryCode'];\nconst METERS_PER_MILE = 1609.344;\n\n/**\n * The props for {@link useGeolocationHandler} hook.\n *\n * @internal\n */\ninterface GeolocationHandlerArgs {\n  /** Configuration used when collecting the user's location. */\n  geolocationOptions?: PositionOptions,\n  /**\n   * The radius, in miles, around the user's location to find results. Defaults to 50.\n   * If location accuracy is low, a larger radius may be used automatically.\n   */\n  radius?: number,\n  /** Custom handler function to call after user's position is successfully determined. */\n  handleUserPosition?: (position: GeolocationPosition) => void\n}\n\n/**\n * Creates a function to collect user's geolocation and, by default, will set\n * a built-in location filter and execute a search.\n *\n * @internal\n *\n * @param props - {@link GeolocationHandlerArgs}\n * @returns - A function to collect and process user's geolocation\n *          - A boolean to indicate if user's geolocation is being fetch\n */\nexport function useGeolocationHandler({\n  geolocationOptions,\n  radius = 50,\n  handleUserPosition\n}: GeolocationHandlerArgs): [() => Promise<void>, boolean] {\n  const { t } = useTranslation();\n  const [isFetchingUserLocation, setIsFetchingUserLocation] = useState<boolean>(false);\n  const searchActions = useSearchActions();\n  const staticFilters = useSearchState(s => s.filters.static || []);\n\n  const defaultHandleUserPosition = useCallback((position: GeolocationPosition) => {\n    const { latitude, longitude, accuracy } = position.coords;\n    const locationFilter: SelectableStaticFilter = {\n      displayName: t('currentLocation'),\n      selected: true,\n      filter: {\n        kind: 'fieldValue',\n        fieldId: GEOLOCATION_FIELD_ID,\n        matcher: Matcher.Near,\n        value: {\n          lat: latitude,\n          lng: longitude,\n          radius: Math.max(accuracy, radius * METERS_PER_MILE)\n        },\n      }\n    };\n    const nonLocationFilters = staticFilters.filter(filter => {\n      return !(filter.filter.kind === 'fieldValue'\n        && LOCATION_FIELD_IDS.includes(filter.filter.fieldId));\n    });\n    searchActions.setStaticFilters([...nonLocationFilters, locationFilter]);\n    executeSearch(searchActions);\n  }, [radius, searchActions, staticFilters, t]);\n\n  const geolocationHandler = useCallback(async () => {\n    setIsFetchingUserLocation(true);\n    try {\n      const position = await getUserLocation(geolocationOptions);\n      (handleUserPosition ?? defaultHandleUserPosition)(position);\n    } catch (e) {\n      console.warn(e);\n    } finally {\n      setIsFetchingUserLocation(false);\n    }\n  }, [setIsFetchingUserLocation, geolocationOptions, handleUserPosition, defaultHandleUserPosition]);\n  return [geolocationHandler, isFetchingUserLocation];\n}\n","import React from 'react';\n\nexport function CurrentLocationIcon(): React.JSX.Element {\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-full h-full\">\n      <line x1=\"2\" x2=\"5\" y1=\"12\" y2=\"12\"/>\n      <line x1=\"19\" x2=\"22\" y1=\"12\" y2=\"12\"/>\n      <line x1=\"12\" x2=\"12\" y1=\"2\" y2=\"5\"/>\n      <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\"/>\n      <circle cx=\"12\" cy=\"12\" r=\"7\"/>\n      <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n    </svg>\n  );\n}\n\n","import { useTranslation } from 'react-i18next';\nimport { useSearchActions, useSearchState, LocationBiasMethod } from '@yext/search-headless-react';\nimport { executeSearch } from '../utils';\nimport { getUserLocation } from '../utils';\nimport { twMerge, useComposedCssClasses } from '../hooks/useComposedCssClasses';\nimport React, { useState } from 'react';\nimport LoadingIndicator from '../icons/LoadingIndicator';\n\n/**\n * The CSS class interface for the {@link LocationBias} component.\n *\n * @public\n *\n * @deprecated LocationBias component has been superseded by Geolocation component.\n */\nexport interface LocationBiasCssClasses {\n  locationBiasContainer?: string,\n  location?: string,\n  source?: string,\n  button?: string,\n  loadingIndicatorContainer?: string\n}\n\nconst builtInCssClasses: Readonly<LocationBiasCssClasses> = {\n  locationBiasContainer: 'text-sm text-neutral text-center justify-center items-center flex flex-col lg:flex-row',\n  location: 'font-semibold lg:ml-7',\n  source: 'ml-3 lg:ml-0 whitespace-pre',\n  button: 'text-primary hover:underline focus:underline ml-7 lg:ml-0',\n  loadingIndicatorContainer: 'w-4 h-4 ml-3 shrink-0'\n};\n\n/**\n * The props for the {@link LocationBias} component.\n *\n * @public\n *\n * @deprecated LocationBias component has been superseded by Geolocation component.\n */\nexport interface LocationBiasProps {\n  /** Configuration used when collecting the user's location.\n   * Definition: {@link https://w3c.github.io/geolocation-api/#position_options_interface}.\n   */\n  geolocationOptions?: PositionOptions,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: LocationBiasCssClasses\n}\n\n/**\n * A React Component which displays and collects location information in order to bias searches.\n *\n * @public\n *\n * @deprecated LocationBias component has been superseded by Geolocation component.\n *\n * @param props - {@link LocationBiasProps}\n * @returns A react component for Location Bias\n */\nexport function LocationBias({\n  geolocationOptions,\n  customCssClasses\n}: LocationBiasProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const searchActions = useSearchActions();\n  const locationBias = useSearchState(s => s.location.locationBias);\n  const [isFetchingLocation, setIsFetchingLocation] = useState<boolean>(false);\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const loadingIndicatorCss = twMerge(cssClasses.loadingIndicatorContainer, (!isFetchingLocation && 'invisible'));\n\n  if (!locationBias?.displayName) return null;\n\n  const attributionMessage =\n      locationBias?.method === LocationBiasMethod.Ip ? t('basedOnYourInternetAddress')\n        : locationBias?.method === LocationBiasMethod.Device ? t('basedOnYourDevice')\n          : '';\n\n  async function handleGeolocationClick() {\n    setIsFetchingLocation(true);\n    try {\n      const position = await getUserLocation(geolocationOptions);\n      searchActions.setUserLocation({\n        latitude: position.coords.latitude,\n        longitude: position.coords.longitude,\n      });\n    } catch (e) {\n      console.error(e);\n    } finally {\n      setIsFetchingLocation(false);\n    }\n    executeSearch(searchActions);\n  }\n\n  return (\n    <div className={cssClasses.locationBiasContainer}>\n      <span className={cssClasses.location}>\n        {locationBias.displayName}\n      </span>\n      <span className={cssClasses.source}>\n        {attributionMessage}\n        <span className='invisible lg:visible'> - </span>\n      </span>\n      <div className='flex flex-row items-center'>\n        <button\n          className={cssClasses.button}\n          onClick={handleGeolocationClick}\n        >\n          {t('updateYourLocation')}\n        </button>\n        <div className={loadingIndicatorCss}>\n          <LoadingIndicator />\n        </div>\n      </div>\n    </div>\n  );\n}","import { useSearchState } from '@yext/search-headless-react';\nimport { useComposedCssClasses } from '../hooks';\nimport classNames from 'classnames';\nimport { AppliedFiltersDisplay } from './AppliedFiltersDisplay';\nimport { DEFAULT_HIERARCHICAL_DELIMITER } from './Filters/HierarchicalFacetDisplay';\nimport { useNlpFilterDisplayNames } from '../hooks/useNlpFilterDisplayNames';\nimport { useRemovableFilters } from '../hooks/useRemovableFilters';\nimport React from 'react';\n\n/**\n * The CSS class interface used for {@link AppliedFilters}.\n *\n * @public\n */\nexport interface AppliedFiltersCssClasses {\n  appliedFiltersContainer?: string,\n  appliedFiltersLoading?: string,\n  nlpFilter?: string,\n  removableFilter?: string,\n  filterLabel?: string,\n  clearAllButton?: string\n}\n\nexport const builtInCssClasses: Readonly<AppliedFiltersCssClasses> = {\n  // Use negative margin to remove space above the filters on mobile\n  appliedFiltersContainer: 'flex flex-wrap -mt-3 md:mt-0 mb-2',\n  appliedFiltersLoading: 'opacity-50',\n  nlpFilter: 'border border-gray-200 rounded-3xl px-3 py-1.5 text-sm font-medium text-neutral-dark mr-2 mb-2',\n  removableFilter: 'flex items-center border border-gray-200 rounded-3xl px-3 py-1.5 text-sm font-medium text-neutral-dark mr-2 mb-2',\n  clearAllButton: 'text-sm font-medium text-primary hover:underline focus:underline mb-2'\n};\n\n/**\n * Properties for {@link AppliedFilters}.\n *\n * @public\n */\nexport interface AppliedFiltersProps {\n  /** List of filters that should not be displayed. By default, builtin.entityType will be hidden. */\n  hiddenFields?: string[],\n  /** A set of facet fieldIds that should be interpreted as \"hierarchical\". */\n  hierarchicalFacetsFieldIds?: string[],\n  /** {@inheritDoc HierarchicalFacetsProps.delimiter} */\n  hierarchicalFacetsDelimiter?: string,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: AppliedFiltersCssClasses\n}\n\nconst DEFAULT_HIDDEN_FIELDS = ['builtin.entityType'];\n\n/**\n * A component that displays a list of filters applied to the current vertical\n * search, which may include any selected options from facets, NLP filters, and\n * field value static filters.\n *\n * @public\n *\n * @param props - {@link AppliedFiltersProps}\n * @returns A React element for the applied filters\n */\nexport function AppliedFilters(props: AppliedFiltersProps): React.JSX.Element {\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n\n  const {\n    hiddenFields = DEFAULT_HIDDEN_FIELDS,\n    customCssClasses = {},\n    hierarchicalFacetsDelimiter = DEFAULT_HIERARCHICAL_DELIMITER,\n    hierarchicalFacetsFieldIds\n  } = props;\n\n  const removableFilters = useRemovableFilters(\n    hierarchicalFacetsFieldIds, hierarchicalFacetsDelimiter, hiddenFields);\n  const nlpFilterDisplayNames = useNlpFilterDisplayNames(removableFilters.map(f => f.filter), hiddenFields);\n\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  cssClasses.appliedFiltersContainer = classNames(cssClasses.appliedFiltersContainer, {\n    [cssClasses.appliedFiltersLoading ?? '']: isLoading\n  });\n\n  return (\n    <AppliedFiltersDisplay\n      removableFilters={removableFilters}\n      nlpFilterDisplayNames={nlpFilterDisplayNames}\n      cssClasses={cssClasses}\n    />\n  );\n}","import { useTranslation } from 'react-i18next';\nimport { CloseIcon } from '../icons/CloseIcon';\nimport { AppliedFiltersCssClasses } from './AppliedFilters';\nimport { useClearFiltersCallback } from '../hooks/useClearFiltersCallback';\nimport { FieldValueFilter, useSearchActions } from '@yext/search-headless-react';\nimport { isDuplicateFieldValueFilter } from '../utils/filterutils';\nimport { executeSearch } from '../utils';\nimport React, { useCallback, useMemo } from 'react';\n\n/**\n * A representation of a filter that can be removed from the AppliedFilters component.\n *\n * @internal\n */\nexport interface RemovableFilter {\n  displayName: string,\n  handleRemove: () => void,\n  filter: FieldValueFilter\n}\n\n/**\n * Properties for {@link AppliedFilters}.\n *\n * @internal\n */\nexport interface AppliedFiltersDisplayProps {\n  removableFilters?: RemovableFilter[],\n  /**\n   * The display values of filters that are applied to the search results\n   * from the backend's natural language processing.\n   */\n  nlpFilterDisplayNames?: string[],\n  /** CSS classes for customizing the component styling. */\n  cssClasses?: AppliedFiltersCssClasses\n}\n\n/**\n * A component that renders applied filters based on the provided GroupedFilters.\n *\n * @param props - {@link AppliedFiltersDisplayProps}\n * @returns A React element for the applied filters\n */\nexport function AppliedFiltersDisplay(props: AppliedFiltersDisplayProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const {\n    nlpFilterDisplayNames = [],\n    removableFilters = [],\n    cssClasses = {}\n  } = props;\n  const handleClickClearAllButton = useClearFiltersCallback();\n  const searchActions = useSearchActions();\n\n  const dedupedNlpFilterDisplayNames = nlpFilterDisplayNames.filter(displayName => {\n    return !removableFilters.some(f => f.displayName === displayName);\n  });\n\n  const dedupedRemovableFilters = getDedupedRemovableFilters(removableFilters);\n  const handleRemoveDedupedFilter = useCallback((dedupedFilter: DedupedRemovableFilter) => {\n    dedupedFilter.handleRemove();\n    for (const f of dedupedFilter.duplicates ?? []) {\n      f.handleRemove();\n    }\n    searchActions.setOffset(0);\n    executeSearch(searchActions);\n  }, [searchActions]);\n  const removableFiltersWithHandlers = useMemo(() => {\n    return dedupedRemovableFilters.map(filter => ({\n      filter,\n      handleRemove: () => handleRemoveDedupedFilter(filter)\n    }));\n  }, [dedupedRemovableFilters, handleRemoveDedupedFilter]);\n\n  if (removableFilters.length + nlpFilterDisplayNames.length === 0) {\n    return null;\n  }\n\n  return (\n    <div className={cssClasses.appliedFiltersContainer} aria-label={t('appliedFiltersToCurrentSearch')}>\n      {dedupedNlpFilterDisplayNames.map((displayName, i) => renderNlpFilter(displayName, i, cssClasses))}\n      {removableFiltersWithHandlers.map(({ filter, handleRemove }, i) => {\n        return (\n          <RemovableFilter\n            key={`${filter.displayName ?? 'filter'}-${i}`}\n            displayName={filter.displayName}\n            handleRemove={handleRemove}\n            cssClasses={cssClasses}\n          />\n        );\n      })}\n      {removableFilters.length > 0 &&\n        <button onClick={handleClickClearAllButton} className={cssClasses.clearAllButton}>\n          {t('clearAll')}</button>\n      }\n    </div>\n  );\n}\n\ninterface DedupedRemovableFilter extends RemovableFilter {\n  duplicates?: RemovableFilter[]\n}\n\nfunction getDedupedRemovableFilters(filters: RemovableFilter[]) {\n  const dedupedFilters: DedupedRemovableFilter[] = [];\n  for (const f of filters) {\n    const preexistingDupe = dedupedFilters.find(d => isDuplicateFieldValueFilter(d.filter, f.filter));\n    if (!preexistingDupe) {\n      dedupedFilters.push(f);\n    } else {\n      if (!preexistingDupe.duplicates) {\n        preexistingDupe.duplicates = [f];\n      } else {\n        preexistingDupe.duplicates.push(f);\n      }\n    }\n  }\n  return dedupedFilters;\n}\n\nfunction RemovableFilter({\n  displayName,\n  handleRemove,\n  cssClasses\n}: {\n  displayName: string | undefined,\n  handleRemove: () => void,\n  cssClasses: AppliedFiltersCssClasses\n}): React.JSX.Element {\n  const { t } = useTranslation();\n  return (\n    <div className={cssClasses.removableFilter}>\n      <div className={cssClasses.filterLabel}>{displayName}</div>\n      <button\n        className='ml-1 inline-flex h-5 w-5 shrink-0 items-center justify-center text-neutral'\n        onClick={handleRemove}\n        aria-label={t('removeFilter', { displayName })}\n      >\n        <CloseIcon className='h-2 w-2' />\n      </button>\n    </div>\n  );\n}\n\nfunction renderNlpFilter(\n  displayName: string | undefined,\n  index: number,\n  cssClasses: AppliedFiltersCssClasses\n): React.JSX.Element {\n  return (\n    <div className={cssClasses.nlpFilter} key={`${displayName}-${index}`}>\n      <span className={cssClasses.filterLabel}>{displayName}</span>\n    </div>\n  );\n}\n","import { useSearchActions, useSearchState } from '@yext/search-headless-react';\nimport { useCallback } from 'react';\nimport { executeSearch } from '../utils/search-operations';\n\n/**\n * Clears static filters and facets, resets the search offset to 0, and runs a search.\n *\n * @internal\n */\nexport function useClearFiltersCallback() {\n  const searchActions = useSearchActions();\n  const staticFilters = useSearchState(state => state.filters.static);\n\n  return useCallback(() => {\n    searchActions.setOffset(0);\n    searchActions.resetFacets();\n    staticFilters && searchActions.setStaticFilters(staticFilters.map(f => {\n      return {\n        ...f,\n        selected: false\n      };\n    }));\n    executeSearch(searchActions);\n  }, [searchActions, staticFilters]);\n}","import { useTranslation } from 'react-i18next';\nimport { DisplayableFacet } from '@yext/search-headless-react';\nimport React, { ReactNode, useCallback, useState } from 'react';\nimport { useComposedCssClasses } from '../../hooks';\nimport { HierarchicalFacetNode, HierarchicalFacetTree, useHierarchicalFacetTree } from '../../hooks/useHierarchicalFacetTree';\nimport { useFiltersContext } from './FiltersContext';\n\nexport const DEFAULT_HIERARCHICAL_DELIMITER = '>';\n\n/**\n * Props for HierarchicalFacetDisplay\n *\n * @public\n */\nexport interface HierarchicalFacetDisplayProps {\n  /** The `DisplayableFacet` to render as a HierarchicalFacetDisplay. */\n  facet: DisplayableFacet,\n  /** {@inheritDoc HierarchicalFacetsProps.delimiter} */\n  delimiter?: string,\n  /** {@inheritDoc HierarchicalFacetsProps.showMoreLimit} */\n  showMoreLimit?: number,\n  /**\n   * CSS classes for customizing the component styling\n   * of HierarchicalFacetDisplayCssClasses.\n   */\n  customCssClasses?: HierarchicalFacetDisplayCssClasses\n}\n\n/**\n * The CSS class interface for HierarchicalFacetDisplay.\n *\n * @public\n */\nexport interface HierarchicalFacetDisplayCssClasses {\n  treeContainer?: string,\n  allCategoriesOption___active?: string,\n  allCategoriesOption___inactive?: string,\n  availableOption__active?: string,\n  availableOption__inactive?: string,\n  parentCategory?: string,\n  currentCategory?: string,\n  showMoreButton?: string\n}\n\nconst builtInCssClasses: Readonly<HierarchicalFacetDisplayCssClasses> = {\n  treeContainer: 'flex flex-col items-start',\n  allCategoriesOption___active: 'font-semibold mb-2 text-sm',\n  allCategoriesOption___inactive: 'mb-2 text-sm',\n  availableOption__active: 'font-semibold ml-4 mb-2 text-sm',\n  availableOption__inactive: 'ml-4 mb-2 text-sm',\n  parentCategory: 'mb-2 text-sm',\n  currentCategory: 'font-semibold mb-2 text-sm',\n  showMoreButton: 'ml-4 text-sm font-medium text-primary'\n};\n\n/**\n * A HierarchicalFacetDisplay takes a `DisplayableFacet` and renders the facet in a way\n * to represent multiple levels of \"hierarchies\".\n *\n * The hierarchies are determined by the provided delimiter, which defaults to \"\\>\".\n *\n * @public\n */\nexport function HierarchicalFacetDisplay({\n  facet,\n  delimiter = DEFAULT_HIERARCHICAL_DELIMITER,\n  showMoreLimit = 4,\n  customCssClasses\n}: HierarchicalFacetDisplayProps): React.JSX.Element {\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const tree = useHierarchicalFacetTree(facet, delimiter);\n  const [isShowingMore, setIsShowingMore] = useState(false);\n  const resetShowMore = useCallback(() => setIsShowingMore(false), []);\n  const toggleShowMore = useCallback(() => {\n    setIsShowingMore(prev => !prev);\n  }, []);\n\n  /** Iteratively parses the `HierarchicalFacetTree` into an array of ReactNodes */\n  function renderTree(): ReactNode[] {\n    let treePointer: HierarchicalFacetTree = tree;\n    const renderedNodesAndShowMoreButton: ReactNode[] = [renderAllCategoriesButton()];\n\n    while (treePointer) {\n      const currentNodes = Object.values(treePointer);\n      const selectedChildNode = currentNodes.find(n => n.selected);\n      const selectedHasNoChildren =\n        selectedChildNode && Object.values(selectedChildNode.childTree).length === 0;\n      const activeParentNode = currentNodes.find(n => n.hasSelectedChild);\n\n      if ((!selectedChildNode && !activeParentNode) || selectedHasNoChildren) {\n        renderedNodesAndShowMoreButton.push(...renderAvailableOptions(currentNodes));\n        if (currentNodes.length > showMoreLimit) {\n          renderedNodesAndShowMoreButton.push(renderShowMoreButton());\n        }\n        break;\n      }\n\n      const activeNode = selectedChildNode ?? activeParentNode;\n      if (!activeNode) {\n        break;\n      }\n      renderedNodesAndShowMoreButton.push(\n        renderCategory(activeNode, facet.fieldId));\n      treePointer = activeNode.childTree;\n    }\n\n    return renderedNodesAndShowMoreButton;\n  }\n\n  function renderAllCategoriesButton() {\n    return (\n      <AllCategories\n        key='_AllCategories'\n        activeClassName={cssClasses.allCategoriesOption___active}\n        inactiveClassName={cssClasses.allCategoriesOption___inactive}\n        facet={facet}\n        resetShowMore={resetShowMore}\n      />\n    );\n  }\n\n  function renderAvailableOptions(nodes: HierarchicalFacetNode[]) {\n    const nodesToRender = isShowingMore ? nodes : nodes.slice(0, showMoreLimit);\n    return nodesToRender.map(n =>\n      <AvailableOption\n        key={n.lastDisplayNameToken}\n        activeClassName={cssClasses.availableOption__active}\n        inactiveClassName={cssClasses.availableOption__inactive}\n        fieldId={facet.fieldId}\n        currentNode={n}\n        resetShowMore={resetShowMore}\n        siblingNodes={nodes.filter(siblingNode => siblingNode !== n)}\n      />\n    );\n  }\n\n  function renderShowMoreButton() {\n    return <ShowMoreButton\n      key='_ShowMoreButton'\n      className={cssClasses.showMoreButton}\n      isShowingMore={isShowingMore}\n      toggleShowMore={toggleShowMore}\n    />;\n  }\n\n  function renderCategory(selectedNode: HierarchicalFacetNode, fieldId: string) {\n    const sharedProps = {\n      key: selectedNode.lastDisplayNameToken,\n      resetShowMore,\n      selectedNode,\n      fieldId\n    };\n\n    if (selectedNode.hasSelectedChild) {\n      return <ParentCategory className={cssClasses.parentCategory} {...sharedProps}/>;\n    } else {\n      return <CurrentCategory className={cssClasses.currentCategory} {...sharedProps}/>;\n    }\n  }\n\n  return (\n    <div className={cssClasses.treeContainer}>\n      {renderTree()}\n    </div>\n  );\n}\n\n/**\n * A hard-coded \"All Categories\" button that can be used to reset the HierarchicalFacetDisplay\n * to its initial state, i.e. with no options selected.\n */\nfunction AllCategories({ facet, inactiveClassName, activeClassName, resetShowMore }: {\n  facet: DisplayableFacet,\n  activeClassName?: string,\n  inactiveClassName?: string,\n  resetShowMore: () => void\n}) {\n  const { t } = useTranslation();\n  const { applyFilters, selectFilter } = useFiltersContext();\n  const handleClickAllCategories = useCallback(() => {\n    facet.options\n      .filter(o => o.selected)\n      .forEach(o => selectFilter({ ...o, fieldId: facet.fieldId, selected: false }));\n    applyFilters();\n    resetShowMore();\n  }, [applyFilters, facet.fieldId, facet.options, resetShowMore, selectFilter]);\n  const allCategoriesText = t('allCategories');\n\n  if (facet.options.find(o => o.selected)) {\n    return (\n      <button\n        className={inactiveClassName}\n        onClick={handleClickAllCategories}\n      >\n        {`${allCategoriesText} + /`}</button>\n    );\n  }\n\n  return (\n    <div className={activeClassName}>{allCategoriesText}</div>\n  );\n}\n\n/** An option currently available for selection or deselection. */\nfunction AvailableOption(props: {\n  fieldId: string,\n  activeClassName?: string,\n  inactiveClassName?: string,\n  resetShowMore: () => void,\n  currentNode: HierarchicalFacetNode,\n  siblingNodes: HierarchicalFacetNode[]\n}) {\n  const { fieldId, currentNode, activeClassName, inactiveClassName, resetShowMore, siblingNodes } = props;\n  const { applyFilters, selectFilter } = useFiltersContext();\n  const { selected, lastDisplayNameToken, facetOption } = currentNode;\n  const handleClickAvailableOptions = useCallback(() => {\n    siblingNodes.filter(n => n.selected).forEach(n => selectFilter({\n      ...n.facetOption,\n      selected: false,\n      fieldId\n    }));\n    selectFilter({\n      ...facetOption,\n      selected: !selected,\n      fieldId\n    });\n    const parentFacetOption = currentNode.parentNode?.facetOption;\n    parentFacetOption && selectFilter({\n      ...parentFacetOption,\n      selected,\n      fieldId\n    });\n    applyFilters();\n    resetShowMore();\n  }, [\n    applyFilters,\n    currentNode.parentNode?.facetOption,\n    facetOption,\n    fieldId,\n    resetShowMore,\n    selectFilter,\n    selected,\n    siblingNodes\n  ]);\n\n  return (\n    <button\n      className={selected ? activeClassName : inactiveClassName}\n      onClick={handleClickAvailableOptions}\n    >\n      {lastDisplayNameToken}\n    </button>\n  );\n}\n\n/** A parent category that is not the most immediate one. */\nfunction ParentCategory({ fieldId, selectedNode, className, resetShowMore }: {\n  fieldId: string,\n  selectedNode: HierarchicalFacetNode,\n  className?: string,\n  resetShowMore: () => void\n}) {\n  const { applyFilters, selectFilter } = useFiltersContext();\n\n  const deselectChildOptions = useCallback((node: HierarchicalFacetNode) => {\n    const tree = node.childTree;\n    Object.values(tree).forEach(n => {\n      selectFilter({\n        ...n.facetOption,\n        selected: false,\n        fieldId\n      });\n      deselectChildOptions(n);\n    });\n  }, [fieldId, selectFilter]);\n\n  const handleClickParentCategory = useCallback(() => {\n    selectFilter({\n      ...selectedNode.facetOption,\n      selected: true,\n      fieldId\n    });\n    deselectChildOptions(selectedNode);\n    applyFilters();\n    resetShowMore();\n  }, [applyFilters, deselectChildOptions, fieldId, resetShowMore, selectFilter, selectedNode]);\n\n  return (\n    <button className={className} onClick={handleClickParentCategory}>\n      {selectedNode.lastDisplayNameToken + ' /'}\n    </button>\n  );\n}\n\n/** The currently selected category, i.e. the most immediate category. */\nfunction CurrentCategory({ fieldId, selectedNode, className, resetShowMore }: {\n  fieldId: string,\n  selectedNode: HierarchicalFacetNode,\n  className?: string,\n  resetShowMore: () => void\n}) {\n  const { applyFilters, selectFilter } = useFiltersContext();\n  const handleClickCurrentCategory = useCallback(() => {\n    selectFilter({\n      ...selectedNode.facetOption,\n      selected: false,\n      fieldId\n    });\n    const parentFacetOption = selectedNode.parentNode?.facetOption;\n    parentFacetOption && selectFilter({\n      ...parentFacetOption,\n      selected: true,\n      fieldId\n    });\n    applyFilters();\n    resetShowMore();\n  }, [\n    applyFilters,\n    fieldId,\n    resetShowMore,\n    selectFilter,\n    selectedNode.facetOption,\n    selectedNode.parentNode?.facetOption\n  ]);\n\n  return (\n    <button\n      className={className}\n      onClick={handleClickCurrentCategory}\n    >\n      {selectedNode.lastDisplayNameToken}\n    </button>\n  );\n}\n\n/** The \"Show more/less\" button for hiding/showing additional `AvailableOption`s */\nfunction ShowMoreButton({ className, isShowingMore, toggleShowMore }: {\n  className?: string,\n  isShowingMore: boolean,\n  toggleShowMore: () => void\n}) {\n  const { t } = useTranslation();\n  return (\n    <button className={className} onClick={toggleShowMore}>\n      {isShowingMore ? t('showLess') : t('showMore')}\n    </button>\n  );\n}\n","import { DisplayableFacet, FacetOption } from '@yext/search-headless-react';\nimport { useMemo } from 'react';\n\n/**\n * A tree of `HierarchicalFacetNode`s\n */\nexport type HierarchicalFacetTree = {\n  [key: string]: HierarchicalFacetNode\n};\n\n/**\n * A single node of a `HierarchicalFacetTree`\n */\nexport type HierarchicalFacetNode = {\n  selected: boolean,\n  hasSelectedChild: boolean,\n  facetOption: FacetOption,\n  childTree: HierarchicalFacetTree,\n  parentNode?: HierarchicalFacetNode,\n  displayNameTokens: string[],\n  lastDisplayNameToken: string\n};\n\n/**\n * Parses a `DisplayableFacet` into a `HierarchicalFacetTree`, then memoizes it.\n */\nexport function useHierarchicalFacetTree(\n  hierarchicalFacet: DisplayableFacet,\n  delimiter: string\n): HierarchicalFacetTree {\n  return useMemo(() => {\n    return parseHierarchicalFacetTree(hierarchicalFacet, delimiter);\n  }, [delimiter, hierarchicalFacet]);\n}\n\n/**\n * Parses a `DisplayableFacet` into a `HierarchicalFacetTree`.\n */\nexport function parseHierarchicalFacetTree(\n  hierarchicalFacet: DisplayableFacet,\n  delimiter: string\n): HierarchicalFacetTree {\n  const optionsInAscendingLength = hierarchicalFacet?.options.map(o => {\n    const displayNameTokens = o.displayName.split(delimiter).map(s => s.trim());\n    return {\n      ...o,\n      displayNameTokens\n    };\n  }).sort((a, b) => a.displayNameTokens.length - b.displayNameTokens.length) || [];\n\n  const tree: HierarchicalFacetTree = {};\n\n  optionsInAscendingLength.forEach(o => {\n    const {\n      displayNameTokens,\n      displayName\n    } = o;\n\n    let currentTree: HierarchicalFacetTree = tree;\n    let parentNode: HierarchicalFacetNode | undefined = undefined;\n\n    for (const token of displayNameTokens.slice(0, -1)) {\n      if (!(token in currentTree)) {\n        console.error(\n          `Error parsing hierarchical facet option \"${displayName}\" at token \"${token}\". Current tree:`,\n          JSON.stringify(tree));\n        return;\n      }\n      if (o.selected) {\n        currentTree[token].hasSelectedChild = true;\n      }\n      parentNode = currentTree[token];\n      currentTree = currentTree[token].childTree;\n    }\n\n    const lastDisplayNameToken = displayNameTokens[displayNameTokens.length - 1];\n    currentTree[lastDisplayNameToken] = {\n      selected: o.selected,\n      displayNameTokens,\n      lastDisplayNameToken,\n      facetOption: {\n        value: o.value,\n        matcher: o.matcher\n      },\n      hasSelectedChild: false,\n      childTree: {},\n      parentNode: parentNode\n    };\n  });\n\n  return tree;\n}","import { createContext, useContext } from 'react';\nimport { SelectableFieldValueFilter } from '../../models/SelectableFieldValueFilter';\n\n/**\n * FiltersContext is responsible for handling filter selection.\n *\n * @public\n */\nexport interface FiltersContextType {\n  /** A function called when a filter is selected. */\n  selectFilter: (filter: SelectableFieldValueFilter) => void,\n  /** A function called when filters should be applied. */\n  applyFilters: () => void,\n  /** The list of SelectableFieldValueFilters provided by the context. */\n  filters: SelectableFieldValueFilter[]\n}\n\n/**\n * Filters context which provides the filters to render and a handler for selecting a filter.\n *\n * @public\n */\nexport const FiltersContext = createContext<FiltersContextType | null>(null);\n\n/**\n * A hook used to access the {@link Filters.FiltersContextType}.\n *\n * @public\n */\nexport function useFiltersContext(): FiltersContextType {\n  const filtersContextInstance = useContext(FiltersContext);\n  if (filtersContextInstance === null) {\n    throw new Error('Tried to use FiltersContext when none exists.');\n  }\n  return filtersContextInstance;\n}\n","import { FieldValueFilter, useSearchState } from '@yext/search-headless-react';\nimport { useMemo } from 'react';\nimport { isDuplicateFieldValueFilter } from '../utils/filterutils';\n\n/**\n * Returns a memoized array of nlp filter display values, with hiddenFields and duplicate filters removed.\n *\n * @internal\n */\nexport function useNlpFilterDisplayNames(\n  removableFilters: FieldValueFilter[],\n  hiddenFields: string[]\n) {\n  const nlpFilters = useSearchState(state => state.vertical.appliedQueryFilters);\n\n  return useMemo(() => {\n    return nlpFilters?.filter(({ filter }) => {\n      if (hiddenFields.includes(filter.fieldId)) {\n        return false;\n      }\n      const duplicateFilter = removableFilters.find(f => isDuplicateFieldValueFilter(f, filter));\n      return !duplicateFilter;\n    }).map(f => f.displayValue) ?? [];\n  }, [hiddenFields, nlpFilters, removableFilters]);\n}\n","import { FieldValueFilter, useSearchState, useSearchActions, DisplayableFacet, DisplayableFacetOption, SearchActions, Matcher } from '@yext/search-headless-react';\nimport isEqual from 'lodash/isEqual.js';\nimport { useMemo } from 'react';\nimport { isNearFilterValue } from '../utils/filterutils';\nimport { isDescendantHierarchicalFacet } from '../utils/isDescendantHierarchicalFacet';\nimport { useStateUpdatedOnSearch } from './useStateUpdatedOnSearch';\nimport { useRemovableStaticFilters } from './useRemovableStaticFilters';\nimport { RemovableFilter } from '../components/AppliedFiltersDisplay';\n\n/**\n * Returns a memoized RemovableFilter[], with handling for static filters,\n * hierarchical facets, and non-hierarchical facets.\n *\n * Duplicates are kept.\n *\n * @internal\n */\nexport function useRemovableFilters(\n  hierarchicalFieldIds: string[] | undefined,\n  hierarchicalDelimiter: string,\n  hiddenFields: string[]\n): RemovableFilter[] {\n  const facets = useStateUpdatedOnSearch(state => state.filters.facets);\n  const hasResults = !!useSearchState(state => state.vertical.results);\n  const searchActions = useSearchActions();\n  const removableStaticFilters = useRemovableStaticFilters(hiddenFields);\n\n  return useMemo(() => {\n    if (!hasResults) {\n      return [];\n    }\n\n    const removableFacets = facets\n      ?.filter(f => !hiddenFields.includes(f.fieldId))\n      .flatMap((f: DisplayableFacet) => {\n        if (hierarchicalFieldIds?.includes(f.fieldId)) {\n          return processHierarchicalFacet(f, hierarchicalDelimiter, searchActions, facets);\n        }\n        return processRegularFacet(f, searchActions);\n      }) ?? [];\n\n    return [...removableStaticFilters, ...removableFacets];\n  }, [\n    facets,\n    hasResults,\n    hiddenFields,\n    hierarchicalDelimiter,\n    hierarchicalFieldIds,\n    searchActions,\n    removableStaticFilters\n  ]);\n}\n\nfunction processRegularFacet(f: DisplayableFacet, searchActions: SearchActions) {\n  return f.options.filter(o => o.selected).map(option => {\n\n    const filter: FieldValueFilter = {\n      value: option.value,\n      matcher: option.matcher,\n      fieldId: f.fieldId\n    };\n\n    return {\n      displayName: option.displayName,\n      handleRemove: () => handleRemoveFacetOption(filter, searchActions),\n      filter\n    };\n  });\n}\n\nfunction processHierarchicalFacet(\n  f: DisplayableFacet,\n  delimiter: string,\n  searchActions: SearchActions,\n  facets: DisplayableFacet[] | undefined\n): RemovableFilter[] {\n  function createAppliedFilter(o: DisplayableFacetOption, tokens: string[]) {\n    const filter = {\n      matcher: o.matcher,\n      value: o.value,\n      fieldId: f.fieldId\n    };\n\n    const handleRemove =\n      () => handleRemoveHierarchicalFacetOption(filter, tokens, delimiter, searchActions, facets);\n\n    return {\n      displayName: tokens[tokens.length - 1],\n      handleRemove,\n      filter,\n      tokens\n    };\n  }\n\n  return f.options.filter(o => o.selected).flatMap(selectedOption => {\n    const displayNameTokens = splitDisplayName(selectedOption.displayName, delimiter);\n    const appliedFacets: {\n      displayName: string,\n      handleRemove: () => void,\n      filter: FieldValueFilter,\n      tokens: string[]\n    }[] = [createAppliedFilter(selectedOption, displayNameTokens)];\n\n    // Create an object for each facet that is a parent of the currently selected option,\n    // despite them not being explicitly selected\n    f.options.forEach(option => {\n      const tokens = splitDisplayName(option.displayName, delimiter);\n      const isDescendant = isDescendantHierarchicalFacet(\n        displayNameTokens,\n        tokens\n      );\n      if (!isDescendant) {\n        return;\n      }\n      appliedFacets.push(createAppliedFilter(option, tokens));\n    });\n    appliedFacets.sort((a, b) => a.tokens.length - b.tokens.length);\n    return appliedFacets;\n  });\n}\n\nfunction handleRemoveHierarchicalFacetOption(\n  filter: {\n    value: DisplayableFacetOption['value'],\n    fieldId: string,\n    matcher: Matcher\n  },\n  displayNameTokens: string[],\n  delimiter: string,\n  searchActions: SearchActions,\n  facets: DisplayableFacet[] | undefined\n) {\n  searchActions.setFacetOption(filter.fieldId, {\n    matcher: filter.matcher,\n    value: filter.value\n  }, false);\n\n  // Uncheck all descendant options in the hierarchy\n  facets\n    ?.filter(f => f.fieldId === filter.fieldId)\n    .flatMap(f => f.options)\n    .forEach(o => {\n      if (!o.selected) {\n        return;\n      }\n      const tokensToCheck = splitDisplayName(o.displayName, delimiter);\n      if (isDescendantHierarchicalFacet(tokensToCheck, displayNameTokens)) {\n        searchActions.setFacetOption(filter.fieldId, {\n          matcher: o.matcher,\n          value: o.value\n        }, false);\n      }\n    });\n  const parentTokens = displayNameTokens.slice(0, -1);\n  const parentOption = facets\n    ?.filter(f => f.fieldId === filter.fieldId)\n    .flatMap(f => f.options)\n    .find(o => {\n      const tokens = splitDisplayName(o.displayName, delimiter);\n      return isEqual(tokens, parentTokens);\n    });\n\n  parentOption && searchActions.setFacetOption(filter.fieldId, {\n    matcher: parentOption.matcher,\n    value: parentOption.value\n  }, true);\n}\n\nfunction handleRemoveFacetOption(\n  { fieldId, matcher, value }: FieldValueFilter,\n  searchActions: SearchActions\n) {\n  if (isNearFilterValue(value)) {\n    console.error('A FieldValueFilter with a NearFilterValue is not a supported RemovableFilter.');\n    return;\n  }\n  searchActions.setFacetOption(fieldId, { matcher, value }, false);\n}\n\nfunction splitDisplayName(displayName: string, delimiter: string): string[] {\n  return displayName.split(delimiter).map(s => s.trim());\n}\n","/**\n * Given a parent displayName and corresponding tokens, and a child displayName and corresponding\n * tokens that we want to check, return whether the \"child\" is actually a descendant of the \"parent\"\n *\n * @internal\n */\nexport function isDescendantHierarchicalFacet(\n  descendantTokens: string[],\n  parentTokens: string[]\n): boolean {\n  if (descendantTokens.length <= parentTokens.length) {\n    return false;\n  }\n\n  for (let i = 0; i < parentTokens.length; i++) {\n    if (descendantTokens[i] !== parentTokens[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import { StateSelector, useSearchState } from '@yext/search-headless-react';\nimport { useRef } from 'react';\n\n/**\n * Selects a portion Answers State, snapshotted to the last time a search was completed.\n */\nexport function useStateUpdatedOnSearch<T>(\n  stateSelector: StateSelector<T>\n): T | undefined {\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n  const wasLoading = useRef<boolean | undefined>(isLoading);\n  const currentState = useSearchState(stateSelector);\n  const snapshottedState = useRef<T>(currentState);\n  if (!isLoading && wasLoading.current) {\n    snapshottedState.current = currentState;\n  }\n  wasLoading.current = isLoading;\n\n  return snapshottedState.current;\n}","import { useSearchState, useSearchActions } from '@yext/search-headless-react';\nimport { useMemo } from 'react';\nimport { RemovableFilter } from '../components/AppliedFiltersDisplay';\nimport { SelectableFieldValueFilter } from '../models/SelectableFieldValueFilter';\nimport { getSelectableFieldValueFilters } from '../utils/filterutils';\nimport { useStateUpdatedOnSearch } from './useStateUpdatedOnSearch';\n\n/**\n * Returns a RemovableFilter[] sourced from the static filters state.\n *\n * @internal\n */\nexport function useRemovableStaticFilters(hiddenFields: string[]): RemovableFilter[] {\n  const staticFilters = useStateUpdatedOnSearch(state => state.filters.static);\n  const hasResults = !!useSearchState(state => state.vertical.results);\n  const searchActions = useSearchActions();\n\n  return useMemo(() => {\n    if (!hasResults || !staticFilters) {\n      return [];\n    }\n\n    function handleRemoveStaticFilterOption(filter: SelectableFieldValueFilter) {\n      searchActions.setFilterOption({\n        filter: { ...filter, kind: 'fieldValue' },\n        selected: false\n      });\n    }\n\n    return getSelectableFieldValueFilters(staticFilters)\n      .filter(f => f.selected && !hiddenFields.includes(f.fieldId))\n      .map(f => ({\n        displayName: f.displayName ?? '',\n        handleRemove: () => handleRemoveStaticFilterOption(f),\n        filter: f\n      }));\n  }, [hasResults, hiddenFields, searchActions, staticFilters]);\n}\n","import { useSearchState, VerticalResults as VerticalResultsData } from '@yext/search-headless-react';\nimport { StandardSection } from './sections';\nimport {\n  SectionHeader,\n  SectionHeaderCssClasses,\n  builtInCssClasses as sectionHeaderCssClasses\n} from './sections/SectionHeader';\nimport { useComposedCssClasses } from '../hooks';\nimport classNames from 'classnames';\nimport { VerticalConfigMap } from '../models';\nimport React from 'react';\n\n/**\n * The CSS class interface used for {@link UniversalResults}.\n *\n * @public\n */\nexport interface UniversalResultsCssClasses extends SectionHeaderCssClasses {\n  universalResultsContainer?: string,\n  universalResultsLoading?: string\n}\n\nconst builtInCssClasses: Readonly<UniversalResultsCssClasses> = {\n  universalResultsContainer: 'space-y-8',\n  universalResultsLoading: 'opacity-50',\n  ...sectionHeaderCssClasses\n};\n\n/**\n * Props for {@link UniversalResults}.\n *\n * @public\n */\nexport interface UniversalResultsProps<T> {\n  /** Whether or not to show the applied filters. */\n  showAppliedFilters?: boolean,\n  /** A mapping of verticalKey to the configuration for each vertical. */\n  verticalConfigMap: VerticalConfigMap<T>,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: UniversalResultsCssClasses\n}\n\n/**\n * Displays the results of a universal search with the results for each vertical separated\n * into sections.\n *\n * @public\n *\n * @param props - {@link UniversalResultsProps}\n * @returns A React element for the universal results, or null if there are none\n */\nexport function UniversalResults<T>({\n  verticalConfigMap,\n  showAppliedFilters,\n  customCssClasses\n}: UniversalResultsProps<T>): React.JSX.Element | null {\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const resultsFromAllVerticals = useSearchState(state => state?.universal?.verticals) || [];\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n\n  if (resultsFromAllVerticals.length === 0) {\n    return null;\n  }\n\n  const resultsClassNames = classNames(cssClasses.universalResultsContainer, {\n    [cssClasses.universalResultsLoading ?? '']: isLoading\n  });\n\n  return (\n    <div className={resultsClassNames}>\n      {renderVerticalSections({ resultsFromAllVerticals, showAppliedFilters, verticalConfigMap, cssClasses })}\n    </div>\n  );\n}\n\ninterface VerticalSectionsProps<T> extends UniversalResultsProps<T> {\n  resultsFromAllVerticals: VerticalResultsData[],\n  cssClasses: UniversalResultsCssClasses\n}\n\n/**\n * Renders a list of {@link SectionComponent}s based on the given list of vertical results and\n * corresponding configs, including specifying which section template to use.\n */\nfunction renderVerticalSections<T>(props: VerticalSectionsProps<T>): React.JSX.Element {\n  const { resultsFromAllVerticals, verticalConfigMap, cssClasses } = props;\n  return <>\n    {resultsFromAllVerticals\n      .filter(verticalResults => verticalResults.results)\n      .map(verticalResults => {\n        const verticalKey = verticalResults.verticalKey;\n        const verticalConfig = (verticalConfigMap as any)[verticalKey] || {};\n\n        const label = verticalConfig.label ?? verticalKey;\n        const results = verticalResults.results;\n\n        const SectionComponent = verticalConfig.SectionComponent || StandardSection;\n\n        const appliedQueryFilters = props.showAppliedFilters\n          ? verticalResults.appliedQueryFilters\n          : undefined;\n\n        return (\n          <SectionComponent\n            results={results}\n            verticalKey={verticalKey}\n            header={<SectionHeader {...{\n              label,\n              appliedQueryFilters,\n              verticalKey,\n              viewAllButton: verticalConfig.viewAllButton,\n              getViewAllUrl: verticalConfig.getViewAllUrl,\n              cssClasses\n            }}/>}\n            CardComponent={verticalConfig.CardComponent}\n            key={verticalKey}\n          />\n        );\n      })\n    }\n  </>;\n}\n","import { VerticalResultsCssClasses } from './VerticalResults';\nimport { CardComponent } from '../models';\nimport { Result } from '@yext/search-headless-react';\nimport { useComposedCssClasses } from '../hooks';\nimport classNames from 'classnames';\nimport React from 'react';\n\nconst builtInCssClasses: Readonly<VerticalResultsCssClasses> = {\n  verticalResultsLoading: 'opacity-50'\n};\n\ninterface VerticalResultsDisplayProps<T> {\n  CardComponent: CardComponent<T>,\n  isLoading?: boolean,\n  results: Result<T>[],\n  customCssClasses?: VerticalResultsCssClasses,\n  setResultsRef?: (index: number) => ((result: HTMLDivElement) => void) | null\n}\n\n/**\n * A Component that displays all the search results for a given vertical.\n *\n * @param props - The props for the Component, including the results and the card type\n *                to be used.\n */\nexport function VerticalResultsDisplay<T>(props: VerticalResultsDisplayProps<T>): React.JSX.Element | null {\n  const {\n    CardComponent,\n    results,\n    isLoading = false,\n    customCssClasses,\n    setResultsRef\n  } = props;\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  if (results.length === 0) {\n    return null;\n  }\n\n  const resultsClassNames = classNames(cssClasses.verticalResultsContainer, {\n    [cssClasses.verticalResultsLoading ?? '']: isLoading\n  });\n\n  return (\n    <div className={resultsClassNames}>\n      {results?.map(result => renderResult(CardComponent, result, setResultsRef))}\n    </div>\n  );\n}\n\n/**\n * Renders a single result using the specified card and configuration.\n *\n * @param CardComponent - The card for the vertical.\n * @param result - The result to render.\n */\nfunction renderResult<T>(\n  CardComponent: CardComponent<T>,\n  result: Result<T>,\n  setResultsRef?: (index: number) => ((result: HTMLDivElement) => void) | null\n): React.JSX.Element {\n  const key = result.id && result.index ? `${result.id}-${result.index}` : result.id || result.index;\n  return (\n    <div key={result.id} ref={result.index ? setResultsRef?.(result.index) : null}>\n      <CardComponent result={result} key={key}/>\n    </div>\n  );\n}","import { useComposedCssClasses } from '../../../hooks';\nimport {\n  ThumbsFeedback,\n  builtInCssClasses as thumbsFeedbackCssClasses,\n  FeedbackType,\n  ThumbsFeedbackCssClasses\n} from '../../ThumbsFeedback';\nimport { renderHighlightedValue } from '../../utils/renderHighlightedValue';\nimport { CtaData } from '../../../models';\n\nimport { HighlightedValue } from '@yext/search-headless-react';\nimport React, { MouseEventHandler } from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * The CSS class interface used for the StandardCardDisplay.\n *\n * @public\n */\ninterface StandardCardCssClasses extends ThumbsFeedbackCssClasses {\n  container?: string,\n  header?: string,\n  body?: string,\n  cta1?: string,\n  cta2?: string,\n  title?: string\n}\n\n/**\n * Default Tailwind styles for the StandardCardDisplay.\n */\nconst builtInCssClasses: Readonly<StandardCardCssClasses> = {\n  container: 'flex flex-col justify-between border border-gray-200 rounded-lg mb-4 p-4 shadow-sm',\n  header: 'flex text-neutral-dark',\n  body: 'flex justify-end pt-2.5 text-base',\n  cta1: 'whitespace-nowrap bg-primary text-white font-medium rounded-lg py-2 px-5 shadow',\n  cta2: 'whitespace-nowrap bg-white text-primary font-medium rounded-lg py-2 px-5 mt-2 shadow',\n  title: 'text-lg font-medium',\n  thumbsFeedbackContainer: 'flex justify-end mt-4 text-sm text-gray-500 font-medium',\n  thumbsUpIcon: thumbsFeedbackCssClasses.thumbsUpIcon,\n  thumbsDownIcon: thumbsFeedbackCssClasses.thumbsDownIcon\n};\n\n/**\n * Click handlers for the various buttons and links that can appear in the StandardCardDisplay.\n */\ninterface ClickHandlers {\n  handleTitleClick: MouseEventHandler<HTMLAnchorElement>,\n  handleCtaClick: MouseEventHandler<HTMLButtonElement>,\n  handleFeedbackClick: (feedback: FeedbackType) => void\n}\n\n/**\n * Props for displaying the basic, Standard card.\n */\ninterface StandardCardDisplayProps {\n  title: string | HighlightedValue,\n  link?: string,\n  description?: string,\n  showFeedbackButtons?: boolean,\n  cta1?: CtaData,\n  cta2?: CtaData,\n  clickHandlers: ClickHandlers,\n  customCssClasses?: StandardCardCssClasses\n}\n\n/**\n * The display portion of the {@link StandardCard}.\n *\n * @param props - Contains a title, an optional description, and up to two CTAs. Click handlers for\n *                the various buttons and links are also supplied. The props can also include custom\n *                styling.\n * @returns - The rendered Result card.\n */\nfunction StandardCardDisplay(props: StandardCardDisplayProps) {\n  const {\n    title,\n    link,\n    description,\n    customCssClasses,\n    clickHandlers,\n    showFeedbackButtons,\n    cta1,\n    cta2\n  } = props;\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  function renderTitle(title: string | HighlightedValue, link?: string) {\n    const titleJsx = renderHighlightedValue(title, { highlighted: 'font-bold', nonHighlighted: 'font-medium' });\n\n    return (\n      link\n        ? <a href={link} className='text-lg font-medium text-primary hover:underline focus:underline' onClick={clickHandlers.handleTitleClick}>\n          {titleJsx}\n        </a>\n        : <div className={cssClasses.title}>{titleJsx}</div>\n    );\n  }\n\n  function renderCTAs(cta1?: CtaData | undefined, cta2?: CtaData | undefined) {\n    if (cta1 || cta2) {\n      return (\n        <div className='flex flex-col justify-end ml-4'>\n          {cta1 &&\n            <button className={cssClasses.cta1} onClick={clickHandlers.handleCtaClick}>{cta1.label}</button>}\n          {cta2 &&\n            <button className={cssClasses.cta2} onClick={clickHandlers.handleCtaClick}>{cta2.label}</button>}\n        </div>\n      );\n    }\n\n    return null;\n  }\n\n  function renderDescription(text: string | undefined) {\n    if (text) {\n      return (\n        <div className='w-full'>\n          {renderHighlightedValue(text, { highlighted: 'font-semibold', nonHighlighted: 'font-normal' })}\n        </div>\n      );\n    }\n\n    return null;\n  }\n\n  function renderFeedbackIcons() {\n    if (showFeedbackButtons) {\n      return (\n        <ThumbsFeedback\n          feedbackText=''\n          onClick={clickHandlers.handleFeedbackClick}\n          customCssClasses={cssClasses}\n        />\n      );\n    }\n\n    return null;\n  }\n\n  return (\n    <div className={cssClasses.container}>\n      <div className={cssClasses.header}>\n        {renderTitle(title, link)}\n      </div>\n      {(description ?? cta1 ?? cta2) &&\n        <div className={cssClasses.body}>\n          {renderDescription(description)}\n          {renderCTAs(cta1, cta2)}\n        </div>\n      }\n      {renderFeedbackIcons()}\n    </div>\n  );\n}\n\n/**\n * The PropTypes for the StandardCardDisplay component. Note that props known at compile-time\n * are not included here. Type-checking of these props is taken care of by TypeScript.\n */\nStandardCardDisplay.propTypes = {\n  title: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.shape({\n      value: PropTypes.string.isRequired,\n      matchedSubstrings: PropTypes.arrayOf(PropTypes.shape({\n        length: PropTypes.number.isRequired,\n        offset: PropTypes.number.isRequired\n      })).isRequired\n    })\n  ]).isRequired,\n  link: PropTypes.string,\n  description: PropTypes.string,\n  cta1: PropTypes.shape({\n    label: PropTypes.string.isRequired,\n    link: PropTypes.string.isRequired,\n    linkType: PropTypes.string.isRequired\n  }),\n  cta2: PropTypes.shape({\n    label: PropTypes.string.isRequired,\n    link: PropTypes.string.isRequired,\n    linkType: PropTypes.string.isRequired\n  })\n};\n\nexport { StandardCardDisplay };\nexport type { StandardCardCssClasses };\n","import { useCardAnalyticsCallback } from '../../../hooks';\nimport { CardProps } from '../../../models';\nimport { useCardFeedbackCallback } from '../../../hooks';\nimport { StandardCardDisplay, StandardCardCssClasses } from './StandardCardDisplay';\nimport { DefaultRawDataType } from '../../../models';\nimport React from 'react';\n\n/**\n * Props for a StandardCard.\n *\n * @public\n */\nexport interface StandardCardProps<T = DefaultRawDataType> extends CardProps<T> {\n  /** Whether to show thumbs up/down buttons to provide feedback on the result card */\n  showFeedbackButtons?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: StandardCardCssClasses\n}\n\n/**\n * This Component renders the base result card.\n *\n * @public\n *\n * @param props - An object containing the result itself and any additional information needed\n *                to render the card\n * @returns A React element for the result card\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function StandardCard(props: StandardCardProps<any>): React.JSX.Element {\n  const {\n    result,\n    customCssClasses,\n    showFeedbackButtons\n  } = props;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data: any = {\n    title: result.highlightedFields?.name ?? result.name ?? result.rawData.name,\n    description: result.highlightedFields?.description ?? result.rawData.description,\n    cta1: result.rawData.c_primaryCTA,\n    cta2: result.rawData.c_secondaryCTA,\n  };\n\n  // eslint-disable-next-line react-perf/jsx-no-new-object-as-prop\n  const clickHandlers = {\n    handleCtaClick: useCardAnalyticsCallback(result, 'CTA_CLICK'),\n    handleTitleClick: useCardAnalyticsCallback(result, 'TITLE_CLICK'),\n    handleFeedbackClick: useCardFeedbackCallback(result)\n  };\n\n  /*\n    Note the title, link, description, and CTA props are sourced from LiveAPI data. This data\n    must be type-checked at run-time. This is accomplished by using the StandardCardDisplay's PropTypes.\n  */\n  return (\n    <StandardCardDisplay\n      customCssClasses={customCssClasses}\n      showFeedbackButtons={showFeedbackButtons}\n      clickHandlers={clickHandlers}\n      title={data.title}\n      link={result.link}\n      description={data.description}\n      cta1={data.cta1}\n      cta2={data.cta2}\n    />\n  );\n}\n\nexport type { StandardCardCssClasses };\n","import { VerticalResultsDisplay } from '../VerticalResultsDisplay';\nimport { SectionProps } from '../../models';\nimport { StandardCard } from '../cards/standard/StandardCard';\nimport { useComposedCssClasses } from '../../hooks';\nimport { VerticalResultsCssClasses } from '../VerticalResults';\nimport { DefaultRawDataType } from '../../models';\nimport React from 'react';\n\n/**\n * The CSS class interface used for {@link StandardSection}.\n *\n * @public\n */\nexport interface StandardSectionCssClasses extends VerticalResultsCssClasses {\n  section?: string\n}\n\nconst builtInCssClasses: Readonly<StandardSectionCssClasses> = {\n  section: ''\n};\n\n/**\n * The configuration for a StandardSection.\n *\n * @public\n */\nexport interface StandardSectionProps<T = DefaultRawDataType> extends SectionProps<T> {\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: StandardSectionCssClasses\n}\n\n/**\n * A component that displays all the results for a vertical using a standard section template.\n *\n * @public\n *\n * @param props - {@link StandardSectionProps}\n * @returns A React element for a standard section, or null if there are no results to display\n */\nexport function StandardSection<T>(props: StandardSectionProps<T>): React.JSX.Element | null {\n  const cssClasses = useComposedCssClasses(builtInCssClasses, props.customCssClasses);\n  const { results, CardComponent = StandardCard, header } = props;\n\n  if (results.length === 0) {\n    return null;\n  }\n\n  return (\n    <section className={cssClasses.section}>\n      {header}\n      <VerticalResultsDisplay\n        results={results}\n        CardComponent={CardComponent}\n        customCssClasses={cssClasses}\n      />\n    </section>\n  );\n}","import { useTranslation } from 'react-i18next';\nimport { AppliedFiltersCssClasses } from '../AppliedFilters';\nimport { AppliedFiltersDisplay } from '../AppliedFiltersDisplay';\nimport { CollectionIcon } from '../../icons/CollectionIcon';\nimport { AppliedQueryFilter, useSearchState } from '@yext/search-headless-react';\nimport classNames from 'classnames';\nimport { useAnalytics } from '../../hooks';\nimport { VerticalLink } from '../../models';\nimport React, { useCallback } from 'react';\n\nconst FALLBACK_CSS_CLASSES: SectionHeaderCssClasses = {};\n\n/**\n * The CSS class interface used for the SectionHeader component.\n *\n * @public\n */\nexport interface SectionHeaderCssClasses extends AppliedFiltersCssClasses {\n  sectionHeaderContainer?: string,\n  sectionHeaderIconContainer?: string,\n  sectionHeaderLabel?: string,\n  viewMoreContainer?: string,\n  viewMoreLink?: string\n}\n\nexport const builtInCssClasses: Readonly<SectionHeaderCssClasses> = {\n  sectionHeaderContainer: 'flex items-center w-full pl-1 mb-4',\n  sectionHeaderIconContainer: 'w-5 h-5',\n  sectionHeaderLabel: 'font-bold text-neutral-dark text-base pl-3',\n  viewMoreContainer: 'flex justify-end flex-grow ml-auto font-medium text-neutral-dark',\n  viewMoreLink: 'text-primary pr-1 pl-3',\n  appliedFiltersContainer: 'ml-3 flex flex-wrap',\n  nlpFilter: 'border border-gray-200 rounded-3xl px-3 py-1.5 text-sm font-medium text-neutral-dark mr-2',\n  removableFilter: 'flex items-center border border-gray-200 rounded-3xl px-3 py-1.5 text-sm font-medium text-neutral-dark mr-2'\n};\n\n/**\n * The props for a {@link SectionHeader}.\n */\nexport interface SectionHeaderProps {\n  /** The display label for the section header. */\n  label: string,\n  /** An array of AppliedQueryFilters which are displayed in the section header. */\n  appliedQueryFilters?: AppliedQueryFilter[],\n  /** CSS classes for customizing the component styling. */\n  cssClasses?: SectionHeaderCssClasses,\n  /** The verticalKey associated with the section. */\n  verticalKey: string,\n  /** Display a button to view all results for that section, if true. */\n  viewAllButton?: boolean,\n  /** A function which returns the viewAll link based on the vertical and query. */\n  getViewAllUrl?: (data: VerticalLink) => string\n}\n\n/**\n * The header of a section which includes an icon, the section title, applied query filters, and optionally\n * a view all button.\n *\n * @param props - {@link SectionHeaderProps}\n * @returns A React element for a Section Header\n */\nexport function SectionHeader(props: SectionHeaderProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const {\n    label,\n    verticalKey,\n    viewAllButton = false,\n    appliedQueryFilters,\n    cssClasses = FALLBACK_CSS_CLASSES,\n    getViewAllUrl\n  } = props;\n  const latestQuery = useSearchState(state => state.query.mostRecentSearch);\n  const nlpFilterDisplayNames = appliedQueryFilters?.map(f => f.displayValue);\n\n  const analytics = useAnalytics();\n  const queryId = useSearchState(state => state.query.queryId);\n  const searchId = useSearchState(state => state.meta.uuid);\n  const locale = useSearchState(state => state.meta.locale);\n  const experienceKey = useSearchState(state => state.meta.experienceKey);\n  const searchTerm = useSearchState(state => state.query.mostRecentSearch);\n\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n  cssClasses.appliedFiltersContainer = classNames(cssClasses.appliedFiltersContainer, {\n    [cssClasses.appliedFiltersLoading ?? '']: isLoading\n  });\n\n  const href = getViewAllUrl\n    ? getViewAllUrl({ verticalKey, query: latestQuery })\n    : `/${verticalKey}?query=${latestQuery}`;\n\n  const handleClickViewAllButton = useCallback(() => {\n    if (!analytics) {\n      return;\n    }\n    if (!queryId) {\n      console.error('Unable to report a vertical view all event. Missing field: queryId.');\n      return;\n    }\n    if (!searchId) {\n      console.error('Unable to report a vertical view all event. Missing field: searchId.');\n      return;\n    }\n    if (!experienceKey) {\n      console.error('Unable to report a vertical view all event. Missing field: experienceKey.');\n      return;\n    }\n    analytics?.report({\n      action: 'VERTICAL_VIEW_ALL',\n      locale,\n      searchId,\n      queryId,\n      verticalKey,\n      experienceKey,\n      searchTerm,\n    });\n  }, [analytics, experienceKey, locale, queryId, searchId, searchTerm, verticalKey]);\n\n  return (\n    <div className={cssClasses.sectionHeaderContainer}>\n      <div className={cssClasses.sectionHeaderIconContainer}>\n        <CollectionIcon></CollectionIcon>\n      </div>\n      <h2 className={cssClasses.sectionHeaderLabel}>{label}</h2>\n      {appliedQueryFilters &&\n        <AppliedFiltersDisplay nlpFilterDisplayNames={nlpFilterDisplayNames} cssClasses={cssClasses} />\n      }\n      {viewAllButton &&\n        <div className={cssClasses.viewMoreContainer}>\n          <a className={cssClasses.viewMoreLink} href={href} onClick={handleClickViewAllButton}>\n            {t('viewAll')}\n          </a>\n        </div>}\n    </div>\n  );\n}\n","import React from 'react';\n\nexport function CollectionIcon(): React.JSX.Element {\n  return (\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M19 11H5M19 11C20.1046 11 21 11.8954 21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V13C3 11.8954 3.89543 11 5 11M19 11V9C19 7.89543 18.1046 7 17 7M5 11V9C5 7.89543 5.89543 7 7 7M7 7V5C7 3.89543 7.89543 3 9 3H15C16.1046 3 17 3.89543 17 5V7M7 7H17\" stroke=\"#1f2937\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n    </svg>\n  );\n}","import { CardComponent } from '../models';\nimport { useSearchState } from '@yext/search-headless-react';\nimport { VerticalResultsDisplay } from './VerticalResultsDisplay';\nimport React from 'react';\n\n/**\n * The CSS class interface used for {@link VerticalResults}.\n *\n * @public\n */\nexport interface VerticalResultsCssClasses {\n  verticalResultsContainer?: string,\n  verticalResultsLoading?: string\n}\n\n/**\n * Props for the VerticalResults component.\n *\n * @public\n */\nexport interface VerticalResultsProps<T> {\n  /** {@inheritDoc CardComponent} */\n  CardComponent: CardComponent<T>,\n  /**\n   * Whether or not all results should be displayed when there are none returned from the search.\n   * Defaults to true.\n   */\n  displayAllOnNoResults?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: VerticalResultsCssClasses,\n  /** set individual result refs. */\n  setResultsRef?: (index: number) => ((result: HTMLDivElement) => void) | null\n}\n\n/**\n * A component that renders search results for a vertical page.\n *\n * @public\n *\n * @param props - {@link VerticalResultsProps}\n * @returns A React element for the results, or null if no results should be displayed\n */\nexport function VerticalResults<T>(props: VerticalResultsProps<T>): React.JSX.Element | null {\n  const { displayAllOnNoResults = true, ...otherProps } = props;\n  const verticalResults = useSearchState(state => state.vertical.results) || [];\n  const allResultsForVertical =\n    useSearchState(state => state.vertical?.noResults?.allResultsForVertical.results) || [];\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let results = verticalResults as any;\n  if (verticalResults.length === 0 && displayAllOnNoResults) {\n    results = allResultsForVertical;\n  }\n\n  return (\n    <VerticalResultsDisplay results={results} isLoading={isLoading} {...otherProps} />\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport { useSearchState, useSearchActions } from '@yext/search-headless-react';\nimport { useComposedCssClasses } from '../hooks';\nimport { ChevronIcon as PageNavigationIcon } from '../icons/ChevronIcon';\nimport { usePaginationAnalytics } from '../hooks/usePaginationAnalytics';\nimport { executeSearch } from '../utils';\nimport React, { PropsWithChildren, useCallback } from 'react';\nimport classNames from 'classnames';\n\n/**\n * Props for {@link Pagination} component\n *\n * @public\n */\nexport interface PaginationProps {\n  /**\n   * Whether or not to paginate based on the total results count of\n   * the vertical when there are none returned from the search.\n   * Defaults to false.\n   */\n  paginateAllOnNoResults?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: PaginationCssClasses\n}\n\n/**\n * The CSS classes used for pagination.\n *\n * @public\n */\nexport interface PaginationCssClasses {\n  paginationContainer?: string,\n  paginationLoading?: string,\n  label?: string,\n  selectedLabel?: string,\n  leftIconContainer?: string,\n  rightIconContainer?: string,\n  icon?: string\n}\n\nconst builtInPaginationCssClasses: Readonly<PaginationCssClasses> = {\n  paginationContainer: 'flex justify-center mb-4',\n  paginationLoading: 'opacity-50',\n  label: 'z-0 inline-flex items-center px-4 py-2 text-sm font-semibold border border-gray-300 text-neutral',\n  selectedLabel: 'z-10 inline-flex items-center px-4 py-2 text-sm font-semibold border border-primary text-primary bg-primary-light',\n  leftIconContainer: 'inline-flex items-center px-3.5 py-2 border border-gray-300 rounded-l-md',\n  rightIconContainer: 'inline-flex items-center px-3.5 py-2 border border-gray-300 rounded-r-md',\n  icon: 'w-3 text-gray-600'\n};\n\n/**\n * Renders a component that divide a series of vertical results into chunks\n * across multiple pages and enable user to navigate between those pages.\n *\n * @public\n */\nexport function Pagination(props: PaginationProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const { customCssClasses = {}, paginateAllOnNoResults = false } = props;\n  const cssClasses = useComposedCssClasses(builtInPaginationCssClasses, customCssClasses);\n  const searchActions = useSearchActions();\n  const verticalResultsCount = useSearchState(state => state.vertical.resultsCount) || 0;\n  const allResultsCountForVertical =\n    useSearchState(state => state.vertical?.noResults?.allResultsForVertical.resultsCount) || 0;\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n\n  let resultsCount = verticalResultsCount;\n  if (verticalResultsCount === 0 && paginateAllOnNoResults) {\n    resultsCount = allResultsCountForVertical;\n  }\n\n  const offset = useSearchState(state => state.vertical.offset) || 0;\n  const limit = useSearchState(state => state.vertical.limit) || 20;\n  const currentPageNumber = (offset / limit) + 1;\n  const maxPageCount = Math.ceil(resultsCount / limit);\n\n  const reportAnalyticsEvent = usePaginationAnalytics();\n  const navigateToPage = useCallback((newPageNumber: number) => {\n    const newOffset = limit * (newPageNumber - 1);\n    searchActions.setOffset(newOffset);\n    searchActions.setIsPagination(true);\n    executeSearch(searchActions);\n    reportAnalyticsEvent();\n  }, [searchActions, limit, reportAnalyticsEvent]);\n  const getPaginationButtonAriaLabel = useCallback((pageNumber: number) => {\n    return t('paginationPage', {\n      pageNumber,\n      defaultValue: 'page {{pageNumber}}'\n    });\n  }, [t]);\n\n  if (maxPageCount <= 1) {\n    return null;\n  }\n\n  const paginationLabels: string[] = generatePaginationLabels(currentPageNumber, maxPageCount);\n  const paginationContainerClassNames = classNames(cssClasses.paginationContainer, {\n    [cssClasses.paginationLoading ?? '']: isLoading\n  });\n\n  return (\n    <div className={paginationContainerClassNames}>\n      <nav className='inline-flex shadow-sm -space-x-px' aria-label={t('pagination')}>\n        <PaginationButton\n          ariaLabel={t('navigateToThePreviousResultsPage')}\n          className={cssClasses.leftIconContainer}\n          navigateToPage={navigateToPage}\n          newPageNumber={currentPageNumber - 1}\n          disabled={currentPageNumber === 1}\n        >\n          <PageNavigationIcon className={cssClasses.icon + ' transform -rotate-90'} />\n        </PaginationButton>\n        {paginationLabels.map((label, index) => {\n          switch (label) {\n            case '...':\n              return (\n                <div\n                  key={index}\n                  className={cssClasses.label}\n                >\n                  {label}\n                </div>\n              );\n            case `${currentPageNumber}`:\n              return (\n                <PaginationButton\n                  key={index}\n                  ariaLabel={getPaginationButtonAriaLabel(currentPageNumber)}\n                  className={cssClasses.selectedLabel}\n                  navigateToPage={navigateToPage}\n                  newPageNumber={currentPageNumber}\n                  isCurrent={true}\n                >\n                  {label}\n                </PaginationButton>\n              );\n            default:\n              return (\n                <PaginationButton\n                  key={index}\n                  ariaLabel={getPaginationButtonAriaLabel(Number(label))}\n                  className={cssClasses.label}\n                  navigateToPage={navigateToPage}\n                  newPageNumber={Number(label)}\n                >\n                  {label}\n                </PaginationButton>\n              );\n          }\n        })}\n        <PaginationButton\n          ariaLabel={t('navigateToTheNextResultsPage')}\n          className={cssClasses.rightIconContainer}\n          navigateToPage={navigateToPage}\n          newPageNumber={currentPageNumber + 1}\n          disabled={currentPageNumber === maxPageCount}\n        >\n          <PageNavigationIcon className={cssClasses.icon + ' transform rotate-90'} />\n        </PaginationButton>\n      </nav>\n    </div>\n  );\n}\n\ninterface PaginationButtonProps {\n  className?: string,\n  navigateToPage: (newPageNumber: number) => void,\n  newPageNumber: number,\n  ariaLabel?: string,\n  disabled?: boolean,\n  isCurrent?: boolean\n}\n\nfunction PaginationButton(props: PropsWithChildren<PaginationButtonProps>): React.JSX.Element | null {\n  const { navigateToPage, newPageNumber } = props;\n  const handleClick = useCallback(() => {\n    navigateToPage(newPageNumber);\n  }, [navigateToPage, newPageNumber]);\n\n  return (\n    <button\n      type=\"button\"\n      aria-label={props.ariaLabel}\n      aria-current={props.isCurrent ? 'true' : undefined}\n      className={props.className}\n      onClick={handleClick}\n      disabled={props.disabled}\n    >\n      {props.children}\n    </button>\n  );\n}\n\nfunction generatePaginationLabels(currentPageNumber: number, maxPageCount: number): string[] {\n  const paginationLabels: string[] = [];\n  const previousPageNumber = currentPageNumber - 1;\n  const nextPageNumber = currentPageNumber + 1;\n\n  if (previousPageNumber > 3) {\n    paginationLabels.push('1', '...', `${previousPageNumber}`);\n  } else if (previousPageNumber !== 0) {\n    [...Array(previousPageNumber)].forEach((_, index) => paginationLabels.push(`${index + 1}`));\n  }\n  paginationLabels.push(`${currentPageNumber}`);\n  if (maxPageCount - nextPageNumber > 2) {\n    paginationLabels.push(`${nextPageNumber}`, '...', `${maxPageCount}`);\n  } else if (nextPageNumber <= maxPageCount) {\n    [...Array(maxPageCount - nextPageNumber + 1)]\n      .forEach((_, index) => paginationLabels.push(`${nextPageNumber + index}`));\n  }\n  return paginationLabels;\n}\n","import React from 'react';\n\nexport function ChevronIcon({ className }: { className?: string }): React.JSX.Element {\n  return (\n    <svg\n      viewBox=\"0 0 12 8\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n      aria-hidden=\"true\"\n    >\n      <path d=\"M1.33341 6.5L6.00008 1.83333L10.6667 6.5\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n    </svg>\n  );\n}","import { useAnalytics } from './useAnalytics';\nimport { useSearchState } from '@yext/search-headless-react';\n\nexport function usePaginationAnalytics(): () => void {\n  const analytics = useAnalytics();\n  const verticalKey = useSearchState(state => state.vertical.verticalKey);\n  const queryId = useSearchState(state => state.query.queryId);\n  const searchId = useSearchState(state => state.meta.uuid);\n  const locale = useSearchState(state => state.meta.locale);\n  const experienceKey = useSearchState(state => state.meta.experienceKey);\n  const searchTerm = useSearchState(state => state.query.mostRecentSearch);\n\n  return () => {\n    if (!analytics) {\n      return;\n    }\n    if (!queryId) {\n      console.error('Unable to report a pagination event. Missing field: queryId.');\n      return;\n    }\n    if (!searchId) {\n      console.error('Unable to report a pagination event. Missing field: searchId.');\n      return;\n    }\n    if (!verticalKey) {\n      console.error('Unable to report a pagination event. Missing field: verticalKey.');\n      return;\n    }\n    if (!experienceKey) {\n      console.error('Unable to report a pagination event. Missing field: experienceKey.');\n      return;\n    }\n    analytics?.report({\n      action: 'PAGINATE',\n      locale,\n      searchId,\n      queryId,\n      verticalKey: verticalKey,\n      experienceKey,\n      searchTerm,\n    });\n  };\n}\n\n","import { useTranslation, Trans } from 'react-i18next';\nimport { StarIcon } from '../icons/StarIcon';\nimport { useSearchState, VerticalResults as VerticalResultsData } from '@yext/search-headless-react';\nimport { useComposedCssClasses } from '../hooks';\nimport classNames from 'classnames';\nimport { VerticalConfig } from '../models';\nimport React, { useMemo } from 'react';\n\n/**\n * The CSS class interface used for {@link AlternativeVerticals}.\n *\n * @public\n */\nexport interface AlternativeVerticalsCssClasses {\n  alternativeVerticalsContainer?: string,\n  alternativeVerticalsLoading?: string,\n  noResultsText?: string,\n  categoriesText?: string,\n  suggestion?: string,\n  verticalIcon?: string\n}\n\nconst builtInCssClasses: Readonly<AlternativeVerticalsCssClasses> = {\n  alternativeVerticalsContainer: 'flex flex-col justify-between border border-gray-200 rounded-lg mb-4 p-4 shadow-sm',\n  alternativeVerticalsLoading: 'opacity-50',\n  noResultsText: 'text-lg text-neutral-dark pb-2',\n  categoriesText: 'text-neutral',\n  suggestion: 'pb-4 flex items-center',\n  verticalIcon: 'w-4 mr-2'\n};\n\ninterface VerticalSuggestion {\n  resultsCount: number,\n  label?: string,\n  verticalKey: string\n}\n\nfunction isVerticalSuggestion(suggestion: unknown): suggestion is VerticalSuggestion {\n  return (suggestion as VerticalSuggestion)?.resultsCount !== undefined &&\n    (suggestion as VerticalSuggestion)?.verticalKey !== undefined;\n}\n\n/**\n * A map of vertical keys to labels.\n *\n * @public\n */\nexport interface VerticalLabelMap {\n  /** Config mapped to a vertical. */\n  [verticalKey: string]: Pick<VerticalConfig, 'label'>\n}\n\n/**\n * Props for {@link AlternativeVerticals}.\n *\n * @public\n */\nexport interface AlternativeVerticalsProps {\n  /** The label for the current vertical. */\n  currentVerticalLabel: string,\n  /** A map of verticalKeys to the display label for that vertical. */\n  verticalConfigMap: VerticalLabelMap,\n  /**\n   * Whether or not all results should be displayed when there are none returned from the search.\n   * Defaults to true.\n   */\n  displayAllOnNoResults?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: AlternativeVerticalsCssClasses\n}\n\n/**\n * A component that displays the alternative verticals that have results if a search returns none\n * on the current vertical.\n *\n * @public\n *\n * @param props - {@link AlternativeVerticalsProps}\n * @returns A React element for the alternative verticals, or null if there are none with results\n */\nexport function AlternativeVerticals({\n  currentVerticalLabel,\n  verticalConfigMap,\n  displayAllOnNoResults = true,\n  customCssClasses\n}: AlternativeVerticalsProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  const alternativeVerticals = useSearchState(state => state.vertical.noResults?.alternativeVerticals) || [];\n  const allResultsForVertical =\n    useSearchState(state => state.vertical.noResults?.allResultsForVertical.results) || [];\n  const query = useSearchState(state => state.query.mostRecentSearch);\n\n  const verticalSuggestions = buildVerticalSuggestions(verticalConfigMap, alternativeVerticals);\n  const isShowingAllResults = displayAllOnNoResults && allResultsForVertical.length > 0;\n\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n  const containerClassNames = classNames(cssClasses.alternativeVerticalsContainer, {\n    [cssClasses.alternativeVerticalsLoading ?? '']: isLoading\n  });\n\n  function buildVerticalSuggestions(\n    verticalConfigMap: VerticalLabelMap,\n    alternativeVerticals: VerticalResultsData[]): VerticalSuggestion[] {\n\n    return alternativeVerticals\n      .filter((alternativeResults: VerticalResultsData) => {\n        return !!verticalConfigMap[alternativeResults.verticalKey];\n      })\n      .map((alternativeResults: VerticalResultsData) => {\n        return {\n          label: verticalConfigMap[alternativeResults.verticalKey].label,\n          verticalKey: alternativeResults.verticalKey,\n          resultsCount: alternativeResults.resultsCount\n        };\n      })\n      .filter(isVerticalSuggestion)\n      .filter(verticalSuggestion => verticalSuggestion.resultsCount > 0);\n  }\n\n  const values = useMemo(() => ({ query }), [query]);\n  const components = useMemo(() => ({ strong: <strong /> }), []);\n\n  if (verticalSuggestions.length <= 0) {\n    return null;\n  }\n\n  const count = verticalSuggestions.length;\n\n  return (\n    <div className={containerClassNames}>\n      {renderNoResultsInfo()}\n      {verticalSuggestions &&\n        <div className='pt-4 text-neutral-dark'>\n          <div className={cssClasses.categoriesText}>\n            <Trans\n              i18nKey='categoriesText'\n              count={count}\n              values={values}\n              components={components}\n            />\n          </div>\n          <ul className='pt-4'>\n            {verticalSuggestions.map(renderSuggestion)}\n          </ul>\n        </div>\n      }\n    </div>\n  );\n\n  function renderNoResultsInfo() {\n    return (\n      <div className={cssClasses.noResultsText}>\n        <span>{t('noResultsFoundIn', { currentVerticalLabel })}</span>\n        {isShowingAllResults &&\n          <span> {t('showingAllInstead', { currentVerticalLabel })}</span>\n        }\n      </div>\n    );\n  }\n\n  function renderSuggestion(suggestion: VerticalSuggestion) {\n    const { verticalKey, resultsCount, label } = suggestion;\n    return (\n      <li key={verticalKey} className={cssClasses.suggestion}>\n        <div className={cssClasses.verticalIcon}><StarIcon/></div>\n        <span className='font-bold'>{\n          t('suggestionResultsCount', {\n            label,\n            count: resultsCount,\n          })}\n        </span>\n      </li>\n    );\n  }\n}\n","import React from 'react';\n\nexport function StarIcon({ className }: { className?: string }): React.JSX.Element {\n  return (\n    <svg\n      fill=\"currentColor\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 18 18\"\n      className={className}\n      aria-hidden=\"true\"\n    >\n      <path d=\"M8.991 0C4.023 0 0 4.032 0 9s4.023 9 8.991 9C13.968 18 18 13.968 18 9s-4.032-9-9.009-9zm3.816 14.4L9 12.105 5.193 14.4l1.008-4.329-3.357-2.907 4.428-.378L9 2.7l1.728 4.077 4.428.378-3.357 2.907z\"></path>\n    </svg>\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport {\n  SearchTypeEnum,\n  useSearchState,\n  VerticalResults,\n  VerticalSearchState\n} from '@yext/search-headless-react';\nimport classNames from 'classnames';\nimport { useComposedCssClasses } from '../hooks';\nimport React from 'react';\n\n/**\n *  The CSS class interface for {@link ResultsCount}.\n *\n * @public\n */\nexport interface ResultsCountCssClasses {\n  resultsCountContainer?: string,\n  resultsCountLoading?: string\n}\n\n/**\n * Props for {@link ResultsCount}.\n *\n * @public\n */\nexport interface ResultsCountProps {\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: ResultsCountCssClasses\n}\n\nconst builtInCssClasses: Readonly<ResultsCountCssClasses> = {\n  resultsCountContainer: 'font-semibold text-neutral mb-4 py-2 mr-2.5 whitespace-nowrap',\n  resultsCountLoading: 'opacity-50'\n};\n\n/**\n * Renders results count of a universal/vertical search.\n *\n * @public\n *\n * @param props - {@link ResultsCountProps}\n */\nexport function ResultsCount({ customCssClasses }: ResultsCountProps): React.JSX.Element | null {\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const isLoading = useSearchState(state => state.searchStatus.isLoading);\n  const resultsCountText = useResultsCount();\n\n  const resultsCountClassnames = classNames(cssClasses.resultsCountContainer, {\n    [cssClasses.resultsCountLoading ?? '']: isLoading\n  });\n  return <div className={resultsCountClassnames}>{resultsCountText}</div>;\n}\n\n/**\n * Generates a string for the results count of the recent universal/vertical search.\n */\nfunction useResultsCount() {\n  const { t } = useTranslation();\n  const isVertical = useSearchState(state => state.meta.searchType) === SearchTypeEnum.Vertical;\n  const results = useSearchState(state => isVertical ? state.vertical : state.universal.verticals);\n  const offset = useSearchState(state => state.vertical.offset) || 0;\n  const limit = useSearchState(state => state.vertical.limit) || 20;\n  let resultsCount = 0;\n  if (results) {\n    if (isUniversalSearchResults(results)) {\n      results.forEach(resultsOfAVertical => resultsCount += resultsOfAVertical.resultsCount);\n    } else {\n      resultsCount = results.resultsCount ?? 0;\n    }\n  }\n  if (resultsCount === 0) {\n    return null;\n  }\n\n  if (resultsCount > limit && isVertical){\n    const paginateStart = offset + 1;\n    const paginateEnd = Math.min((offset + limit), resultsCount);\n    return t('resultsCountWithPaginationText', { paginateStart, paginateEnd, resultsCount });\n  } else {\n    return t('resultsCountText', { count: resultsCount });\n  }\n}\n\nfunction isUniversalSearchResults(data: VerticalResults[] | VerticalSearchState): data is VerticalResults[] {\n  return Array.isArray(data);\n}\n","import { useTranslation } from 'react-i18next';\nimport { useSearchUtilities } from '@yext/search-headless-react';\nimport React, { PropsWithChildren, useMemo, useState } from 'react';\nimport {\n  CheckboxOption,\n  CollapsibleSection,\n  FilterOptionConfig,\n  SearchInput,\n  FilterGroupProvider,\n  useFilterGroupContext,\n  CheckboxCssClasses\n} from './Filters';\nimport { FacetTitle } from './FacetTiltle';\n\nconst DEFAULT_CUSTOM_CSS_CLASSES = {};\n\n/**\n * The CSS class interface for FilterGroup.\n *\n * @public\n */\nexport interface FilterGroupCssClasses {\n  titleLabel?: string,\n  searchInput?: string,\n  searchInputLabel?: string,\n  optionsContainer?: string,\n  option?: string,\n  optionInput?: string,\n  optionLabel?: string\n}\n\n/**\n * Props for the FilterGroup component.\n *\n * @public\n */\nexport interface FilterGroupProps {\n  /** The fieldId corresponding to the filter group. */\n  fieldId: string,\n  /** {@inheritDoc FilterOptionConfig} */\n  filterOptions: FilterOptionConfig[],\n  /** The displayed label for the filter group. */\n  title: string,\n  /** Whether or not the filter is collapsible. Defaults to true. */\n  collapsible?: boolean,\n  /**\n   * If the filter group is collapsible, whether or not it should start out\n   * expanded. Defaults to true.\n   */\n  defaultExpanded?: boolean,\n  /** Whether or not to display a text input to search for filter options. */\n  searchable?: boolean,\n  /** Whether or not to display the visible search input label. Defaults to false. */\n  showOptionsSearchInputLabel?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: FilterGroupCssClasses,\n  /** Limit on the number of options to be displayed. */\n  showMoreLimit?: number\n}\n\n/**\n * Renders a group of selectable filters with support for searching and collapsing.\n */\nexport function FilterGroup({\n  fieldId,\n  filterOptions,\n  title,\n  collapsible = true,\n  defaultExpanded = true,\n  searchable,\n  showOptionsSearchInputLabel = false,\n  customCssClasses = DEFAULT_CUSTOM_CSS_CLASSES,\n  showMoreLimit = filterOptions.length,\n  children\n}: PropsWithChildren<FilterGroupProps>) {\n  const { t } = useTranslation();\n  const cssClasses = useMemo(() => {\n    const { option, optionLabel, optionInput, ...remainingClasses } = customCssClasses;\n    return {\n      ...remainingClasses,\n      ...option && { optionContainer: option },\n      ...optionLabel && { label: optionLabel },\n      ...optionInput && { input: optionInput }\n    };\n  }, [customCssClasses]);\n  const searchInputLabel = showOptionsSearchInputLabel\n    ? t('filterGroupSearchInputLabel', {\n      title\n    })\n    : undefined;\n\n  return (\n    <FilterGroupProvider\n      fieldId={fieldId}\n      defaultExpanded={!collapsible || defaultExpanded}\n    >\n      <FacetTitle\n        label={title}\n        customCssClasses={customCssClasses}\n        collapsible={collapsible}\n      />\n      {collapsible ? (\n        <CollapsibleSection className={cssClasses.optionsContainer}>\n          {searchable &&\n            <SearchInput\n              className={cssClasses.searchInput}\n              labelClassName={cssClasses.searchInputLabel}\n              label={searchInputLabel}\n            />}\n          <CheckboxOptions\n            filterOptions={filterOptions}\n            showMoreLimit={showMoreLimit}\n            cssClasses={cssClasses} />\n          {children}\n        </CollapsibleSection>\n      ) : (\n        <div className={cssClasses.optionsContainer || 'space-y-3'}>\n          {searchable &&\n            <SearchInput\n              className={cssClasses.searchInput}\n              labelClassName={cssClasses.searchInputLabel}\n              label={searchInputLabel}\n            />}\n          <CheckboxOptions\n            filterOptions={filterOptions}\n            showMoreLimit={showMoreLimit}\n            cssClasses={cssClasses} />\n          {children}\n        </div>\n      )}\n    </FilterGroupProvider>\n  );\n}\n\nfunction CheckboxOptions({\n  filterOptions,\n  showMoreLimit,\n  cssClasses\n}: {\n  filterOptions: FilterOptionConfig[],\n  showMoreLimit: number,\n  cssClasses: CheckboxCssClasses\n}) {\n  const { t } = useTranslation();\n  const searchUtilities = useSearchUtilities();\n  const { searchValue } = useFilterGroupContext();\n\n  const shouldRenderOption = (\n    option: FilterOptionConfig\n  ) => {\n    return searchUtilities.isCloseMatch(option.displayName || option.value.toString(), searchValue);\n  };\n\n  let displayedOptions = filterOptions.filter(shouldRenderOption).map(o => {\n    return (\n      <CheckboxOption\n        {...o}\n        key={o.displayName || o.value.toString()}\n        customCssClasses={cssClasses}\n      />\n    );\n  });\n\n  const isLimited = displayedOptions.length > showMoreLimit;\n\n  const [showAll, setShowAll] = useState<boolean>(!isLimited);\n  displayedOptions = displayedOptions.slice(0, showAll ? displayedOptions.length : showMoreLimit);\n\n  return (\n    <>\n      {displayedOptions}\n      {isLimited &&\n        /* eslint-disable-next-line react-perf/jsx-no-new-function-as-prop */\n        <button className='text-primary py-1 text-sm' onClick={() => setShowAll(prev => !prev)}>\n          {showAll ? t('showLess') : t('showMore')}\n        </button>\n      }\n    </>\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport { FieldValueFilter, Matcher, NumberRangeValue } from '@yext/search-headless-react';\nimport React, { ChangeEvent, useCallback, useEffect, useMemo } from 'react';\nimport { useFiltersContext } from './FiltersContext';\nimport { useFilterGroupContext } from './FilterGroupContext';\nimport { useComposedCssClasses } from '../../hooks';\nimport { findSelectableFieldValueFilter, isNumberRangeValue, getDefaultFilterDisplayName } from '../../utils/filterutils';\nimport classNames from 'classnames';\nimport { useId } from '../../hooks/useId';\n\n/**\n * The configuration data for a field value filter option.\n *\n * @public\n */\nexport interface FilterOptionConfig {\n  /** The value used to perform filtering. */\n  value: string | number | boolean | NumberRangeValue,\n  /** The type of filtering operation used. Defaults to an equals comparison. */\n  matcher?: Matcher,\n  /** If this particular filter should be selected by default. */\n  selectedByDefault?: boolean,\n  /** The display name. Defaults to the value prop. */\n  displayName?: string,\n  /** The number of results associated with this filter. */\n  resultsCount?: number\n}\n\n/**\n * Props for the {@link Filters.CheckboxOption}.\n *\n * @public\n */\nexport interface CheckboxOptionProps extends FilterOptionConfig {\n  /** CSS classes for customizing the component styling defined by {@link Filters.CheckboxCssClasses}. */\n  customCssClasses?: CheckboxCssClasses\n}\n\n/**\n * The CSS class interface for {@link Filters.CheckboxOption}.\n *\n * @public\n */\nexport interface CheckboxCssClasses {\n  input?: string,\n  input___disabled?: string,\n  label?: string,\n  label___disabled?: string,\n  container?: string,\n  optionContainer?: string,\n  tooltipContainer?: string,\n  tooltip?: string\n}\n\nconst builtInCssClasses: Readonly<CheckboxCssClasses> = {\n  label: 'text-neutral text-sm font-normal cursor-pointer',\n  label___disabled: 'opacity-50 cursor-not-allowed',\n  input: 'w-3.5 h-3.5 form-checkbox cursor-pointer border border-gray-300 rounded-sm text-primary focus:ring-primary',\n  input___disabled: 'border-gray-200 bg-gray-50 cursor-not-allowed',\n  container: 'flex items-center',\n  optionContainer: 'flex items-center space-x-3 peer',\n  tooltipContainer: 'invisible peer-hover:visible relative -right-5 -top-5',\n  tooltip: 'absolute z-10 left-0 -top-0.5 whitespace-nowrap rounded shadow-lg p-3 text-sm bg-neutral-dark text-white'\n};\n\n/**\n * A checkbox component that represents a single FieldValueFilter.\n *\n * @public\n *\n * @param props - {@link Filters.CheckboxOptionProps}\n */\nexport function CheckboxOption(props: CheckboxOptionProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const { fieldId, isOptionsDisabled } = useFilterGroupContext();\n  const {\n    value,\n    matcher = Matcher.Equals,\n    selectedByDefault = false,\n    displayName = props.value,\n    resultsCount\n  } = props;\n  const cssClasses = useComposedCssClasses(builtInCssClasses, props.customCssClasses);\n  const optionId = useId('facet');\n  const { selectFilter, filters, applyFilters } = useFiltersContext();\n\n  const handleClick = useCallback((checked: boolean) => {\n    selectFilter({\n      matcher,\n      fieldId,\n      value,\n      displayName: typeof displayName === 'string' ? displayName : undefined,\n      selected: checked\n    });\n    applyFilters();\n  }, [applyFilters, fieldId, displayName, selectFilter, value, matcher]);\n\n  const handleChange = useCallback((evt: ChangeEvent<HTMLInputElement>) => {\n    handleClick(evt.target.checked);\n  }, [handleClick]);\n\n  const optionFilter: FieldValueFilter = useMemo(() => {\n    return {\n      fieldId,\n      matcher,\n      value\n    };\n  }, [fieldId, value, matcher]);\n  const existingStoredFilter = findSelectableFieldValueFilter(optionFilter, filters);\n\n  useEffect(() => {\n    if (!existingStoredFilter && selectedByDefault) {\n      selectFilter({\n        ...optionFilter,\n        displayName: typeof displayName === 'string' ? displayName : undefined,\n        selected: true\n      });\n    }\n  }, [displayName, selectFilter, selectedByDefault, existingStoredFilter, optionFilter]);\n\n  const isSelected = existingStoredFilter ? existingStoredFilter.selected : false;\n\n  const displayNameString = isNumberRangeValue(displayName)\n    ? getDefaultFilterDisplayName(displayName)\n    : displayName.toString();\n  const labelText = resultsCount\n    ? `${displayNameString} (${resultsCount})`\n    : displayNameString;\n\n  const inputClasses = classNames(cssClasses.input, {\n    [cssClasses.input___disabled ?? '']: isOptionsDisabled\n  });\n  const labelClasses = classNames(cssClasses.label, {\n    [cssClasses.label___disabled ?? '']: isOptionsDisabled\n  });\n\n  return (\n    <div className={cssClasses.container}>\n      <div className={cssClasses.optionContainer}>\n        <input\n          type='checkbox'\n          id={optionId}\n          checked={isSelected}\n          className={inputClasses}\n          onChange={handleChange}\n          disabled={isOptionsDisabled}\n        />\n        <label className={labelClasses} htmlFor={optionId}>{labelText}</label>\n      </div>\n      {isOptionsDisabled &&\n        <div className={cssClasses.tooltipContainer}>\n          <div className={cssClasses.tooltip}>\n            {t('clearTheRangeToSelectOptions')}\n          </div>\n        </div>\n      }\n    </div>\n  );\n}\n","import { createContext, useContext } from 'react';\nimport { useCollapse } from 'react-collapsed';\n\ntype UseCollapseOutput = ReturnType<typeof useCollapse>;\n\n/**\n * FilterGroupContext is responsible for searchable filters and collapsible filter groups.\n *\n * @public\n */\nexport interface FilterGroupContextType {\n  /** The value which is being used to search the FilterGroup. */\n  searchValue: string,\n  /** The fieldId to use with child filter components e.g. {@link Filters.CheckboxOption}. */\n  fieldId: string,\n  /** Sets the searchValue which is used to filter the FilterGroup. */\n  setSearchValue: (value: string) => void,\n  /** Returns the attributes used to collapse the filter group. */\n  getCollapseProps: UseCollapseOutput['getCollapseProps'],\n  /** Returns the attributes used to toggle the filter group. */\n  getToggleProps: UseCollapseOutput['getToggleProps'],\n  /** Indicates whether or not the filter group is expanded. */\n  isExpanded: boolean,\n  /** Whether or not the filter options should be disabled. */\n  isOptionsDisabled: boolean,\n  /** Sets the value for whether or not the filter options should be disabled. */\n  setIsOptionsDisabled: (value: boolean) => void\n}\n\n/**\n * Filter context to support searchable filters and collapsible filter groups.\n *\n * @public\n */\nexport const FilterGroupContext = createContext<FilterGroupContextType | null>(null);\n\n/**\n * A hook used to access the {@link Filters.FilterGroupContextType}.\n *\n * @public\n */\nexport function useFilterGroupContext(): FilterGroupContextType {\n  const filterGroupContextInstance = useContext(FilterGroupContext);\n  if (filterGroupContextInstance === null) {\n    throw new Error('Tried to use FilterGroupContext when none exists.');\n  }\n  return filterGroupContextInstance;\n}","import classNames from 'classnames';\nimport { ChevronIcon } from '../../icons/ChevronIcon';\nimport { useFilterGroupContext } from './FilterGroupContext';\nimport { useComposedCssClasses } from '../../hooks';\nimport React from 'react';\n\n/**\n * The CSS class interface for {@link CollapsibleLabelProps}.\n *\n * @public\n */\nexport interface CollapsibleLabelCssClasses {\n  label?: string\n}\n\n/**\n * Props for {@link Filters.CollapsibleLabel}.\n *\n * @public\n */\nexport interface CollapsibleLabelProps {\n  /** The label's text value which is displayed by the component. */\n  label?: string,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: CollapsibleLabelCssClasses\n}\n\nexport const builtInCssClasses: Readonly<CollapsibleLabelCssClasses> = {\n  label: 'text-neutral-dark text-sm font-medium text-left',\n};\n\n/**\n * CollapsibleLabel is a button for collapsing and expanding filters within a parent\n * {@link Filters.FilterGroupProvider}.\n *\n * For more customization, use {@link Filters.FilterGroupContext} directly.\n *\n * @param props - {@link Filters.CollapsibleLabelProps}\n *\n * @public\n */\nexport function CollapsibleLabel({ label, customCssClasses }: CollapsibleLabelProps): React.JSX.Element {\n  const { isExpanded, getToggleProps } = useFilterGroupContext();\n  const iconClassName = classNames('w-3 text-gray-400', {\n    'transform rotate-180': !isExpanded\n  });\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  return (\n    <button className='w-full flex justify-between items-center mb-4' {...getToggleProps()}>\n      <div className={cssClasses.label}>\n        {label}\n      </div>\n      <ChevronIcon className={iconClassName}/>\n    </button>\n  );\n}\n","import React, { PropsWithChildren } from 'react';\nimport { useFilterGroupContext } from './FilterGroupContext';\n\n/**\n * Props for the {@link Filters.CollapsibleSection}.\n *\n * @public\n */\nexport type CollapsibleSectionProps = PropsWithChildren<{\n  /** CSS classes applied to the component's container div. */\n  className?: string\n}>;\n\n/**\n * CollapsibleSection are used for collapsing and un-collapsing groups of filters.\n * It is intended to be used with {@link Filters.CollapsibleLabel}s within the same\n * {@link Filters.FilterGroupProvider}.\n *\n * @param props - {@link Filters.CollapsibleSectionProps}\n *\n * @public\n */\nexport function CollapsibleSection(props: CollapsibleSectionProps): React.JSX.Element {\n  const {\n    className = 'space-y-3',\n    children\n  } = props;\n\n  const { getCollapseProps } = useFilterGroupContext();\n\n  return (\n    <div className={className} {...getCollapseProps()}>\n      {children}\n    </div>\n  );\n}","import {\n  DisplayableFacet,\n  useSearchActions,\n  useSearchState\n} from '@yext/search-headless-react';\nimport React, { ReactNode, useMemo } from 'react';\nimport { SelectableFieldValueFilter } from '../../models/SelectableFieldValueFilter';\n\nimport { getSelectedNumericalFacetFields, isNumberRangeValue } from '../../utils/filterutils';\nimport { clearStaticRangeFilters } from '../../utils/filterutils';\nimport { executeSearch } from '../../utils';\nimport { FiltersContext, FiltersContextType } from './FiltersContext';\n\n/**\n * Props for {@link Filters.FacetsProvider}\n *\n * @public\n */\nexport interface FacetsProviderProps {\n  /** CSS class names applied to the component's container div. */\n  className?: string,\n  /** Whether or not a search is automatically run when a filter is selected. Defaults to true. */\n  searchOnChange?: boolean,\n  /** A function which renders the Facets UI with the provided facets data.\n   *\n   * @remarks\n   * It is intended to be used with the Filters subcomponents including Filters.FilterGroupProvider,\n   * Filters.CollapsibleLabel, Filters.SearchInput, Filters.CheckboxOption, Filters.CollapsibleSection\n   */\n  children?: (facets: DisplayableFacet[]) => ReactNode\n}\n\n/**\n * The FacetsProvider component is a wrapper component around {@link Filters} that updates facet\n * options when a child filter is updated.\n *\n * The representation of the facets is configured using a FACC (function as a child component)\n * The FACC is passed the facets data, and is intended for use with components like\n * {@link Filters.CheckboxOption}.\n *\n * @public\n *\n * @param props - {@link Filters.FacetsProviderProps}\n */\nexport function FacetsProvider({\n  children,\n  className = 'w-full',\n  searchOnChange = true\n}: FacetsProviderProps): React.JSX.Element {\n  const searchActions = useSearchActions();\n  const facetsInState = useSearchState(state => state.filters.facets);\n  const facets = useMemo(() => facetsInState ?? [], [facetsInState]);\n  const filters: SelectableFieldValueFilter[] = useMemo(() => {\n    return facets.flatMap(f => f.options.map(o => {\n      return {\n        fieldId: f.fieldId,\n        value: o.value,\n        matcher: o.matcher,\n        selected: o.selected,\n        displayName: o.displayName\n      };\n    }));\n  }, [facets]);\n\n  const filtersContextInstance: FiltersContextType = useMemo(() => {\n    return {\n      selectFilter(filter: SelectableFieldValueFilter) {\n        if (typeof filter.value === 'object' && !isNumberRangeValue(filter.value)) {\n          console.error('Facets only support string, number, boolean, and NumberRangeValue. Found the following object value instead:', filter.value);\n          return;\n        }\n        const facetOption = {\n          matcher: filter.matcher,\n          value: filter.value\n        };\n        searchActions.setFacetOption(filter.fieldId, facetOption, filter.selected);\n      },\n      applyFilters() {\n        if (searchOnChange) {\n          searchActions.setOffset(0);\n          clearStaticRangeFilters(searchActions, getSelectedNumericalFacetFields(searchActions));\n          executeSearch(searchActions);\n        }\n      },\n      filters\n    };\n  }, [searchActions, filters, searchOnChange]);\n\n  return (\n    <div className={className}>\n      <FiltersContext.Provider value={filtersContextInstance}>\n        {children?.(facets)}\n      </FiltersContext.Provider>\n    </div>\n  );\n}","import React, { PropsWithChildren, useMemo, useState } from 'react';\nimport { useCollapse } from 'react-collapsed';\nimport { FilterGroupContext } from './FilterGroupContext';\n\n/**\n * Props for a {@link Filters.FilterGroupProvider}.\n *\n * @public\n */\nexport type FilterGroupProviderProps = PropsWithChildren<{\n  /** Whether the {@link Filters.FilterGroupProvider} should start out expanded. Defaults to true. */\n  defaultExpanded?: boolean,\n  /** {@inheritDoc Filters.FilterGroupContextType.fieldId} */\n  fieldId: string\n}>;\n\n/**\n * The Filters.FilterGroupProvider component represents a group of filters to\n * support for searching and collapsing.\n *\n * @remarks\n * A Filter.Group designates a set of filters which may be collapsed through the\n * {@link Filters.CollapsibleLabel} and {@link Filters.CollapsibleSection} components. A Filter.Group\n * also designates a set of filters which may be searched with the {@link Filters.SearchInput}\n * component.\n *\n * @public\n *\n * @param props - {@link Filters.FilterGroupProviderProps}\n */\nexport function FilterGroupProvider(props: FilterGroupProviderProps): React.JSX.Element {\n  const {\n    children,\n    defaultExpanded = true,\n    fieldId\n  } = props;\n\n  const [searchValue, setSearchValue] = useState('');\n  const [isOptionsDisabled, setIsOptionsDisabled] = useState(false);\n  const { getCollapseProps, getToggleProps, isExpanded } = useCollapse({ defaultExpanded });\n  const FilterGroupContextInstance = useMemo(() => {\n    return {\n      fieldId,\n      searchValue,\n      setSearchValue,\n      getCollapseProps,\n      getToggleProps,\n      isExpanded,\n      isOptionsDisabled,\n      setIsOptionsDisabled\n    };\n  }, [\n    fieldId,\n    getCollapseProps,\n    getToggleProps,\n    isExpanded,\n    searchValue,\n    isOptionsDisabled\n  ]);\n\n  return (\n    <FilterGroupContext.Provider value={FilterGroupContextInstance}>\n      {children}\n    </FilterGroupContext.Provider>\n  );\n}","import { useTranslation } from 'react-i18next';\nimport React, { ChangeEvent, useCallback } from 'react';\nimport { useFilterGroupContext } from './FilterGroupContext';\nimport { useId } from '../../hooks/useId';\n\n/**\n * Props for the {@link Filters.SearchInput}.\n *\n * @public\n */\nexport interface SearchInputProps {\n  /** CSS class names applied to the input element. */\n  className?: string,\n  /** CSS class names applied to the label element. */\n  labelClassName?: string,\n  /** {@inheritDoc FilterSearch.placeholder} */\n  placeholder?: string,\n  /** The visible label text associated with the input. */\n  label?: string\n}\n\n/**\n * SearchInput is a simple input component that updates the\n * active searchValue for a particular {@link Filters.FilterGroupProvider}.\n *\n * @param props - {@link Filters.SearchInputProps}\n *\n * @public\n */\nexport function SearchInput(props: SearchInputProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const {\n    className = 'text-sm form-input bg-white h-9 w-full outline-none p-2 mb-2 rounded-md border border-gray-300 focus:ring-primary focus:ring-0 text-neutral-dark placeholder:text-neutral',\n    labelClassName = 'mb-1 block text-sm font-medium text-neutral-dark',\n    placeholder,\n    label\n  } = props;\n  const { searchValue, setSearchValue } = useFilterGroupContext();\n  const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n    setSearchValue(e.target.value);\n  }, [setSearchValue]);\n\n  const labelId = useId('filters-search-input-label');\n  const inputId = useId('filter-group-search-input');\n  return (\n    <>\n      {label && (\n        <label id={labelId} htmlFor={inputId} className={labelClassName}>\n          {label}\n        </label>\n      )}\n      <input\n        id={inputId}\n        className={className}\n        type='text'\n        placeholder={placeholder ?? t('searchHere')}\n        value={searchValue}\n        onChange={handleChange}\n      />\n    </>\n  );\n}\n","import { useSearchActions, useSearchState } from '@yext/search-headless-react';\nimport React, { PropsWithChildren, useMemo } from 'react';\nimport { SelectableFieldValueFilter } from '../../models/SelectableFieldValueFilter';\nimport { getSelectableFieldValueFilters } from '../../utils/filterutils';\nimport { executeSearch } from '../../utils';\nimport { FiltersContext, FiltersContextType } from './FiltersContext';\n\n/**\n * Props for the {@link Filters.StaticFiltersProvider}.\n *\n * @public\n */\nexport type StaticFiltersProviderProps = PropsWithChildren<{\n  /** CSS class names applied to the StaticFilter's container div. */\n  className?: string,\n  /** Whether or not a search is automatically run when a filter is selected. Defaults to true. */\n  searchOnChange?: boolean\n}>;\n\n/**\n * The StaticFilters component is a wrapper component around {@link Filters} that updates static filter\n * options when a child filter is updated.\n *\n * The representation of the facets is configured using props.children,\n * and is intended for use with components like {@link Filters.CheckboxOption}.\n *\n * @param props - {@link Filters.StaticFiltersProviderProps}\n *\n * @public\n */\nexport function StaticFiltersProvider({\n  children,\n  className = 'w-full',\n  searchOnChange = true\n}: StaticFiltersProviderProps): React.JSX.Element {\n  const searchActions = useSearchActions();\n  const displayableFilters = useSearchState(state => state.filters.static);\n\n  const filtersContextInstance: FiltersContextType = useMemo(() => {\n    return {\n      selectFilter(filter: SelectableFieldValueFilter) {\n        const { selected, displayName, ...fieldValueFilter } = filter;\n        searchActions.setFilterOption({\n          filter: {\n            kind: 'fieldValue',\n            ...fieldValueFilter\n          },\n          selected,\n          displayName\n        });\n      },\n      applyFilters() {\n        if (searchOnChange) {\n          searchActions.setOffset(0);\n          searchActions.resetFacets();\n          executeSearch(searchActions);\n        }\n      },\n      filters: getSelectableFieldValueFilters(displayableFilters ?? [])\n    };\n  }, [searchActions, displayableFilters, searchOnChange]);\n\n  return (\n    <div className={className}>\n      <FiltersContext.Provider value={filtersContextInstance}>\n        {children}\n      </FiltersContext.Provider>\n    </div>\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport { Matcher, NumberRangeValue, useSearchActions, useSearchState } from '@yext/search-headless-react';\nimport React, { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useFilterGroupContext } from './FilterGroupContext';\nimport { useComposedCssClasses } from '../../hooks';\nimport { getDefaultFilterDisplayName, clearStaticRangeFilters, findSelectableFieldValueFilter, getSelectableFieldValueFilters, parseNumberRangeInput } from '../../utils/filterutils';\nimport { executeSearch } from '../../utils';\nimport classNames from 'classnames';\nimport { useFiltersContext } from './FiltersContext';\nimport { InvalidIcon } from '../../icons/InvalidIcon';\n\n/**\n * Props for RangeInput\n *\n * @public\n */\nexport interface RangeInputProps {\n  /**\n   * Returns the filter's display name based on the range values which is used when the filter\n   * is displayed by other components such as AppliedFilters.\n   *\n   * @remarks\n   * By default, the displayName separates the range with a dash such as '10 - 20'.\n   * If the range is unbounded, it will display as 'Up to 20' or 'Over 10'.\n   */\n  getFilterDisplayName?: (value: NumberRangeValue) => string,\n  /**\n   * An optional element which renders in front of the input text.\n   */\n  inputPrefix?: React.JSX.Element,\n  /** CSS classes for customizing the component styling defined by RangeInputCssClasses */\n  customCssClasses?: RangeInputCssClasses\n}\n\n/**\n * The CSS class interface for RangeInput.\n *\n * @public\n */\nexport interface RangeInputCssClasses {\n  rangeInputContainer?: string,\n  input?: string,\n  input___withPrefix?: string,\n  input___withoutPrefix?: string,\n  input___disabled?: string,\n  input___enabled?: string,\n  input___valid?: string,\n  input___invalid?: string,\n  inputContainer?: string,\n  inputRowContainer?: string,\n  buttonsContainer?: string,\n  inputPrefix?: string,\n  inputPrefix___disabled?: string,\n  inputPrefix___enabled?: string,\n  applyButton?: string,\n  clearButton?: string,\n  tooltipContainer?: string,\n  tooltip?: string,\n  invalidMessage?: string,\n  invalidRowContainer?: string\n}\n\nconst builtInCssClasses: Readonly<RangeInputCssClasses> = {\n  rangeInputContainer: 'flex flex-col',\n  input: 'w-full h-9 form-input cursor-pointer border rounded-md focus:ring-0 text-neutral-dark text-sm text-right appearance-none leading-9',\n  input___withPrefix: 'pl-[2.5rem]',\n  input___withoutPrefix: 'px-2',\n  input___disabled: 'bg-gray-50 placeholder:text-neutral-light cursor-not-allowed',\n  input___enabled: 'placeholder:text-neutral',\n  input___valid: 'border-gray-300 focus:border-primary',\n  input___invalid: 'border-red-700 focus:border-red-700',\n  inputContainer: 'relative',\n  inputRowContainer: 'flex flex-row items-center space-x-3 group',\n  buttonsContainer: 'flex flex-row items-center justify-between pt-2',\n  inputPrefix: 'absolute left-2 top-2 text-sm',\n  inputPrefix___disabled: 'text-neutral-light cursor-not-allowed',\n  inputPrefix___enabled: 'text-neutral',\n  applyButton: 'text-sm text-primary font-medium',\n  clearButton: 'text-sm text-neutral font-medium',\n  tooltipContainer: 'invisible group-hover:visible relative -top-6',\n  tooltip: 'absolute z-10 left-0 whitespace-nowrap rounded shadow-lg p-3 text-sm bg-neutral-dark text-white',\n  invalidMessage: 'pl-3 text-sm text-red-700',\n  invalidRowContainer: 'pt-2 flex flex-row items-center'\n};\n\n/**\n * Represents a single number range static filter which accepts user input.\n *\n * @public\n *\n * @param props - RangeInputProps\n */\nexport function RangeInput(props: RangeInputProps): React.JSX.Element | null {\n  const { t } = useTranslation();\n  const { filters } = useFiltersContext();\n  const { fieldId, setIsOptionsDisabled } = useFilterGroupContext();\n  const {\n    getFilterDisplayName = getDefaultFilterDisplayName,\n    inputPrefix\n  } = props;\n  const cssClasses = useComposedCssClasses(builtInCssClasses, props.customCssClasses);\n  const searchActions = useSearchActions();\n  const [minRangeInput, setMinRangeInput] = useState<string>('');\n  const [maxRangeInput, setMaxRangeInput] = useState<string>('');\n  const staticFilters = useSearchState(state => state.filters.static);\n  const fieldValueFilters = useMemo(\n    () => getSelectableFieldValueFilters(staticFilters ?? []),\n    [staticFilters]\n  );\n  const isDisabled = filters.some(filter => filter.selected && filter.fieldId === fieldId);\n\n  const rangeFilter = useMemo(() => {\n    return {\n      kind: 'fieldValue' as const,\n      fieldId,\n      matcher: Matcher.Between,\n      value: parseNumberRangeInput(minRangeInput, maxRangeInput),\n    };\n  }, [fieldId, maxRangeInput, minRangeInput]);\n\n  const isValid = isValidRange(rangeFilter.value);\n\n   // Find a static filter which matches the current range input\n  const matchingFilter = findSelectableFieldValueFilter(rangeFilter, fieldValueFilters);\n  const isSelectedInAnswersState = matchingFilter?.selected === true;\n  const hasUserInput = !!(minRangeInput || maxRangeInput);\n  const shouldRenderApplyButton = hasUserInput && !isSelectedInAnswersState;\n\n  useEffect(() => {\n    setIsOptionsDisabled(hasUserInput);\n  }, [hasUserInput, setIsOptionsDisabled]);\n\n  const handleMinChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    const input = event?.target?.value;\n    validateNumericInput(input) && setMinRangeInput(input);\n  }, []);\n\n  const handleMaxChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n    const input = event?.target?.value;\n    validateNumericInput(input) && setMaxRangeInput(input);\n  }, []);\n\n  const handleClickApply = useCallback(() => {\n    if (!rangeFilter.value.start && !rangeFilter.value.end) {\n      return;\n    }\n    if (!isValid) {\n      return;\n    }\n    const displayName = getFilterDisplayName(rangeFilter.value);\n    clearStaticRangeFilters(searchActions, new Set([fieldId]));\n    searchActions.setFilterOption({\n      filter: rangeFilter,\n      selected: true,\n      displayName\n    });\n    searchActions.setOffset(0);\n    executeSearch(searchActions);\n  }, [searchActions, fieldId, getFilterDisplayName, isValid, rangeFilter]);\n\n  const handleClickClear = useCallback(() => {\n    const displayName = getFilterDisplayName(rangeFilter.value);\n    searchActions.setFilterOption({\n      filter: rangeFilter,\n      selected: false,\n      displayName\n    });\n    setMinRangeInput('');\n    setMaxRangeInput('');\n    searchActions.setOffset(0);\n    executeSearch(searchActions);\n  }, [searchActions, getFilterDisplayName, rangeFilter]);\n\n  const inputClasses = classNames(cssClasses.input, {\n    [cssClasses.input___withPrefix ?? '']: !!inputPrefix,\n    [cssClasses.input___withoutPrefix ?? '']: !inputPrefix,\n    [cssClasses.input___disabled ?? '']: isDisabled,\n    [cssClasses.input___enabled ?? '']: !isDisabled,\n    [cssClasses.input___invalid ?? '']: !isValid,\n    [cssClasses.input___valid ?? '']: isValid\n  });\n\n  const inputPrefixClasses = classNames(cssClasses.inputPrefix, {\n    [cssClasses.inputPrefix___disabled ?? '']: isDisabled,\n    [cssClasses.inputPrefix___enabled ?? '']: !isDisabled,\n  });\n\n  function renderInput(\n    value: string,\n    onChange: React.ChangeEventHandler<HTMLInputElement> | undefined,\n    placeholder: string\n  ) {\n    return (\n      <div className={cssClasses.inputContainer}>\n        {inputPrefix && <span className={inputPrefixClasses} aria-hidden='true'>{inputPrefix}</span>}\n        <input\n          type='text'\n          inputMode='decimal'\n          value={value}\n          placeholder={placeholder}\n          disabled={isDisabled}\n          className={inputClasses}\n          onChange={onChange}\n        />\n      </div>\n    );\n  }\n\n  return (\n    <div className={cssClasses.rangeInputContainer}>\n      <div className={cssClasses.inputRowContainer}>\n        {renderInput(minRangeInput, handleMinChange, t('min'))}\n        <div className='w-2.5 text-sm text-neutral'>-</div>\n        {renderInput(maxRangeInput, handleMaxChange, t('max'))}\n        {isDisabled &&\n        <div className={cssClasses.tooltipContainer}>\n          <div className={cssClasses.tooltip}>\n            {t('unselectAnOptionToEnterInARange')}</div>\n        </div>\n        }\n      </div>\n      {!isValid &&\n        <div className={cssClasses.invalidRowContainer}>\n          <InvalidIcon/>\n          <div className={cssClasses.invalidMessage}>{t('invalidRange')}</div>\n        </div>\n      }\n      {hasUserInput &&\n        <div className={cssClasses.buttonsContainer}>\n          <button\n            className={cssClasses.clearButton}\n            onClick={handleClickClear}\n          >\n            {t('clearMinAndMax')}</button>\n          {shouldRenderApplyButton &&\n            <button\n              className={cssClasses.applyButton}\n              onClick={handleClickApply}\n            >\n              {t('apply')}</button>\n          }\n        </div>\n      }\n    </div>\n  );\n}\n\n/**\n * Returns true only if the provided string passes the numeric validation.\n *\n * @remarks\n * Allows whole numbers and numbers with a single period.\n */\nfunction validateNumericInput(str: string) {\n  const numberRegex = new RegExp(/^\\d*\\.?\\d*$/);\n  return numberRegex.test(str);\n}\n\n/**\n * Determines if the range is valid.\n */\nfunction isValidRange(range: NumberRangeValue): boolean {\n  if (range.start && range.end) {\n    return range.start.value <= range.end.value;\n  }\n  return true;\n}\n","import React from 'react';\n\nexport function InvalidIcon(): React.JSX.Element {\n  return (\n    <svg width=\"20\" height=\"18\" viewBox=\"0 0 20 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M9.99955 7V9M9.99955 13H10.0095M3.07134 17H16.9277C18.4673 17 19.4296 15.3333 18.6598 14L11.7316 2C10.9618 0.666667 9.0373 0.666667 8.2675 2L1.33929 14C0.569492 15.3333 1.53174 17 3.07134 17Z\" stroke=\"#B91C1C\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n    </svg>\n  );\n}\n","import { builtInCollapsibleLabelCssClasses, CollapsibleLabel, CollapsibleLabelCssClasses } from './Filters';\nimport React, { Fragment, useMemo } from 'react';\nimport { twMerge } from '../hooks/useComposedCssClasses';\nimport { FilterGroupCssClasses } from './FilterGroup';\n\n/**\n * Props for the {@link FacetTitle} component.\n *\n * @internal\n */\nexport interface FacetTitleProps {\n  /** The label to use in the title. */\n  label?: string,\n  /** {@inheritDoc FilterGroupProps.collapsible} */\n  collapsible?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: FilterGroupCssClasses\n}\n\n/**\n * The tile of a facet component.\n *\n * @param props - props to render the component\n * @returns A React component\n *\n * @internal\n */\nexport function FacetTitle({\n  label,\n  customCssClasses,\n  collapsible = true,\n}: FacetTitleProps) {\n  const collapsibleLabelCssClasses: CollapsibleLabelCssClasses = useMemo(() => {\n    return {\n      label: customCssClasses?.titleLabel\n    };\n  }, [customCssClasses]);\n\n  return <Fragment>\n    {collapsible\n      ? <CollapsibleLabel label={label} customCssClasses={collapsibleLabelCssClasses} />\n      : (label && <div className={twMerge(\n        'mb-4', builtInCollapsibleLabelCssClasses.label, collapsibleLabelCssClasses.label)}>\n        {label}\n      </div>)}\n  </Fragment>;\n}\n","import { FilterGroup, FilterGroupCssClasses } from './FilterGroup';\nimport { FilterOptionConfig } from './Filters';\nimport { StaticFiltersProvider } from './Filters';\nimport React from 'react';\n\n/**\n * The CSS class interface for {@link StaticFilters}.\n *\n * @public\n */\nexport interface StaticFiltersCssClasses extends FilterGroupCssClasses {\n  staticFiltersContainer?: string\n}\n\n/**\n * The configuration data for a field value static filter option.\n *\n * @public\n */\nexport type StaticFilterOptionConfig = Omit<FilterOptionConfig, 'value'> & {\n  /** The value used to perform filtering. */\n  value: string | number | boolean\n};\n\n/**\n * Props for the {@link StaticFilters} component.\n *\n * @public\n */\nexport interface StaticFiltersProps {\n  /** The fieldId corresponding to the static filter group. */\n  fieldId: string,\n  /** {@inheritDoc StaticFilterOptionConfig} */\n  filterOptions: StaticFilterOptionConfig[],\n  /** The displayed label for the static filter group. */\n  title: string,\n  /** {@inheritDoc FilterGroupProps.collapsible} */\n  collapsible?: boolean,\n  /** {@inheritDoc FilterGroupProps.defaultExpanded} */\n  defaultExpanded?: boolean,\n  /** {@inheritDoc FilterGroupProps.searchable} */\n  searchable?: boolean,\n  /** {@inheritDoc FilterGroupProps.showOptionsSearchInputLabel} */\n  showOptionsSearchInputLabel?: boolean,\n  /**\n   * Whether or not a search is automatically run when a filter is selected.\n   * Defaults to true.\n   */\n  searchOnChange?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: StaticFiltersCssClasses\n}\n\n/**\n * A component that displays a group of user-configured field value filters\n * that will be applied to the current vertical search.\n *\n * @param props - {@link StaticFiltersProps}\n * @returns A React component for field value static filters\n *\n * @public\n */\nexport function StaticFilters(props: StaticFiltersProps): React.JSX.Element {\n  const { searchOnChange, customCssClasses = {}, ...filterGroupProps } = props;\n  const { staticFiltersContainer: containerClassName, ...filterGroupCssClasses } = customCssClasses;\n  return (\n    <StaticFiltersProvider searchOnChange={searchOnChange} className={containerClassName}>\n      <FilterGroup\n        key={filterGroupProps.fieldId}\n        customCssClasses={filterGroupCssClasses}\n        {...filterGroupProps}\n      />\n    </StaticFiltersProvider>\n  );\n}\n","import { FacetsProvider } from './Filters';\nimport { FilterGroup, FilterGroupCssClasses } from './FilterGroup';\nimport React, { Fragment } from 'react';\nimport { FilterDivider } from './FilterDivider';\nimport { isStringFacet } from '../utils/filterutils';\n\n/**\n * The CSS class interface for {@link StandardFacets}.\n *\n * @deprecated Use {@link StandardFacet} with {@link Facets} instead.\n * @public\n */\nexport interface StandardFacetsCssClasses extends FilterGroupCssClasses {\n  standardFacetsContainer?: string,\n  divider?: string\n}\n\n/**\n * Props for the {@link StandardFacets} component.\n *\n * @deprecated Use {@link StandardFacet} with {@link Facets} instead.\n * @public\n */\nexport interface StandardFacetsProps {\n  /** {@inheritDoc FilterGroupProps.collapsible} */\n  collapsible?: boolean,\n  /** {@inheritDoc FilterGroupProps.defaultExpanded} */\n  defaultExpanded?: boolean,\n  /**\n   * Whether or not a search is automatically run when a filter is selected.\n   * Defaults to true.\n   */\n  searchOnChange?: boolean,\n  /** List of filter ids that should not be displayed. */\n  excludedFieldIds?: string[],\n  /**\n   * Whether or not to show the option counts for each filter.\n   * Defaults to true.\n   */\n  showOptionCounts?: boolean,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: StandardFacetsCssClasses,\n  /**\n   * Limit on the number of options to be displayed.\n   * Defaults to 10.\n   */\n  showMoreLimit?: number\n}\n\n/**\n * A component that displays simple facets applicable to the current vertical search.\n *\n * @remarks\n * Numerical facets is not included. Hierachical facets will not be display in a\n * tree level structure. Use `excludedFieldIds` to exclude hierachical facets, if any,\n * when using this component.\n *\n * @param props - {@link StandardFacetsProps}\n * @returns A React component for facets\n *\n * @deprecated Use {@link Facets} instead.\n * @public\n */\nexport function StandardFacets(props: StandardFacetsProps): React.JSX.Element {\n  const {\n    searchOnChange,\n    excludedFieldIds = [],\n    customCssClasses = {},\n    showMoreLimit = 10,\n    showOptionCounts = true,\n    ...filterGroupProps\n  } = props;\n  return (\n    <FacetsProvider searchOnChange={searchOnChange} className={customCssClasses.standardFacetsContainer}>\n      {facets => facets\n        .filter(f => !excludedFieldIds.includes(f.fieldId) && isStringFacet(f))\n        .map((f, i) => {\n          return (\n            <Fragment key={f.fieldId}>\n              <FilterGroup\n                fieldId={f.fieldId}\n                filterOptions={f.options.map(o => {\n                  return showOptionCounts ? { ...o, resultsCount: o.count } : o;\n                })}\n                title={f.displayName}\n                customCssClasses={customCssClasses}\n                showMoreLimit={showMoreLimit}\n                searchable={f.options.length > showMoreLimit}\n                {...filterGroupProps}\n              />\n              {(i < facets.length - 1) && <FilterDivider className={customCssClasses.divider}/>}\n            </Fragment>\n          );\n        })\n      }\n    </FacetsProvider>\n  );\n}\n","import { twMerge } from '../hooks/useComposedCssClasses';\nimport React from 'react';\n/**\n * A divider component used to separate NumericalFacets, HierarchicalFacets, StandardFacets,\n * and StaticFilters.\n *\n * @param props - A customizable className for filter divider\n * @returns A React component for filter divider\n *\n * @public\n */\nexport function FilterDivider({ className }: { className?: string }): React.JSX.Element {\n  return <div className={twMerge('w-full h-px bg-gray-200 my-4', className)} />;\n}","import {\n  CollapsibleLabel,\n  CollapsibleSection,\n  FacetsProvider,\n  FilterGroupProvider,\n  HierarchicalFacetDisplay,\n  HierarchicalFacetDisplayCssClasses\n} from './Filters';\nimport { StandardFacetsProps } from './StandardFacets';\nimport React, { Fragment } from 'react';\nimport { FilterDivider } from './FilterDivider';\n\n/**\n * The CSS class interface for {@link HierarchicalFacets}.\n *\n * @public\n */\nexport interface HierarchicalFacetsCssClasses extends HierarchicalFacetDisplayCssClasses {\n  hierarchicalFacetsContainer?: string,\n  divider?: string\n}\n\n/**\n * Props for the {@link HierarchicalFacets} component.\n *\n * @deprecated Use {@link HierarchicalFacet} with {@link Facets} instead.\n * @public\n */\nexport interface HierarchicalFacetsProps extends Omit<StandardFacetsProps, 'excludedFieldIds'> {\n  /** List of filter ids to render as hierarchical facets. */\n  includedFieldIds: string[],\n  /** The delimiter for determining facet hierarchies, defaults to \"\\>\". */\n  delimiter?: string,\n  /** The maximum number of options to render before displaying the \"Show more/less\" button. Defaults to 4. */\n  showMoreLimit?: number,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: HierarchicalFacetsCssClasses\n}\n\n/**\n * A component that displays hierarchical facets, in a tree level structure,\n * applicable to the current vertical search.\n *\n * @param props - {@link HierarchicalFacetsProps}\n * @returns A React component for facets\n *\n * @deprecated Use {@link HierarchicalFacet} with {@link Facets} instead.\n * @public\n */\nexport function HierarchicalFacets({\n  searchOnChange,\n  collapsible,\n  defaultExpanded,\n  includedFieldIds,\n  customCssClasses = {},\n  delimiter,\n  showMoreLimit\n}: HierarchicalFacetsProps): React.JSX.Element {\n  return (\n    <FacetsProvider searchOnChange={searchOnChange} className={customCssClasses.hierarchicalFacetsContainer}>\n      {facets => facets\n        .filter(f => f.options.length > 0 && includedFieldIds.includes(f.fieldId))\n        .map((f, i) => {\n          return (\n            <Fragment key={f.fieldId}>\n              <FilterGroupProvider\n                fieldId={f.fieldId}\n                defaultExpanded={!collapsible || defaultExpanded}\n              >\n                {collapsible\n                  ? <CollapsibleLabel label={f.displayName} />\n                  : (f.displayName && <div className='text-neutral-dark text-sm font-medium text-left mb-4'>{f.displayName}</div>)\n                }\n                <CollapsibleSection >\n                  <HierarchicalFacetDisplay\n                    facet={f}\n                    delimiter={delimiter}\n                    showMoreLimit={showMoreLimit}\n                    customCssClasses={customCssClasses}\n                  />\n                </CollapsibleSection>\n              </FilterGroupProvider>\n              {(i < facets.length - 1) && <FilterDivider className={customCssClasses.divider}/>}\n            </Fragment>\n          );\n        })\n      }\n    </FacetsProvider>\n  );\n}","import { FacetsProvider, RangeInput, RangeInputCssClasses } from './Filters/index';\nimport { FilterGroup, FilterGroupCssClasses } from './FilterGroup';\nimport React, { Fragment } from 'react';\nimport { NumberRangeValue } from '@yext/search-headless-react';\nimport { StandardFacetsProps } from './StandardFacets';\nimport { isNumericalFacet } from '../utils/filterutils';\nimport { FilterDivider } from './FilterDivider';\n\n/**\n * The CSS class interface for {@link NumericalFacets}.\n *\n * @public\n */\nexport interface NumericalFacetsCssClasses extends FilterGroupCssClasses, RangeInputCssClasses {\n  numericalFacetsContainer?: string,\n  divider?: string\n}\n\n/**\n * Props for the {@link NumericalFacets} component.\n *\n * @deprecated Use {@link NumericalFacet} with {@link Facets} instead.\n * @public\n */\nexport interface NumericalFacetsProps extends Omit<StandardFacetsProps, 'excludedFieldIds'> {\n  /** List of filter ids to render as numerical facets. */\n  includedFieldIds?: string[],\n  /**\n   * Returns the filter's display name based on the range values which is used when the filter\n   * is displayed by other components such as AppliedFilters.\n   *\n   * @remarks\n   * By default, the displayName separates the range with a dash such as '10 - 20'.\n   * If the range is unbounded, it will display as 'Up to 20' or 'Over 10'.\n   */\n  getFilterDisplayName?: (value: NumberRangeValue) => string,\n  /**\n   * An optional element which renders in front of the input text.\n   */\n  inputPrefix?: React.JSX.Element,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: NumericalFacetsCssClasses\n}\n\nconst DEFAULT_RANGE_INPUT_PREFIX = <>$</>;\n\n/**\n * A component that displays numerical facets applicable to the current vertical search.\n *\n * @param props - {@link NumericalFacetsProps}\n * @returns A React component for facets\n *\n * @deprecated Use {@link NumericalFacet} with {@link Facets} instead.\n * @public\n */\nexport function NumericalFacets({\n  searchOnChange,\n  includedFieldIds = [],\n  getFilterDisplayName,\n  inputPrefix = DEFAULT_RANGE_INPUT_PREFIX,\n  customCssClasses = {},\n  ...filterGroupProps\n}: NumericalFacetsProps): React.JSX.Element {\n  return (\n    <FacetsProvider searchOnChange={searchOnChange} className={customCssClasses.numericalFacetsContainer}>\n      {facets => facets\n        .filter(f => isNumericalFacet(f)\n          && (includedFieldIds.length === 0 || includedFieldIds.includes(f.fieldId)))\n        .map((f, i) => {\n          return (\n            <Fragment key={f.fieldId}>\n              <FilterGroup\n                fieldId={f.fieldId}\n                filterOptions={f.options}\n                title={f.displayName}\n                customCssClasses={customCssClasses}\n                {...filterGroupProps}\n              >\n                <RangeInput\n                  getFilterDisplayName={getFilterDisplayName}\n                  inputPrefix={inputPrefix}\n                  customCssClasses={customCssClasses}\n                />\n              </FilterGroup>\n              {(i < facets.length - 1) && <FilterDivider className={customCssClasses.divider}/>}\n            </Fragment>\n          );\n        })\n      }\n    </FacetsProvider>\n  );\n}","import { FilterGroup } from './FilterGroup';\nimport { DisplayableFacet } from '@yext/search-headless-react';\nimport { StandardFacetProps } from './FacetProps';\nimport React from 'react';\n\n/**\n * A component that displays the content of a standard facet.\n *\n * @param props - props to render the component\n * @returns A React component for the content of a standard facet\n *\n * @internal\n */\nexport function StandardFacetContent({\n  fieldId,\n  label,\n  transformOptions,\n  customCssClasses,\n  facet,\n  showMoreLimit = 10,\n  showOptionCounts = true,\n  ...filterGroupProps\n}: StandardFacetProps & { facet: DisplayableFacet }) {\n  const options = facet.options || [];\n  const transformedOptions = transformOptions ? (transformOptions(options) || []) : options;\n\n  return (\n    <FilterGroup\n      fieldId={fieldId}\n      filterOptions={transformedOptions.map(o => {\n        return showOptionCounts ? { ...o, resultsCount: o.count } : o;\n      })}\n      title={label || facet.displayName}\n      customCssClasses={customCssClasses}\n      showMoreLimit={showMoreLimit}\n      searchable={facet?.options.length > showMoreLimit}\n      {...filterGroupProps}\n    />\n  );\n}\n","import { FacetsProvider } from './Filters';\nimport { StandardFacetContent } from './StandardFacetContent';\nimport {\n  FacetProps, FacetsCssClasses,\n  FacetsProps, HierarchicalFacetProps, NumericalFacetProps,\n  StandardFacetProps\n} from './FacetProps';\nimport { isNumericalFacet, isStringFacet } from '../utils/filterutils';\nimport { FilterDivider } from './FilterDivider';\nimport React, { Fragment, ReactElement, useMemo } from 'react';\nimport { NumericalFacetContent } from './NumericalFacetContent';\nimport { HierarchicalFacetContent } from './HierarchicalFacetContent';\nimport { DisplayableFacet } from '@yext/search-headless-react';\n\n/** @internal */\nenum FacetType {\n  STANDARD = 'STANDARD',\n  NUMERICAL = 'NUMERICAL',\n  HIERARCHICAL = 'HIERARCHICAL'\n}\n\n/**\n * A component that displays all facets applicable to the current vertical search.\n *\n * @remarks\n * This component is a quick way of getting facets on the page, and it will render standard facets,\n * numerical facets, and hierarchical facets. The {@link StandardFacet}, {@link NumericalFacet},\n * and {@link HierarchicalFacet} components can be used to override the default facet configuration.\n *\n * @param props - {@link FacetsProps}\n * @returns A React component for facets\n *\n * @public\n */\nexport function Facets(props: FacetsProps): React.JSX.Element {\n  const {\n    searchOnChange,\n    onlyRenderChildren = false,\n    children,\n    hierarchicalFieldIds,\n    excludedFieldIds = [],\n    customCssClasses = {},\n  } = props;\n  const resolvedHierarchicalFieldIds = useMemo(() => hierarchicalFieldIds ?? [], [hierarchicalFieldIds]);\n\n  const fieldIdToCustomFacetProps = new Map();\n  const fieldIds: string[] = [];\n  if (children) {\n    (Array.isArray(children) ? children : [children])\n      .filter((child): child is ReactElement<FacetProps> =>\n        React.isValidElement<FacetProps>(child) && !!child?.props?.fieldId)\n      .forEach(child => {\n        fieldIdToCustomFacetProps.set(child.props.fieldId, child);\n        fieldIds.push(child.props.fieldId);\n      });\n  }\n\n  return (\n    <div>\n      <FacetsProvider searchOnChange={searchOnChange} className={customCssClasses.facetsContainer}>\n        {facets => {\n          if (!facets?.length) {\n            return;\n          }\n\n          if (!onlyRenderChildren) {\n            facets.forEach(facet => {\n              if (!fieldIds.includes(facet.fieldId)) {\n                fieldIds.push(facet.fieldId);\n              }\n            });\n          }\n\n          const fieldIdToFacet = new Map();\n          facets.forEach(facet => fieldIdToFacet.set(facet.fieldId, facet));\n\n          return fieldIds\n            .filter(fieldId =>\n              !excludedFieldIds.includes(fieldId)\n              && fieldIdToFacet.get(fieldId).options.length > 0\n              && (!onlyRenderChildren || fieldIdToCustomFacetProps.has(fieldId)))\n            .map((fieldId, i) => {\n              const facet: DisplayableFacet = fieldIdToFacet.get(fieldId);\n\n              return (\n                <Fragment key={facet.fieldId}>\n                  <Facet\n                    facet={facet}\n                    facetsCustomCssClasses={customCssClasses}\n                    fieldIdToCustomFacetProps={fieldIdToCustomFacetProps}\n                    hierarchicalFieldIds={resolvedHierarchicalFieldIds}\n                  />\n                  {(i < facets.length - 1)\n                    && <FilterDivider className={customCssClasses?.divider}/>}\n                </Fragment>\n              );\n            });\n        }\n        }\n      </FacetsProvider>\n    </div>\n  );\n}\n\n/**\n * A component that displays a single standard facet. Use this to override the default rendering.\n *\n * @param props - {@link StandardFacetProps}\n * @returns ReactElement\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function StandardFacet(props: StandardFacetProps) { return null; }\n\n/**\n * A component that displays a single numerical facet. Use this to override the default rendering.\n *\n * @param props - {@link NumericalFacetProps}\n * @returns ReactElement\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function NumericalFacet(props: NumericalFacetProps) { return null; }\n\n/**\n * A component that displays a single hierarchical facet, in a tree level structure, applicable to\n * the current vertical search. Use this to override the default rendering.\n *\n * @param props - {@link HierarchicalFacetProps}\n * @returns ReactElement\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function HierarchicalFacet(props: HierarchicalFacetProps) { return null; }\n\n/**\n * A component that represents a single facet.\n *\n * @param facet - {@link DisplayableFacet}\n * @param facetsCustomCssClasses - {@link FacetsCssClasses}\n * @param fieldIdToCustomFacetProps - a map of fieldId to facet props\n * @param hierarchicalFieldIds - a list of hierarchical field ids\n * @returns {@link ReactElement}\n *\n * @internal\n */\nexport function Facet({\n  facet,\n  facetsCustomCssClasses,\n  fieldIdToCustomFacetProps,\n  hierarchicalFieldIds,\n}: {\n  facet: DisplayableFacet,\n  facetsCustomCssClasses: FacetsCssClasses,\n  fieldIdToCustomFacetProps: Map<string, any>,\n  hierarchicalFieldIds: string[]\n}) {\n  let facetType: FacetType;\n  let facetProps: FacetProps = {\n    fieldId: facet.fieldId,\n    label: facet.displayName,\n  };\n  const customFacetElement = fieldIdToCustomFacetProps.get(facet.fieldId);\n  if (customFacetElement) {\n    facetProps = { ...facetProps, ...customFacetElement.props };\n    facetType = getFacetTypeFromReactElementType(\n      (typeof customFacetElement.type === 'function')\n        ? customFacetElement.type.name : '');\n  } else {\n    facetType = getFacetTypeFromFacet(facet, hierarchicalFieldIds);\n  }\n\n  facetProps = {\n    ...facetProps,\n    customCssClasses: {\n      ...facetsCustomCssClasses,\n      ...facetProps.customCssClasses,\n    },\n  };\n\n  switch (facetType) {\n    case FacetType.NUMERICAL:\n      return (<NumericalFacetContent facet={facet} {...facetProps}/>);\n    case FacetType.HIERARCHICAL:\n      return (<HierarchicalFacetContent facet={facet} {...facetProps}/>);\n    case FacetType.STANDARD:\n    // fall through\n    default:\n      return (<StandardFacetContent facet={facet} {...facetProps}/>);\n  }\n}\n\n/**\n * Returns the type of the facet based on the props.\n * @param elementType - string\n * @returns {@link FacetType}\n *\n * @internal\n */\nexport function getFacetTypeFromReactElementType(elementType: string) {\n  switch (elementType) {\n    case NumericalFacet.name.toString():\n      return FacetType.NUMERICAL;\n    case HierarchicalFacet.name.toString():\n      return FacetType.HIERARCHICAL;\n    case StandardFacet.name.toString():\n      // fall through\n    default:\n      return FacetType.STANDARD;\n  }\n}\n\n/**\n * Returns the type of the facet based on facet.\n * @param facet - {@link DisplayableFacet}\n * @param hierarchicalFieldIds - string\n * @returns {@link FacetType}\n *\n * @internal\n */\nexport function getFacetTypeFromFacet(\n  facet: DisplayableFacet,\n  hierarchicalFieldIds: string[] = [],\n) {\n  if (hierarchicalFieldIds.includes(facet.fieldId)) {\n    return FacetType.HIERARCHICAL;\n  } else if (isStringFacet(facet)) {\n    return FacetType.STANDARD;\n  } else if (isNumericalFacet(facet)) {\n    return FacetType.NUMERICAL;\n  }\n\n  return FacetType.STANDARD;\n}\n","import { FilterGroup } from './FilterGroup';\nimport { DisplayableFacet } from '@yext/search-headless-react';\nimport { NumericalFacetProps } from './FacetProps';\nimport { RangeInput } from './Filters';\nimport React from 'react';\n\nconst DEFAULT_RANGE_INPUT_PREFIX = <>$</>;\n\n/**\n * A component that displays the content of a numerical facet.\n *\n * @param props - props to render the component\n * @returns A React component for the content of a standard facet\n *\n * @internal\n */\nexport function NumericalFacetContent({\n  fieldId,\n  label,\n  transformOptions,\n  customCssClasses,\n  getFilterDisplayName,\n  facet,\n  showMoreLimit = 10,\n  showOptionCounts = false,\n  inputPrefix = DEFAULT_RANGE_INPUT_PREFIX,\n  ...filterGroupProps\n}: NumericalFacetProps & { facet: DisplayableFacet }) {\n  const options = facet.options || [];\n  const transformedOptions = transformOptions ? (transformOptions(options) || []) : options;\n\n  return (\n    <FilterGroup\n      fieldId={fieldId}\n      filterOptions={transformedOptions.map(o => {\n        return showOptionCounts ? { ...o, resultsCount: o.count } : o;\n      })}\n      title={label || facet.displayName}\n      customCssClasses={customCssClasses}\n      showMoreLimit={showMoreLimit}\n      searchable={facet?.options.length > showMoreLimit}\n      {...filterGroupProps}\n    >\n      <RangeInput\n        getFilterDisplayName={getFilterDisplayName}\n        inputPrefix={inputPrefix}\n        customCssClasses={customCssClasses}\n      />\n    </FilterGroup>\n  );\n}\n","import { DisplayableFacet } from '@yext/search-headless-react';\nimport { HierarchicalFacetProps } from './FacetProps';\nimport {\n  CollapsibleSection,\n  FilterGroupProvider,\n  HierarchicalFacetDisplay\n} from './Filters';\nimport { FacetTitle } from './FacetTiltle';\nimport React from 'react';\n\n/**\n * A component that displays the content of a hierarchical facet.\n *\n * @param props - props to render the component\n * @returns A React component for the content of a hierarchical facet\n *\n * @internal\n */\nexport function HierarchicalFacetContent({\n  fieldId,\n  label,\n  transformOptions,\n  customCssClasses,\n  delimiter,\n  facet,\n  collapsible = true,\n  defaultExpanded = true,\n  showMoreLimit = 4,\n}: HierarchicalFacetProps & { facet: DisplayableFacet }) {\n  const options = facet.options || [];\n  const transformedOptions = transformOptions ? (transformOptions(options) || []) : options;\n\n  return (\n    <FilterGroupProvider fieldId={fieldId} defaultExpanded={!collapsible || defaultExpanded}>\n      <FacetTitle\n        label={label || facet.displayName}\n        customCssClasses={customCssClasses}\n        collapsible={collapsible}\n      />\n      {collapsible ? (\n        <CollapsibleSection >\n          <HierarchicalFacetDisplay\n            // eslint-disable-next-line react-perf/jsx-no-new-object-as-prop\n            facet={{\n              ...facet,\n              options: transformedOptions,\n            }}\n            delimiter={delimiter}\n            showMoreLimit={showMoreLimit}\n            customCssClasses={customCssClasses}\n          />\n        </CollapsibleSection>\n      ) : (\n        <div className='space-y-3'>\n          <HierarchicalFacetDisplay\n            // eslint-disable-next-line react-perf/jsx-no-new-object-as-prop\n            facet={{\n              ...facet,\n              options: transformedOptions,\n            }}\n            delimiter={delimiter}\n            showMoreLimit={showMoreLimit}\n            customCssClasses={customCssClasses}\n          />\n        </div>\n      )}\n    </FilterGroupProvider>\n  );\n}\n","import { useTranslation } from 'react-i18next';\nimport { useSearchActions } from '@yext/search-headless-react';\nimport { useCallback } from 'react';\nimport { useComposedCssClasses } from '../hooks';\nimport { clearStaticRangeFilters, getSelectedNumericalFacetFields } from '../utils/filterutils';\nimport { executeSearch } from '../utils';\nimport React from 'react';\n\n/**\n * Props for {@link ApplyFiltersButton}\n *\n * @public\n */\nexport interface ApplyFiltersButtonProps {\n  /** The label for the button, defaults to 'Apply Filters' */\n  label?: string,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: ApplyFiltersButtonCssClasses\n}\n\n/**\n * The CSS class interface for {@link ApplyFiltersButtonProps}.\n *\n * @public\n */\nexport interface ApplyFiltersButtonCssClasses {\n  button?: string\n}\n\nconst builtInCssClasses: Readonly<ApplyFiltersButtonCssClasses> = {\n  button: 'border border-gray-300 px-2.5 py-1 rounded-md text-primary bg-white shadow-md sticky bottom-3'\n};\n\n/**\n * Runs a vertical search.\n * By default has `position: sticky` styling that anchors it to the bottom of the page.\n *\n * @remarks\n * This is intended to be used when `searchOnChange` field is set to false on all\n * the Facets/StaticFilters components.\n *\n * @public\n */\nexport function ApplyFiltersButton({\n  customCssClasses,\n  label\n}: ApplyFiltersButtonProps): React.JSX.Element {\n  const { t } = useTranslation();\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n  const searchActions = useSearchActions();\n  const handleClick = useCallback(() => {\n    searchActions.setOffset(0);\n    clearStaticRangeFilters(searchActions, getSelectedNumericalFacetFields(searchActions));\n    executeSearch(searchActions);\n  }, [searchActions]);\n\n  return (\n    <button\n      onClick={handleClick}\n      className={cssClasses.button}\n    >\n      {label ?? t('applyFilters')}\n    </button>\n  );\n}","import React, { useRef, useEffect, useState, useCallback } from 'react';\nimport mapboxgl from 'mapbox-gl';\nimport { Result, useSearchState, SelectableStaticFilter } from '@yext/search-headless-react';\nimport { useDebouncedFunction } from '../hooks/useDebouncedFunction';\nimport _ from 'lodash';\n\nimport ReactDOM from 'react-dom';\n// Try to statically import createRoot, will be undefined for <18.\nimport * as ReactDomClient from 'react-dom/client';\n\ntype LegacyReactDOM = {\n  render?: (element: React.ReactElement, container: Element) => void,\n  unmountComponentAtNode?: (container: Element | DocumentFragment) => boolean\n};\n\ntype RootHandle = {\n  render: (children: React.ReactNode) => void,\n  unmount: () => void\n};\n\nconst legacyReactDOM = ReactDOM as LegacyReactDOM;\nconst reactMajorVersion = Number(React.version.split('.')[0]);\nconst supportsCreateRoot = !Number.isNaN(reactMajorVersion) && reactMajorVersion >= 18;\nconst KEYBOARD_MOVE_KEYS = new Set(['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']);\n\n/**\n * Coordinate use to represent the result's location on a map.\n *\n * @public\n */\nexport interface Coordinate {\n  /** The latitude of the location. */\n  latitude: number,\n  /** The longitude of the location. */\n  longitude: number\n}\n\n/**\n * A map center coordinate with helper methods that are owned by this library.\n *\n * @public\n */\nexport interface MapCenter extends Coordinate {\n  /** Returns a new coordinate whose longitude is wrapped to the range (-180, 180). */\n  wrap: () => MapCenter,\n  /** Returns the coordinate as a longitude-latitude tuple. */\n  toArray: () => [number, number],\n  /** Returns a string representation of the coordinate. */\n  toString: () => string,\n  /** Calculates the distance in meters between this coordinate and another coordinate. */\n  distanceTo: (coordinate: Coordinate) => number,\n  /** Returns bounds expanded by the provided radius in meters. */\n  toBounds: (radius?: number) => MapBounds,\n  /** Converts this coordinate to Earth-Centered, Earth-Fixed coordinates. */\n  toEcef: (altitude: number) => [number, number, number]\n}\n\n/**\n * A library-owned map bounds interface for drag and zoom callbacks.\n *\n * @public\n */\nexport interface MapBounds {\n  /** Sets the north east corner of the bounds. */\n  setNorthEast: (coordinate: Coordinate) => MapBounds,\n  /** Sets the south west corner of the bounds. */\n  setSouthWest: (coordinate: Coordinate) => MapBounds,\n  /** Extends the bounds to include the provided coordinate or bounds. */\n  extend: (coordinateOrBounds: Coordinate | MapBounds) => MapBounds,\n  /** Gets the center of the current bounds. */\n  getCenter: () => MapCenter,\n  /** Gets the south west corner of the current bounds. */\n  getSouthWest: () => MapCenter,\n  /** Gets the north east corner of the current bounds. */\n  getNorthEast: () => MapCenter,\n  /** Gets the north west corner of the current bounds. */\n  getNorthWest: () => MapCenter,\n  /** Gets the south east corner of the current bounds. */\n  getSouthEast: () => MapCenter,\n  /** Gets the west edge of the current bounds. */\n  getWest: () => number,\n  /** Gets the south edge of the current bounds. */\n  getSouth: () => number,\n  /** Gets the east edge of the current bounds. */\n  getEast: () => number,\n  /** Gets the north edge of the current bounds. */\n  getNorth: () => number,\n  /** Returns the bounds as southwest and northeast longitude-latitude tuples. */\n  toArray: () => [[number, number], [number, number]],\n  /** Returns a string representation of the bounds. */\n  toString: () => string,\n  /** Returns whether the bounds are empty. */\n  isEmpty: () => boolean,\n  /** Returns whether the provided coordinate is contained within the bounds. */\n  contains: (coordinate: Coordinate) => boolean\n}\n\n/**\n * Padding around a fit-bounds request.\n *\n * @public\n */\nexport interface MapPadding {\n  top?: number,\n  bottom?: number,\n  left?: number,\n  right?: number\n}\n\n/**\n * Options used when fitting the map view to a set of bounds.\n *\n * @public\n */\nexport interface MapFitBoundsOptions {\n  padding?: number | MapPadding,\n  maxZoom?: number\n}\n\n/**\n * The subset of map configuration supported by this component.\n *\n * @public\n */\nexport interface MapboxMapOptions {\n  center?: Coordinate,\n  fitBoundsOptions?: MapFitBoundsOptions,\n  maxZoom?: number,\n  style?: string | Record<string, unknown>,\n  zoom?: number\n}\n\n/**\n * Marker options supported by this component.\n *\n * @public\n */\nexport interface MapMarkerOptions {\n  element?: HTMLElement,\n  offset?: [number, number],\n  anchor?: 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right',\n  color?: string,\n  scale?: number,\n  draggable?: boolean,\n  clickTolerance?: number,\n  rotation?: number,\n  rotationAlignment?: 'map' | 'viewport' | 'auto' | 'horizon',\n  pitchAlignment?: 'map' | 'viewport' | 'auto',\n  occludedOpacity?: number,\n  className?: string,\n  altitude?: number\n}\n\n/**\n * A library-owned facade over the backing map implementation.\n *\n * @public\n */\nexport interface MapInstance {\n  fitBounds: (bounds: MapBounds, options?: MapFitBoundsOptions) => void,\n  flyTo: (options: { center: Coordinate }) => void,\n  getBounds: () => MapBounds | undefined,\n  getCenter: () => MapCenter,\n  /**\n   * Returns the native map implementation instance for advanced integrations.\n   *\n   * @remarks\n   * This value is intentionally untyped because it is implementation-specific.\n   */\n  getNativeInstance: () => unknown,\n  resize: () => void\n}\n\n/**\n * Props for rendering a custom marker on the map.\n *\n * @public\n */\nexport type PinComponentProps<T> = {\n  /** The index of the pin. */\n  index: number,\n  /** A stable map facade for advanced pin interactions. */\n  mapbox: MapInstance,\n  /** The search result corresponding to the pin. */\n  result: Result<T>,\n  /** Whether the pin is selected. */\n  selected?: boolean\n};\n\n/**\n * A functional component that can be used to render a custom marker on the map.\n *\n * @public\n */\nexport type PinComponent<T> = (props: PinComponentProps<T>) => React.JSX.Element;\n\n/**\n * A function use to derive a result's coordinate.\n *\n * @public\n */\nexport type CoordinateGetter<T> = (result: Result<T>) => Coordinate | undefined;\n\n/**\n * A function which is called when the user changes the map viewport.\n *\n * @public\n */\nexport type OnDragHandler = (center: MapCenter, bounds: MapBounds) => void;\n\n/**\n * Props for the {@link MapboxMap} component.\n * The type param \"T\" represents the type of \"rawData\" field of the results use in the map.\n *\n * @public\n */\nexport interface MapboxMapProps<T> {\n  /** Mapbox access token. */\n  mapboxAccessToken: string,\n  /** Interface for map customization supported by this component. */\n  mapboxOptions?: MapboxMapOptions,\n  /**\n   * Custom Pin component to render for markers on the map.\n   * By default, the built-in marker image from Mapbox GL is used.\n   * This prop should not be used with\n   * {@link MapboxMapProps.renderPin | renderPin}. If both are provided,\n   * only PinComponent will be used.\n   */\n  PinComponent?: PinComponent<T>,\n  /**\n   * Render function for a custom marker on the map. This function takes in an\n   * HTML element and is responible for rendering the pin into that element,\n   * which will be used as the marker.\n   * By default, the built-in marker image from Mapbox GL is used.\n   * This prop should not be used with\n   * {@link MapboxMapProps.PinComponent | PinComponent}. If both are provided,\n   * only PinComponent will be used.\n   */\n  renderPin?: (props: PinComponentProps<T> & { container: HTMLElement }) => void,\n  /**\n   * A function to derive a result's coordinate for the corresponding marker's location on the map.\n   * By default, \"yextDisplayCoordinate\" field is used as the result's display coordinate.\n   */\n  getCoordinate?: CoordinateGetter<T>,\n  /** {@inheritDoc OnDragHandler} */\n  onDrag?: OnDragHandler,\n  /**\n   * The window object of the iframe where the map should rendered. Must have mapboxgl loaded.\n   * If not provided or mapboxgl not loaded, the map will be rendered in the parent window.\n   */\n  iframeWindow?: Window,\n  /**\n   * If set to true, the map will update its options when the mapboxOptions prop changes.\n   * Otherwise, the map will not update its options once initially set.\n   */\n  allowUpdates?: boolean,\n  /** A function that handles a pin click event. */\n  onPinClick?: (result: Result<T> | undefined) => void,\n  /** The options to apply to the map markers based on whether it is selected. */\n  markerOptionsOverride?: (selected: boolean) => MapMarkerOptions\n}\n\n/**\n * A component that renders a map with markers to show result locations using Mapbox GL.\n *\n * @remarks\n * For the map to work properly, be sure to include Mapbox GL stylesheet in the application.\n *\n * @example\n * For instance, user may add the following import statement in their application's index file\n * or in the file where `MapboxMap` is used:\n * `import 'mapbox-gl/dist/mapbox-gl.css';`\n *\n * @param props - {@link MapboxMapProps}\n * @returns A React element containing a Mapbox Map\n *\n * @public\n */\nexport function MapboxMap<T>({\n  mapboxAccessToken,\n  mapboxOptions,\n  PinComponent,\n  renderPin,\n  getCoordinate = getDefaultCoordinate,\n  onDrag,\n  iframeWindow,\n  allowUpdates = false,\n  onPinClick,\n  markerOptionsOverride,\n}: MapboxMapProps<T>): React.JSX.Element {\n  const mapboxInstance = (iframeWindow as Window & { mapboxgl?: typeof mapboxgl })?.mapboxgl ?? mapboxgl;\n  // keep the mapbox access token in sync with prop changes.\n  useEffect(() => {\n    mapboxInstance.accessToken = mapboxAccessToken;\n  }, [mapboxAccessToken, mapboxInstance]);\n\n  const mapContainer = useRef<HTMLDivElement>(null);\n  const map = useRef<mapboxgl.Map | null>(null);\n  const markers = useRef<mapboxgl.Marker[]>([]);\n  const mapFacade = useRef<MapInstance | null>(null);\n  const markerRoots = useRef(new Map<HTMLElement, RootHandle>());\n  const activeMarkerElements = useRef(new Set<HTMLElement>());\n  const markerData = useRef<Array<{ marker: mapboxgl.Marker, result: Result<T>, index: number }>>([]);\n\n  const locationResults = useSearchState(state => state.vertical.results) as Result<T>[];\n  const staticFilters = useSearchState(state => state.filters?.static);\n  const onDragDebounced = useDebouncedFunction(onDrag, 100);\n  const [selectedResult, setSelectedResult] = useState<Result<T> | undefined>(undefined);\n\n  const handlePinClick = useCallback((result: Result<T>) => {\n    setSelectedResult(prev => prev === result ? undefined : result);\n  }, []);\n\n  // notify consumers when the selected pin changes.\n  useEffect(() => {\n    onPinClick?.(selectedResult);\n  }, [onPinClick, selectedResult]);\n\n  const scheduleRootUnmount = useCallback((root: RootHandle) => {\n    if (typeof queueMicrotask === 'function') {\n      queueMicrotask(() => root.unmount());\n    } else {\n      setTimeout(() => root.unmount(), 0);\n    }\n  }, []);\n\n  const cleanupPinComponent = useCallback((element: HTMLElement) => {\n    activeMarkerElements.current.delete(element);\n    if (supportsCreateRoot) {\n      const root = markerRoots.current.get(element);\n      if (root) {\n        // unmount must be called after the current render finishes, so schedule it for the next\n        // microtask\n        scheduleRootUnmount(root);\n        markerRoots.current.delete(element);\n      }\n    } else {\n      legacyReactDOM.unmountComponentAtNode?.(element);\n    }\n  }, [scheduleRootUnmount]);\n\n  const attachPinComponent = useCallback((element: HTMLElement, component: React.JSX.Element) => {\n    if (supportsCreateRoot && typeof ReactDomClient.createRoot === 'function') {\n      // Use React 18+ API\n      let root = markerRoots.current.get(element);\n      if (!root) {\n        root = ReactDomClient.createRoot(element);\n        markerRoots.current.set(element, root);\n      }\n      root.render(component);\n    } else if (typeof legacyReactDOM.render === 'function') {\n      // Fallback for React <18\n      legacyReactDOM.render(component, element);\n    }\n  }, []);\n\n  // builds and attaches a single marker to the mapbox map\n  const createMarker = useCallback((\n    mapbox: MapInstance,\n    result: Result<T>,\n    index: number,\n    selected: boolean\n  ) => {\n    const markerLocation = getCoordinate(result);\n    if (!markerLocation) {\n      return null;\n    }\n    const { latitude, longitude } = markerLocation;\n    if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) {\n      return null;\n    }\n\n    const el = document.createElement('div');\n    let markerOptions: mapboxgl.MarkerOptions = {};\n    if (PinComponent) {\n      if (renderPin) {\n        console.warn(\n          'Found both PinComponent and renderPin props. Using PinComponent.'\n        );\n      }\n      attachPinComponent(el, (\n        <PinComponent\n          index={index}\n          mapbox={mapbox}\n          result={result}\n          selected={selected}\n        />\n      ));\n      markerOptions.element = el;\n    } else if (renderPin) {\n      renderPin({ index, mapbox, result, container: el });\n      markerOptions.element = el;\n    }\n\n    if (markerOptionsOverride) {\n      markerOptions = {\n        ...markerOptions,\n        ...toNativeMarkerOptions(markerOptionsOverride(selected))\n      };\n    }\n\n    const nativeMap = mapbox.getNativeInstance();\n    if (!(nativeMap instanceof mapboxInstance.Map)) {\n      return null;\n    }\n\n    const marker = new mapboxInstance.Marker(markerOptions)\n      .setLngLat({ lat: latitude, lng: longitude })\n      .addTo(nativeMap);\n\n    marker?.getElement().addEventListener('click', () => handlePinClick(result));\n\n    return { marker, location: markerLocation };\n  }, [\n    PinComponent,\n    attachPinComponent,\n    getCoordinate,\n    handlePinClick,\n    mapboxInstance,\n    markerOptionsOverride,\n    renderPin\n  ]);\n\n  const removeMarkers = useCallback(() => {\n    markers.current.forEach(marker => {\n      if (!marker) {\n        return;\n      }\n      const element = marker?.getElement?.();\n      if (element) {\n        cleanupPinComponent(element);\n      }\n      if (typeof marker.remove === 'function') {\n        marker.remove();\n      }\n    });\n    markers.current = [];\n    markerData.current = [];\n  }, [cleanupPinComponent]);\n\n  const locale = useSearchState(state => state.meta?.locale);\n  // keep track of the previous value of mapboxOptions across renders\n  const prevMapboxOptions = useRef(mapboxOptions);\n\n  /**\n   * Localizes Mapbox label text to a specific locale.\n   *\n   * Updates symbol layers that are place names such that labels prefer `name_<lang>`\n   * (e.g. `name_fr`) and fall back to `name` when unavailable.\n   *\n   * Note:\n   * - Symbol layers that are place names would have `text-field` properties that includes\n   *   'name', which are localized.\n   * - Other symbol layers (e.g. road shields, transit, icons) are left unchanged.\n   */\n  const localizeMap = useCallback(() => {\n    const mapbox = map.current;\n    if (!mapbox || !locale) return;\n\n    const localizeLabels = () => {\n      mapbox.getStyle().layers.forEach(layer => {\n        if (layer.type !== 'symbol') {\n          return;\n        }\n        const textField = layer.layout?.['text-field'];\n        if (typeof textField === 'string'\n          ? textField.includes('name')\n          : (Array.isArray(textField) && JSON.stringify(textField).includes('name'))) {\n          mapbox.setLayoutProperty(\n            layer.id,\n            'text-field',\n            [\n              'coalesce',\n              ['get', `name_${getMapboxLanguage(locale)}`],\n              ['get', 'name']\n            ]\n          );\n        }\n      });\n    };\n\n    if (mapbox.isStyleLoaded()) {\n      localizeLabels();\n    } else {\n      mapbox.once('styledata', () => localizeLabels());\n    }\n  }, [locale]);\n\n  // initialize the map once and update mapbox options when allowUpdates is true.\n  useEffect(() => {\n    if (mapContainer.current) {\n      if (map.current && allowUpdates) {\n        // Compare current and previous mapboxOptions using deep equality\n        if (!_.isEqual(prevMapboxOptions.current, mapboxOptions)) {\n          // Update to existing Map\n          handleMapboxOptionsUpdates(mapboxOptions, map.current);\n          prevMapboxOptions.current = mapboxOptions;\n        }\n      } else if (!map.current && mapboxInstance) {\n        const options: mapboxgl.MapOptions = {\n          container: mapContainer.current,\n          style: 'mapbox://styles/mapbox/streets-v11',\n          center: [-74.005371, 40.741611],\n          zoom: 9,\n          ...toNativeMapboxOptions(mapboxOptions)\n        };\n        map.current = new mapboxInstance.Map(options);\n        const nativeMap = map.current;\n        mapFacade.current = createMapInstanceFacade(nativeMap);\n        nativeMap.resize();\n        const nav = new mapboxInstance.NavigationControl({\n          showCompass: false,\n          showZoom: true,\n          visualizePitch: false\n        });\n        nativeMap.addControl(nav, 'top-right');\n      }\n      localizeMap();\n    }\n  }, [allowUpdates, localizeMap, mapboxInstance, mapboxOptions]);\n\n  // Register movement listeners separately from map initialization so rerenders do not\n  // accidentally remove them without reattaching them.\n  useEffect(() => {\n    const nativeMap = map.current;\n    if (!nativeMap || !onDragDebounced) {\n      return;\n    }\n    const canvasContainer = nativeMap.getCanvasContainer();\n    let keyboardMovePending = false;\n\n    const dispatchDrag = () => {\n      const bounds = nativeMap.getBounds();\n      if (!bounds) {\n        return;\n      }\n      onDragDebounced(toMapCenter(nativeMap.getCenter()), toMapBounds(bounds));\n    };\n    const onKeyDown = (event: KeyboardEvent) => {\n      if (KEYBOARD_MOVE_KEYS.has(event.key)) {\n        keyboardMovePending = true;\n      }\n    };\n    const clearPendingKeyboardMove = () => {\n      keyboardMovePending = false;\n    };\n    const onDrag = () => {\n      dispatchDrag();\n    };\n    const onMove = (e: mapboxgl.MapEventOf<'move'>) => {\n      if (keyboardMovePending || ('originalEvent' in e && e.originalEvent)) {\n        // only trigger on user movement, not programmatic movement (e.g. from fitBounds)\n        dispatchDrag();\n      }\n    };\n\n    canvasContainer?.addEventListener('keydown', onKeyDown);\n    nativeMap.on('drag', onDrag);\n    nativeMap.on('move', onMove);\n    nativeMap.on('moveend', clearPendingKeyboardMove);\n\n    return () => {\n      keyboardMovePending = false;\n      canvasContainer?.removeEventListener('keydown', onKeyDown);\n      nativeMap.off('drag', onDrag);\n      nativeMap.off('move', onMove);\n      nativeMap.off('moveend', clearPendingKeyboardMove);\n    };\n  }, [onDragDebounced]);\n\n  // resize the map when its iframe container changes size.\n  useEffect(() => {\n    if (iframeWindow && map.current) {\n      map.current.resize();\n    }\n  }, [iframeWindow]);\n\n  // create and place markers when results change, then cleanup on teardown\n  useEffect(() => {\n    removeMarkers();\n    const nativeMap = map.current;\n    const mapbox = mapFacade.current;\n    if (nativeMap && mapbox && locationResults) {\n      if (locationResults.length > 0) {\n        const bounds = new mapboxInstance.LngLatBounds();\n        // create a marker for each result\n        locationResults.forEach((result, i) => {\n          const created = createMarker(mapbox, result, i, false);\n          if (!created) {\n            return;\n          }\n          markers.current.push(created.marker);\n          markerData.current.push({ marker: created.marker, result, index: i });\n          bounds.extend([created.location.longitude, created.location.latitude]);\n        });\n\n        // fit the map to the markers\n        nativeMap.resize();\n        const canvas = nativeMap.getCanvas();\n\n        // add padding to map\n        if (!bounds.isEmpty()\n            && !!canvas\n            && canvas.clientHeight > 0\n            && canvas.clientWidth > 0\n        ) {\n          const resolvedOptions = {\n            // these settings are defaults and will be overriden if present on fitBoundsOptions\n            padding: { top: 50, bottom: 50, left: 50, right: 50 },\n            maxZoom: mapboxOptions?.maxZoom ?? 15,\n            ...toNativeFitBoundsOptions(mapboxOptions?.fitBoundsOptions),\n          };\n\n          let resolvedPadding;\n          if (typeof resolvedOptions.padding === 'number') {\n            resolvedPadding = {\n              top: resolvedOptions.padding,\n              bottom: resolvedOptions.padding,\n              left: resolvedOptions.padding,\n              right: resolvedOptions.padding\n            };\n          } else {\n            resolvedPadding = {\n              top: resolvedOptions.padding?.top ?? 0,\n              bottom: resolvedOptions.padding?.bottom ?? 0,\n              left: resolvedOptions.padding?.left ?? 0,\n              right: resolvedOptions.padding?.right ?? 0\n            };\n          }\n\n          // Padding must not exceed the map's canvas dimensions\n          const verticalPaddingSum = resolvedPadding.top + resolvedPadding.bottom;\n          if (verticalPaddingSum >= canvas.clientHeight) {\n            const ratio = canvas.clientHeight / (verticalPaddingSum || 1);\n            resolvedPadding.top = Math.max(0, resolvedPadding.top * ratio - 1);\n            resolvedPadding.bottom = Math.max(0, resolvedPadding.bottom * ratio - 1);\n          }\n          const horizontalPaddingSum = resolvedPadding.left + resolvedPadding.right;\n          if (horizontalPaddingSum >= canvas.clientWidth) {\n            const ratio = canvas.clientWidth / (horizontalPaddingSum || 1);\n            resolvedPadding.left = Math.max(0, resolvedPadding.left * ratio - 1);\n            resolvedPadding.right = Math.max(0, resolvedPadding.right * ratio - 1);\n          }\n          resolvedOptions.padding = resolvedPadding;\n          nativeMap.fitBounds(bounds, resolvedOptions);\n        }\n\n        // return a cleanup function to remove markers when the map component unmounts\n        return () => {\n          markers.current.forEach((marker, i) => {\n            marker?.getElement().removeEventListener('click', () => handlePinClick(locationResults[i]));\n          });\n          removeMarkers();\n        };\n      } else if (staticFilters?.length) {\n        const locationFilterValue = getLocationFilterValue(staticFilters);\n        if (locationFilterValue) {\n          nativeMap.flyTo({\n            center: locationFilterValue\n          });\n        }\n      }\n    }\n  }, [\n    createMarker,\n    handlePinClick,\n    locationResults,\n    mapboxInstance,\n    mapboxOptions,\n    removeMarkers,\n    staticFilters\n  ]);\n\n  const previousSelectedResult = useRef<Result<T> | undefined>(undefined);\n\n  // update marker options when markerOptionsOverride changes or selectedResult changes\n  useEffect(() => {\n    const mapbox = mapFacade.current;\n    if (!mapbox || !markerOptionsOverride) {\n      previousSelectedResult.current = selectedResult;\n      return;\n    }\n\n    const prevSelected = previousSelectedResult.current;\n    previousSelectedResult.current = selectedResult;\n\n    // markerOptionsOverride is applied at creation time, so we recreate only the affected\n    // markers to reflect selection changes without tearing down all pins.\n    const resultsToUpdate = new Set<Result<T>>();\n    if (prevSelected) {\n      resultsToUpdate.add(prevSelected);\n    }\n    if (selectedResult) {\n      resultsToUpdate.add(selectedResult);\n    }\n\n    resultsToUpdate.forEach((result) => {\n      const markerEntry = markerData.current.find(entry => entry.result === result);\n      if (!markerEntry) {\n        return;\n      }\n      // recreate the marker to apply new markerOptionsOverride (e.g. color/scale).\n      const oldMarker = markerEntry.marker;\n      const element = oldMarker?.getElement?.();\n      if (element) {\n        cleanupPinComponent(element);\n      }\n      oldMarker?.remove?.();\n\n      const created = createMarker(mapbox, result, markerEntry.index, selectedResult === result);\n      if (!created) {\n        return;\n      }\n      markerEntry.marker = created.marker;\n      markers.current[markerEntry.index] = created.marker;\n    });\n  }, [cleanupPinComponent, createMarker, markerOptionsOverride, selectedResult]);\n\n  // re-render custom PinComponent on selection changes to update the visual state\n  useEffect(() => {\n    const mapbox = mapFacade.current;\n    if (!mapbox || !PinComponent) {\n      return;\n    }\n    markerData.current.forEach(({ marker, result, index }) => {\n      const element = marker?.getElement?.();\n      if (!element) {\n        return;\n      }\n      attachPinComponent(element, (\n        <PinComponent\n          index={index}\n          mapbox={mapbox}\n          result={result}\n          selected={selectedResult === result}\n        />\n      ));\n    });\n  }, [attachPinComponent, PinComponent, selectedResult]);\n\n  return (\n    <div ref={mapContainer} className='h-full w-full' />\n  );\n}\n\nfunction toMapCenter(lngLat: mapboxgl.LngLat): MapCenter {\n  const coordinate = {\n    latitude: lngLat.lat,\n    longitude: lngLat.lng\n  };\n\n  return {\n    ...coordinate,\n    wrap: () => toMapCenter(lngLat.wrap()),\n    toArray: () => lngLat.toArray(),\n    toString: () => lngLat.toString(),\n    distanceTo: (nextCoordinate: Coordinate) => lngLat.distanceTo(\n      new mapboxgl.LngLat(nextCoordinate.longitude, nextCoordinate.latitude)\n    ),\n    toBounds: (radius?: number) => toMapBounds(lngLat.toBounds(radius)),\n    toEcef: (altitude: number) => lngLat.toEcef(altitude)\n  };\n}\n\nfunction toMapBounds(bounds: mapboxgl.LngLatBounds): MapBounds {\n  return {\n    setNorthEast: (coordinate: Coordinate) => toMapBounds(\n      bounds.setNorthEast(toNativeCoordinate(coordinate))\n    ),\n    setSouthWest: (coordinate: Coordinate) => toMapBounds(\n      bounds.setSouthWest(toNativeCoordinate(coordinate))\n    ),\n    extend: (coordinateOrBounds: Coordinate | MapBounds) => toMapBounds(\n      bounds.extend(\n        'getNorthEast' in coordinateOrBounds\n          ? [\n            toNativeCoordinate(coordinateOrBounds.getSouthWest()),\n            toNativeCoordinate(coordinateOrBounds.getNorthEast())\n          ]\n          : toNativeCoordinate(coordinateOrBounds)\n      )\n    ),\n    getCenter: () => toMapCenter(bounds.getCenter()),\n    getSouthWest: () => toMapCenter(bounds.getSouthWest()),\n    getNorthEast: () => toMapCenter(bounds.getNorthEast()),\n    getNorthWest: () => toMapCenter(bounds.getNorthWest()),\n    getSouthEast: () => toMapCenter(bounds.getSouthEast()),\n    getWest: () => bounds.getWest(),\n    getSouth: () => bounds.getSouth(),\n    getEast: () => bounds.getEast(),\n    getNorth: () => bounds.getNorth(),\n    toArray: () => bounds.toArray(),\n    toString: () => bounds.toString(),\n    isEmpty: () => bounds.isEmpty(),\n    contains: (coordinate: Coordinate) => bounds.contains(toNativeCoordinate(coordinate))\n  };\n}\n\nfunction toNativeCoordinate(coordinate: Coordinate): [number, number] {\n  return [coordinate.longitude, coordinate.latitude];\n}\n\nfunction toNativeFitBoundsOptions(\n  fitBoundsOptions: MapFitBoundsOptions | undefined\n): mapboxgl.MapOptions['fitBoundsOptions'] | undefined {\n  if (!fitBoundsOptions) {\n    return undefined;\n  }\n\n  return {\n    ...fitBoundsOptions,\n    padding: fitBoundsOptions.padding\n      ? typeof fitBoundsOptions.padding === 'number'\n        ? fitBoundsOptions.padding\n        : {\n          top: fitBoundsOptions.padding.top ?? 0,\n          bottom: fitBoundsOptions.padding.bottom ?? 0,\n          left: fitBoundsOptions.padding.left ?? 0,\n          right: fitBoundsOptions.padding.right ?? 0\n        }\n      : undefined\n  };\n}\n\nfunction toNativeMapboxOptions(mapboxOptions: MapboxMapOptions | undefined): Omit<mapboxgl.MapOptions, 'container'> {\n  if (!mapboxOptions) {\n    return {};\n  }\n\n  return {\n    ...mapboxOptions,\n    center: mapboxOptions.center ? toNativeCoordinate(mapboxOptions.center) : undefined,\n    fitBoundsOptions: toNativeFitBoundsOptions(mapboxOptions.fitBoundsOptions),\n    style: mapboxOptions.style as mapboxgl.StyleSpecification | string | undefined\n  };\n}\n\nfunction toNativeMarkerOptions(markerOptions: MapMarkerOptions): mapboxgl.MarkerOptions {\n  return { ...markerOptions };\n}\n\nfunction createMapInstanceFacade(map: mapboxgl.Map): MapInstance {\n  return {\n    fitBounds: (bounds, options) => {\n      map.fitBounds(\n        [\n          toNativeCoordinate(bounds.getSouthWest()),\n          toNativeCoordinate(bounds.getNorthEast())\n        ],\n        toNativeFitBoundsOptions(options)\n      );\n    },\n    flyTo: ({ center }) => {\n      map.flyTo({ center: toNativeCoordinate(center) });\n    },\n    getBounds: () => {\n      const bounds = map.getBounds();\n      return bounds ? toMapBounds(bounds) : undefined;\n    },\n    getCenter: () => toMapCenter(map.getCenter()),\n    getNativeInstance: () => map,\n    resize: () => {\n      map.resize();\n    }\n  };\n}\n\nfunction handleMapboxOptionsUpdates(mapboxOptions: MapboxMapOptions | undefined, currentMap: mapboxgl.Map) {\n  if (mapboxOptions?.style) {\n    currentMap.setStyle(mapboxOptions.style as mapboxgl.StyleSpecification | string);\n  }\n  // Add more options to update as needed\n}\n\nfunction isCoordinate(data: unknown): data is Coordinate {\n  return typeof data == 'object'\n    && typeof (data as any)?.['latitude'] === 'number'\n    && typeof (data as any)?.['longitude'] === 'number';\n}\n\nfunction getDefaultCoordinate<T>(result: Result<T>): Coordinate | undefined {\n  const yextDisplayCoordinate: Coordinate = (result.rawData as any)['yextDisplayCoordinate'];\n  if (!yextDisplayCoordinate) {\n    console.error('Unable to use the default \"yextDisplayCoordinate\" field as the result\\'s coordinate to display on map.'\n    + '\\nConsider providing the \"getCoordinate\" prop to MapboxMap component to fetch the desire coordinate from result.');\n    return undefined;\n  }\n  if (!isCoordinate(yextDisplayCoordinate)) {\n    console.error('The default `yextDisplayCoordinate` field from result is not of type \"Coordinate\".');\n    return undefined;\n  }\n  return yextDisplayCoordinate;\n}\n\nexport function getMapboxLanguage(locale: string) {\n  try {\n    const localeOptions = new Intl.Locale(locale.replaceAll('_', '-'));\n    return localeOptions.script ? `${localeOptions.language}-${localeOptions.script}` : localeOptions.language;\n  } catch (e) {\n    console.warn(`Locale \"${locale}\" is not supported.`);\n  }\n  return 'en';\n}\n\nfunction getLocationFilterValue(staticFilters: SelectableStaticFilter[]): [number, number] | undefined {\n  const locationFilter = staticFilters.find(f => (f.filter as any)['fieldId'] === 'builtin.location' && (f.filter as any)['value'])?.filter;\n  if (locationFilter) {\n    const { lat, lng } = (locationFilter as any)['value'];\n    return [lng, lat];\n  }\n}\n","import React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport { AnalyticsContext } from '../hooks/useAnalytics';\nimport { CloudRegion, Environment } from '@yext/search-core';\nimport { SearchAnalyticsEventServiceImpl } from '../models/SearchAnalyticsEventServiceImpl';\nimport { SearchAnalyticsEventService } from '../models';\n\n/**\n * A higher-order component which provides analytics for its children.\n *\n * @public\n *\n * @param props - The configuration for the analytics service\n * @returns A React element that provides analytics context\n */\nexport function AnalyticsProvider(props: PropsWithChildren<SearchAnalyticsConfig>): React.JSX.Element {\n  const { children, ...searchAnalyticsConfig } = props;\n\n  const analyticsRef = useRef<SearchAnalyticsEventService | null>(null);\n\n  if (analyticsRef.current === null) {\n    analyticsRef.current = new SearchAnalyticsEventServiceImpl(searchAnalyticsConfig);\n  }\n\n  const analytics = analyticsRef.current;\n\n  // Adds enableYextAnalytics to the window. Typically used during consent banner implementation.\n  useEffect(() => {\n    (window as any).enableYextAnalytics = () => {\n      analytics.optIn();\n    };\n\n    return () => {\n      delete (window as any).enableYextAnalytics;\n    };\n  }, [analytics]);\n\n  return (\n    <AnalyticsContext.Provider value={ analytics }>\n      {children}\n    </AnalyticsContext.Provider>\n  );\n}\n\n/**\n * An interface representing the configuration for search analytics reporting.\n *\n * @public\n */\nexport interface SearchAnalyticsConfig {\n  /** The apiKey of the App with Events SDK access. */\n  apiKey: string,\n  /** The Yext environment to send requests to. Defaults to 'PRODUCTION'. */\n  environment?: Environment,\n  /** The region to send requests to. Defaults to 'US'. */\n  cloudRegion?: CloudRegion,\n  /** Whether to enable session tracking for analytics events. */\n  sessionTrackingEnabled?: boolean,\n  /** Whether a user must consent to analytics tracking before events are fired. Defaults to false. */\n  requireOptIn?: boolean\n}\n","import { analytics, AnalyticsConfig, AnalyticsEventService, EventPayload } from '@yext/analytics';\nimport { SearchAnalyticsConfig } from '../components';\nimport { CloudRegion, Environment } from '@yext/search-core';\nimport { SearchEventPayload } from './SearchEventPayload';\nimport { SearchAnalyticsEventService } from './SearchAnalyticsEventService';\n\n/** An implementation of {@link SearchAnalyticsEventService} which makes calls to the Analytics Events API */\nexport class SearchAnalyticsEventServiceImpl implements SearchAnalyticsEventService {\n  private internalService: AnalyticsEventService;\n  private analyticsEnabled: boolean;\n  /**\n   * @param searchAnalyticsConfig - configuration for analytics reporting.\n   */\n  constructor(searchAnalyticsConfig: SearchAnalyticsConfig) {\n    const analyticsConfig: AnalyticsConfig = {\n      authorizationType: 'apiKey',\n      authorization: searchAnalyticsConfig.apiKey,\n      env: searchAnalyticsConfig.environment &&\n            searchAnalyticsConfig.environment === Environment.PROD ? 'PRODUCTION' :\n        searchAnalyticsConfig.environment === Environment.SANDBOX ? 'SANDBOX' : undefined,\n      region: searchAnalyticsConfig.cloudRegion && searchAnalyticsConfig.cloudRegion === CloudRegion.US ? 'US' : 'EU',\n      sessionTrackingEnabled: searchAnalyticsConfig.sessionTrackingEnabled\n    };\n    this.internalService = analytics(analyticsConfig);\n    // if requireOptIn is undefined or set to false, analytics are enabled\n    this.analyticsEnabled = !searchAnalyticsConfig.requireOptIn;\n  }\n\n  public optIn(): void {\n    this.analyticsEnabled = true;\n  }\n\n  public optOut(): void {\n    this.analyticsEnabled = false;\n  }\n\n  public isYextAnalyticsEnabled(): boolean {\n    return this.analyticsEnabled;\n  }\n\n  public async report(payload: SearchEventPayload): Promise<string> {\n    if (!this.analyticsEnabled) {\n      return Promise.resolve('');\n    }\n    const eventPayload: EventPayload = {\n      action: payload.action,\n      destinationUrl: payload.destinationUrl,\n      entity: payload.entity,\n      locale: payload.locale,\n      search: {\n        searchId: payload.searchId,\n        queryId: payload.queryId,\n        experienceKey: payload.experienceKey,\n        verticalKey: payload.verticalKey,\n        versionLabel: payload.versionLabel,\n        versionNumber: payload.versionNumber,\n        isDirectAnswer: payload.isDirectAnswer,\n        isGenerativeDirectAnswer: payload.isGenerativeDirectAnswer\n      },\n      searchTerm: payload.searchTerm\n    };\n    return this.internalService.report(eventPayload);\n  }\n}\n","/**\n * Defines the environment of the API domains.\n *\n * @public\n */\nexport enum Environment {\n  PROD = 'prod',\n  SANDBOX = 'sbx',\n  /** For internal development only */\n  QA = 'qa',\n  /** For internal development only */\n  DEV = 'dev',\n}","/**\n * Defines the cloud region of the API domains.\n *\n * @public\n */\nexport enum CloudRegion {\n  US = 'us',\n  EU = 'eu',\n}","import { useTranslation } from 'react-i18next';\nimport {\n  GenerativeDirectAnswerResponse,\n  useSearchActions,\n  useSearchState,\n  SearchTypeEnum,\n  Result\n} from '@yext/search-headless-react';\nimport { useComposedCssClasses } from '../hooks';\nimport { useCardAnalytics } from '../hooks/useCardAnalytics';\nimport { DefaultRawDataType } from '../models/index';\nimport { executeGenerativeDirectAnswer } from '../utils/search-operations';\nimport { Markdown, MarkdownCssClasses } from './Markdown';\nimport React, { useCallback, useMemo, useRef } from 'react';\n\n/**\n * The CSS class interface used for {@link GenerativeDirectAnswer}.\n *\n * @public\n */\nexport interface GenerativeDirectAnswerCssClasses {\n  container?: string,\n  header?: string,\n  answerText?: string,\n  divider?: string,\n  citationsContainer?: string,\n  citation?: string,\n  citationTitle?: string,\n  citationSnippet?: string\n}\n\nconst builtInCssClasses: Readonly<GenerativeDirectAnswerCssClasses> = {\n  container: 'p-6 border border-gray-200 rounded-lg shadow-sm',\n  header: 'text-xl',\n  answerText: 'mt-4 prose',\n  divider: 'border-b border-gray-200 w-full pb-6 mb-6',\n  citationsContainer: 'mt-4 flex overflow-x-auto gap-4',\n  citation: 'p-4 border border-gray-200 rounded-lg shadow-sm bg-slate-100 flex flex-col grow-0 shrink-0 basis-64 text-sm text-neutral overflow-x-auto cursor-pointer hover:border-indigo-500',\n  citationTitle: 'font-bold',\n  citationSnippet: 'line-clamp-2 text-ellipsis break-words'\n};\n\n/**\n * Props for {@link GenerativeDirectAnswer}.\n *\n * @public\n */\nexport interface GenerativeDirectAnswerProps {\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: GenerativeDirectAnswerCssClasses,\n  /** The header for the answer section of the generative direct answer. */\n  answerHeader?: string | React.JSX.Element,\n  /** The header for the citations section of the generative direct answer. */\n  citationsHeader?: string | React.JSX.Element,\n  /**\n   * The citations container component for customizing the logic that determines which results\n   * can be rendered.\n   * By default, a section for citations is displayed if the results that correspond to the\n   * citations have the default minimum required info, which is `rawData.uid` and `rawData.name`.\n  */\n  CitationsContainer?: (props: CitationsProps) => React.JSX.Element | null,\n  /** The citation card component for customizing how each citation is displayed. */\n  CitationCard?: (props: CitationProps) => React.JSX.Element | null\n}\n\n/**\n * Displays the AI generated answer of a generative direct answer.\n *\n * @public\n *\n * @param props - {@link GenerativeDirectAnswerProps}\n * @returns A React element for the generative direct answer, or null if there is no generated answer\n */\nexport function GenerativeDirectAnswer({\n  customCssClasses,\n  answerHeader,\n  citationsHeader,\n  CitationCard,\n  CitationsContainer = Citations,\n}: GenerativeDirectAnswerProps): React.JSX.Element | null {\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  const isUniversal = useSearchState(state => state.meta.searchType) === SearchTypeEnum.Universal;\n  const universalResults = useSearchState(state => state.universal);\n  const verticalResults = useSearchState(state => state.vertical);\n  const searchId = useSearchState(state => state.meta.uuid);\n\n  const searchResults: Result[] | undefined = React.useMemo(() => {\n    if (isUniversal) {\n      return universalResults.verticals?.flatMap(v => v.results);\n    } else {\n      return verticalResults.results;\n    }\n  }, [isUniversal, universalResults, verticalResults]);\n\n  const lastExecutedSearchResults = useRef(undefined as Result[] | undefined);\n  const searchActions = useSearchActions();\n  const gdaResponse = useSearchState(state => state.generativeDirectAnswer?.response);\n  const isLoading = useSearchState(state => state.generativeDirectAnswer?.isLoading);\n  const handleClickEvent = useReportClickEvent();\n\n  React.useEffect(() => {\n    if (!searchResults?.length || !searchId || searchResults === lastExecutedSearchResults.current) {\n      return;\n    }\n    executeGenerativeDirectAnswer(searchActions);\n    lastExecutedSearchResults.current = searchResults;\n  }, [searchActions, searchResults, searchId]);\n\n  if (!searchResults?.length || isLoading || !gdaResponse || gdaResponse.resultStatus !== 'SUCCESS') {\n    return null;\n  }\n\n  return (\n    <div className={cssClasses.container}>\n      <Answer\n        gdaResponse={gdaResponse}\n        cssClasses={cssClasses}\n        answerHeader={answerHeader}\n        linkClickHandler={handleClickEvent}\n      />\n      <CitationsContainer\n        gdaResponse={gdaResponse}\n        cssClasses={cssClasses}\n        searchResults={searchResults}\n        citationsHeader={citationsHeader}\n        CitationCard={CitationCard}\n        citationClickHandler={handleClickEvent}\n      />\n    </div>\n  );\n}\n\ninterface AnswerProps {\n  gdaResponse: GenerativeDirectAnswerResponse,\n  cssClasses: GenerativeDirectAnswerCssClasses,\n  answerHeader?: string | React.JSX.Element,\n  linkClickHandler?: (data: GdaClickEventData) => void\n}\n\n/**\n * The answer section of the Generative Direct Answer.\n */\nfunction Answer(props: AnswerProps) {\n  const {\n    gdaResponse,\n    cssClasses,\n    answerHeader,\n    linkClickHandler\n  } = props;\n  const { t } = useTranslation();\n  const markdownCssClasses: MarkdownCssClasses = useMemo(\n    () => ({\n      container: cssClasses.answerText,\n    }),\n    [cssClasses.answerText]\n  );\n\n  const handleMarkdownLinkClick = useCallback((destinationUrl?: string) => {\n    if (destinationUrl) {\n      linkClickHandler?.({ destinationUrl });\n    }\n  }, [linkClickHandler]);\n\n  return <>\n    <div className={cssClasses.header}>\n      {answerHeader ?? t('aiGeneratedAnswer')}\n    </div>\n    <Markdown\n      content={gdaResponse.directAnswer}\n      onLinkClick={handleMarkdownLinkClick}\n      customCssClasses={markdownCssClasses}\n    />\n  </>;\n}\n\n/**\n * Props for citations component.\n *\n * @public\n */\nexport interface CitationsProps {\n  /** Response object containing generative direct answer info. */\n  gdaResponse: GenerativeDirectAnswerResponse,\n  /** CSS classes for customizing the component styling. */\n  cssClasses: GenerativeDirectAnswerCssClasses,\n  /** Returned results relevant to the users' query to be used in Citations. */\n  searchResults: Result[],\n  /** The header for the citations section generative direct answer. */\n  citationsHeader?: string | React.JSX.Element,\n  /** The component for citation card */\n  CitationCard?: (props: CitationProps) => React.JSX.Element | null,\n  /** Handle onClick event for citation link. */\n  citationClickHandler?: (data: GdaClickEventData) => void\n}\n\n/**\n * Displays the citations section of the Generative Direct Answer.\n */\nfunction Citations(props: CitationsProps) {\n  const {\n    gdaResponse,\n    cssClasses,\n    searchResults,\n    citationsHeader,\n    CitationCard = Citation,\n    citationClickHandler\n  } = props;\n  const { t } = useTranslation();\n  const citationResults = React.useMemo(() => {\n    // If an entity is returned by multiple different verticals, it will be present in\n    // searchResults multiple times. We want to only show it once in the citations.\n    const citationIds = new Set(gdaResponse.citations);\n    return searchResults.filter(result => {\n      const { uid, name } = result.rawData ?? {};\n      const dataIsInvalid = !uid || !name || typeof name != 'string' || typeof uid != 'string';\n      if (dataIsInvalid || !citationIds.has(uid)) {\n        return false;\n      }\n      citationIds.delete(uid);\n      return true;\n    });\n  }, [gdaResponse.citations, searchResults]);\n\n  const count = citationResults.length;\n  if (!count) {\n    return null;\n  }\n\n  return <>\n    <div className={cssClasses.divider} />\n    <div className={cssClasses.header}>\n      {citationsHeader ?? t('sources', { count })}\n    </div>\n    <div className={cssClasses.citationsContainer}>\n      {citationResults.map((result, index) => (\n        <CitationCard\n          key={index}\n          searchResult={result}\n          cssClasses={cssClasses}\n          citationClickHandler={citationClickHandler}\n        />\n      ))}\n    </div>\n  </>;\n}\n\n/**\n * Props for citation card.\n *\n * @public\n */\nexport interface CitationProps {\n  searchResult: Result,\n  cssClasses: GenerativeDirectAnswerCssClasses,\n  citationClickHandler?: (data: GdaClickEventData) => void\n}\n\n/**\n * Displays a citation card for the citations section of the Generative Direct Answer.\n */\nfunction Citation(props: CitationProps) {\n  const {\n    searchResult,\n    cssClasses,\n    citationClickHandler\n  } = props;\n  const { name, description, answer, link } = searchResult.rawData ?? {};\n  const citationTitle = String(name ?? '');\n  const citationSnippet = String(description ?? answer ?? '');\n  const citationUrl = typeof link === 'string' ? link : undefined;\n  const handleCitationClick = useCallback(() => {\n    if (citationUrl) {\n      citationClickHandler?.({ searchResult, destinationUrl: citationUrl });\n    }\n  }, [citationClickHandler, citationUrl, searchResult]);\n\n  return (\n    <a\n      className={cssClasses.citation}\n      href={citationUrl}\n      onClick={handleCitationClick}\n    >\n      <div className={cssClasses.citationTitle}>{citationTitle}</div>\n      <div className={cssClasses.citationSnippet}>{citationSnippet}</div>\n    </a>\n  );\n}\n\n/**\n * Payload for click events fired on a generative direct answer card.\n *\n * @public\n */\nexport interface GdaClickEventData {\n  searchResult?: Result,\n  destinationUrl: string\n}\n\nfunction useReportClickEvent<T = DefaultRawDataType>(): (data: GdaClickEventData) => void {\n  const reportAnalyticsEvent = useCardAnalytics<T>();\n  return React.useCallback((data: GdaClickEventData) => {\n    if (data.searchResult) {\n      reportAnalyticsEvent(data, 'CITATION_CLICK');\n    } else {\n      reportAnalyticsEvent(data, 'CTA_CLICK');\n    }\n  }, [reportAnalyticsEvent]);\n}\n","import ReactMarkdown, {\n  PluggableList,\n  ReactMarkdownOptions,\n} from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize from 'rehype-sanitize';\nimport React, { useMemo } from 'react';\nimport { useComposedCssClasses } from '../hooks/useComposedCssClasses';\n\n// The Remark and Rehype plugins to use in conjunction with ReactMarkdown.\nconst unifiedPlugins: { remark?: PluggableList, rehype: PluggableList } = {\n  remark: [\n    remarkGfm, //renders Github-Flavored Markdown\n  ],\n  rehype: [\n    rehypeRaw, //to support HTML embedded in markdown\n    rehypeSanitize, //to sanitize HTML content\n  ],\n};\n\n/**\n * The CSS class interface for the Markdown component.\n *\n * @internal\n */\nexport interface MarkdownCssClasses {\n  container?: string,\n  link?: string\n}\n\nconst builtInCssClasses: MarkdownCssClasses = {\n  link: 'cursor-pointer',\n};\n\ninterface MarkdownProps {\n  /** Stringified markdown. */\n  content: string,\n  /** CSS classes for customizing the component styling. */\n  customCssClasses?: MarkdownCssClasses,\n  /** A callback which is called when a link is clicked. */\n  onLinkClick?: (href?: string) => void\n}\n\n/**\n * Renders Github-Flavored Markdown from the Knowledge Graph. This Markdown can include\n * arbitrary HTML. Any HTML will be sanitized according to Rehype's default Schema.\n *\n * @remarks\n * A link click will send a CHAT_LINK_CLICK analytics event\n *\n * @internal\n */\nexport function Markdown({\n  content,\n  customCssClasses,\n  onLinkClick,\n}: MarkdownProps) {\n  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);\n\n  const components: ReactMarkdownOptions['components'] = useMemo(() => {\n    const createClickHandlerFn = (href?: string) => () => {\n      onLinkClick?.(href);\n    };\n    return {\n      a: ({ node: _, children, ...props }) => {\n        return (\n          <a\n            {...props}\n            onClick={createClickHandlerFn(props.href)}\n            rel=\"noopener noreferrer\"\n            className={cssClasses.link}\n          >\n            {children}\n          </a>\n        );\n      },\n    };\n  }, [\n    cssClasses,\n    onLinkClick,\n  ]);\n\n  return (\n    <ReactMarkdown\n      className={cssClasses.container}\n      children={content}\n      remarkPlugins={unifiedPlugins.remark}\n      rehypePlugins={unifiedPlugins.rehype}\n      components={components}\n    />\n  );\n}\n","import React, { PropsWithChildren } from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport { SearchHeadless } from '@yext/search-headless-react';\nimport { i18nInstance } from '../utils';\n\ntype translationKeys =\n  'aiGeneratedAnswer' |\n  'allCategories' |\n  'appliedFiltersToCurrentSearch' |\n  'apply' |\n  'applyFilters' |\n  'autocompleteOptionsFound_zero' | 'autocompleteOptionsFound_one' | 'autocompleteOptionsFound_two' | 'autocompleteOptionsFound_few' | 'autocompleteOptionsFound_many' | 'autocompleteOptionsFound_other' |\n  'autocompleteSuggestion' |\n  'autocompleteSuggestionsFound_zero' | 'autocompleteSuggestionsFound_one' | 'autocompleteSuggestionsFound_two' | 'autocompleteSuggestionsFound_few' | 'autocompleteSuggestionsFound_many' | 'autocompleteSuggestionsFound_other' |\n  'basedOnYourDevice' |\n  'basedOnYourInternetAddress' |\n  'categoriesText_zero' | 'categoriesText_one' | 'categoriesText_two' | 'categoriesText_few' | 'categoriesText_many' | 'categoriesText_other' |\n  'clearAll' |\n  'clearMinAndMax' |\n  'clearTheRangeToSelectOptions' |\n  'clearTheSearchBar' |\n  'conductASearch' |\n  'currentLocation' |\n  'didYouMean' |\n  'dropDownScreenReaderInstructions' |\n  'feedback' |\n  'invalidRange' |\n  'max' |\n  'min' |\n  'navigateToTheNextResultsPage' |\n  'navigateToThePreviousResultsPage' |\n  'noAutocompleteOptionsFound' |\n  'noAutocompleteSuggestionsFound' |\n  'noResultsFoundIn' |\n  'paginationPage' |\n  'pagination' |\n  'readMoreAbout' |\n  'recentSearch' |\n  'recentSearchesFound_zero' | 'recentSearchesFound_one' | 'recentSearchesFound_two' | 'recentSearchesFound_few' | 'recentSearchesFound_many' | 'recentSearchesFound_other' |\n  'removeFilter' |\n  'resultPreview' |\n  'resultPreviewsFound_zero' | 'resultPreviewsFound_one' | 'resultPreviewsFound_two' | 'resultPreviewsFound_few' | 'resultPreviewsFound_many' | 'resultPreviewsFound_other' |\n  'resultsCountText_zero' | 'resultsCountText_one' | 'resultsCountText_two' | 'resultsCountText_few' | 'resultsCountText_many' | 'resultsCountText_other' |\n  'resultsCountWithPaginationText' |\n  'searchHere' |\n  'showLess' |\n  'showMore' |\n  'showingAllInstead' |\n  'sources_zero' | 'sources_one' | 'sources_two' | 'sources_few' | 'sources_many' | 'sources_other' |\n  'submitSearch' |\n  'suggestionResultsCount_zero' | 'suggestionResultsCount_one' | 'suggestionResultsCount_two' | 'suggestionResultsCount_few' | 'suggestionResultsCount_many' | 'suggestionResultsCount_other' |\n  'thisAnsweredMyQuestion' |\n  'thisDidNotAnswerMyQuestion' |\n  'unselectAnOptionToEnterInARange' |\n  'updateYourLocation' |\n  'viewAll' |\n  'viewDetails' |\n  'useMyLocation' |\n  'viewAll' |\n  'viewDetails';\n\ntype translations = {\n  [key in translationKeys]?: string;\n};\n\n/**\n * SearchI18next translation overrides\n *\n * The key is the locale to override.\n * The value is the translation object that define specific translations override.\n *\n * @public\n */\nexport type SearchTranslationOverrides = {\n  [key: string]: translations\n};\n\n/**\n * The configuration options for Search I18next.\n *\n * @public\n */\ndeclare interface SearchI18nextConfig {\n  searcher: SearchHeadless,\n  translationOverrides?: SearchTranslationOverrides\n}\n\n/**\n * A higher-order component which provides translations for search react components.\n *\n * @public\n *\n * @param props - The configuration for the search headless service\n * @returns A React element that provides translation context\n */\nexport function SearchI18nextProvider(props: PropsWithChildren<SearchI18nextConfig>): React.JSX.Element {\n  const { searcher, translationOverrides, children } = props;\n\n  React.useEffect(() => {\n    translationOverrides && Object.entries(translationOverrides).forEach(([locale, translation]) => {\n      i18nInstance.addResourceBundle(locale, 'search-ui-react', translation, true, true);\n    });\n    const initialLocale = searcher.state.meta.locale ?? 'en';\n    if (i18nInstance.language !== initialLocale) {\n      void i18nInstance.changeLanguage(initialLocale);\n    }\n\n    const unsubscribe = searcher.addListener<string | undefined>({\n      valueAccessor: state => state.meta.locale,\n      callback: locale => {\n        const normalizedLocale = locale ?? 'en';\n        if (i18nInstance.language !== normalizedLocale) {\n          void i18nInstance.changeLanguage(normalizedLocale);\n        }\n      }\n    });\n\n    return () => {\n      unsubscribe();\n    };\n  }, [searcher, translationOverrides]);\n\n  return (\n    <I18nextProvider i18n={i18nInstance}>\n      {children}\n    </I18nextProvider>\n  );\n}\n","import { HighlightedValue } from '@yext/search-headless-react';\n\n/**\n * The data used by the {@link StandardCard} and taken from the original Result.\n *\n * @public\n */\nexport interface StandardCardData {\n  /** The text to display in the card's header. */\n  title: HighlightedValue | string,\n  /** The content to display in the card's body. */\n  description: HighlightedValue | string,\n  /** CTA data to render. */\n  cta1: CtaData,\n  /** CTA data to render. */\n  cta2: CtaData\n}\n\n/**\n * The shape of a StandardCard CTA field's data.\n *\n * @public\n */\nexport interface CtaData {\n  /** The display label for the CTA element. */\n  label: string,\n  /** The CTA link source. */\n  link: string,\n  /** The CTA link type (e.g. URL, Phone, Email, Other). */\n  linkType: string\n}\n\n/**\n * Type guard for CtaData.\n *\n * @public\n *\n * @param data - the data to validate.\n * @returns whether the data is of type CtaData.\n */\nexport function isCtaData(data: unknown): data is CtaData {\n  if (typeof data !== 'object' || data === null) {\n    return false;\n  }\n  const expectedKeys = ['label', 'link', 'linkType'];\n  return expectedKeys.every(key => {\n    return key in data;\n  });\n}","export * from './components/index';\nexport * from './hooks/index';\nexport * from './models/index';\nexport * from './utils/index';\n\n/**\n * Content path to the source files in component library that utilizes Tailwind class names.\n * This is intended to be used in user's custom tailwind config.\n *\n * @public\n *\n * @remarks\n * This assumes that the node_modules folder containing the component library\n * is in adjacent level with the user's tailwind.config.js file.\n *\n * @example\n * In user's tailwind.config.js file:\n *\n * ```js\n * const { ComponentsContentPath } = require('@yext/search-ui-react');\n *\n * module.exports = {\n *  content: [ ComponentsContentPath ],\n *  // ... the rest of your tailwind config\n * };\n * ```\n */\nexport const ComponentsContentPath = 'node_modules/@yext/search-ui-react/lib/**/*.{js,jsx}';\n"],"mappings":"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","names":["require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","require_search_ui_react","supportedLocales","useTranslation","SearchTypeEnum","useSearchActions","useSearchState","React","isValidElement","useCallback","useEffect","useMemo","useEffect","useRef","useCallback","useEffect","useState","SearchIntent","useRef","useRef","useState","useCallback","useEffect","useRef","useState","useCallback","useEffect","React","React","React","React","isValidElement","useEffect","useMemo","useRef","useState","useContext","createContext","createContext","useContext","React","React","useCallback","useCallback","React","React","useEffect","useState","React","id","useState","useEffect","useRef","useState","useMemo","React","useEffect","isValidElement","React","useCallback","useRef","useState","useRef","useState","useCallback","React","React","React","useTranslation","React","useTranslation","React","React","createContext","useContext","analytics","Matcher","_","Matcher","builtInCssClasses","useTranslation","useSearchActions","useSearchState","SearchTypeEnum","executeAutocomplete","useEffect","useCallback","query","React","useMemo","verticalKey","isValidElement","useSearchState","useSearchActions","classNames","React","useCallback","useMemo","useCallback","useSearchState","useCallback","analytics","useSearchState","useCallback","useCallback","useCallback","useCallback","builtInCssClasses","useSearchState","classNames","useSearchActions","useCallback","useMemo","React","useSearchState","DirectAnswerType","useTranslation","useSearchState","React","useCallback","useState","React","builtInCssClasses","useTranslation","useSearchState","useState","useCallback","React","useTranslation","React","useMemo","url","Trans","React","useMemo","Trans","React","builtInCssClasses","useSearchState","DirectAnswerType","useTranslation","useSearchActions","useSearchState","React","useCallback","useEffect","useMemo","useState","useTranslation","React","React","useTranslation","Matcher","useSearchActions","useSearchState","useCallback","useState","useTranslation","useSearchActions","useSearchState","Matcher","React","builtInCssClasses","useTranslation","React","builtInCssClasses","useTranslation","useSearchActions","useMemo","useState","useSearchState","useEffect","useCallback","React","getScreenReaderText","useTranslation","useSearchActions","useSearchState","React","useState","builtInCssClasses","useTranslation","useSearchActions","useSearchState","useState","React","useSearchState","classNames","useTranslation","useSearchActions","useSearchState","useCallback","useSearchActions","useSearchState","useCallback","useSearchActions","React","useCallback","useMemo","useTranslation","useSearchActions","useTranslation","React","useCallback","useState","useMemo","createContext","useContext","builtInCssClasses","useState","useCallback","React","useTranslation","useSearchState","useMemo","useSearchState","useMemo","useSearchState","useSearchActions","isEqual","useMemo","useSearchState","useRef","useSearchState","useSearchActions","useMemo","useSearchState","useSearchActions","useMemo","useSearchState","useSearchActions","useMemo","isEqual","React","builtInCssClasses","useSearchState","classNames","useSearchState","classNames","React","builtInCssClasses","React","builtInCssClasses","title","link","cta1","cta2","React","React","builtInCssClasses","useTranslation","React","useSearchState","classNames","React","useCallback","builtInCssClasses","useTranslation","useSearchState","analytics","classNames","classNames","React","builtInCssClasses","useSearchState","useSearchState","React","useSearchState","useTranslation","useSearchState","useSearchActions","React","useSearchState","analytics","React","useCallback","classNames","useTranslation","useSearchActions","useSearchState","_","useTranslation","Trans","React","useSearchState","classNames","React","useMemo","builtInCssClasses","useTranslation","useSearchState","verticalConfigMap","alternativeVerticals","Trans","useTranslation","SearchTypeEnum","useSearchState","classNames","React","builtInCssClasses","useSearchState","classNames","useTranslation","SearchTypeEnum","useTranslation","useSearchUtilities","React","useMemo","useState","useTranslation","Matcher","React","useCallback","useEffect","useMemo","createContext","useContext","classNames","builtInCssClasses","useTranslation","Matcher","useCallback","useMemo","useEffect","classNames","React","classNames","React","builtInCssClasses","classNames","React","React","useSearchActions","useSearchState","React","useMemo","useSearchActions","useSearchState","useMemo","React","React","useMemo","useState","useState","useMemo","React","useTranslation","React","useCallback","useTranslation","useCallback","React","useSearchActions","useSearchState","React","useMemo","useSearchActions","useSearchState","useMemo","React","useTranslation","Matcher","useSearchActions","useSearchState","React","useCallback","useEffect","useMemo","useState","classNames","React","builtInCssClasses","useTranslation","useSearchActions","useState","useSearchState","useMemo","Matcher","useEffect","useCallback","classNames","React","React","Fragment","useMemo","useMemo","React","Fragment","builtInCssClasses","useTranslation","useMemo","React","useSearchUtilities","useState","React","React","Fragment","React","React","Fragment","React","Fragment","React","Fragment","React","Fragment","React","Fragment","React","React","Fragment","useMemo","React","DEFAULT_RANGE_INPUT_PREFIX","React","useMemo","React","Fragment","useTranslation","useSearchActions","useCallback","React","builtInCssClasses","useTranslation","useSearchActions","useCallback","React","useRef","useEffect","useState","useCallback","useSearchState","React","useEffect","useRef","useSearchState","useState","useCallback","onDrag","React","useEffect","useRef","Environment","CloudRegion","useRef","analytics","useEffect","React","useTranslation","useSearchActions","useSearchState","SearchTypeEnum","React","useMemo","builtInCssClasses","useMemo","_","React","React","useCallback","useMemo","useRef","builtInCssClasses","useSearchState","SearchTypeEnum","useSearchActions","useTranslation","React","React"]}