@seekora-ai/ui-sdk-react 0.0.0-stage-20260517092419
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Breadcrumb.d.ts +43 -0
- package/dist/components/Breadcrumb.d.ts.map +1 -0
- package/dist/components/Breadcrumb.js +119 -0
- package/dist/components/ClearRefinements.d.ts +42 -0
- package/dist/components/ClearRefinements.d.ts.map +1 -0
- package/dist/components/ClearRefinements.js +81 -0
- package/dist/components/CurrentRefinements.d.ts +63 -0
- package/dist/components/CurrentRefinements.d.ts.map +1 -0
- package/dist/components/CurrentRefinements.js +302 -0
- package/dist/components/FacetDropdown.d.ts +94 -0
- package/dist/components/FacetDropdown.d.ts.map +1 -0
- package/dist/components/FacetDropdown.js +396 -0
- package/dist/components/Facets.d.ts +118 -0
- package/dist/components/Facets.d.ts.map +1 -0
- package/dist/components/Facets.js +785 -0
- package/dist/components/FederatedDropdown.d.ts +98 -0
- package/dist/components/FederatedDropdown.d.ts.map +1 -0
- package/dist/components/FederatedDropdown.js +526 -0
- package/dist/components/HierarchicalMenu.d.ts +55 -0
- package/dist/components/HierarchicalMenu.d.ts.map +1 -0
- package/dist/components/HierarchicalMenu.js +276 -0
- package/dist/components/Highlight.d.ts +51 -0
- package/dist/components/Highlight.d.ts.map +1 -0
- package/dist/components/Highlight.js +155 -0
- package/dist/components/HitsPerPage.d.ts +41 -0
- package/dist/components/HitsPerPage.d.ts.map +1 -0
- package/dist/components/HitsPerPage.js +82 -0
- package/dist/components/InfiniteHits.d.ts +51 -0
- package/dist/components/InfiniteHits.d.ts.map +1 -0
- package/dist/components/InfiniteHits.js +173 -0
- package/dist/components/MobileFilters.d.ts +71 -0
- package/dist/components/MobileFilters.d.ts.map +1 -0
- package/dist/components/MobileFilters.js +242 -0
- package/dist/components/Pagination.d.ts +90 -0
- package/dist/components/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination.js +298 -0
- package/dist/components/QuerySuggestions.d.ts +36 -0
- package/dist/components/QuerySuggestions.d.ts.map +1 -0
- package/dist/components/QuerySuggestions.js +71 -0
- package/dist/components/QuerySuggestionsDropdown.d.ts +82 -0
- package/dist/components/QuerySuggestionsDropdown.d.ts.map +1 -0
- package/dist/components/QuerySuggestionsDropdown.js +394 -0
- package/dist/components/RangeInput.d.ts +58 -0
- package/dist/components/RangeInput.d.ts.map +1 -0
- package/dist/components/RangeInput.js +203 -0
- package/dist/components/RangeSlider.d.ts +51 -0
- package/dist/components/RangeSlider.d.ts.map +1 -0
- package/dist/components/RangeSlider.js +262 -0
- package/dist/components/Recommendations.d.ts +89 -0
- package/dist/components/Recommendations.d.ts.map +1 -0
- package/dist/components/Recommendations.js +256 -0
- package/dist/components/RichQuerySuggestions.d.ts +88 -0
- package/dist/components/RichQuerySuggestions.d.ts.map +1 -0
- package/dist/components/RichQuerySuggestions.js +498 -0
- package/dist/components/SearchBar.d.ts +57 -0
- package/dist/components/SearchBar.d.ts.map +1 -0
- package/dist/components/SearchBar.js +361 -0
- package/dist/components/SearchBarWithSuggestions.d.ts +105 -0
- package/dist/components/SearchBarWithSuggestions.d.ts.map +1 -0
- package/dist/components/SearchBarWithSuggestions.js +275 -0
- package/dist/components/SearchLayout.d.ts +35 -0
- package/dist/components/SearchLayout.d.ts.map +1 -0
- package/dist/components/SearchLayout.js +61 -0
- package/dist/components/SearchProvider.d.ts +35 -0
- package/dist/components/SearchProvider.d.ts.map +1 -0
- package/dist/components/SearchProvider.js +53 -0
- package/dist/components/SearchResults.d.ts +57 -0
- package/dist/components/SearchResults.d.ts.map +1 -0
- package/dist/components/SearchResults.js +456 -0
- package/dist/components/SortBy.d.ts +84 -0
- package/dist/components/SortBy.d.ts.map +1 -0
- package/dist/components/SortBy.js +183 -0
- package/dist/components/Stats.d.ts +51 -0
- package/dist/components/Stats.d.ts.map +1 -0
- package/dist/components/Stats.js +201 -0
- package/dist/components/primitives/ActionButtons.d.ts +27 -0
- package/dist/components/primitives/ActionButtons.d.ts.map +1 -0
- package/dist/components/primitives/ActionButtons.js +102 -0
- package/dist/components/primitives/AnalyticsProvider.d.ts +22 -0
- package/dist/components/primitives/AnalyticsProvider.d.ts.map +1 -0
- package/dist/components/primitives/AnalyticsProvider.js +87 -0
- package/dist/components/primitives/BadgeList.d.ts +14 -0
- package/dist/components/primitives/BadgeList.d.ts.map +1 -0
- package/dist/components/primitives/BadgeList.js +65 -0
- package/dist/components/primitives/CustomSelect.d.ts +40 -0
- package/dist/components/primitives/CustomSelect.d.ts.map +1 -0
- package/dist/components/primitives/CustomSelect.js +196 -0
- package/dist/components/primitives/ImageDisplay.d.ts +28 -0
- package/dist/components/primitives/ImageDisplay.d.ts.map +1 -0
- package/dist/components/primitives/ImageDisplay.js +127 -0
- package/dist/components/primitives/ImageZoom.d.ts +33 -0
- package/dist/components/primitives/ImageZoom.d.ts.map +1 -0
- package/dist/components/primitives/ImageZoom.js +433 -0
- package/dist/components/primitives/PriceDisplay.d.ts +21 -0
- package/dist/components/primitives/PriceDisplay.d.ts.map +1 -0
- package/dist/components/primitives/PriceDisplay.js +44 -0
- package/dist/components/primitives/RatingDisplay.d.ts +43 -0
- package/dist/components/primitives/RatingDisplay.d.ts.map +1 -0
- package/dist/components/primitives/RatingDisplay.js +114 -0
- package/dist/components/primitives/VariantSelector.d.ts +30 -0
- package/dist/components/primitives/VariantSelector.d.ts.map +1 -0
- package/dist/components/primitives/VariantSelector.js +155 -0
- package/dist/components/primitives/VariantSwatches.d.ts +28 -0
- package/dist/components/primitives/VariantSwatches.d.ts.map +1 -0
- package/dist/components/primitives/VariantSwatches.js +188 -0
- package/dist/components/primitives/index.d.ts +12 -0
- package/dist/components/primitives/index.d.ts.map +1 -0
- package/dist/components/primitives/index.js +11 -0
- package/dist/components/primitives/withAnalytics.d.ts +24 -0
- package/dist/components/primitives/withAnalytics.d.ts.map +1 -0
- package/dist/components/primitives/withAnalytics.js +73 -0
- package/dist/components/product-page/ProductGallery.d.ts +26 -0
- package/dist/components/product-page/ProductGallery.d.ts.map +1 -0
- package/dist/components/product-page/ProductGallery.js +13 -0
- package/dist/components/product-page/ProductInfo.d.ts +44 -0
- package/dist/components/product-page/ProductInfo.d.ts.map +1 -0
- package/dist/components/product-page/ProductInfo.js +34 -0
- package/dist/components/product-page/ProductRecommendations.d.ts +21 -0
- package/dist/components/product-page/ProductRecommendations.d.ts.map +1 -0
- package/dist/components/product-page/ProductRecommendations.js +17 -0
- package/dist/components/product-page/index.d.ts +4 -0
- package/dist/components/product-page/index.d.ts.map +1 -0
- package/dist/components/product-page/index.js +3 -0
- package/dist/components/section-primitives/SectionError.d.ts +11 -0
- package/dist/components/section-primitives/SectionError.d.ts.map +1 -0
- package/dist/components/section-primitives/SectionError.js +13 -0
- package/dist/components/section-primitives/SectionItemGrid.d.ts +18 -0
- package/dist/components/section-primitives/SectionItemGrid.d.ts.map +1 -0
- package/dist/components/section-primitives/SectionItemGrid.js +14 -0
- package/dist/components/section-primitives/SectionLoading.d.ts +11 -0
- package/dist/components/section-primitives/SectionLoading.d.ts.map +1 -0
- package/dist/components/section-primitives/SectionLoading.js +11 -0
- package/dist/components/section-primitives/SectionSearchContext.d.ts +17 -0
- package/dist/components/section-primitives/SectionSearchContext.d.ts.map +1 -0
- package/dist/components/section-primitives/SectionSearchContext.js +17 -0
- package/dist/components/section-primitives/SectionSearchProvider.d.ts +25 -0
- package/dist/components/section-primitives/SectionSearchProvider.d.ts.map +1 -0
- package/dist/components/section-primitives/SectionSearchProvider.js +106 -0
- package/dist/components/section-primitives/index.d.ts +5 -0
- package/dist/components/section-primitives/index.d.ts.map +1 -0
- package/dist/components/section-primitives/index.js +4 -0
- package/dist/components/suggestions/AmazonDropdown.d.ts +30 -0
- package/dist/components/suggestions/AmazonDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/AmazonDropdown.js +509 -0
- package/dist/components/suggestions/GoogleDropdown.d.ts +31 -0
- package/dist/components/suggestions/GoogleDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/GoogleDropdown.js +349 -0
- package/dist/components/suggestions/MinimalDropdown.d.ts +24 -0
- package/dist/components/suggestions/MinimalDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/MinimalDropdown.js +312 -0
- package/dist/components/suggestions/MobileSheetDropdown.d.ts +31 -0
- package/dist/components/suggestions/MobileSheetDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/MobileSheetDropdown.js +483 -0
- package/dist/components/suggestions/PinterestDropdown.d.ts +29 -0
- package/dist/components/suggestions/PinterestDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/PinterestDropdown.js +446 -0
- package/dist/components/suggestions/ShopifyDropdown.d.ts +27 -0
- package/dist/components/suggestions/ShopifyDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/ShopifyDropdown.js +448 -0
- package/dist/components/suggestions/SpotlightDropdown.d.ts +33 -0
- package/dist/components/suggestions/SpotlightDropdown.d.ts.map +1 -0
- package/dist/components/suggestions/SpotlightDropdown.js +544 -0
- package/dist/components/suggestions/SuggestionSearchBar.d.ts +127 -0
- package/dist/components/suggestions/SuggestionSearchBar.d.ts.map +1 -0
- package/dist/components/suggestions/SuggestionSearchBar.js +644 -0
- package/dist/components/suggestions/index.d.ts +37 -0
- package/dist/components/suggestions/index.d.ts.map +1 -0
- package/dist/components/suggestions/index.js +59 -0
- package/dist/components/suggestions/styles/index.d.ts +11 -0
- package/dist/components/suggestions/styles/index.d.ts.map +1 -0
- package/dist/components/suggestions/styles/index.js +289 -0
- package/dist/components/suggestions/styles/responsive.d.ts +107 -0
- package/dist/components/suggestions/styles/responsive.d.ts.map +1 -0
- package/dist/components/suggestions/styles/responsive.js +237 -0
- package/dist/components/suggestions/types.d.ts +511 -0
- package/dist/components/suggestions/types.d.ts.map +1 -0
- package/dist/components/suggestions/types.js +6 -0
- package/dist/components/suggestions/utils.d.ts +259 -0
- package/dist/components/suggestions/utils.d.ts.map +1 -0
- package/dist/components/suggestions/utils.js +668 -0
- package/dist/components/suggestions-primitives/CategoriesTabs.d.ts +13 -0
- package/dist/components/suggestions-primitives/CategoriesTabs.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/CategoriesTabs.js +35 -0
- package/dist/components/suggestions-primitives/DropdownPanel.d.ts +24 -0
- package/dist/components/suggestions-primitives/DropdownPanel.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/DropdownPanel.js +67 -0
- package/dist/components/suggestions-primitives/ItemCard.d.ts +48 -0
- package/dist/components/suggestions-primitives/ItemCard.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/ItemCard.js +103 -0
- package/dist/components/suggestions-primitives/ItemGrid.d.ts +28 -0
- package/dist/components/suggestions-primitives/ItemGrid.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/ItemGrid.js +55 -0
- package/dist/components/suggestions-primitives/ProductCard.d.ts +45 -0
- package/dist/components/suggestions-primitives/ProductCard.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/ProductCard.js +177 -0
- package/dist/components/suggestions-primitives/ProductCardLayouts.d.ts +44 -0
- package/dist/components/suggestions-primitives/ProductCardLayouts.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/ProductCardLayouts.js +137 -0
- package/dist/components/suggestions-primitives/ProductGrid.d.ts +22 -0
- package/dist/components/suggestions-primitives/ProductGrid.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/ProductGrid.js +41 -0
- package/dist/components/suggestions-primitives/RecentSearchesList.d.ts +17 -0
- package/dist/components/suggestions-primitives/RecentSearchesList.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/RecentSearchesList.js +46 -0
- package/dist/components/suggestions-primitives/SearchInput.d.ts +23 -0
- package/dist/components/suggestions-primitives/SearchInput.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SearchInput.js +114 -0
- package/dist/components/suggestions-primitives/SuggestionItem.d.ts +31 -0
- package/dist/components/suggestions-primitives/SuggestionItem.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionItem.js +47 -0
- package/dist/components/suggestions-primitives/SuggestionList.d.ts +26 -0
- package/dist/components/suggestions-primitives/SuggestionList.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionList.js +35 -0
- package/dist/components/suggestions-primitives/SuggestionsContext.d.ts +44 -0
- package/dist/components/suggestions-primitives/SuggestionsContext.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionsContext.js +18 -0
- package/dist/components/suggestions-primitives/SuggestionsDropdownComposition.d.ts +24 -0
- package/dist/components/suggestions-primitives/SuggestionsDropdownComposition.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionsDropdownComposition.js +30 -0
- package/dist/components/suggestions-primitives/SuggestionsError.d.ts +11 -0
- package/dist/components/suggestions-primitives/SuggestionsError.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionsError.js +19 -0
- package/dist/components/suggestions-primitives/SuggestionsLoading.d.ts +11 -0
- package/dist/components/suggestions-primitives/SuggestionsLoading.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionsLoading.js +17 -0
- package/dist/components/suggestions-primitives/SuggestionsProvider.d.ts +38 -0
- package/dist/components/suggestions-primitives/SuggestionsProvider.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/SuggestionsProvider.js +259 -0
- package/dist/components/suggestions-primitives/TrendingList.d.ts +17 -0
- package/dist/components/suggestions-primitives/TrendingList.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/TrendingList.js +48 -0
- package/dist/components/suggestions-primitives/highlightMarkup.d.ts +31 -0
- package/dist/components/suggestions-primitives/highlightMarkup.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/highlightMarkup.js +70 -0
- package/dist/components/suggestions-primitives/index.d.ts +39 -0
- package/dist/components/suggestions-primitives/index.d.ts.map +1 -0
- package/dist/components/suggestions-primitives/index.js +24 -0
- package/dist/docsearch/components/DocSearch.d.ts +4 -0
- package/dist/docsearch/components/DocSearch.d.ts.map +1 -0
- package/dist/docsearch/components/DocSearch.js +93 -0
- package/dist/docsearch/components/DocSearchButton.d.ts +4 -0
- package/dist/docsearch/components/DocSearchButton.d.ts.map +1 -0
- package/dist/docsearch/components/DocSearchButton.js +12 -0
- package/dist/docsearch/components/Footer.d.ts +8 -0
- package/dist/docsearch/components/Footer.d.ts.map +1 -0
- package/dist/docsearch/components/Footer.js +40 -0
- package/dist/docsearch/components/Highlight.d.ts +9 -0
- package/dist/docsearch/components/Highlight.d.ts.map +1 -0
- package/dist/docsearch/components/Highlight.js +48 -0
- package/dist/docsearch/components/Hit.d.ts +15 -0
- package/dist/docsearch/components/Hit.d.ts.map +1 -0
- package/dist/docsearch/components/Hit.js +96 -0
- package/dist/docsearch/components/Modal.d.ts +10 -0
- package/dist/docsearch/components/Modal.d.ts.map +1 -0
- package/dist/docsearch/components/Modal.js +57 -0
- package/dist/docsearch/components/Results.d.ts +23 -0
- package/dist/docsearch/components/Results.d.ts.map +1 -0
- package/dist/docsearch/components/Results.js +141 -0
- package/dist/docsearch/components/SearchBox.d.ts +11 -0
- package/dist/docsearch/components/SearchBox.d.ts.map +1 -0
- package/dist/docsearch/components/SearchBox.js +16 -0
- package/dist/docsearch/hooks/useDocSearch.d.ts +33 -0
- package/dist/docsearch/hooks/useDocSearch.d.ts.map +1 -0
- package/dist/docsearch/hooks/useDocSearch.js +224 -0
- package/dist/docsearch/hooks/useKeyboard.d.ts +17 -0
- package/dist/docsearch/hooks/useKeyboard.d.ts.map +1 -0
- package/dist/docsearch/hooks/useKeyboard.js +71 -0
- package/dist/docsearch/hooks/useSeekoraSearch.d.ts +27 -0
- package/dist/docsearch/hooks/useSeekoraSearch.d.ts.map +1 -0
- package/dist/docsearch/hooks/useSeekoraSearch.js +213 -0
- package/dist/docsearch/index.d.ts +13 -0
- package/dist/docsearch/index.d.ts.map +1 -0
- package/dist/docsearch/index.js +11 -0
- package/dist/docsearch/types.d.ts +175 -0
- package/dist/docsearch/types.d.ts.map +1 -0
- package/dist/docsearch/types.js +4 -0
- package/dist/docsearch.css +234 -0
- package/dist/hooks/useAnalytics.d.ts +24 -0
- package/dist/hooks/useAnalytics.d.ts.map +1 -0
- package/dist/hooks/useAnalytics.js +67 -0
- package/dist/hooks/useClickTracking.d.ts +36 -0
- package/dist/hooks/useClickTracking.d.ts.map +1 -0
- package/dist/hooks/useClickTracking.js +89 -0
- package/dist/hooks/useExperiment.d.ts +25 -0
- package/dist/hooks/useExperiment.d.ts.map +1 -0
- package/dist/hooks/useExperiment.js +123 -0
- package/dist/hooks/useFilters.d.ts +27 -0
- package/dist/hooks/useFilters.d.ts.map +1 -0
- package/dist/hooks/useFilters.js +86 -0
- package/dist/hooks/useKeyboardNavigation.d.ts +51 -0
- package/dist/hooks/useKeyboardNavigation.d.ts.map +1 -0
- package/dist/hooks/useKeyboardNavigation.js +113 -0
- package/dist/hooks/useNaturalLanguageFilters.d.ts +48 -0
- package/dist/hooks/useNaturalLanguageFilters.d.ts.map +1 -0
- package/dist/hooks/useNaturalLanguageFilters.js +221 -0
- package/dist/hooks/useProductAnalytics.d.ts +49 -0
- package/dist/hooks/useProductAnalytics.d.ts.map +1 -0
- package/dist/hooks/useProductAnalytics.js +116 -0
- package/dist/hooks/useQuerySuggestions.d.ts +21 -0
- package/dist/hooks/useQuerySuggestions.d.ts.map +1 -0
- package/dist/hooks/useQuerySuggestions.js +84 -0
- package/dist/hooks/useQuerySuggestionsEnhanced.d.ts +120 -0
- package/dist/hooks/useQuerySuggestionsEnhanced.d.ts.map +1 -0
- package/dist/hooks/useQuerySuggestionsEnhanced.js +444 -0
- package/dist/hooks/useSearchState.d.ts +35 -0
- package/dist/hooks/useSearchState.d.ts.map +1 -0
- package/dist/hooks/useSearchState.js +68 -0
- package/dist/hooks/useSeekoraSearch.d.ts +20 -0
- package/dist/hooks/useSeekoraSearch.d.ts.map +1 -0
- package/dist/hooks/useSeekoraSearch.js +63 -0
- package/dist/hooks/useSmartSuggestions.d.ts +55 -0
- package/dist/hooks/useSmartSuggestions.d.ts.map +1 -0
- package/dist/hooks/useSmartSuggestions.js +236 -0
- package/dist/hooks/useSuggestionsAnalytics.d.ts +93 -0
- package/dist/hooks/useSuggestionsAnalytics.d.ts.map +1 -0
- package/dist/hooks/useSuggestionsAnalytics.js +239 -0
- package/dist/hooks/useVariantSelection.d.ts +28 -0
- package/dist/hooks/useVariantSelection.d.ts.map +1 -0
- package/dist/hooks/useVariantSelection.js +44 -0
- package/dist/index.d.ts +105 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +110 -0
- package/dist/index.umd.js +1 -0
- package/dist/src/index.d.ts +4469 -0
- package/dist/src/index.esm.js +18952 -0
- package/dist/src/index.esm.js.map +1 -0
- package/dist/src/index.js +19086 -0
- package/dist/src/index.js.map +1 -0
- package/dist/themes/createTheme.d.ts +8 -0
- package/dist/themes/createTheme.d.ts.map +1 -0
- package/dist/themes/createTheme.js +10 -0
- package/dist/themes/dark.d.ts +6 -0
- package/dist/themes/dark.d.ts.map +1 -0
- package/dist/themes/dark.js +34 -0
- package/dist/themes/default.d.ts +6 -0
- package/dist/themes/default.d.ts.map +1 -0
- package/dist/themes/default.js +71 -0
- package/dist/themes/mergeThemes.d.ts +7 -0
- package/dist/themes/mergeThemes.d.ts.map +1 -0
- package/dist/themes/mergeThemes.js +6 -0
- package/dist/themes/minimal.d.ts +6 -0
- package/dist/themes/minimal.d.ts.map +1 -0
- package/dist/themes/minimal.js +34 -0
- package/dist/themes/suggestions.d.ts +216 -0
- package/dist/themes/suggestions.d.ts.map +1 -0
- package/dist/themes/suggestions.js +546 -0
- package/dist/themes/types.d.ts +7 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/themes/types.js +6 -0
- package/dist/types/index.d.ts +33 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/utils/responsive.d.ts +130 -0
- package/dist/utils/responsive.d.ts.map +1 -0
- package/dist/utils/responsive.js +225 -0
- package/package.json +68 -0
- package/src/docsearch/docsearch.css +234 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../core/dist/index.esm.js","../../src/themes/default.ts","../../src/themes/createTheme.ts","../../src/components/SearchProvider.tsx","../../src/hooks/useSearchState.ts","../../src/hooks/useQuerySuggestions.ts","../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../src/components/SearchBar.tsx","../../src/components/SearchResults.tsx","../../src/components/Stats.tsx","../../src/utils/responsive.ts","../../src/components/Pagination.tsx","../../src/components/primitives/CustomSelect.tsx","../../src/components/SortBy.tsx","../../src/hooks/useFilters.ts","../../src/components/RangeSlider.tsx","../../src/components/Facets.tsx","../../src/components/FacetDropdown.tsx","../../src/components/CurrentRefinements.tsx","../../src/components/ClearRefinements.tsx","../../src/components/SearchLayout.tsx","../../src/components/RangeInput.tsx","../../src/components/HitsPerPage.tsx","../../src/components/InfiniteHits.tsx","../../src/components/Highlight.tsx","../../src/components/HierarchicalMenu.tsx","../../src/components/Breadcrumb.tsx","../../src/components/MobileFilters.tsx","../../src/components/Recommendations.tsx","../../src/components/QuerySuggestions.tsx","../../src/hooks/useQuerySuggestionsEnhanced.ts","../../src/components/QuerySuggestionsDropdown.tsx","../../src/components/RichQuerySuggestions.tsx","../../src/components/FederatedDropdown.tsx","../../src/hooks/useSuggestionsAnalytics.ts","../../src/components/SearchBarWithSuggestions.tsx","../../src/components/suggestions-primitives/SuggestionsContext.ts","../../src/components/suggestions-primitives/SuggestionsProvider.tsx","../../src/components/suggestions-primitives/SearchInput.tsx","../../src/components/suggestions-primitives/DropdownPanel.tsx","../../src/components/suggestions-primitives/highlightMarkup.tsx","../../src/components/suggestions-primitives/SuggestionItem.tsx","../../src/components/suggestions-primitives/SuggestionList.tsx","../../src/components/primitives/ImageZoom.tsx","../../src/components/primitives/ImageDisplay.tsx","../../src/components/primitives/ActionButtons.tsx","../../src/components/suggestions-primitives/ItemCard.tsx","../../src/components/suggestions-primitives/ItemGrid.tsx","../../src/components/suggestions/utils.ts","../../src/components/primitives/PriceDisplay.tsx","../../src/components/primitives/BadgeList.tsx","../../src/components/primitives/RatingDisplay.tsx","../../src/components/primitives/VariantSwatches.tsx","../../src/components/suggestions-primitives/ProductCardLayouts.tsx","../../src/components/suggestions-primitives/ProductCard.tsx","../../src/components/suggestions-primitives/ProductGrid.tsx","../../src/components/suggestions-primitives/CategoriesTabs.tsx","../../src/components/suggestions-primitives/RecentSearchesList.tsx","../../src/components/suggestions-primitives/TrendingList.tsx","../../src/components/suggestions-primitives/SuggestionsError.tsx","../../src/components/suggestions-primitives/SuggestionsDropdownComposition.tsx","../../src/components/primitives/VariantSelector.tsx","../../src/components/primitives/withAnalytics.tsx","../../src/components/primitives/AnalyticsProvider.tsx","../../src/components/section-primitives/SectionSearchContext.ts","../../src/components/section-primitives/SectionSearchProvider.tsx","../../src/components/section-primitives/SectionError.tsx","../../src/components/section-primitives/SectionItemGrid.tsx","../../src/components/product-page/ProductGallery.tsx","../../src/components/product-page/ProductInfo.tsx","../../src/components/product-page/ProductRecommendations.tsx","../../src/components/suggestions/styles/responsive.ts","../../src/components/suggestions/styles/index.ts","../../src/components/suggestions/AmazonDropdown.tsx","../../src/components/suggestions/GoogleDropdown.tsx","../../src/components/suggestions/PinterestDropdown.tsx","../../src/components/suggestions/SpotlightDropdown.tsx","../../src/components/suggestions/ShopifyDropdown.tsx","../../src/components/suggestions/MobileSheetDropdown.tsx","../../src/components/suggestions/MinimalDropdown.tsx","../../src/components/suggestions/SuggestionSearchBar.tsx","../../src/components/suggestions/index.ts","../../src/docsearch/components/Modal.tsx","../../src/docsearch/components/SearchBox.tsx","../../src/docsearch/components/Highlight.tsx","../../src/docsearch/components/Hit.tsx","../../src/docsearch/components/Results.tsx","../../src/docsearch/components/Footer.tsx","../../src/docsearch/hooks/useKeyboard.ts","../../src/docsearch/components/DocSearchButton.tsx","../../src/docsearch/hooks/useDocSearch.ts","../../src/docsearch/hooks/useSeekoraSearch.ts","../../src/docsearch/components/DocSearch.tsx","../../src/hooks/useSeekoraSearch.ts","../../src/hooks/useAnalytics.ts","../../src/hooks/useSmartSuggestions.ts","../../src/hooks/useNaturalLanguageFilters.ts","../../src/hooks/useVariantSelection.ts","../../src/hooks/useProductAnalytics.ts","../../src/themes/dark.ts","../../src/themes/minimal.ts","../../src/themes/suggestions.ts"],"sourcesContent":["/**\n * Field Mapping Utilities\n *\n * Shared utilities for extracting and mapping fields from API responses\n */\n/**\n * Get nested value from object using dot notation path\n */\nconst getNestedValue$1 = (obj, path) => {\n if (!path)\n return undefined;\n return path.split('.').reduce((current, key) => current?.[key], obj);\n};\n/**\n * Format price value with currency\n */\nconst formatPrice = (value, currency = '₹') => {\n if (value === undefined || value === null)\n return undefined;\n if (typeof value === 'number')\n return `${currency}${value}`;\n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num))\n return `${currency}${num}`;\n return value;\n }\n return String(value);\n};\n/**\n * Extract field value using dot notation path\n */\nconst extractField = (item, path) => {\n if (!path)\n return undefined;\n return getNestedValue$1(item, path);\n};\n\n/**\n * Theme Management Utilities\n *\n * Shared theme utilities for creating and merging themes\n */\n/**\n * Create a complete theme from a partial theme configuration\n */\nconst createTheme = (config, baseTheme) => {\n return {\n colors: {\n ...baseTheme.colors,\n ...config.colors,\n },\n typography: {\n ...baseTheme.typography,\n ...config.typography,\n fontSize: {\n ...baseTheme.typography.fontSize,\n ...config.typography?.fontSize,\n },\n },\n spacing: {\n ...baseTheme.spacing,\n ...config.spacing,\n },\n borderRadius: (config.borderRadius ?? baseTheme.borderRadius),\n shadows: {\n ...baseTheme.shadows,\n ...config.shadows,\n },\n transitions: {\n ...baseTheme.transitions,\n ...config.transitions,\n },\n breakpoints: {\n ...baseTheme.breakpoints,\n ...config.breakpoints,\n },\n zIndex: {\n ...baseTheme.zIndex,\n ...config.zIndex,\n },\n };\n};\n/**\n * Merge multiple themes together\n */\nconst mergeThemes = (baseTheme, ...themes) => {\n return themes.reduce((acc, theme) => {\n return {\n colors: { ...acc.colors, ...theme.colors },\n typography: {\n ...acc.typography,\n ...theme.typography,\n fontSize: {\n ...acc.typography?.fontSize,\n ...theme.typography?.fontSize,\n },\n },\n spacing: { ...acc.spacing, ...theme.spacing },\n borderRadius: (theme.borderRadius ?? acc.borderRadius),\n shadows: { ...acc.shadows, ...theme.shadows },\n transitions: { ...acc.transitions, ...theme.transitions },\n breakpoints: { ...acc.breakpoints, ...theme.breakpoints },\n zIndex: { ...acc.zIndex, ...theme.zIndex },\n };\n }, baseTheme);\n};\n\n/**\n * CSS Variables Theme System\n *\n * Generates CSS variables from theme configuration\n * Provides utilities for injecting and managing CSS themes\n */\n/**\n * Convert a theme object to CSS variables\n */\nfunction themeToCSSVariables(theme, config = {}) {\n const { scope = ':root', prefix = '--seekora' } = config;\n const variables = [];\n // Colors\n Object.entries(theme.colors).forEach(([key, value]) => {\n variables.push(`${prefix}-color-${key}: ${value};`);\n });\n // Typography\n variables.push(`${prefix}-font-family: ${theme.typography.fontFamily};`);\n Object.entries(theme.typography.fontSize).forEach(([key, value]) => {\n variables.push(`${prefix}-font-size-${key}: ${value};`);\n });\n if (theme.typography.fontWeight) {\n Object.entries(theme.typography.fontWeight).forEach(([key, value]) => {\n variables.push(`${prefix}-font-weight-${key}: ${value};`);\n });\n }\n if (theme.typography.lineHeight) {\n Object.entries(theme.typography.lineHeight).forEach(([key, value]) => {\n variables.push(`${prefix}-line-height-${key}: ${value};`);\n });\n }\n // Spacing\n Object.entries(theme.spacing).forEach(([key, value]) => {\n variables.push(`${prefix}-spacing-${key}: ${value};`);\n });\n // Border Radius\n if (typeof theme.borderRadius === 'string') {\n variables.push(`${prefix}-border-radius: ${theme.borderRadius};`);\n }\n else {\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n variables.push(`${prefix}-border-radius-${key}: ${value};`);\n });\n }\n // Shadows\n if (theme.shadows) {\n Object.entries(theme.shadows).forEach(([key, value]) => {\n variables.push(`${prefix}-shadow-${key}: ${value};`);\n });\n }\n // Transitions\n if (theme.transitions) {\n Object.entries(theme.transitions).forEach(([key, value]) => {\n variables.push(`${prefix}-transition-${key}: ${value};`);\n });\n }\n // Z-Index\n if (theme.zIndex) {\n Object.entries(theme.zIndex).forEach(([key, value]) => {\n variables.push(`${prefix}-z-index-${key}: ${value};`);\n });\n }\n return `${scope} {\\n ${variables.join('\\n ')}\\n}`;\n}\n/**\n * Generate complete CSS stylesheet with variables and optional component classes\n */\nfunction generateThemeStylesheet(theme, config = {}) {\n const { prefix = '--seekora', includeClasses = true } = config;\n const sections = [];\n // CSS Variables\n sections.push(themeToCSSVariables(theme, config));\n // Component classes (BEM naming convention)\n if (includeClasses) {\n sections.push(generateComponentClasses(prefix));\n }\n return sections.join('\\n\\n');\n}\n/**\n * Generate BEM-style component classes\n */\nfunction generateComponentClasses(prefix) {\n return `\n/* Seekora UI SDK Component Classes */\n\n/* Search Bar */\n.seekora-search-bar {\n position: relative;\n display: flex;\n align-items: center;\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-search-bar--focused {\n border-color: var(${prefix}-color-primary);\n box-shadow: 0 0 0 2px var(${prefix}-color-focus);\n}\n\n.seekora-search-bar__input {\n flex: 1;\n padding: var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n font-family: var(${prefix}-font-family);\n color: var(${prefix}-color-text);\n background: transparent;\n border: none;\n outline: none;\n}\n\n.seekora-search-bar__input::placeholder {\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-search-bar__button {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-search-bar__button:hover {\n background-color: var(${prefix}-color-hover);\n}\n\n/* Search Results */\n.seekora-results {\n background-color: var(${prefix}-color-background);\n}\n\n.seekora-results__list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.seekora-results__item {\n display: flex;\n gap: var(${prefix}-spacing-medium);\n padding: var(${prefix}-spacing-medium);\n border-bottom: 1px solid var(${prefix}-color-border);\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-results__item:hover {\n background-color: var(${prefix}-color-hover);\n}\n\n.seekora-results__item--active {\n background-color: var(${prefix}-color-hover);\n}\n\n.seekora-results__image {\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: var(${prefix}-border-radius-small, var(${prefix}-border-radius));\n}\n\n.seekora-results__content {\n flex: 1;\n}\n\n.seekora-results__title {\n margin: 0 0 var(${prefix}-spacing-small) 0;\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n.seekora-results__description {\n margin: 0;\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n line-height: var(${prefix}-line-height-normal, 1.5);\n}\n\n.seekora-results__price {\n margin-top: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-bold, 700);\n color: var(${prefix}-color-primary);\n}\n\n.seekora-results__empty {\n padding: var(${prefix}-spacing-large);\n text-align: center;\n color: var(${prefix}-color-textSecondary);\n}\n\n/* Pagination */\n.seekora-pagination {\n display: flex;\n justify-content: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-medium) 0;\n}\n\n.seekora-pagination__item {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-small, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-pagination__item:hover:not(.seekora-pagination__item--disabled) {\n background-color: var(${prefix}-color-hover);\n border-color: var(${prefix}-color-primary);\n}\n\n.seekora-pagination__item--active {\n background-color: var(${prefix}-color-primary);\n border-color: var(${prefix}-color-primary);\n color: #ffffff;\n}\n\n.seekora-pagination__item--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Facets */\n.seekora-facets {\n font-family: var(${prefix}-font-family);\n}\n\n.seekora-facets__facet {\n margin-bottom: var(${prefix}-spacing-large);\n}\n\n.seekora-facets__title {\n margin: 0 0 var(${prefix}-spacing-small) 0;\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n.seekora-facets__list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.seekora-facets__item {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-small) 0;\n cursor: pointer;\n}\n\n.seekora-facets__checkbox {\n width: 18px;\n height: 18px;\n accent-color: var(${prefix}-color-primary);\n}\n\n.seekora-facets__label {\n flex: 1;\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-text);\n}\n\n.seekora-facets__count {\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-facets__show-more {\n margin-top: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-primary);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/* Stats */\n.seekora-stats {\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-stats__count {\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n/* Sort By */\n.seekora-sort-by {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-sort-by__label {\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n}\n\n.seekora-sort-by__select {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n outline: none;\n}\n\n/* Current Refinements */\n.seekora-refinements {\n display: flex;\n flex-wrap: wrap;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-refinements__item {\n display: inline-flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-small);\n background-color: var(${prefix}-color-hover);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-full, 9999px);\n}\n\n.seekora-refinements__label {\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: var(${prefix}-color-text);\n}\n\n.seekora-refinements__value {\n color: var(${prefix}-color-text);\n}\n\n.seekora-refinements__clear {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n font-size: 14px;\n color: var(${prefix}-color-textSecondary);\n background: none;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-refinements__clear:hover {\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-border);\n}\n\n.seekora-refinements__clear-all {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-primary);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/* Range Input */\n.seekora-range-input {\n font-family: var(${prefix}-font-family);\n}\n\n.seekora-range-input__label {\n display: block;\n margin-bottom: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: var(${prefix}-color-text);\n}\n\n.seekora-range-input__group {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-range-input__input {\n flex: 1;\n padding: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n outline: none;\n}\n\n.seekora-range-input__separator {\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-range-input__button {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n}\n\n/* Highlight */\n.seekora-highlight mark,\n.seekora-highlight__highlighted {\n background-color: var(${prefix}-color-warning, #fff59d);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n padding: 0 2px;\n border-radius: 2px;\n}\n\n/* Infinite Hits */\n.seekora-infinite-hits__show-more {\n display: block;\n width: 100%;\n padding: var(${prefix}-spacing-medium);\n margin-top: var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-infinite-hits__show-more:disabled {\n background-color: var(${prefix}-color-hover);\n color: var(${prefix}-color-textSecondary);\n cursor: not-allowed;\n}\n`;\n}\n/**\n * Theme presets\n */\nconst lightThemeVariables = `\n:root, [data-seekora-theme=\"light\"] {\n --seekora-color-primary: #0066cc;\n --seekora-color-secondary: #6c757d;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #f8f9fa;\n --seekora-color-text: #212529;\n --seekora-color-textSecondary: #6c757d;\n --seekora-color-border: #dee2e6;\n --seekora-color-hover: #f1f3f5;\n --seekora-color-focus: rgba(0, 102, 204, 0.25);\n --seekora-color-error: #dc3545;\n --seekora-color-success: #28a745;\n --seekora-color-warning: #ffc107;\n \n --seekora-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n --seekora-font-size-small: 0.875rem;\n --seekora-font-size-medium: 1rem;\n --seekora-font-size-large: 1.25rem;\n --seekora-font-weight-normal: 400;\n --seekora-font-weight-medium: 500;\n --seekora-font-weight-semibold: 600;\n --seekora-font-weight-bold: 700;\n --seekora-line-height-tight: 1.25;\n --seekora-line-height-normal: 1.5;\n --seekora-line-height-relaxed: 1.75;\n \n --seekora-spacing-small: 0.5rem;\n --seekora-spacing-medium: 1rem;\n --seekora-spacing-large: 1.5rem;\n \n --seekora-border-radius: 4px;\n --seekora-border-radius-none: 0;\n --seekora-border-radius-small: 2px;\n --seekora-border-radius-medium: 4px;\n --seekora-border-radius-large: 8px;\n --seekora-border-radius-full: 9999px;\n \n --seekora-shadow-small: 0 1px 2px rgba(0, 0, 0, 0.05);\n --seekora-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.1);\n --seekora-shadow-large: 0 10px 15px rgba(0, 0, 0, 0.1);\n \n --seekora-transition-fast: 150ms ease-in-out;\n --seekora-transition-normal: 300ms ease-in-out;\n --seekora-transition-slow: 500ms ease-in-out;\n \n --seekora-z-index-dropdown: 1000;\n --seekora-z-index-modal: 1050;\n --seekora-z-index-tooltip: 1100;\n}\n`;\nconst darkThemeVariables = `\n[data-seekora-theme=\"dark\"] {\n --seekora-color-primary: #4da6ff;\n --seekora-color-secondary: #adb5bd;\n --seekora-color-background: #1a1a1a;\n --seekora-color-surface: #2d2d2d;\n --seekora-color-text: #f8f9fa;\n --seekora-color-textSecondary: #adb5bd;\n --seekora-color-border: #495057;\n --seekora-color-hover: #343a40;\n --seekora-color-focus: rgba(77, 166, 255, 0.25);\n --seekora-color-error: #f87171;\n --seekora-color-success: #4ade80;\n --seekora-color-warning: #fbbf24;\n \n --seekora-shadow-small: 0 1px 2px rgba(0, 0, 0, 0.3);\n --seekora-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.4);\n --seekora-shadow-large: 0 10px 15px rgba(0, 0, 0, 0.5);\n}\n`;\nconst minimalThemeVariables = `\n[data-seekora-theme=\"minimal\"] {\n --seekora-color-primary: #000000;\n --seekora-color-secondary: #666666;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #fafafa;\n --seekora-color-text: #000000;\n --seekora-color-textSecondary: #666666;\n --seekora-color-border: #e5e5e5;\n --seekora-color-hover: #f5f5f5;\n --seekora-color-focus: rgba(0, 0, 0, 0.1);\n \n --seekora-border-radius: 0;\n --seekora-border-radius-none: 0;\n --seekora-border-radius-small: 0;\n --seekora-border-radius-medium: 0;\n --seekora-border-radius-large: 0;\n --seekora-border-radius-full: 0;\n \n --seekora-shadow-small: none;\n --seekora-shadow-medium: none;\n --seekora-shadow-large: none;\n}\n`;\nconst highContrastThemeVariables = `\n[data-seekora-theme=\"high-contrast\"] {\n --seekora-color-primary: #0000ff;\n --seekora-color-secondary: #000000;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #ffffff;\n --seekora-color-text: #000000;\n --seekora-color-textSecondary: #000000;\n --seekora-color-border: #000000;\n --seekora-color-hover: #ffff00;\n --seekora-color-focus: #0000ff;\n --seekora-color-error: #ff0000;\n --seekora-color-success: #008000;\n --seekora-color-warning: #ffff00;\n \n --seekora-font-weight-normal: 500;\n --seekora-font-weight-medium: 600;\n --seekora-font-weight-semibold: 700;\n --seekora-font-weight-bold: 900;\n}\n`;\n/**\n * Complete stylesheet with all presets and component classes\n */\nfunction generateCompleteStylesheet() {\n return `\n/* Seekora UI SDK Styles */\n/* Generated CSS Variables and Component Classes */\n\n${lightThemeVariables}\n\n${darkThemeVariables}\n\n${minimalThemeVariables}\n\n${highContrastThemeVariables}\n\n${generateComponentClasses('--seekora')}\n`;\n}\n/**\n * Inject styles into the document head\n */\nfunction injectStyles(css, id = 'seekora-theme') {\n if (typeof document === 'undefined')\n return;\n // Remove existing style if present\n const existing = document.getElementById(id);\n if (existing) {\n existing.remove();\n }\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n/**\n * Set the active theme\n */\nfunction setTheme(themeName) {\n if (typeof document === 'undefined')\n return;\n document.documentElement.setAttribute('data-seekora-theme', themeName);\n}\n/**\n * Get the current theme\n */\nfunction getTheme() {\n if (typeof document === 'undefined')\n return 'light';\n return document.documentElement.getAttribute('data-seekora-theme') || 'light';\n}\n\n/**\n * Logger utility for Seekora UI SDK\n *\n * Provides structured logging with different log levels:\n * - verbose: Detailed debugging information\n * - info: General informational messages\n * - warn: Warning messages for potential issues\n * - error: Error messages for failures\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"VERBOSE\"] = 0] = \"VERBOSE\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"SILENT\"] = 4] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nclass Logger {\n constructor(config = {}) {\n this.level = config.level ?? this.getDefaultLevel();\n this.prefix = config.prefix ?? '[Seekora UI SDK]';\n this.enableTimestamp = config.enableTimestamp ?? false;\n }\n getDefaultLevel() {\n // Check for environment variable or default to INFO\n if (({})) {\n const envLevel = undefined?.toUpperCase();\n switch (envLevel) {\n case 'VERBOSE':\n return LogLevel.VERBOSE;\n case 'INFO':\n return LogLevel.INFO;\n case 'WARN':\n return LogLevel.WARN;\n case 'ERROR':\n return LogLevel.ERROR;\n case 'SILENT':\n return LogLevel.SILENT;\n }\n }\n // Default to INFO in production, VERBOSE in development\n if (typeof window !== 'undefined' && window.__SEEKORA_DEBUG__) {\n return LogLevel.VERBOSE;\n }\n return LogLevel.INFO;\n }\n formatMessage(level, ...args) {\n const parts = [];\n if (this.enableTimestamp) {\n parts.push(`[${new Date().toISOString()}]`);\n }\n parts.push(this.prefix, `[${level}]`);\n return [...parts, ...args];\n }\n verbose(...args) {\n if (this.level <= LogLevel.VERBOSE) {\n console.log(...this.formatMessage('VERBOSE', ...args));\n }\n }\n info(...args) {\n if (this.level <= LogLevel.INFO) {\n console.info(...this.formatMessage('INFO', ...args));\n }\n }\n warn(...args) {\n if (this.level <= LogLevel.WARN) {\n console.warn(...this.formatMessage('WARN', ...args));\n }\n }\n error(...args) {\n if (this.level <= LogLevel.ERROR) {\n console.error(...this.formatMessage('ERROR', ...args));\n }\n }\n setLevel(level) {\n this.level = level;\n }\n getLevel() {\n return this.level;\n }\n setPrefix(prefix) {\n this.prefix = prefix;\n }\n setTimestamp(enabled) {\n this.enableTimestamp = enabled;\n }\n}\n// Create default logger instance\nlet defaultLogger = null;\nfunction createLogger(config = {}) {\n return new Logger(config);\n}\nfunction getLogger() {\n if (!defaultLogger) {\n defaultLogger = createLogger();\n }\n return defaultLogger;\n}\nfunction setDefaultLogger(logger) {\n defaultLogger = logger;\n}\nfunction setLogLevel(level) {\n getLogger().setLevel(level);\n}\nfunction setLogPrefix(prefix) {\n getLogger().setPrefix(prefix);\n}\nfunction setLogTimestamp(enabled) {\n getLogger().setTimestamp(enabled);\n}\n// Convenience functions that use the default logger\nconst log = {\n verbose: (...args) => getLogger().verbose(...args),\n info: (...args) => getLogger().info(...args),\n warn: (...args) => getLogger().warn(...args),\n error: (...args) => getLogger().error(...args),\n};\n// Export default logger instance\ngetLogger();\n\n/**\n * Highlight Utilities\n *\n * Core utilities for highlighting matching terms in search results\n * Framework-agnostic functions shared across all packages\n */\n/**\n * Get highlighted value from a hit\n * Looks for _highlightResult or highlight_result field\n */\nfunction getHighlightedValue(options) {\n const { attribute, hit, preTag = '<mark>', postTag = '</mark>', fallback, } = options;\n // Check for various highlight result formats\n const highlightResult = hit._highlightResult?.[attribute]?.value ||\n hit.highlight_result?.[attribute]?.value ||\n hit._highlight?.[attribute] ||\n hit.highlight?.[attribute];\n if (highlightResult) {\n // Replace highlight markers with custom tags\n return highlightResult\n .replace(/<em>/g, preTag)\n .replace(/<\\/em>/g, postTag)\n .replace(/<mark>/g, preTag)\n .replace(/<\\/mark>/g, postTag);\n }\n // Fall back to plain attribute value\n const plainValue = getNestedValue(hit, attribute);\n return plainValue !== undefined ? String(plainValue) : (fallback || '');\n}\n/**\n * Get snippet (truncated highlighted value) from a hit\n */\nfunction getSnippetedValue(options) {\n const { attribute, hit, preTag = '<mark>', postTag = '</mark>', fallback, maxLength = 100, ellipsis = '...', } = options;\n // Check for snippet result\n const snippetResult = hit._snippetResult?.[attribute]?.value ||\n hit.snippet_result?.[attribute]?.value ||\n hit._snippet?.[attribute] ||\n hit.snippet?.[attribute];\n let text = '';\n if (snippetResult) {\n text = snippetResult\n .replace(/<em>/g, preTag)\n .replace(/<\\/em>/g, postTag)\n .replace(/<mark>/g, preTag)\n .replace(/<\\/mark>/g, postTag);\n }\n else {\n // Fall back to highlighted or plain value\n text = getHighlightedValue(options);\n }\n // Truncate if needed\n if (text.length > maxLength) {\n // Try to truncate at word boundary\n const truncated = text.substring(0, maxLength);\n const lastSpace = truncated.lastIndexOf(' ');\n if (lastSpace > maxLength * 0.7) {\n return truncated.substring(0, lastSpace) + ellipsis;\n }\n return truncated + ellipsis;\n }\n return text;\n}\n/**\n * Parse highlighted value into parts for custom rendering\n */\nfunction parseHighlightedParts(highlightedValue, preTag = '<mark>', postTag = '</mark>') {\n const parts = [];\n let remaining = highlightedValue;\n while (remaining.length > 0) {\n const startIdx = remaining.indexOf(preTag);\n if (startIdx === -1) {\n // No more highlights, add remaining as non-highlighted\n if (remaining.length > 0) {\n parts.push({ value: remaining, isHighlighted: false });\n }\n break;\n }\n // Add text before highlight\n if (startIdx > 0) {\n parts.push({ value: remaining.substring(0, startIdx), isHighlighted: false });\n }\n // Find end of highlight\n const afterPreTag = remaining.substring(startIdx + preTag.length);\n const endIdx = afterPreTag.indexOf(postTag);\n if (endIdx === -1) {\n // Malformed, add rest as non-highlighted\n parts.push({ value: remaining.substring(startIdx), isHighlighted: false });\n break;\n }\n // Add highlighted part\n parts.push({ value: afterPreTag.substring(0, endIdx), isHighlighted: true });\n // Continue with rest\n remaining = afterPreTag.substring(endIdx + postTag.length);\n }\n return parts;\n}\n/**\n * Highlight a query in text (client-side highlighting)\n * Useful when server doesn't provide highlight data\n */\nfunction highlightQuery(text, query, options = {}) {\n const { preTag = '<mark>', postTag = '</mark>', caseSensitive = false } = options;\n if (!query || !text)\n return text;\n const flags = caseSensitive ? 'g' : 'gi';\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, flags);\n return text.replace(regex, `${preTag}$1${postTag}`);\n}\n/**\n * Parse query-highlighted text into parts\n */\nfunction parseQueryHighlightParts(text, query, caseSensitive = false) {\n if (!query || !text) {\n return [{ value: text, isHighlighted: false }];\n }\n const parts = [];\n const flags = caseSensitive ? 'g' : 'gi';\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedQuery, flags);\n let lastIndex = 0;\n let match;\n while ((match = regex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n parts.push({ value: text.substring(lastIndex, match.index), isHighlighted: false });\n }\n // Add highlighted match\n parts.push({ value: match[0], isHighlighted: true });\n lastIndex = regex.lastIndex;\n }\n // Add remaining text\n if (lastIndex < text.length) {\n parts.push({ value: text.substring(lastIndex), isHighlighted: false });\n }\n return parts.length > 0 ? parts : [{ value: text, isHighlighted: false }];\n}\n/**\n * Get nested value from object using dot notation\n */\nfunction getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n}\n/**\n * Strip HTML tags from highlighted text\n */\nfunction stripHighlightTags(text) {\n return text\n .replace(/<mark>/g, '')\n .replace(/<\\/mark>/g, '')\n .replace(/<em>/g, '')\n .replace(/<\\/em>/g, '');\n}\n\n/**\n * Accessibility Utilities\n *\n * Shared accessibility helpers for keyboard navigation, focus management,\n * screen reader announcements, and ARIA attributes.\n */\n// ============================================================================\n// Screen Reader Announcements (Live Regions)\n// ============================================================================\nlet announcer = null;\n/**\n * Create or get the screen reader announcer element\n */\nfunction getAnnouncer() {\n if (announcer)\n return announcer;\n if (typeof document === 'undefined') {\n throw new Error('Cannot create announcer: document is undefined');\n }\n announcer = document.createElement('div');\n announcer.id = 'seekora-announcer';\n announcer.setAttribute('role', 'status');\n announcer.setAttribute('aria-live', 'polite');\n announcer.setAttribute('aria-atomic', 'true');\n announcer.style.cssText = `\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n `;\n document.body.appendChild(announcer);\n return announcer;\n}\n/**\n * Announce a message to screen readers\n */\nfunction announce(message, priority = 'polite') {\n if (typeof document === 'undefined')\n return;\n try {\n const el = getAnnouncer();\n el.setAttribute('aria-live', priority);\n // Clear and set message (needs a brief delay to trigger announcement)\n el.textContent = '';\n setTimeout(() => {\n el.textContent = message;\n }, 50);\n }\n catch (e) {\n // Ignore errors in SSR\n }\n}\n/**\n * Announce search results count\n */\nfunction announceResults(count, query) {\n let message = '';\n if (count === 0) {\n message = query\n ? `No results found for \"${query}\"`\n : 'No results found';\n }\n else if (count === 1) {\n message = query\n ? `1 result found for \"${query}\"`\n : '1 result found';\n }\n else {\n message = query\n ? `${count} results found for \"${query}\"`\n : `${count} results found`;\n }\n announce(message);\n}\n/**\n * Announce filter changes\n */\nfunction announceFilterChange(action, filterName, filterValue) {\n let message = '';\n switch (action) {\n case 'added':\n message = `Filter ${filterName}: ${filterValue} applied`;\n break;\n case 'removed':\n message = `Filter ${filterName}: ${filterValue} removed`;\n break;\n case 'cleared':\n message = 'All filters cleared';\n break;\n }\n announce(message);\n}\n/**\n * Handle keyboard navigation for a list of items\n */\nfunction handleKeyboardNavigation(event, options) {\n const { items, activeIndex, onActiveChange, onSelect, onCancel, wrap = true, orientation = 'vertical', } = options;\n const itemCount = items.length;\n if (itemCount === 0)\n return false;\n let handled = false;\n let newIndex = activeIndex;\n switch (event.key) {\n case 'ArrowDown':\n if (orientation === 'vertical' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex < itemCount - 1) {\n newIndex = activeIndex + 1;\n }\n else if (wrap) {\n newIndex = 0;\n }\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex > 0) {\n newIndex = activeIndex - 1;\n }\n else if (wrap) {\n newIndex = itemCount - 1;\n }\n handled = true;\n }\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex < itemCount - 1) {\n newIndex = activeIndex + 1;\n }\n else if (wrap) {\n newIndex = 0;\n }\n handled = true;\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex > 0) {\n newIndex = activeIndex - 1;\n }\n else if (wrap) {\n newIndex = itemCount - 1;\n }\n handled = true;\n }\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n handled = true;\n break;\n case 'End':\n event.preventDefault();\n newIndex = itemCount - 1;\n handled = true;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (activeIndex >= 0 && onSelect) {\n onSelect(activeIndex);\n }\n handled = true;\n break;\n case 'Escape':\n if (onCancel) {\n event.preventDefault();\n onCancel();\n handled = true;\n }\n break;\n }\n if (newIndex !== activeIndex && newIndex >= 0 && newIndex < itemCount) {\n onActiveChange(newIndex);\n // Focus the new item\n const item = items[newIndex];\n if (item) {\n item.focus();\n }\n }\n return handled;\n}\n/**\n * Create a roving tabindex manager for accessible list navigation\n */\nfunction createRovingTabIndex(container, selector) {\n const items = Array.from(container.querySelectorAll(selector));\n // Initialize: first item gets tabindex 0, others get -1\n items.forEach((item, index) => {\n item.setAttribute('tabindex', index === 0 ? '0' : '-1');\n });\n return {\n update: (activeIndex) => {\n items.forEach((item, index) => {\n item.setAttribute('tabindex', index === activeIndex ? '0' : '-1');\n });\n },\n destroy: () => {\n items.forEach(item => {\n item.removeAttribute('tabindex');\n });\n },\n };\n}\n// ============================================================================\n// Focus Management\n// ============================================================================\n/**\n * Get all focusable elements within a container\n */\nfunction getFocusableElements(container) {\n const selector = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n return Array.from(container.querySelectorAll(selector));\n}\n/**\n * Create a focus trap within a container (for modals/dialogs)\n */\nfunction createFocusTrap(container) {\n let previouslyFocused = null;\n let handleKeyDown = null;\n return {\n activate: () => {\n previouslyFocused = document.activeElement;\n const focusable = getFocusableElements(container);\n if (focusable.length === 0)\n return;\n const firstFocusable = focusable[0];\n const lastFocusable = focusable[focusable.length - 1];\n handleKeyDown = (e) => {\n if (e.key !== 'Tab')\n return;\n if (e.shiftKey) {\n if (document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n }\n }\n else {\n if (document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n firstFocusable.focus();\n },\n deactivate: () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n handleKeyDown = null;\n }\n if (previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n },\n };\n}\n/**\n * Focus first error or first input in a form\n */\nfunction focusFirstError(container) {\n const error = container.querySelector('[aria-invalid=\"true\"]');\n if (error) {\n error.focus();\n return true;\n }\n return false;\n}\n// ============================================================================\n// ARIA Helpers\n// ============================================================================\n/**\n * Generate a unique ID for ARIA relationships\n */\nlet idCounter = 0;\nfunction generateId(prefix = 'seekora') {\n return `${prefix}-${++idCounter}`;\n}\n/**\n * Set up ARIA describedby relationship\n */\nfunction setAriaDescribedBy(element, describer) {\n const id = describer.id || generateId('description');\n describer.id = id;\n const existing = element.getAttribute('aria-describedby');\n const newValue = existing ? `${existing} ${id}` : id;\n element.setAttribute('aria-describedby', newValue);\n return () => {\n const current = element.getAttribute('aria-describedby');\n if (current) {\n const ids = current.split(' ').filter(i => i !== id);\n if (ids.length > 0) {\n element.setAttribute('aria-describedby', ids.join(' '));\n }\n else {\n element.removeAttribute('aria-describedby');\n }\n }\n };\n}\n/**\n * Check if user prefers reduced motion\n */\nfunction prefersReducedMotion() {\n if (typeof window === 'undefined')\n return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n/**\n * Check if user prefers high contrast\n */\nfunction prefersHighContrast() {\n if (typeof window === 'undefined')\n return false;\n return window.matchMedia('(prefers-contrast: more)').matches;\n}\n/**\n * Create a keyboard shortcuts manager\n */\nfunction createKeyboardShortcuts(shortcuts) {\n const handleKeyDown = (e) => {\n for (const shortcut of shortcuts) {\n const keyMatches = e.key.toLowerCase() === shortcut.key.toLowerCase();\n const ctrlMatches = !shortcut.ctrl || e.ctrlKey;\n const altMatches = !shortcut.alt || e.altKey;\n const shiftMatches = !shortcut.shift || e.shiftKey;\n const metaMatches = !shortcut.meta || e.metaKey;\n if (keyMatches && ctrlMatches && altMatches && shiftMatches && metaMatches) {\n e.preventDefault();\n shortcut.handler(e);\n break;\n }\n }\n };\n return {\n attach: () => {\n document.addEventListener('keydown', handleKeyDown);\n },\n detach: () => {\n document.removeEventListener('keydown', handleKeyDown);\n },\n getShortcuts: () => [...shortcuts],\n };\n}\n\n/**\n * SearchStateManager\n *\n * Centralized state management for search operations\n * Framework-agnostic core logic shared across all packages\n * Handles query, refinements, pagination, sorting, and automatic search triggering\n * Similar to InstantSearch.js architecture\n */\nclass SearchStateManager {\n constructor(config) {\n this.listeners = [];\n this.debounceTimer = null;\n this.notifyScheduled = false;\n this.searchCoalesceTimer = null;\n this.searchCoalesceResolvers = [];\n this.client = config.client;\n this.autoSearch = config.autoSearch !== false;\n this.debounceMs = config.debounceMs || 300;\n this.defaultSearchOptions = config.defaultSearchOptions || { widget_mode: true };\n this.keepResultsOnClear = config.keepResultsOnClear !== false;\n this.abTestId = config.abTestId;\n this.abVariant = config.abVariant;\n this.state = {\n query: config.initialQuery || '',\n refinements: [],\n currentPage: 1,\n itemsPerPage: config.itemsPerPage || 10,\n sortBy: undefined,\n results: null,\n loading: false,\n error: null,\n };\n log.info('SearchStateManager: Initialized', {\n autoSearch: this.autoSearch,\n debounceMs: this.debounceMs,\n });\n }\n // State getters\n getState() {\n return { ...this.state };\n }\n getQuery() {\n return this.state.query;\n }\n getRefinements() {\n return [...this.state.refinements];\n }\n getCurrentPage() {\n return this.state.currentPage;\n }\n getResults() {\n return this.state.results;\n }\n getLoading() {\n return this.state.loading;\n }\n getError() {\n return this.state.error;\n }\n // State setters (automatically trigger search if autoSearch is enabled)\n setQuery(query, triggerSearch = true) {\n if (this.state.query === query) {\n log.verbose('SearchStateManager: Query unchanged, skipping update', { query });\n // Even if query is the same, trigger search if explicitly requested\n if (triggerSearch && this.autoSearch) {\n log.verbose('SearchStateManager: Query unchanged but triggerSearch=true, triggering search');\n this.debouncedSearch();\n }\n return;\n }\n // When query is cleared to empty and keepResultsOnClear is true,\n // preserve previous results and skip triggering a search\n if (query === '' && this.keepResultsOnClear) {\n log.verbose('SearchStateManager: Query cleared, keeping previous results');\n this.state.query = '';\n this.state.currentPage = 1;\n this.notifyListeners();\n return;\n }\n this.state.query = query;\n this.state.currentPage = 1; // Reset to first page on new query\n log.verbose('SearchStateManager: Query updated', { query, triggerSearch, autoSearch: this.autoSearch });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n log.verbose('SearchStateManager: Triggering debounced search');\n this.debouncedSearch();\n }\n else {\n log.verbose('SearchStateManager: Search not triggered', { autoSearch: this.autoSearch, triggerSearch });\n }\n }\n addRefinement(field, value, triggerSearch = true) {\n // Check if refinement already exists\n const exists = this.state.refinements.some(r => r.field === field && r.value === value);\n if (exists)\n return;\n this.state.refinements.push({ field, value });\n this.state.currentPage = 1; // Reset to first page on filter change\n log.verbose('SearchStateManager: Refinement added', { field, value });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n removeRefinement(field, value, triggerSearch = true) {\n const index = this.state.refinements.findIndex(r => r.field === field && r.value === value);\n if (index === -1)\n return;\n this.state.refinements.splice(index, 1);\n this.state.currentPage = 1; // Reset to first page on filter change\n log.verbose('SearchStateManager: Refinement removed', { field, value });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n clearRefinements(triggerSearch = true) {\n if (this.state.refinements.length === 0)\n return;\n this.state.refinements = [];\n this.state.currentPage = 1;\n log.verbose('SearchStateManager: Refinements cleared');\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n setPage(page, triggerSearch = true) {\n if (this.state.currentPage === page)\n return;\n this.state.currentPage = page;\n log.verbose('SearchStateManager: Page updated', { page });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n setSortBy(sortBy, triggerSearch = true) {\n if (this.state.sortBy === sortBy)\n return;\n this.state.sortBy = sortBy;\n this.state.currentPage = 1; // Reset to first page on sort change\n log.verbose('SearchStateManager: Sort updated', { sortBy });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n setItemsPerPage(itemsPerPage, triggerSearch = true) {\n if (this.state.itemsPerPage === itemsPerPage)\n return;\n this.state.itemsPerPage = itemsPerPage;\n this.state.currentPage = 1; // Reset to first page when changing items per page\n log.verbose('SearchStateManager: Items per page updated', { itemsPerPage });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n // Manual search trigger — coalesces rapid calls within 10ms into a single API request\n async search(additionalOptions) {\n // Clear debounce timer if exists\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n return new Promise((resolve, reject) => {\n this.searchCoalesceResolvers.push({ resolve, reject });\n if (this.searchCoalesceTimer) {\n clearTimeout(this.searchCoalesceTimer);\n }\n this.searchCoalesceTimer = setTimeout(() => {\n this.searchCoalesceTimer = null;\n const resolvers = [...this.searchCoalesceResolvers];\n this.searchCoalesceResolvers = [];\n this._executeSearch(additionalOptions).then((result) => resolvers.forEach(r => r.resolve(result)), (err) => resolvers.forEach(r => r.reject(err)));\n }, 10);\n });\n }\n async _executeSearch(additionalOptions) {\n this.setState({ loading: true, error: null });\n try {\n const searchOptions = this.buildSearchOptions(additionalOptions);\n log.verbose('SearchStateManager: Performing search', {\n query: this.state.query,\n refinementsCount: this.state.refinements.length,\n currentPage: this.state.currentPage,\n sortBy: this.state.sortBy,\n filter_by: searchOptions.filter_by,\n });\n const response = await this.client.search(this.state.query, searchOptions);\n this.setState({\n results: response,\n loading: false,\n error: null,\n });\n log.info('SearchStateManager: Search completed', {\n query: this.state.query,\n resultsCount: response?.results?.length || 0,\n totalResults: response?.totalResults || 0,\n });\n return response;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.setState({\n results: null,\n loading: false,\n error,\n });\n log.error('SearchStateManager: Search failed', {\n query: this.state.query,\n error: error.message,\n });\n return null;\n }\n }\n // Build search options from current state\n buildSearchOptions(additionalOptions) {\n const options = {\n ...this.defaultSearchOptions,\n page: this.state.currentPage,\n per_page: this.state.itemsPerPage,\n ...additionalOptions,\n };\n // Add sort_by if set and not \"relevance\" (relevance is the default, no sort field needed)\n if (this.state.sortBy && this.state.sortBy !== 'relevance') {\n options.sort_by = this.state.sortBy;\n }\n // Build filter_by from refinements\n if (this.state.refinements.length > 0) {\n const filtersByField = {};\n this.state.refinements.forEach((refinement) => {\n if (!filtersByField[refinement.field]) {\n filtersByField[refinement.field] = [];\n }\n filtersByField[refinement.field].push(refinement.value);\n });\n const filterParts = [];\n Object.entries(filtersByField).forEach(([field, values]) => {\n values.forEach((value) => {\n filterParts.push(`${field}:${value}`);\n });\n });\n if (filterParts.length > 0) {\n options.filter_by = filterParts.join(' && ');\n }\n }\n return options;\n }\n // Debounced search trigger\n debouncedSearch() {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n log.verbose('SearchStateManager: Scheduling debounced search', { debounceMs: this.debounceMs });\n this.debounceTimer = setTimeout(() => {\n log.verbose('SearchStateManager: Debounce timer fired, calling search()');\n this.search();\n }, this.debounceMs);\n }\n // Subscribe to state changes\n subscribe(listener) {\n this.listeners.push(listener);\n // Immediately call listener with current state\n listener(this.getState());\n // Return unsubscribe function\n return () => {\n this.listeners = this.listeners.filter(l => l !== listener);\n };\n }\n // Update state and notify listeners\n setState(updates) {\n this.state = { ...this.state, ...updates };\n this.notifyListeners();\n }\n // Notify all listeners of state changes, batched via microtask.\n // Multiple synchronous mutations (e.g. addRefinement + page reset)\n // coalesce into a single listener notification.\n notifyListeners() {\n if (this.notifyScheduled)\n return;\n this.notifyScheduled = true;\n queueMicrotask(() => {\n this.notifyScheduled = false;\n const state = this.getState();\n this.listeners.forEach(listener => {\n try {\n listener(state);\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Error in listener', {\n error: error.message,\n });\n }\n });\n });\n }\n /** Explicitly clear results (bypasses keepResultsOnClear) */\n clearResults() {\n this.setState({ results: null, loading: false, error: null });\n log.verbose('SearchStateManager: Results explicitly cleared');\n }\n // A/B test getters\n getAbTestId() {\n return this.abTestId;\n }\n getAbVariant() {\n return this.abVariant;\n }\n setAbTest(abTestId, abVariant) {\n this.abTestId = abTestId;\n this.abVariant = abVariant;\n log.verbose('SearchStateManager: A/B test updated', { abTestId, abVariant });\n }\n // =========================================================================\n // Filters API\n // =========================================================================\n /** Build filter_by string from current refinements */\n buildFilterString() {\n if (this.state.refinements.length === 0)\n return '';\n const filtersByField = {};\n this.state.refinements.forEach((refinement) => {\n if (!filtersByField[refinement.field]) {\n filtersByField[refinement.field] = [];\n }\n filtersByField[refinement.field].push(refinement.value);\n });\n const filterParts = [];\n Object.entries(filtersByField).forEach(([field, values]) => {\n values.forEach((value) => {\n filterParts.push(`${field}:${value}`);\n });\n });\n return filterParts.join(' && ');\n }\n /** Fetch filter values independently from search */\n async fetchFilters(options) {\n log.verbose('SearchStateManager: Fetching filters', { options });\n try {\n // Do NOT pass refinement-based filters to the Filters API.\n // Facets should be generated from the search query only, not narrowed\n // by active filter selections. This keeps facet options stable when\n // users toggle filters (same behaviour as performSimplifiedFacetSearch\n // in the search API).\n const response = await this.client.getFilters({\n q: this.state.query || undefined,\n ...options,\n });\n log.info('SearchStateManager: Filters fetched', {\n filterCount: response?.filters?.length,\n });\n return response;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Failed to fetch filters', { error: error.message });\n throw error;\n }\n }\n /** Search within a facet's values (for autocomplete in facet search boxes) */\n async searchFacetValues(facetName, query) {\n log.verbose('SearchStateManager: Searching facet values', { facetName, query });\n try {\n const filterString = this.buildFilterString();\n const response = await this.client.searchFacetValues(facetName, {\n q: this.state.query || undefined,\n filter: filterString || undefined,\n facetQuery: query,\n });\n log.info('SearchStateManager: Facet values fetched', {\n facetName,\n valueCount: response?.values?.length,\n });\n return response;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Failed to search facet values', { facetName, error: error.message });\n throw error;\n }\n }\n /** Get filter schema (for UI initialization) */\n async getFiltersSchema() {\n log.verbose('SearchStateManager: Getting filters schema');\n try {\n const response = await this.client.getFiltersSchema();\n log.info('SearchStateManager: Filters schema fetched', {\n fieldCount: response?.fields?.length,\n });\n return response;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Failed to get filters schema', { error: error.message });\n throw error;\n }\n }\n /**\n * Execute multiple search queries in a single request.\n * Each result gets its own SearchContext for independent analytics tracking.\n * Useful for federated search (e.g., products + articles + suggestions in one call).\n *\n * @param queries - Array of 1-10 search queries\n * @returns MultiSearchResponse with per-query results\n */\n async multiSearch(queries) {\n log.verbose('SearchStateManager: Performing multi-search', { queryCount: queries.length });\n try {\n const response = await this.client.multiSearch(queries);\n log.info('SearchStateManager: Multi-search completed', {\n queryCount: queries.length,\n totalResults: response.results.map((r) => r.totalResults),\n });\n return response;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Multi-search failed', { error: error.message });\n throw error;\n }\n }\n // Clear all state\n clear() {\n this.state = {\n query: '',\n refinements: [],\n currentPage: 1,\n itemsPerPage: this.state.itemsPerPage,\n sortBy: undefined,\n results: null,\n loading: false,\n error: null,\n };\n this.notifyListeners();\n }\n}\n\n/**\n * URL Router\n *\n * Syncs search state with browser URL for shareable links and back/forward navigation\n * Framework-agnostic core logic shared across all packages\n */\nclass URLRouter {\n constructor(config) {\n this.unsubscribe = null;\n this.debounceTimer = null;\n this.isUpdatingFromUrl = false;\n /**\n * Handle browser back/forward navigation\n */\n this.handlePopState = () => {\n if (this.readFromUrl) {\n // Clear current refinements first\n this.stateManager.clear();\n this.readStateFromUrl();\n }\n };\n this.stateManager = config.stateManager;\n this.writeToUrl = config.writeToUrl !== false;\n this.readFromUrl = config.readFromUrl !== false;\n this.historyMode = config.historyMode || 'push';\n this.debounceMs = config.debounceMs ?? 400;\n this.basePath = config.basePath || (typeof window !== 'undefined' ? window.location.pathname : '/');\n this.triggerSearchOnChange = config.triggerSearchOnChange !== false;\n this.mapping = {\n query: config.mapping?.query || 'q',\n page: config.mapping?.page || 'page',\n hitsPerPage: config.mapping?.hitsPerPage || 'hitsPerPage',\n sortBy: config.mapping?.sortBy || 'sortBy',\n refinementPrefix: config.mapping?.refinementPrefix || '',\n refinementSerializer: config.mapping?.refinementSerializer,\n refinementDeserializer: config.mapping?.refinementDeserializer,\n };\n // Initialize\n this.init();\n }\n init() {\n if (typeof window === 'undefined') {\n log.warn('URLRouter: Not in browser environment, skipping initialization');\n return;\n }\n // Read initial state from URL\n if (this.readFromUrl) {\n this.readStateFromUrl();\n }\n // Subscribe to state changes\n if (this.writeToUrl) {\n this.unsubscribe = this.stateManager.subscribe((state) => {\n if (!this.isUpdatingFromUrl) {\n this.debouncedWriteToUrl(state);\n }\n });\n }\n // Listen for popstate (back/forward navigation)\n window.addEventListener('popstate', this.handlePopState);\n log.info('URLRouter: Initialized', {\n writeToUrl: this.writeToUrl,\n readFromUrl: this.readFromUrl,\n historyMode: this.historyMode,\n });\n }\n /**\n * Read state from current URL and update StateManager\n */\n readStateFromUrl() {\n const params = new URLSearchParams(window.location.search);\n this.isUpdatingFromUrl = true;\n try {\n // Query\n const query = params.get(this.mapping.query);\n if (query !== null) {\n this.stateManager.setQuery(query, false);\n }\n // Page\n const page = params.get(this.mapping.page);\n if (page !== null) {\n const pageNum = parseInt(page, 10);\n if (!isNaN(pageNum) && pageNum > 0) {\n this.stateManager.setPage(pageNum, false);\n }\n }\n // Hits per page\n const hitsPerPage = params.get(this.mapping.hitsPerPage);\n if (hitsPerPage !== null) {\n const hpp = parseInt(hitsPerPage, 10);\n if (!isNaN(hpp) && hpp > 0) {\n this.stateManager.setItemsPerPage(hpp, false);\n }\n }\n // Sort by\n const sortBy = params.get(this.mapping.sortBy);\n if (sortBy !== null) {\n this.stateManager.setSortBy(sortBy, false);\n }\n // Refinements\n const refinements = this.deserializeRefinements(params);\n refinements.forEach(r => {\n this.stateManager.addRefinement(r.field, r.value, false);\n });\n // Trigger search if there's any state\n if (this.triggerSearchOnChange && (query || refinements.length > 0)) {\n this.stateManager.search();\n }\n log.verbose('URLRouter: Read state from URL', {\n query,\n page,\n refinements: refinements.length,\n });\n }\n finally {\n this.isUpdatingFromUrl = false;\n }\n }\n /**\n * Write state to URL\n */\n writeStateToUrl(state) {\n const params = new URLSearchParams();\n // Query\n if (state.query) {\n params.set(this.mapping.query, state.query);\n }\n // Page (only if not 1)\n if (state.currentPage > 1) {\n params.set(this.mapping.page, state.currentPage.toString());\n }\n // Hits per page (only if not default)\n if (state.itemsPerPage !== 10) {\n params.set(this.mapping.hitsPerPage, state.itemsPerPage.toString());\n }\n // Sort by\n if (state.sortBy && state.sortBy !== 'relevance') {\n params.set(this.mapping.sortBy, state.sortBy);\n }\n // Refinements\n this.serializeRefinements(state.refinements, params);\n // Build URL\n const queryString = params.toString();\n const url = queryString ? `${this.basePath}?${queryString}` : this.basePath;\n // Update URL\n if (this.historyMode === 'push') {\n window.history.pushState({}, '', url);\n }\n else {\n window.history.replaceState({}, '', url);\n }\n log.verbose('URLRouter: Wrote state to URL', { url });\n }\n /**\n * Debounced write to URL\n */\n debouncedWriteToUrl(state) {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n this.writeStateToUrl(state);\n }, this.debounceMs);\n }\n /**\n * Serialize refinements to URL params\n */\n serializeRefinements(refinements, params) {\n if (this.mapping.refinementSerializer) {\n const serialized = this.mapping.refinementSerializer(refinements);\n Object.entries(serialized).forEach(([key, value]) => {\n params.set(key, value);\n });\n return;\n }\n // Default serialization: field[]=value\n const byField = {};\n refinements.forEach(r => {\n const key = this.mapping.refinementPrefix + r.field;\n if (!byField[key]) {\n byField[key] = [];\n }\n byField[key].push(r.value);\n });\n Object.entries(byField).forEach(([field, values]) => {\n values.forEach(value => {\n params.append(field, value);\n });\n });\n }\n /**\n * Deserialize refinements from URL params\n */\n deserializeRefinements(params) {\n if (this.mapping.refinementDeserializer) {\n return this.mapping.refinementDeserializer(params);\n }\n // Default deserialization\n const refinements = [];\n const knownParams = [\n this.mapping.query,\n this.mapping.page,\n this.mapping.hitsPerPage,\n this.mapping.sortBy,\n ];\n params.forEach((value, key) => {\n // Skip known params\n if (knownParams.includes(key))\n return;\n // Remove prefix if present\n const field = this.mapping.refinementPrefix\n ? key.replace(new RegExp(`^${this.mapping.refinementPrefix}`), '')\n : key;\n refinements.push({ field, value });\n });\n return refinements;\n }\n /**\n * Manually update URL from current state\n */\n refresh() {\n if (this.writeToUrl) {\n this.writeStateToUrl(this.stateManager.getState());\n }\n }\n /**\n * Get current URL\n */\n getUrl() {\n if (typeof window === 'undefined')\n return '';\n return window.location.href;\n }\n /**\n * Generate shareable URL from state\n */\n createUrl(state) {\n const currentState = this.stateManager.getState();\n const mergedState = state ? { ...currentState, ...state } : currentState;\n const params = new URLSearchParams();\n if (mergedState.query) {\n params.set(this.mapping.query, mergedState.query);\n }\n if (mergedState.currentPage > 1) {\n params.set(this.mapping.page, mergedState.currentPage.toString());\n }\n if (mergedState.itemsPerPage !== 10) {\n params.set(this.mapping.hitsPerPage, mergedState.itemsPerPage.toString());\n }\n if (mergedState.sortBy && mergedState.sortBy !== 'relevance') {\n params.set(this.mapping.sortBy, mergedState.sortBy);\n }\n this.serializeRefinements(mergedState.refinements, params);\n const queryString = params.toString();\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n return queryString ? `${origin}${this.basePath}?${queryString}` : `${origin}${this.basePath}`;\n }\n /**\n * Destroy the router and cleanup\n */\n destroy() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', this.handlePopState);\n }\n log.info('URLRouter: Destroyed');\n }\n}\n/**\n * Create a URL router instance\n */\nfunction createURLRouter(config) {\n return new URLRouter(config);\n}\n\n/**\n * Seekora Device Fingerprinting Module\n *\n * A lightweight, dependency-free device fingerprinting solution that collects\n * various browser and device signals to generate a unique visitor identifier.\n */\n// ============================================================================\n// MurmurHash3 Implementation (32-bit)\n// ============================================================================\nfunction murmurHash3(str, seed = 0) {\n const remainder = str.length & 3; // str.length % 4\n const bytes = str.length - remainder;\n let h1 = seed;\n const c1 = 0xcc9e2d51;\n const c2 = 0x1b873593;\n let i = 0;\n let k1;\n while (i < bytes) {\n k1 =\n (str.charCodeAt(i) & 0xff) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n ++i;\n k1 = Math.imul(k1, c1);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = Math.imul(k1, c2);\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1 = Math.imul(h1, 5) + 0xe6546b64;\n }\n k1 = 0;\n switch (remainder) {\n case 3:\n k1 ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n // fallthrough\n case 2:\n k1 ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n // fallthrough\n case 1:\n k1 ^= str.charCodeAt(i) & 0xff;\n k1 = Math.imul(k1, c1);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = Math.imul(k1, c2);\n h1 ^= k1;\n }\n h1 ^= str.length;\n h1 ^= h1 >>> 16;\n h1 = Math.imul(h1, 0x85ebca6b);\n h1 ^= h1 >>> 13;\n h1 = Math.imul(h1, 0xc2b2ae35);\n h1 ^= h1 >>> 16;\n return h1 >>> 0;\n}\nfunction murmurHash3Hex(str, seed = 0) {\n return murmurHash3(str, seed).toString(16).padStart(8, '0');\n}\n// ============================================================================\n// Default Configuration\n// ============================================================================\nconst DEFAULT_CONFIG = {\n enableCanvas: true,\n enableWebGL: true,\n enableAudio: true,\n enableFonts: true,\n enableHardware: true,\n timeout: 5000,\n};\n// ============================================================================\n// Font List for Detection\n// ============================================================================\nconst FONTS_TO_CHECK = [\n // Windows fonts\n 'Arial', 'Arial Black', 'Calibri', 'Cambria', 'Comic Sans MS',\n 'Consolas', 'Courier New', 'Georgia', 'Impact', 'Lucida Console',\n 'Lucida Sans Unicode', 'Microsoft Sans Serif', 'Palatino Linotype',\n 'Segoe UI', 'Tahoma', 'Times New Roman', 'Trebuchet MS', 'Verdana',\n // macOS fonts\n 'American Typewriter', 'Andale Mono', 'Apple Chancery', 'Apple Color Emoji',\n 'Apple SD Gothic Neo', 'Arial Hebrew', 'Avenir', 'Baskerville',\n 'Big Caslon', 'Brush Script MT', 'Chalkboard', 'Cochin', 'Copperplate',\n 'Didot', 'Futura', 'Geneva', 'Gill Sans', 'Helvetica', 'Helvetica Neue',\n 'Herculanum', 'Hoefler Text', 'Lucida Grande', 'Marker Felt', 'Menlo',\n 'Monaco', 'Noteworthy', 'Optima', 'Papyrus', 'Phosphate', 'Rockwell',\n 'San Francisco', 'Savoye LET', 'SignPainter', 'Skia', 'Snell Roundhand',\n 'Zapfino',\n // Linux fonts\n 'Cantarell', 'DejaVu Sans', 'DejaVu Sans Mono', 'DejaVu Serif',\n 'Droid Sans', 'Droid Sans Mono', 'Droid Serif', 'FreeMono', 'FreeSans',\n 'FreeSerif', 'Liberation Mono', 'Liberation Sans', 'Liberation Serif',\n 'Noto Sans', 'Noto Serif', 'Open Sans', 'Roboto', 'Ubuntu', 'Ubuntu Mono',\n // Common web fonts\n 'Lato', 'Montserrat', 'Oswald', 'Raleway', 'Source Sans Pro',\n 'PT Sans', 'Merriweather', 'Nunito', 'Playfair Display', 'Poppins',\n];\n// ============================================================================\n// Fingerprint Class\n// ============================================================================\nclass Fingerprint {\n constructor(config) {\n this.cachedResult = null;\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n /**\n * Get the complete fingerprint result\n */\n async get() {\n if (this.cachedResult) {\n return this.cachedResult;\n }\n const components = await this.collectComponents();\n const confidence = this.calculateConfidence(components);\n const visitorId = this.generateVisitorId(components);\n this.cachedResult = {\n visitorId,\n confidence,\n components,\n };\n return this.cachedResult;\n }\n /**\n * Clear the cached result to force re-fingerprinting\n */\n clearCache() {\n this.cachedResult = null;\n }\n /**\n * Collect all fingerprint components\n */\n async collectComponents() {\n const [canvas, webgl, audio, adBlockerDetected, incognitoDetected,] = await Promise.all([\n this.config.enableCanvas ? this.getCanvasFingerprint() : { hash: '' },\n this.config.enableWebGL ? this.getWebGLFingerprint() : { renderer: '', vendor: '', hash: '' },\n this.config.enableAudio ? this.getAudioFingerprint() : { hash: '' },\n this.detectAdBlocker(),\n this.detectIncognito(),\n ]);\n const fonts = this.config.enableFonts ? this.detectFonts() : [];\n const hardware = this.config.enableHardware ? this.getHardwareInfo() : {\n concurrency: 0,\n deviceMemory: 0,\n maxTouchPoints: 0,\n platform: '',\n };\n const screen = this.getScreenInfo();\n const browser = this.getBrowserInfo();\n return {\n canvas,\n webgl,\n audio,\n fonts,\n hardware,\n screen,\n browser,\n adBlockerDetected,\n incognitoDetected,\n };\n }\n /**\n * Canvas fingerprinting - draws various shapes and text, then hashes the result\n */\n async getCanvasFingerprint() {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = 256;\n canvas.height = 128;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return { hash: '' };\n }\n // Draw background\n ctx.fillStyle = '#f8f8f8';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n // Draw gradient\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\n gradient.addColorStop(0, '#ff6b6b');\n gradient.addColorStop(0.5, '#4ecdc4');\n gradient.addColorStop(1, '#45b7d1');\n ctx.fillStyle = gradient;\n ctx.fillRect(10, 10, 100, 50);\n // Draw text with different fonts\n ctx.font = '18px Arial';\n ctx.fillStyle = '#333';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText('Seekora Fingerprint 🔐', 20, 90);\n // Draw more text with different styling\n ctx.font = 'bold 14px Georgia';\n ctx.fillStyle = 'rgba(102, 204, 153, 0.7)';\n ctx.fillText('Test String @#$%', 130, 40);\n // Draw shapes\n ctx.beginPath();\n ctx.arc(200, 70, 30, 0, Math.PI * 2);\n ctx.fillStyle = 'rgba(255, 165, 0, 0.5)';\n ctx.fill();\n ctx.strokeStyle = '#333';\n ctx.lineWidth = 2;\n ctx.stroke();\n // Draw bezier curve\n ctx.beginPath();\n ctx.moveTo(10, 120);\n ctx.bezierCurveTo(50, 80, 100, 120, 140, 100);\n ctx.strokeStyle = '#9b59b6';\n ctx.lineWidth = 3;\n ctx.stroke();\n // Draw rotated rectangle\n ctx.save();\n ctx.translate(180, 100);\n ctx.rotate(0.5);\n ctx.fillStyle = 'rgba(52, 152, 219, 0.6)';\n ctx.fillRect(-20, -10, 40, 20);\n ctx.restore();\n const data = canvas.toDataURL('image/png');\n const hash = murmurHash3Hex(data);\n return { hash, data };\n }\n catch {\n return { hash: '' };\n }\n }\n /**\n * WebGL fingerprinting - extracts GPU info and renders test triangles\n */\n async getWebGLFingerprint() {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = 256;\n canvas.height = 256;\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (!gl) {\n return { renderer: '', vendor: '', hash: '' };\n }\n // Get debug info extension for renderer/vendor\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n const renderer = debugInfo\n ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || ''\n : '';\n const vendor = debugInfo\n ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || ''\n : '';\n // Collect WebGL parameters\n const params = [];\n // Basic parameters\n const paramIds = [\n gl.ALIASED_LINE_WIDTH_RANGE,\n gl.ALIASED_POINT_SIZE_RANGE,\n gl.ALPHA_BITS,\n gl.BLUE_BITS,\n gl.DEPTH_BITS,\n gl.GREEN_BITS,\n gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS,\n gl.MAX_CUBE_MAP_TEXTURE_SIZE,\n gl.MAX_FRAGMENT_UNIFORM_VECTORS,\n gl.MAX_RENDERBUFFER_SIZE,\n gl.MAX_TEXTURE_IMAGE_UNITS,\n gl.MAX_TEXTURE_SIZE,\n gl.MAX_VARYING_VECTORS,\n gl.MAX_VERTEX_ATTRIBS,\n gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS,\n gl.MAX_VERTEX_UNIFORM_VECTORS,\n gl.MAX_VIEWPORT_DIMS,\n gl.RED_BITS,\n gl.RENDERER,\n gl.SHADING_LANGUAGE_VERSION,\n gl.STENCIL_BITS,\n gl.VENDOR,\n gl.VERSION,\n ];\n for (const paramId of paramIds) {\n try {\n const value = gl.getParameter(paramId);\n if (value !== null && value !== undefined) {\n if (value instanceof Float32Array || value instanceof Int32Array) {\n params.push(Array.from(value).join(','));\n }\n else {\n params.push(String(value));\n }\n }\n }\n catch {\n // Parameter not available\n }\n }\n // Get supported extensions\n const extensions = gl.getSupportedExtensions() || [];\n params.push(extensions.sort().join(','));\n // Render a test triangle and get pixel data\n try {\n const vertexShaderSource = `\n attribute vec2 position;\n void main() {\n gl_Position = vec4(position, 0.0, 1.0);\n }\n `;\n const fragmentShaderSource = `\n precision mediump float;\n void main() {\n gl_FragColor = vec4(0.812, 0.373, 0.784, 1.0);\n }\n `;\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexShaderSource);\n gl.compileShader(vertexShader);\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentShaderSource);\n gl.compileShader(fragmentShader);\n const program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n gl.useProgram(program);\n const vertices = new Float32Array([\n 0.0, 0.5,\n -0.5, -0.5,\n 0.5, -0.5,\n ]);\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n const positionLocation = gl.getAttribLocation(program, 'position');\n gl.enableVertexAttribArray(positionLocation);\n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n gl.clearColor(0.1, 0.1, 0.1, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n const pixels = new Uint8Array(256 * 256 * 4);\n gl.readPixels(0, 0, 256, 256, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n // Sample some pixels for the hash\n const sampleIndices = [0, 1000, 5000, 10000, 25000, 50000, 100000, 200000];\n for (const idx of sampleIndices) {\n if (idx < pixels.length) {\n params.push(String(pixels[idx]));\n }\n }\n }\n catch {\n // Shader compilation/rendering failed\n }\n const dataString = `${renderer}|${vendor}|${params.join('|')}`;\n const hash = murmurHash3Hex(dataString);\n return { renderer, vendor, hash };\n }\n catch {\n return { renderer: '', vendor: '', hash: '' };\n }\n }\n /**\n * Audio fingerprinting using AudioContext oscillator\n */\n async getAudioFingerprint() {\n try {\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n if (!AudioContext) {\n return { hash: '' };\n }\n const context = new AudioContext();\n // Create oscillator\n const oscillator = context.createOscillator();\n oscillator.type = 'triangle';\n oscillator.frequency.setValueAtTime(10000, context.currentTime);\n // Create compressor\n const compressor = context.createDynamicsCompressor();\n compressor.threshold.setValueAtTime(-50, context.currentTime);\n compressor.knee.setValueAtTime(40, context.currentTime);\n compressor.ratio.setValueAtTime(12, context.currentTime);\n compressor.attack.setValueAtTime(0, context.currentTime);\n compressor.release.setValueAtTime(0.25, context.currentTime);\n // Create analyser\n const analyser = context.createAnalyser();\n analyser.fftSize = 2048;\n // Connect nodes\n oscillator.connect(compressor);\n compressor.connect(analyser);\n analyser.connect(context.destination);\n // Start and get data\n oscillator.start(0);\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n try {\n oscillator.stop();\n context.close();\n }\n catch {\n // Ignore cleanup errors\n }\n resolve({ hash: '' });\n }, this.config.timeout);\n // Give it a moment to process\n setTimeout(() => {\n try {\n const dataArray = new Float32Array(analyser.frequencyBinCount);\n analyser.getFloatFrequencyData(dataArray);\n // Calculate a fingerprint value from the audio data\n let sum = 0;\n let count = 0;\n for (let i = 0; i < dataArray.length; i++) {\n if (isFinite(dataArray[i]) && dataArray[i] !== 0) {\n sum += Math.abs(dataArray[i]);\n count++;\n }\n }\n const value = count > 0 ? sum / count : 0;\n const dataString = Array.from(dataArray.slice(0, 100))\n .filter(v => isFinite(v))\n .map(v => v.toFixed(4))\n .join(',');\n clearTimeout(timeout);\n oscillator.stop();\n context.close();\n const hash = murmurHash3Hex(dataString + String(value));\n resolve({ hash, value });\n }\n catch {\n clearTimeout(timeout);\n try {\n oscillator.stop();\n context.close();\n }\n catch {\n // Ignore cleanup errors\n }\n resolve({ hash: '' });\n }\n }, 200);\n });\n }\n catch {\n return { hash: '' };\n }\n }\n /**\n * Font detection by measuring text rendering differences\n */\n detectFonts() {\n const detectedFonts = [];\n try {\n const baseFonts = ['monospace', 'sans-serif', 'serif'];\n const testString = 'mmmmmmmmmmlli';\n const testSize = '72px';\n const canvas = document.createElement('canvas');\n canvas.width = 500;\n canvas.height = 100;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return detectedFonts;\n }\n // Get base widths\n const baseWidths = {};\n for (const baseFont of baseFonts) {\n ctx.font = `${testSize} ${baseFont}`;\n baseWidths[baseFont] = ctx.measureText(testString).width;\n }\n // Check each font\n for (const font of FONTS_TO_CHECK) {\n let detected = false;\n for (const baseFont of baseFonts) {\n ctx.font = `${testSize} \"${font}\", ${baseFont}`;\n const width = ctx.measureText(testString).width;\n if (width !== baseWidths[baseFont]) {\n detected = true;\n break;\n }\n }\n if (detected) {\n detectedFonts.push(font);\n }\n }\n }\n catch {\n // Font detection failed\n }\n return detectedFonts;\n }\n /**\n * Get hardware information\n */\n getHardwareInfo() {\n const nav = navigator;\n return {\n concurrency: nav.hardwareConcurrency || 0,\n deviceMemory: nav.deviceMemory || 0,\n maxTouchPoints: nav.maxTouchPoints || 0,\n platform: nav.platform || '',\n };\n }\n /**\n * Get screen information\n */\n getScreenInfo() {\n return {\n width: screen.width || 0,\n height: screen.height || 0,\n colorDepth: screen.colorDepth || 0,\n pixelRatio: window.devicePixelRatio || 1,\n };\n }\n /**\n * Get browser information\n */\n getBrowserInfo() {\n const nav = navigator;\n return {\n language: nav.language || '',\n languages: Array.from(nav.languages || []),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || '',\n timezoneOffset: new Date().getTimezoneOffset(),\n cookieEnabled: nav.cookieEnabled ?? false,\n doNotTrack: nav.doNotTrack === '1' || nav.doNotTrack === 'yes',\n };\n }\n /**\n * Detect if an ad blocker is installed\n */\n async detectAdBlocker() {\n try {\n // Create a bait element\n const bait = document.createElement('div');\n bait.className = 'adsbox ad-banner ad_banner textAd text_ad text-ad';\n bait.style.cssText = 'position: absolute; left: -9999px; width: 1px; height: 1px;';\n bait.innerHTML = ' ';\n document.body.appendChild(bait);\n // Wait a bit for ad blockers to act\n await new Promise(resolve => setTimeout(resolve, 100));\n const isBlocked = bait.offsetParent === null ||\n bait.offsetHeight === 0 ||\n bait.offsetWidth === 0 ||\n getComputedStyle(bait).display === 'none' ||\n getComputedStyle(bait).visibility === 'hidden';\n document.body.removeChild(bait);\n // Also try to fetch a known ad-related resource\n try {\n const response = await fetch('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js', {\n method: 'HEAD',\n mode: 'no-cors',\n });\n // If we get here without error, no ad blocker (though no-cors doesn't give us much info)\n return isBlocked;\n }\n catch {\n return true; // Blocked\n }\n }\n catch {\n return false;\n }\n }\n /**\n * Detect if browser is in incognito/private mode\n */\n async detectIncognito() {\n // Chrome/Chromium detection\n if ('storage' in navigator && 'estimate' in navigator.storage) {\n try {\n const estimate = await navigator.storage.estimate();\n // In incognito, quota is typically limited to ~120MB\n if (estimate.quota && estimate.quota < 130 * 1024 * 1024) {\n return true;\n }\n }\n catch {\n // Storage API not available\n }\n }\n // Firefox detection using IndexedDB\n try {\n const db = indexedDB.open('test-private-mode');\n return new Promise((resolve) => {\n db.onerror = () => resolve(true);\n db.onsuccess = () => {\n db.result.close();\n indexedDB.deleteDatabase('test-private-mode');\n resolve(false);\n };\n // Timeout fallback\n setTimeout(() => resolve(false), 500);\n });\n }\n catch {\n // IndexedDB not available - might be incognito\n return true;\n }\n }\n /**\n * Generate a hash from any data\n */\n generateHash(data) {\n return murmurHash3Hex(data);\n }\n /**\n * Generate the final visitor ID from all components\n */\n generateVisitorId(components) {\n const data = JSON.stringify({\n canvas: components.canvas.hash,\n webgl: components.webgl.hash,\n audio: components.audio.hash,\n fonts: components.fonts.sort().join(','),\n hardware: components.hardware,\n screen: components.screen,\n browser: {\n ...components.browser,\n languages: components.browser.languages.sort().join(','),\n },\n });\n // Generate a 32-character hex string (similar to UUID format)\n const hash1 = murmurHash3Hex(data, 0);\n const hash2 = murmurHash3Hex(data, 1);\n const hash3 = murmurHash3Hex(data, 2);\n const hash4 = murmurHash3Hex(data, 3);\n return `${hash1}${hash2}${hash3}${hash4}`;\n }\n /**\n * Calculate confidence score based on available components\n */\n calculateConfidence(components) {\n let score = 0;\n let maxScore = 0;\n // Canvas (high entropy)\n maxScore += 0.2;\n if (components.canvas.hash) {\n score += 0.2;\n }\n // WebGL (high entropy)\n maxScore += 0.2;\n if (components.webgl.hash && components.webgl.renderer) {\n score += 0.2;\n }\n else if (components.webgl.hash) {\n score += 0.1;\n }\n // Audio (medium entropy)\n maxScore += 0.15;\n if (components.audio.hash) {\n score += 0.15;\n }\n // Fonts (high entropy)\n maxScore += 0.15;\n if (components.fonts.length > 10) {\n score += 0.15;\n }\n else if (components.fonts.length > 5) {\n score += 0.1;\n }\n else if (components.fonts.length > 0) {\n score += 0.05;\n }\n // Hardware (medium entropy)\n maxScore += 0.1;\n if (components.hardware.concurrency > 0 && components.hardware.platform) {\n score += 0.1;\n }\n else if (components.hardware.platform) {\n score += 0.05;\n }\n // Screen (low entropy but stable)\n maxScore += 0.1;\n if (components.screen.width > 0 && components.screen.height > 0) {\n score += 0.1;\n }\n // Browser (low entropy but stable)\n maxScore += 0.1;\n if (components.browser.timezone && components.browser.language) {\n score += 0.1;\n }\n else if (components.browser.language) {\n score += 0.05;\n }\n // Normalize and return\n return Math.min(1, score / maxScore);\n }\n}\n// ============================================================================\n// Convenience Function\n// ============================================================================\n/**\n * Quick fingerprint getter - creates a Fingerprint instance and returns the result\n */\nasync function getFingerprint(config) {\n const fingerprint = new Fingerprint(config);\n return fingerprint.get();\n}\n\n/**\n * Analytics beacon utility\n *\n * Uses navigator.sendBeacon() for reliable event delivery during page navigation,\n * with fetch() as the primary method for normal operation.\n */\n/**\n * Send an analytics event using sendBeacon (for page unload scenarios)\n * or fetch (for normal operation). Returns true if the event was queued.\n */\nfunction sendAnalyticsBeacon(url, payload) {\n const body = JSON.stringify(payload);\n // Try sendBeacon first (works during page unload)\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n const blob = new Blob([body], { type: 'application/json' });\n return navigator.sendBeacon(url, blob);\n }\n // Fallback to fetch with keepalive\n if (typeof fetch !== 'undefined') {\n fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body,\n keepalive: true,\n }).catch(() => {\n // Silently fail — beacon is best-effort\n });\n return true;\n }\n return false;\n}\n/**\n * Send an analytics event via fetch (normal operation).\n * Returns the fetch promise for awaiting if needed.\n */\nasync function sendAnalyticsEvent(url, payload) {\n if (typeof fetch === 'undefined')\n return false;\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n return response.ok;\n }\n catch {\n return false;\n }\n}\n\nexport { Fingerprint, LogLevel, SearchStateManager, URLRouter, announce, announceFilterChange, announceResults, createFocusTrap, createKeyboardShortcuts, createLogger, createRovingTabIndex, createTheme, createURLRouter, darkThemeVariables, extractField, focusFirstError, formatPrice, generateCompleteStylesheet, generateId, generateThemeStylesheet, getFingerprint, getFocusableElements, getHighlightedValue, getLogger, getNestedValue$1 as getNestedValue, getSnippetedValue, getTheme, handleKeyboardNavigation, highContrastThemeVariables, highlightQuery, injectStyles, lightThemeVariables, log, mergeThemes, minimalThemeVariables, parseHighlightedParts, parseQueryHighlightParts, prefersHighContrast, prefersReducedMotion, sendAnalyticsBeacon, sendAnalyticsEvent, setAriaDescribedBy, setDefaultLogger, setLogLevel, setLogPrefix, setLogTimestamp, setTheme, stripHighlightTags, themeToCSSVariables };\n//# sourceMappingURL=index.esm.js.map\n","/**\n * Default Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const defaultTheme: Theme = {\n colors: {\n primary: '#007bff',\n secondary: '#6c757d',\n background: '#ffffff',\n surface: '#f8f9fa',\n text: '#212529',\n textSecondary: '#6c757d',\n border: '#dee2e6',\n hover: '#f8f9fa',\n focus: '#007bff',\n error: '#dc3545',\n success: '#28a745',\n warning: '#ffc107',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: {\n none: '0',\n small: '0.25rem',\n medium: '0.375rem',\n large: '0.5rem',\n full: '9999px',\n },\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23)',\n large: '0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)',\n },\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n breakpoints: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n },\n zIndex: {\n dropdown: 1000,\n modal: 2000,\n tooltip: 3000,\n },\n};\n\n\n","/**\n * createTheme utility\n * \n * Re-exports from core package for React-specific usage\n */\n\nimport { createTheme as createThemeCore } from '@seekora-ai/ui-sdk-core';\nimport { defaultTheme } from './default';\nimport type { ThemeConfig } from '@seekora-ai/ui-sdk-types';\n\nexport const createTheme = (config: ThemeConfig) => {\n return createThemeCore(config, defaultTheme);\n};\n\n\n","/**\n * SearchProvider Component\n *\n * Provides Seekora client and context to child components.\n * Supports A/B testing via abTestId/abVariant props.\n */\n\nimport React, { createContext, useContext, ReactNode, useMemo, useEffect } from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport { log, SearchStateManager, type SearchStateManagerConfig } from '@seekora-ai/ui-sdk-core';\nimport type { Theme, ThemeConfig } from '../themes/types';\nimport { defaultTheme } from '../themes/default';\nimport { createTheme } from '../themes/createTheme';\n\ninterface SearchContextValue {\n client: SeekoraClient;\n theme: Theme;\n enableAnalytics: boolean;\n autoTrackSearch: boolean;\n stateManager: SearchStateManager;\n}\n\nconst SearchContext = createContext<SearchContextValue | null>(null);\n\nexport interface SearchProviderProps {\n client: SeekoraClient;\n theme?: ThemeConfig;\n enableAnalytics?: boolean;\n autoTrackSearch?: boolean;\n stateManager?: SearchStateManagerConfig;\n children: ReactNode;\n /** A/B test experiment ID to include in all analytics events */\n abTestId?: string;\n /** A/B test variant to include in all analytics events */\n abVariant?: string;\n /** Auto-fetch experiment assignments on mount (default: false) */\n experiments?: boolean;\n}\n\nexport const SearchProvider: React.FC<SearchProviderProps> = ({\n client,\n theme: themeConfig,\n enableAnalytics = true,\n autoTrackSearch = true,\n stateManager: stateManagerConfig,\n children,\n abTestId,\n abVariant,\n experiments: _experiments,\n}) => {\n const theme = useMemo(() => {\n return themeConfig ? createTheme(themeConfig) : defaultTheme;\n }, [themeConfig]);\n\n // Create state manager instance (memoized to avoid recreating on every render)\n const stateManager = useMemo(() => {\n return new SearchStateManager({\n client,\n autoSearch: true,\n debounceMs: 300,\n itemsPerPage: 10,\n defaultSearchOptions: { widget_mode: true },\n ...stateManagerConfig,\n abTestId,\n abVariant,\n });\n }, [client, stateManagerConfig, abTestId, abVariant]);\n\n // Update A/B test fields on state manager and SDK client when props change\n useEffect(() => {\n if (abTestId !== undefined || abVariant !== undefined) {\n stateManager.setAbTest(abTestId, abVariant);\n client.setAbTest(abTestId, abVariant);\n }\n }, [stateManager, client, abTestId, abVariant]);\n\n const value: SearchContextValue = useMemo(() => ({\n client,\n theme,\n enableAnalytics,\n autoTrackSearch,\n stateManager,\n }), [client, theme, enableAnalytics, autoTrackSearch, stateManager]);\n\n return (\n <SearchContext.Provider value={value}>\n {children}\n </SearchContext.Provider>\n );\n};\n\nexport const useSearchContext = (): SearchContextValue => {\n const context = useContext(SearchContext);\n if (!context) {\n const error = new Error('useSearchContext must be used within a SearchProvider');\n log.error('SearchProvider: Context not available', { error: error.message });\n throw error;\n }\n return context;\n};\n","/**\n * useSearchState Hook\n * \n * React hook for accessing and managing search state via SearchStateManager\n * Provides reactive state and methods to update search parameters\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { SearchStateManager, type SearchState } from '@seekora-ai/ui-sdk-core';\nimport { useSearchContext } from '../components/SearchProvider';\n\nexport interface UseSearchStateReturn {\n // State\n query: string;\n refinements: Array<{ field: string; value: string }>;\n currentPage: number;\n itemsPerPage: number;\n sortBy?: string;\n results: SearchState['results'];\n loading: boolean;\n error: Error | null;\n \n // Actions\n setQuery: (query: string, triggerSearch?: boolean) => void;\n addRefinement: (field: string, value: string, triggerSearch?: boolean) => void;\n removeRefinement: (field: string, value: string, triggerSearch?: boolean) => void;\n clearRefinements: (triggerSearch?: boolean) => void;\n setPage: (page: number, triggerSearch?: boolean) => void;\n setSortBy: (sortBy: string, triggerSearch?: boolean) => void;\n search: (additionalOptions?: Parameters<SearchStateManager['search']>[0]) => Promise<SearchResponse | null>;\n clear: () => void;\n}\n\n/**\n * Hook to access and manage search state\n * Automatically subscribes to state changes and re-renders when state updates\n */\nexport const useSearchState = (): UseSearchStateReturn => {\n const { stateManager } = useSearchContext();\n const [state, setState] = useState<SearchState>(stateManager.getState());\n\n // Subscribe to state changes\n useEffect(() => {\n const unsubscribe = stateManager.subscribe((newState) => {\n setState(newState);\n });\n return unsubscribe;\n }, [stateManager]);\n\n // Memoized action methods\n const setQuery = useCallback((query: string, triggerSearch: boolean = true) => {\n stateManager.setQuery(query, triggerSearch);\n }, [stateManager]);\n\n const addRefinement = useCallback((field: string, value: string, triggerSearch: boolean = true) => {\n stateManager.addRefinement(field, value, triggerSearch);\n }, [stateManager]);\n\n const removeRefinement = useCallback((field: string, value: string, triggerSearch: boolean = true) => {\n stateManager.removeRefinement(field, value, triggerSearch);\n }, [stateManager]);\n\n const clearRefinements = useCallback((triggerSearch: boolean = true) => {\n stateManager.clearRefinements(triggerSearch);\n }, [stateManager]);\n\n const setPage = useCallback((page: number, triggerSearch: boolean = true) => {\n stateManager.setPage(page, triggerSearch);\n }, [stateManager]);\n\n const setSortBy = useCallback((sortBy: string, triggerSearch: boolean = true) => {\n stateManager.setSortBy(sortBy, triggerSearch);\n }, [stateManager]);\n\n const search = useCallback((additionalOptions?: Parameters<SearchStateManager['search']>[0]) => {\n return stateManager.search(additionalOptions);\n }, [stateManager]);\n\n const clear = useCallback(() => {\n stateManager.clear();\n }, [stateManager]);\n\n return {\n // State\n query: state.query,\n refinements: state.refinements,\n currentPage: state.currentPage,\n itemsPerPage: state.itemsPerPage,\n sortBy: state.sortBy,\n results: state.results,\n loading: state.loading,\n error: state.error,\n \n // Actions\n setQuery,\n addRefinement,\n removeRefinement,\n clearRefinements,\n setPage,\n setSortBy,\n search,\n clear,\n };\n};\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * useQuerySuggestions Hook\n * \n * Hook for fetching query suggestions with debouncing\n */\n\nimport { useState, useEffect, useRef } from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type { SuggestionItem } from '../types';\n\nexport interface UseQuerySuggestionsOptions {\n client: SeekoraClient;\n query: string;\n enabled?: boolean;\n debounceMs?: number;\n maxSuggestions?: number;\n}\n\nexport interface UseQuerySuggestionsReturn {\n suggestions: SuggestionItem[];\n loading: boolean;\n error: Error | null;\n}\n\nexport const useQuerySuggestions = ({\n client,\n query,\n enabled = true,\n debounceMs = 300,\n maxSuggestions = 10,\n}: UseQuerySuggestionsOptions): UseQuerySuggestionsReturn => {\n const [suggestions, setSuggestions] = useState<SuggestionItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (!enabled || !query.trim()) {\n setSuggestions([]);\n setLoading(false);\n setError(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n debounceTimerRef.current = setTimeout(async () => {\n try {\n const response = await client.getSuggestions?.(query, maxSuggestions);\n\n // Transform suggestions to SuggestionItem format\n // getSuggestions returns an array of suggestion objects with structure:\n // { query: string, popularity: number, objectID: string, ... }\n const rawSuggestions = Array.isArray(response) ? response : [];\n \n const suggestionItems: SuggestionItem[] = rawSuggestions.map((suggestion: any) => {\n // Extract query - it should be in suggestion.query\n const suggestionQuery = suggestion.query || suggestion.text || suggestion;\n // Extract count/popularity\n const count = suggestion.popularity !== undefined ? suggestion.popularity : (suggestion.count !== undefined ? suggestion.count : undefined);\n \n const item: SuggestionItem = {\n query: typeof suggestionQuery === 'string' ? suggestionQuery : String(suggestionQuery),\n count: typeof count === 'number' ? count : undefined,\n metadata: suggestion,\n };\n \n return item;\n });\n\n setSuggestions(suggestionItems);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Check if it's a 404 error (suggestions not enabled for this store).\n // The search SDK wraps axios errors into plain Error objects with the status\n // embedded in the message, e.g. \"[getSuggestions] ... (404)\".\n const errMsg = error.message || '';\n const is404 =\n (err as any)?.response?.status === 404 ||\n (err as any)?.status === 404 ||\n /\\(404\\)/.test(errMsg);\n\n if (is404) {\n // Silently handle 404 - suggestions feature not enabled\n log.verbose('Query suggestions not enabled for this store (404)');\n setSuggestions([]);\n setError(null);\n } else {\n // For other errors, log and set error state\n log.error('Error in useQuerySuggestions:', error);\n setError(error);\n setSuggestions([]);\n }\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [client, query, enabled, debounceMs, maxSuggestions]);\n\n return {\n suggestions,\n loading,\n error,\n };\n};\n\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * SearchBar Component\n *\n * Interactive search input component with query suggestions support\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { useQuerySuggestions } from '../hooks/useQuerySuggestions';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\nimport type { SearchOptions } from '@seekora-ai/search-sdk';\n\n// Z-index scale for consistent layering\nconst Z_INDEX = {\n dropdown: 100,\n modal: 200,\n overlay: 300,\n tooltip: 50,\n};\n\nexport type SearchBarSize = 'small' | 'medium' | 'large';\n\nexport interface SearchBarTheme {\n container?: string;\n input?: string;\n inputFocused?: string;\n suggestionsContainer?: string;\n suggestionItem?: string;\n suggestionItemHover?: string;\n suggestionItemActive?: string;\n searchIcon?: string;\n clearButton?: string;\n submitButton?: string;\n}\n\nexport interface SearchBarProps {\n placeholder?: string;\n showSuggestions?: boolean;\n debounceMs?: number;\n minQueryLength?: number;\n maxSuggestions?: number;\n onSearch?: (query: string, results: any) => void;\n onQueryChange?: (query: string) => void;\n onSuggestionSelect?: (suggestion: string) => void;\n onSearchStateChange?: (state: { results: any; loading: boolean; error: Error | null }) => void;\n searchOptions?: Omit<SearchOptions, 'q'>;\n className?: string;\n style?: React.CSSProperties;\n theme?: SearchBarTheme;\n renderSuggestion?: (suggestion: string, index: number) => React.ReactNode;\n /** Custom render for the search icon. If not provided, a default magnifying glass SVG is rendered. */\n renderSearchIcon?: () => React.ReactNode;\n /** Whether to show a clear button when the query is non-empty (default: true) */\n showClearButton?: boolean;\n /** Custom render for the clear icon */\n renderClearIcon?: () => React.ReactNode;\n /** Whether to show a submit button to the right of the input (default: false) */\n showSubmitButton?: boolean;\n /** Custom render for the submit button */\n renderSubmitButton?: () => React.ReactNode;\n /** Size variant controlling padding and font size (default: 'medium') */\n size?: SearchBarSize;\n /** Trigger search automatically as user types, with debounce (default: false).\n * When true, uses `debounceMs` for the delay. Enter still triggers immediately. */\n searchAsYouType?: boolean;\n}\n\nconst SIZE_CONFIG = {\n small: {\n padding: '0.375rem 0.5rem',\n fontSize: '0.875rem',\n iconSize: 14,\n iconPaddingLeft: '1.75rem',\n iconPaddingRight: '1.75rem',\n iconLeft: '0.5rem',\n iconRight: '0.5rem',\n },\n medium: {\n padding: '0.625rem 1rem',\n fontSize: '1rem',\n iconSize: 18,\n iconPaddingLeft: '2.25rem',\n iconPaddingRight: '2.25rem',\n iconLeft: '0.625rem',\n iconRight: '0.625rem',\n },\n large: {\n padding: '0.875rem 1.25rem',\n fontSize: '1.25rem',\n iconSize: 22,\n iconPaddingLeft: '2.75rem',\n iconPaddingRight: '2.75rem',\n iconLeft: '0.75rem',\n iconRight: '0.75rem',\n },\n} as const;\n\nconst DefaultSearchIcon: React.FC<{ size?: number }> = ({ size = 18 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n);\n\nconst DefaultClearIcon: React.FC<{ size?: number }> = ({ size = 14 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\nexport const SearchBar: React.FC<SearchBarProps> = ({\n placeholder = 'Powered by Seekora',\n showSuggestions = true,\n debounceMs = 300,\n minQueryLength = 2,\n maxSuggestions = 10,\n onSearch,\n onQueryChange,\n onSuggestionSelect,\n onSearchStateChange,\n searchOptions,\n className,\n style,\n theme: customTheme,\n renderSuggestion,\n renderSearchIcon,\n showClearButton = true,\n renderClearIcon,\n showSubmitButton = false,\n renderSubmitButton,\n size = 'medium',\n searchAsYouType = false,\n}) => {\n const { client, theme, enableAnalytics, autoTrackSearch } = useSearchContext();\n const { query, setQuery, search: triggerSearch, results, loading: searchLoading, error: searchError } = useSearchState();\n const [isFocused, setIsFocused] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const isSearchingRef = useRef(false); // Flag to prevent blur handler from interfering\n const searchAsYouTypeRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Cleanup searchAsYouType timer on unmount\n useEffect(() => {\n return () => {\n if (searchAsYouTypeRef.current) clearTimeout(searchAsYouTypeRef.current);\n };\n }, []);\n\n const { suggestions, loading: suggestionsLoading } = useQuerySuggestions({\n client,\n query,\n enabled: showSuggestions && query.length >= minQueryLength,\n debounceMs,\n maxSuggestions,\n });\n\n const displayedSuggestions = suggestions.slice(0, maxSuggestions);\n\n // Expose search state to parent\n useEffect(() => {\n if (onSearchStateChange) {\n onSearchStateChange({\n results,\n loading: searchLoading,\n error: searchError,\n });\n }\n }, [results, searchLoading, searchError, onSearchStateChange]);\n\n useEffect(() => {\n if (results && onSearch) {\n onSearch(query, results);\n }\n }, [results, query, onSearch]);\n\n useEffect(() => {\n if (onQueryChange) {\n onQueryChange(query);\n }\n }, [query, onQueryChange]);\n\n const handleSearch = useCallback(async (searchQuery: string) => {\n // Cancel any pending searchAsYouType debounce — user explicitly submitted\n if (searchAsYouTypeRef.current) {\n clearTimeout(searchAsYouTypeRef.current);\n searchAsYouTypeRef.current = null;\n }\n // Allow empty queries - use empty string for search\n const query = searchQuery.trim();\n \n log.info('SearchBar: Triggering search', { query, originalQuery: searchQuery, isEmpty: !query });\n \n // Set flag to prevent blur handler from interfering\n isSearchingRef.current = true;\n \n // Close suggestions first\n setIsFocused(false);\n setSelectedIndex(-1);\n \n // Update query in state manager (don't trigger search yet - we'll do it explicitly)\n setQuery(query, false);\n \n // Explicitly trigger search immediately (bypass debounce for Enter key)\n log.info('SearchBar: Calling search() directly');\n await triggerSearch();\n \n // Blur after a small delay to ensure search is triggered\n setTimeout(() => {\n inputRef.current?.blur();\n // Reset flag after blur\n setTimeout(() => {\n isSearchingRef.current = false;\n }, 50);\n }, 100);\n }, [setQuery, triggerSearch]);\n\n const handleSuggestionSelect = useCallback((suggestion: string) => {\n log.verbose('SearchBar: Suggestion selected', { suggestion });\n setSelectedIndex(-1);\n setIsFocused(false);\n inputRef.current?.blur();\n \n if (onSuggestionSelect) {\n onSuggestionSelect(suggestion);\n }\n \n // Update query and trigger search\n setQuery(suggestion);\n }, [onSuggestionSelect, setQuery]);\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Update query in state manager but don't trigger search immediately\n // Search will be triggered on Enter, suggestion select, or after debounce if searchAsYouType\n setQuery(value, false); // false = don't trigger search immediately\n setSelectedIndex(-1);\n\n if (searchAsYouType) {\n if (searchAsYouTypeRef.current) clearTimeout(searchAsYouTypeRef.current);\n searchAsYouTypeRef.current = setTimeout(() => {\n searchAsYouTypeRef.current = null;\n triggerSearch();\n }, debounceMs);\n }\n }, [setQuery, searchAsYouType, debounceMs, triggerSearch]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n if (showSuggestions && displayedSuggestions.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => \n prev < displayedSuggestions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n if (showSuggestions && displayedSuggestions.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : -1));\n }\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n // Only select suggestion if one is explicitly selected (selectedIndex >= 0)\n // Otherwise, search whatever is in the text box\n if (showSuggestions && displayedSuggestions.length > 0 && selectedIndex >= 0 && selectedIndex < displayedSuggestions.length) {\n // Select suggestion if one is highlighted\n handleSuggestionSelect(displayedSuggestions[selectedIndex].query);\n } else {\n // Search whatever is in the text box (even if suggestions are shown)\n // Allow empty search - will use \"*\" for wildcard\n const currentValue = inputRef.current?.value || query;\n handleSearch(currentValue);\n }\n break;\n case 'Escape':\n setIsFocused(false);\n inputRef.current?.blur();\n break;\n }\n }, [displayedSuggestions, selectedIndex, query, showSuggestions, handleSearch, handleSuggestionSelect]);\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback((e: React.FocusEvent) => {\n // Don't interfere if we're explicitly triggering a search\n if (isSearchingRef.current) {\n return;\n }\n \n // Delay to allow click events on suggestions to fire\n setTimeout(() => {\n if (!containerRef.current?.contains(document.activeElement)) {\n setIsFocused(false);\n setSelectedIndex(-1);\n }\n }, 200);\n }, []);\n\n const defaultRenderSuggestion = (suggestion: string, index: number) => (\n <div key={index}>\n {suggestion}\n </div>\n );\n\n const searchBarTheme = customTheme || {};\n const isLoading = suggestionsLoading || searchLoading;\n // Show list when we have suggestions (including previous while loading) or when loading and showLoadingState\n const hasSuggestions = displayedSuggestions.length > 0;\n const showSuggestionsList = isFocused && showSuggestions && query.length >= minQueryLength && hasSuggestions;\n\n // Get processing time from results\n const res = results as import('@seekora-ai/search-sdk').SearchResponse | null | undefined;\n const processingTime = (res as any)?.processingTimeMS\n || (res as any)?.data?.processingTimeMS\n || (res as any)?.data?.data?.processingTimeMS;\n\n // Size-based configuration\n const sizeConfig = SIZE_CONFIG[size];\n\n // Determine whether the search icon is shown (always unless renderSearchIcon returns null explicitly — but\n // we always show it; there is no prop to hide the search icon, only to customise it)\n const hasSearchIcon = true;\n const hasClearBtn = showClearButton && query.length > 0;\n\n // Compute input padding accounting for icons\n const inputPaddingLeft = hasSearchIcon ? sizeConfig.iconPaddingLeft : sizeConfig.padding.split(' ')[1] || sizeConfig.padding;\n const inputPaddingRight = hasClearBtn ? sizeConfig.iconPaddingRight : sizeConfig.padding.split(' ')[1] || sizeConfig.padding;\n\n const borderRadius = typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium;\n const focusBorderColor = isFocused ? `var(--seekora-border-focus, ${theme.colors.focus})` : `var(--seekora-border, ${theme.colors.border})`;\n const focusRingShadow = isFocused\n ? `0 0 0 3px var(--seekora-border-focus-alpha, ${theme.colors.focus}33)`\n : undefined;\n\n const handleClear = useCallback(() => {\n if (searchAsYouTypeRef.current) {\n clearTimeout(searchAsYouTypeRef.current);\n searchAsYouTypeRef.current = null;\n }\n setQuery('', false);\n setSelectedIndex(-1);\n inputRef.current?.focus();\n if (searchAsYouType) {\n triggerSearch();\n }\n }, [setQuery, searchAsYouType, triggerSearch]);\n\n const handleSubmit = useCallback(() => {\n const currentValue = inputRef.current?.value || query;\n handleSearch(currentValue);\n }, [query, handleSearch]);\n\n return (\n <div\n ref={containerRef}\n className={clsx(searchBarTheme.container, className)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n // CSS custom properties for external styling\n '--seekora-searchbar-bg': theme.colors.background,\n '--seekora-searchbar-border': theme.colors.border,\n '--seekora-searchbar-focus-border': theme.colors.focus,\n '--seekora-searchbar-radius': borderRadius,\n '--seekora-searchbar-icon-color': theme.colors.textSecondary,\n ...style,\n } as React.CSSProperties}\n >\n {/* Input wrapper — relative container for positioning icons inside the input area */}\n <div style={{ position: 'relative', flex: 1, display: 'flex', alignItems: 'center' }}>\n {/* Search icon */}\n {hasSearchIcon && (\n <span\n className={searchBarTheme.searchIcon}\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: sizeConfig.iconLeft,\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n color: 'var(--seekora-searchbar-icon-color)',\n zIndex: 2,\n }}\n >\n {renderSearchIcon ? renderSearchIcon() : <DefaultSearchIcon size={sizeConfig.iconSize} />}\n </span>\n )}\n\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={clsx(\n searchBarTheme.input,\n isFocused && searchBarTheme.inputFocused\n )}\n style={{\n width: '100%',\n paddingTop: sizeConfig.padding.split(' ')[0],\n paddingBottom: sizeConfig.padding.split(' ')[0],\n paddingLeft: inputPaddingLeft,\n paddingRight: inputPaddingRight,\n fontSize: sizeConfig.fontSize,\n fontFamily: theme.typography.fontFamily,\n backgroundColor: 'var(--seekora-searchbar-bg)',\n color: theme.colors.text,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: focusBorderColor,\n borderRadius: 'var(--seekora-searchbar-radius)',\n outline: 'none',\n boxShadow: focusRingShadow,\n transition: theme.transitions?.fast || '150ms ease-in-out',\n boxSizing: 'border-box',\n }}\n />\n\n {/* Clear button */}\n {hasClearBtn && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={searchBarTheme.clearButton}\n aria-label=\"Clear search\"\n style={{\n position: 'absolute',\n right: sizeConfig.iconRight,\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '2px',\n borderRadius: '50%',\n color: 'var(--seekora-searchbar-icon-color)',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n zIndex: 2,\n }}\n onMouseDown={(e) => {\n // Prevent input blur so the clear action doesn't race with blur handler\n e.preventDefault();\n }}\n >\n {renderClearIcon ? renderClearIcon() : <DefaultClearIcon size={sizeConfig.iconSize - 4} />}\n </button>\n )}\n </div>\n\n {/* Submit button */}\n {showSubmitButton && (\n renderSubmitButton ? (\n <div onClick={handleSubmit} style={{ marginLeft: theme.spacing.small, cursor: 'pointer' }}>\n {renderSubmitButton()}\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={handleSubmit}\n className={searchBarTheme.submitButton}\n style={{\n marginLeft: theme.spacing.small,\n padding: sizeConfig.padding,\n fontSize: sizeConfig.fontSize,\n fontFamily: theme.typography.fontFamily,\n fontWeight: theme.typography.fontWeight?.medium ?? 500,\n backgroundColor: `var(--seekora-primary, ${theme.colors.primary})`,\n color: 'var(--seekora-primary-text, #ffffff)',\n border: 'none',\n borderRadius: 'var(--seekora-searchbar-radius)',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n >\n Search\n </button>\n )\n )}\n\n {processingTime !== undefined && (\n <span\n style={{\n marginLeft: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.text,\n opacity: 0.7,\n whiteSpace: 'nowrap',\n }}\n >\n {processingTime}ms\n </span>\n )}\n\n {showSuggestionsList && (\n <div\n className={searchBarTheme.suggestionsContainer}\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: theme.spacing.small,\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n boxShadow: theme.shadows.medium,\n maxHeight: '400px',\n overflowY: 'auto',\n zIndex: Z_INDEX.dropdown,\n boxSizing: 'border-box',\n }}\n >\n {displayedSuggestions.length > 0 && (\n <>\n {displayedSuggestions.map((suggestion, index) => {\n const isSelected = index === selectedIndex;\n const renderFn = renderSuggestion || defaultRenderSuggestion;\n\n return (\n <div\n key={index}\n className={clsx(\n searchBarTheme.suggestionItem,\n isSelected && searchBarTheme.suggestionItemActive\n )}\n onClick={() => handleSuggestionSelect(suggestion.query)}\n onMouseEnter={() => setSelectedIndex(index)}\n style={{\n padding: theme.spacing.medium,\n cursor: 'pointer',\n backgroundColor: isSelected\n ? theme.colors.hover\n : 'transparent',\n color: theme.colors.text,\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n >\n {renderFn(suggestion.query, index)}\n </div>\n );\n })}\n </>\n )}\n\n {!isLoading && displayedSuggestions.length === 0 && query.length >= minQueryLength && (\n <div style={{ padding: theme.spacing.medium, textAlign: 'center', color: theme.colors.textSecondary }}>\n No suggestions found\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\n","/**\n * SearchResults Component\n * \n * Displays search results with customizable rendering\n * Includes keyboard navigation support (arrow keys, Enter to select)\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport type { ResultItem, FieldMapping, ViewMode } from '@seekora-ai/ui-sdk-types';\n\nexport interface SearchResultsTheme {\n container?: string;\n header?: string;\n resultsList?: string;\n resultItem?: string;\n resultItemHover?: string;\n resultTitle?: string;\n resultDescription?: string;\n resultImage?: string;\n resultPrice?: string;\n emptyState?: string;\n errorState?: string;\n pagination?: string;\n /** Custom min-height class override */\n minHeight?: string;\n /** Custom min-width class override */\n minWidth?: string;\n}\n\nexport interface SearchResultsProps {\n results?: SearchResponse | null;\n loading?: boolean;\n error?: Error | null;\n onResultClick?: (result: ResultItem, index: number) => void;\n renderResult?: (result: ResultItem, index: number, isActive?: boolean) => React.ReactNode;\n renderEmpty?: () => React.ReactNode;\n renderError?: (error: Error) => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n theme?: SearchResultsTheme;\n itemsPerPage?: number;\n showPagination?: boolean;\n /** Display mode: 'list' (default), 'card', or 'grid' */\n viewMode?: ViewMode;\n /** Field mapping configuration for extracting data from results */\n fieldMapping?: FieldMapping;\n /** Function to extract results array from the response (if custom structure) */\n extractResults?: (response: any) => any[];\n /** Enable keyboard navigation (arrow keys, Enter to select) */\n enableKeyboardNavigation?: boolean;\n /** Auto-focus the results container */\n autoFocus?: boolean;\n /** Minimum height to prevent container collapse when empty (default: '400px') */\n minHeight?: string;\n /** Minimum width to prevent container shrinking (default: '100%') */\n minWidth?: string;\n}\n\n// Helper function to get nested value from object using dot notation\nconst getNestedValue = (obj: any, path: string): any => {\n if (!path) return undefined;\n return path.split('.').reduce((current, key) => current?.[key], obj);\n};\n\n// Helper function to format price\nconst formatPrice = (value: any, currency: string = '₹'): string | undefined => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === 'number') return `${currency}${value}`;\n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num)) return `${currency}${num}`;\n return value;\n }\n return String(value);\n};\n\nexport const SearchResults: React.FC<SearchResultsProps> = ({\n results: resultsProp,\n loading: loadingProp,\n error: errorProp,\n onResultClick,\n renderResult,\n renderEmpty,\n renderError,\n className,\n style,\n theme: customTheme,\n itemsPerPage = 20,\n showPagination = false,\n viewMode = 'list',\n fieldMapping,\n extractResults,\n enableKeyboardNavigation = true,\n autoFocus = false,\n minHeight = '400px',\n minWidth = '100%',\n}) => {\n const { theme, client, enableAnalytics } = useSearchContext();\n const { results: stateResults, loading: stateLoading, error: stateError, currentPage, itemsPerPage: stateItemsPerPage } = useSearchState();\n const searchResultsTheme = customTheme || {};\n \n // Keyboard navigation state\n const [activeIndex, setActiveIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n \n // Use props if provided, otherwise use state from state manager\n const results = resultsProp !== undefined ? resultsProp : stateResults;\n const loading = loadingProp !== undefined ? loadingProp : stateLoading;\n const error = errorProp !== undefined ? errorProp : stateError;\n\n // Reset active index when results change\n useEffect(() => {\n setActiveIndex(-1);\n }, [results]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current && enableKeyboardNavigation) {\n const activeEl = containerRef.current.querySelector(`[data-result-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n activeEl.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [activeIndex, enableKeyboardNavigation]);\n\n // Global keyboard listener for seamless navigation from search box to results\n useEffect(() => {\n if (!enableKeyboardNavigation) return;\n\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n // Only handle if we have results and the container exists\n if (!containerRef.current) return;\n\n const resultElements = containerRef.current.querySelectorAll('[data-result-index]');\n const maxIndex = resultElements.length - 1;\n if (maxIndex < 0) return;\n\n // Check if focus is on an input/textarea (search box)\n const activeElement = document.activeElement;\n const isInputFocused = activeElement?.tagName === 'INPUT' || activeElement?.tagName === 'TEXTAREA';\n\n if (e.key === 'ArrowDown') {\n // If in search box or no result selected, select first result\n if (isInputFocused || activeIndex === -1) {\n e.preventDefault();\n setActiveIndex(0);\n containerRef.current?.focus();\n }\n } else if (e.key === 'ArrowUp') {\n // If first result is selected, go back to search box\n if (activeIndex === 0) {\n e.preventDefault();\n setActiveIndex(-1);\n // Find and focus the search input\n const searchInput = document.querySelector('input[type=\"text\"], input[type=\"search\"]') as HTMLInputElement;\n searchInput?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleGlobalKeyDown);\n return () => document.removeEventListener('keydown', handleGlobalKeyDown);\n }, [enableKeyboardNavigation, activeIndex]);\n\n // Keyboard navigation handler\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!enableKeyboardNavigation) return;\n\n // We need to get the result count dynamically\n const resultElements = containerRef.current?.querySelectorAll('[data-result-index]');\n const maxIndex = resultElements ? resultElements.length - 1 : -1;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setActiveIndex(prev => Math.min(prev + 1, maxIndex));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex(prev => Math.max(prev - 1, -1));\n break;\n case 'Enter':\n e.preventDefault();\n if (activeIndex >= 0) {\n // Trigger click on active item\n const activeEl = containerRef.current?.querySelector(`[data-result-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n activeEl.click();\n }\n }\n break;\n case 'Escape':\n setActiveIndex(-1);\n containerRef.current?.blur();\n break;\n case 'Home':\n e.preventDefault();\n setActiveIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setActiveIndex(maxIndex);\n break;\n }\n }, [enableKeyboardNavigation, activeIndex]);\n\n const defaultRenderResultList = (result: ResultItem, index: number, isActive: boolean = false) => {\n const handleClick = async () => {\n // Track analytics event if enabled\n if (enableAnalytics && result.id) {\n try {\n const results = resultsProp || stateResults;\n const state = { currentPage, itemsPerPage: stateItemsPerPage };\n \n // Calculate absolute position (1-based) accounting for pagination\n const absolutePosition = (state.currentPage - 1) * state.itemsPerPage + index + 1;\n \n const searchContext = results?.context;\n if (client.trackClick) {\n await client.trackClick(result.id, absolutePosition, searchContext);\n } else {\n await client.trackEvent?.({\n event_name: 'product_click',\n clicked_item_id: result.id,\n metadata: { result, position: absolutePosition },\n }, searchContext);\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchResults: Error tracking click', { resultId: result.id, error: error.message });\n }\n }\n // Call user-provided callback\n if (onResultClick) {\n onResultClick(result, index);\n }\n };\n\n return (\n <div\n key={result.id || index}\n data-result-index={index}\n className={clsx(searchResultsTheme.resultItem, isActive && searchResultsTheme.resultItemHover)}\n onClick={handleClick}\n onMouseEnter={() => enableKeyboardNavigation && setActiveIndex(index)}\n style={{\n padding: theme.spacing.medium,\n border: `1px solid ${theme.colors.border}`,\n borderBottom: `1px solid ${theme.colors.border}`,\n borderRadius: 0,\n marginBottom: 0,\n cursor: onResultClick ? 'pointer' : 'default',\n transition: theme.transitions?.normal || '250ms ease-in-out',\n backgroundColor: isActive ? theme.colors.hover : theme.colors.background,\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing.medium,\n outline: isActive ? `2px solid ${theme.colors.primary}` : 'none',\n outlineOffset: '-2px',\n }}\n >\n {result.image && (\n <img\n src={result.image}\n alt={result.title}\n className={searchResultsTheme.resultImage}\n style={{\n width: '100px',\n height: '100px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n flexShrink: 0,\n }}\n />\n )}\n \n <div style={{ flex: 1, minWidth: 0 }}>\n <h3\n className={searchResultsTheme.resultTitle}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n margin: 0,\n marginBottom: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {result.title}\n </h3>\n \n {result.description && (\n <p\n className={searchResultsTheme.resultDescription}\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n margin: 0,\n marginBottom: theme.spacing.small,\n opacity: 0.8,\n }}\n >\n {result.description}\n </p>\n )}\n \n {result.price && (\n <div\n className={searchResultsTheme.resultPrice}\n style={{\n fontSize: theme.typography.fontSize.medium,\n fontWeight: 'bold',\n color: theme.colors.primary,\n }}\n >\n {result.price}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n const defaultRenderResultCard = (result: ResultItem, index: number, isActive: boolean = false) => {\n const handleClick = async () => {\n // Track analytics event if enabled\n if (enableAnalytics && result.id) {\n try {\n const results = resultsProp || stateResults;\n const state = { currentPage, itemsPerPage: stateItemsPerPage };\n \n // Calculate absolute position (1-based) accounting for pagination\n const absolutePosition = (state.currentPage - 1) * state.itemsPerPage + index + 1;\n \n const searchContext = results?.context;\n if (client.trackClick) {\n await client.trackClick(result.id, absolutePosition, searchContext);\n } else {\n await client.trackEvent?.({\n event_name: 'product_click',\n clicked_item_id: result.id,\n metadata: { result, position: absolutePosition },\n }, searchContext);\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchResults: Error tracking click', { resultId: result.id, error: error.message });\n }\n }\n // Call user-provided callback\n if (onResultClick) {\n onResultClick(result, index);\n }\n };\n\n // Use widget view fields if available, otherwise fall back to regular fields\n const primaryText = (result as any).primaryText || result.title;\n const secondaryText = (result as any).secondaryText || result.description;\n const tertiaryText = (result as any).tertiaryText || result.price;\n const imageUrl = (result as any).imageUrl || result.image;\n\n return (\n <div\n key={result.id || index}\n data-result-index={index}\n className={clsx(searchResultsTheme.resultItem, isActive && searchResultsTheme.resultItemHover)}\n onClick={handleClick}\n onMouseEnter={() => enableKeyboardNavigation && setActiveIndex(index)}\n style={{\n border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n overflow: 'hidden',\n cursor: onResultClick ? 'pointer' : 'default',\n transition: theme.transitions?.normal || '250ms ease-in-out',\n backgroundColor: isActive ? theme.colors.hover : theme.colors.background,\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing.medium,\n boxShadow: isActive ? theme.shadows.medium : theme.shadows.small,\n outline: isActive ? `2px solid ${theme.colors.primary}` : 'none',\n outlineOffset: '-2px',\n }}\n >\n {imageUrl && (\n <div\n style={{\n width: '100%',\n aspectRatio: '16/9',\n overflow: 'hidden',\n backgroundColor: theme.colors.hover,\n }}\n >\n <img\n src={imageUrl}\n alt={primaryText}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n </div>\n )}\n \n <div style={{ padding: theme.spacing.medium }}>\n {primaryText && (\n <h3\n className={searchResultsTheme.resultTitle}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n margin: 0,\n marginBottom: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {primaryText}\n </h3>\n )}\n \n {secondaryText && (\n <p\n className={searchResultsTheme.resultDescription}\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n margin: 0,\n marginBottom: theme.spacing.small,\n opacity: 0.8,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {secondaryText}\n </p>\n )}\n \n {tertiaryText && (\n <div\n className={searchResultsTheme.resultPrice}\n style={{\n fontSize: theme.typography.fontSize.medium,\n fontWeight: 'bold',\n color: theme.colors.primary,\n marginTop: 'auto',\n }}\n >\n {tertiaryText}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n const defaultRenderResult = viewMode === 'card' || viewMode === 'grid' \n ? defaultRenderResultCard \n : defaultRenderResultList;\n\n const defaultRenderEmpty = () => (\n <div\n className={searchResultsTheme.emptyState}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.text,\n }}\n >\n No results found\n </div>\n );\n\n const defaultRenderError = (err: Error) => (\n <div\n className={searchResultsTheme.errorState}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.error,\n }}\n >\n Error: {err.message}\n </div>\n );\n\n // Extract results array from response\n let rawResults: any[] = [];\n \n if (extractResults) {\n // Use custom extraction function if provided\n rawResults = extractResults(results) || [];\n } else if (results) {\n const res = results as any;\n if (Array.isArray(res.results) && res.results.length > 0) {\n rawResults = res.results;\n } else if (res.data && Array.isArray(res.data.results) && res.data.results.length > 0) {\n rawResults = res.data.results;\n } else if (res.data?.data && Array.isArray(res.data.data.results) && res.data.data.results.length > 0) {\n rawResults = res.data.data.results;\n } else if (Array.isArray(results)) {\n rawResults = results;\n } else if (Array.isArray(res.results)) {\n rawResults = res.results;\n }\n }\n \n // Default field mapping (can be overridden via props)\n const defaultFieldMapping: FieldMapping = {\n title: 'document.productName',\n description: 'document.brandDesc',\n image: 'document.image',\n price: 'document.mrp',\n url: 'document.url',\n id: 'id',\n ...fieldMapping,\n };\n \n // Extract field value using dot notation path\n const extractField = (item: any, path: string | undefined): any => {\n if (!path) return undefined;\n return getNestedValue(item, path);\n };\n \n const resultItems: ResultItem[] = rawResults.map((item: any, index: number) => {\n try {\n // Widget view fields (when widget_mode is enabled) - check these first\n const primaryText = extractField(item, defaultFieldMapping.primaryText);\n const secondaryText = extractField(item, defaultFieldMapping.secondaryText);\n const tertiaryText = extractField(item, defaultFieldMapping.tertiaryText);\n const imageUrl = extractField(item, defaultFieldMapping.imageUrl);\n \n // Use primaryText as fallback for title if title is not found\n const title = extractField(item, defaultFieldMapping.title) || primaryText || 'Untitled';\n const description = extractField(item, defaultFieldMapping.description) || secondaryText;\n const image = extractField(item, defaultFieldMapping.image) || imageUrl;\n const priceValue = extractField(item, defaultFieldMapping.price) || tertiaryText;\n const url = extractField(item, defaultFieldMapping.url);\n const id = extractField(item, defaultFieldMapping.id) || String(index);\n \n // Format price if it's a number\n const price = priceValue !== undefined ? formatPrice(priceValue) : undefined;\n \n // Extract custom fields if configured\n const customFields: Record<string, any> = {};\n if (defaultFieldMapping.custom) {\n Object.entries(defaultFieldMapping.custom).forEach(([key, path]) => {\n customFields[key] = extractField(item, path);\n });\n }\n \n const resultItem: ResultItem = {\n id,\n title,\n description,\n url,\n image,\n price,\n metadata: item,\n ...customFields,\n // Widget view fields\n ...(primaryText && { primaryText }),\n ...(secondaryText && { secondaryText }),\n ...(tertiaryText && { tertiaryText }),\n ...(imageUrl && { imageUrl }),\n // Include original item for full access\n _raw: item,\n };\n \n return resultItem;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.warn('SearchResults: Error extracting result item', {\n index,\n error: error.message,\n item: item?.id || 'unknown',\n });\n // Return a fallback result item\n return {\n id: String(index),\n title: 'Error loading result',\n metadata: item,\n };\n }\n });\n\n // Determine container style based on view mode\n const containerStyle: React.CSSProperties = {\n minHeight: `var(--seekora-results-min-height, ${minHeight})`,\n minWidth: `var(--seekora-results-min-width, ${minWidth})`,\n ...style,\n };\n\n // Determine results list style based on view mode\n const resultsListStyle: React.CSSProperties = {\n ...(viewMode === 'grid' && {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: theme.spacing.medium,\n }),\n ...(viewMode === 'card' && {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: theme.spacing.medium,\n }),\n };\n\n // Log results extraction\n log.verbose('SearchResults: Extracted results', {\n rawResultsCount: rawResults.length,\n resultItemsCount: resultItems.length,\n viewMode,\n hasError: !!error,\n isLoading: loading,\n });\n\n if (error) {\n log.error('SearchResults: Rendering error state', {\n error: error.message,\n stack: error.stack,\n });\n return (\n <div className={clsx(searchResultsTheme.container, className)} style={containerStyle}>\n {renderError ? renderError(error) : defaultRenderError(error)}\n </div>\n );\n }\n\n if (!results || resultItems.length === 0) {\n log.verbose('SearchResults: No results to display');\n return (\n <div className={clsx(searchResultsTheme.container, className)} style={containerStyle}>\n {renderEmpty ? renderEmpty() : defaultRenderEmpty()}\n </div>\n );\n }\n\n const renderFn = renderResult || defaultRenderResult;\n\n return (\n <div\n ref={containerRef}\n className={clsx(searchResultsTheme.container, className)}\n style={containerStyle}\n tabIndex={enableKeyboardNavigation ? 0 : undefined}\n onKeyDown={handleKeyDown}\n role=\"listbox\"\n aria-label=\"Search results\"\n aria-activedescendant={activeIndex >= 0 ? `result-${activeIndex}` : undefined}\n >\n {(results?.totalResults !== undefined || results?.data?.total_results !== undefined) && resultItems.length > 0 && (\n <div\n className={searchResultsTheme.header}\n style={{\n marginBottom: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n }}\n >\n Found {results?.totalResults || results?.data?.total_results || 0} result{(results?.totalResults || results?.data?.total_results || 0) !== 1 ? 's' : ''}\n </div>\n )}\n\n {/* Keyboard navigation hint - hidden by default */}\n\n <div \n className={searchResultsTheme.resultsList}\n style={resultsListStyle}\n >\n {resultItems.map((result, index) => renderFn(result, index, index === activeIndex))}\n </div>\n </div>\n );\n};\n\n","/**\n * Stats Component\n *\n * Displays search statistics (total results, processing time, etc.)\n * Supports inline, badge, and detailed display variants.\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\n\nexport interface StatsTheme {\n container?: string;\n text?: string;\n highlight?: string;\n separator?: string;\n badge?: string;\n badgeLabel?: string;\n badgeValue?: string;\n detailed?: string;\n detailedRow?: string;\n detailedLabel?: string;\n detailedValue?: string;\n}\n\nexport interface StatsProps {\n /** Search results response */\n results?: SearchResponse | null;\n /** Custom render function */\n renderStats?: (stats: {\n totalResults: number;\n processingTime?: number;\n query?: string;\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: StatsTheme;\n /** Show processing time */\n showProcessingTime?: boolean;\n /** Show query */\n showQuery?: boolean;\n /** Custom separator between stats */\n separator?: string;\n /** Display variant */\n variant?: 'inline' | 'badge' | 'detailed';\n /** Show result count (default: true) */\n showResultCount?: boolean;\n /** Custom number formatter (default: toLocaleString) */\n formatNumber?: (n: number) => string;\n}\n\n/** CSS class name used for the animated count fade transition */\nconst ANIMATE_CLASS = 'seekora-stats-animate';\n\n/** Inline <style> for the count-change animation and CSS custom properties */\nconst statsStyleId = 'seekora-stats-styles';\n\nfunction ensureStatsStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(statsStyleId)) return;\n\n const style = document.createElement('style');\n style.id = statsStyleId;\n style.textContent = `\n .seekora-stats-root {\n --seekora-stats-color: inherit;\n --seekora-stats-bg: transparent;\n --seekora-stats-font-size: inherit;\n --seekora-stats-badge-bg: inherit;\n --seekora-stats-badge-color: inherit;\n }\n .${ANIMATE_CLASS} {\n opacity: 0;\n transition: opacity 250ms ease-in-out;\n }\n `;\n document.head.appendChild(style);\n}\n\nexport const Stats: React.FC<StatsProps> = ({\n results: resultsProp,\n renderStats,\n className,\n style,\n theme: customTheme,\n showProcessingTime = false,\n showQuery = false,\n separator = ' \\u2022 ',\n variant = 'inline',\n showResultCount = true,\n formatNumber,\n}) => {\n const { theme } = useSearchContext();\n const { results: stateResults } = useSearchState();\n const statsTheme = customTheme || {};\n\n // Use results from prop if provided, otherwise from state manager\n const results = resultsProp || stateResults;\n\n // Inject keyframe / transition styles once\n useEffect(() => {\n ensureStatsStyles();\n }, []);\n\n // Extract stats from results\n const res = results as SearchResponse | null | undefined;\n const totalResults = (res as any)?.totalResults\n || (res as any)?.data?.total_results\n || (res as any)?.data?.data?.total_results\n || 0;\n\n const processingTime = (res as any)?.processingTimeMS\n || (res as any)?.data?.processingTimeMS\n || (res as any)?.data?.data?.processingTimeMS;\n\n const query = ((res as any)?.query ?? '') as string;\n\n // Number formatter\n const fmt = formatNumber || ((n: number) => n.toLocaleString());\n\n // Animated count change — toggle a CSS class briefly on totalResults change\n const countRef = useRef<HTMLSpanElement>(null);\n const prevTotalRef = useRef<number>(totalResults);\n const [animating, setAnimating] = useState(false);\n\n useEffect(() => {\n if (prevTotalRef.current !== totalResults) {\n prevTotalRef.current = totalResults;\n setAnimating(true);\n // After a frame, remove the class so the transition plays (opacity 0 -> 1)\n const raf = requestAnimationFrame(() => {\n setAnimating(false);\n });\n return () => cancelAnimationFrame(raf);\n }\n }, [totalResults]);\n\n // Helper: border radius value from theme\n const borderRadiusSmall =\n typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small;\n\n // ─── Custom render ────────────────────────────────────────\n if (renderStats) {\n return (\n <div className={clsx('seekora-stats-root', statsTheme.container, className)} style={style}>\n {renderStats({\n totalResults,\n processingTime,\n query,\n })}\n </div>\n );\n }\n\n // ─── Inline variant (original behaviour) ──────────────────\n if (variant === 'inline') {\n const parts: React.ReactNode[] = [];\n\n if (showResultCount) {\n if (totalResults > 0) {\n parts.push(\n <span key=\"count\" className={statsTheme.text}>\n <span\n ref={countRef}\n className={clsx(animating && ANIMATE_CLASS)}\n style={{ transition: 'opacity 250ms ease-in-out' }}\n >\n {fmt(totalResults)}\n </span>\n {` result${totalResults !== 1 ? 's' : ''}`}\n </span>\n );\n } else {\n parts.push(\n <span key=\"count\" className={statsTheme.text}>\n No results\n </span>\n );\n }\n }\n\n if (showProcessingTime && processingTime !== undefined) {\n parts.push(\n <span key=\"time\" className={statsTheme.text}>\n {fmt(processingTime)}ms\n </span>\n );\n }\n\n if (showQuery && query) {\n parts.push(\n <span key=\"query\" className={statsTheme.text}>\n for "{query}"\n </span>\n );\n }\n\n return (\n <div\n className={clsx('seekora-stats-root', statsTheme.container, className)}\n style={{\n fontSize: 'var(--seekora-stats-font-size,' + theme.typography.fontSize.medium + ')',\n color: 'var(--seekora-stats-color,' + theme.colors.text + ')',\n backgroundColor: 'var(--seekora-stats-bg, transparent)',\n ...style,\n }}\n >\n {parts.map((part, index) => (\n <span key={index}>\n {index > 0 && (\n <span\n className={statsTheme.separator}\n style={{ margin: `0 ${theme.spacing.small}` }}\n >\n {separator}\n </span>\n )}\n {part}\n </span>\n ))}\n </div>\n );\n }\n\n // ─── Badge variant ────────────────────────────────────────\n if (variant === 'badge') {\n const badges: React.ReactNode[] = [];\n\n const badgeStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n borderRadius: borderRadiusSmall,\n backgroundColor: `var(--seekora-stats-badge-bg, ${theme.colors.primary}1A)`, // 10 % opacity hex\n color: `var(--seekora-stats-badge-color, ${theme.colors.primary})`,\n fontSize: theme.typography.fontSize.small,\n fontWeight: 500,\n };\n\n if (showResultCount) {\n badges.push(\n <span\n key=\"count\"\n className={clsx(statsTheme.badge)}\n style={badgeStyle}\n >\n <span className={statsTheme.badgeLabel}>Results</span>\n <span\n className={clsx(statsTheme.badgeValue, animating && ANIMATE_CLASS)}\n style={{ fontWeight: 600, transition: 'opacity 250ms ease-in-out' }}\n >\n {totalResults > 0 ? fmt(totalResults) : '0'}\n </span>\n </span>\n );\n }\n\n if (showQuery && query) {\n badges.push(\n <span\n key=\"query\"\n className={clsx(statsTheme.badge)}\n style={badgeStyle}\n >\n <span className={statsTheme.badgeLabel}>Query</span>\n <span\n className={statsTheme.badgeValue}\n style={{ fontWeight: 600 }}\n >\n {query}\n </span>\n </span>\n );\n }\n\n if (showProcessingTime && processingTime !== undefined) {\n badges.push(\n <span\n key=\"time\"\n className={clsx(statsTheme.badge)}\n style={badgeStyle}\n >\n <span className={statsTheme.badgeLabel}>Time</span>\n <span\n className={statsTheme.badgeValue}\n style={{ fontWeight: 600 }}\n >\n {fmt(processingTime)}ms\n </span>\n </span>\n );\n }\n\n return (\n <div\n className={clsx('seekora-stats-root', statsTheme.container, className)}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing.small,\n fontSize: 'var(--seekora-stats-font-size,' + theme.typography.fontSize.small + ')',\n color: 'var(--seekora-stats-color,' + theme.colors.text + ')',\n backgroundColor: 'var(--seekora-stats-bg, transparent)',\n ...style,\n }}\n >\n {badges}\n </div>\n );\n }\n\n // ─── Detailed variant ─────────────────────────────────────\n if (variant === 'detailed') {\n const rows: { label: string; value: React.ReactNode }[] = [];\n\n if (showResultCount) {\n rows.push({\n label: 'Total Results',\n value: (\n <span\n className={clsx(animating && ANIMATE_CLASS)}\n style={{ transition: 'opacity 250ms ease-in-out' }}\n >\n {fmt(totalResults)}\n </span>\n ),\n });\n }\n\n if (showQuery && query) {\n rows.push({ label: 'Query', value: query });\n }\n\n if (showProcessingTime && processingTime !== undefined) {\n rows.push({ label: 'Time', value: `${fmt(processingTime)}ms` });\n }\n\n return (\n <div\n className={clsx('seekora-stats-root', statsTheme.detailed, statsTheme.container, className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing.small,\n fontSize: 'var(--seekora-stats-font-size,' + theme.typography.fontSize.medium + ')',\n color: 'var(--seekora-stats-color,' + theme.colors.text + ')',\n backgroundColor: 'var(--seekora-stats-bg, transparent)',\n ...style,\n }}\n >\n {rows.map((row, index) => (\n <div\n key={index}\n className={statsTheme.detailedRow}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n }}\n >\n <span\n className={statsTheme.detailedLabel}\n style={{\n color: theme.colors.textSecondary,\n fontWeight: 500,\n }}\n >\n {row.label}:\n </span>\n <span\n className={statsTheme.detailedValue}\n style={{\n color: theme.colors.text,\n fontWeight: 600,\n }}\n >\n {row.value}\n </span>\n </div>\n ))}\n </div>\n );\n }\n\n // Fallback (should not be reached)\n return null;\n};\n","/**\n * Responsive utilities for adaptive layouts across all screen sizes\n *\n * Provides hooks and utilities for:\n * - Responsive breakpoints\n * - Responsive grid columns\n * - Responsive spacing\n * - Responsive font sizes\n * - Touch target sizing\n */\n\nimport { useState, useEffect } from 'react';\n\n/**\n * Standard breakpoints (in pixels)\n */\nexport const BREAKPOINTS = {\n xs: 0, // Extra small devices (portrait phones, < 576px)\n sm: 576, // Small devices (landscape phones, ≥ 576px)\n md: 768, // Medium devices (tablets, ≥ 768px)\n lg: 992, // Large devices (desktops, ≥ 992px)\n xl: 1200, // Extra large devices (large desktops, ≥ 1200px)\n xxl: 1400, // Extra extra large devices (larger desktops, ≥ 1400px)\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\nexport type BreakpointValue = typeof BREAKPOINTS[Breakpoint];\n\n/**\n * Get current breakpoint based on window width\n */\nexport function getCurrentBreakpoint(width: number): Breakpoint {\n if (width >= BREAKPOINTS.xxl) return 'xxl';\n if (width >= BREAKPOINTS.xl) return 'xl';\n if (width >= BREAKPOINTS.lg) return 'lg';\n if (width >= BREAKPOINTS.md) return 'md';\n if (width >= BREAKPOINTS.sm) return 'sm';\n return 'xs';\n}\n\n/**\n * Hook to get current breakpoint\n */\nexport function useBreakpoint(): Breakpoint {\n // Always start with 'lg' to avoid hydration mismatch between server and client\n const [breakpoint, setBreakpoint] = useState<Breakpoint>('lg');\n\n useEffect(() => {\n const handleResize = () => {\n setBreakpoint(getCurrentBreakpoint(window.innerWidth));\n };\n\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return breakpoint;\n}\n\n/**\n * Hook to check if current viewport matches breakpoint\n */\nexport function useMediaQuery(query: string): boolean {\n // Always start with false to avoid hydration mismatch between server and client\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(query);\n const handleChange = () => setMatches(mediaQuery.matches);\n\n handleChange();\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Check if mobile viewport (< 768px)\n */\nexport function useIsMobile(): boolean {\n return useMediaQuery(`(max-width: ${BREAKPOINTS.md - 1}px)`);\n}\n\n/**\n * Check if tablet viewport (768px - 991px)\n */\nexport function useIsTablet(): boolean {\n return useMediaQuery(`(min-width: ${BREAKPOINTS.md}px) and (max-width: ${BREAKPOINTS.lg - 1}px)`);\n}\n\n/**\n * Check if desktop viewport (>= 992px)\n */\nexport function useIsDesktop(): boolean {\n return useMediaQuery(`(min-width: ${BREAKPOINTS.lg}px)`);\n}\n\n/**\n * Get responsive grid columns based on breakpoint\n */\nexport function getResponsiveColumns(breakpoint: Breakpoint, defaultColumns: number = 4): number {\n switch (breakpoint) {\n case 'xs':\n return Math.min(defaultColumns, 1); // 1 column on extra small\n case 'sm':\n return Math.min(defaultColumns, 2); // 2 columns on small\n case 'md':\n return Math.min(defaultColumns, 3); // 3 columns on medium\n case 'lg':\n return Math.min(defaultColumns, 4); // 4 columns on large\n case 'xl':\n return Math.min(defaultColumns, 5); // 5 columns on extra large\n case 'xxl':\n return defaultColumns; // Full columns on extra extra large\n default:\n return defaultColumns;\n }\n}\n\n/**\n * Hook to get responsive grid columns\n */\nexport function useResponsiveColumns(defaultColumns: number = 4): number {\n const breakpoint = useBreakpoint();\n return getResponsiveColumns(breakpoint, defaultColumns);\n}\n\n/**\n * Get responsive spacing value\n */\nexport function getResponsiveSpacing(\n breakpoint: Breakpoint,\n spacing: { xs?: number; sm?: number; md?: number; lg?: number; xl?: number; xxl?: number }\n): number {\n return spacing[breakpoint] ?? spacing.md ?? spacing.sm ?? spacing.xs ?? 12;\n}\n\n/**\n * Get responsive font size\n */\nexport function getResponsiveFontSize(\n breakpoint: Breakpoint,\n sizes: { xs?: string; sm?: string; md?: string; lg?: string; xl?: string; xxl?: string }\n): string {\n return sizes[breakpoint] ?? sizes.md ?? sizes.sm ?? sizes.xs ?? '1rem';\n}\n\n/**\n * Minimum touch target size (WCAG AAA)\n */\nexport const MIN_TOUCH_TARGET = 44; // 44x44px minimum for touch\n\n/**\n * Get touch target size based on device type\n */\nexport function getTouchTargetSize(isMobile: boolean, baseSize: number = 32): number {\n return isMobile ? Math.max(MIN_TOUCH_TARGET, baseSize) : baseSize;\n}\n\n/**\n * Hook to get responsive touch target size\n */\nexport function useTouchTargetSize(baseSize: number = 32): number {\n const isMobile = useIsMobile();\n return getTouchTargetSize(isMobile, baseSize);\n}\n\n/**\n * Responsive value helper - returns different values based on breakpoint\n */\nexport function useResponsiveValue<T>(\n values: Partial<Record<Breakpoint, T>> & { default: T }\n): T {\n const breakpoint = useBreakpoint();\n return values[breakpoint] ?? values.default;\n}\n\n/**\n * Get responsive gap/padding for grids\n */\nexport function getResponsiveGap(breakpoint: Breakpoint, baseGap: number = 12): number {\n switch (breakpoint) {\n case 'xs':\n return Math.max(4, baseGap * 0.5); // 50% on extra small\n case 'sm':\n return Math.max(6, baseGap * 0.75); // 75% on small\n case 'md':\n case 'lg':\n return baseGap; // 100% on medium/large\n case 'xl':\n case 'xxl':\n return baseGap * 1.25; // 125% on extra large\n default:\n return baseGap;\n }\n}\n\n/**\n * Hook to get responsive gap\n */\nexport function useResponsiveGap(baseGap: number = 12): number {\n const breakpoint = useBreakpoint();\n return getResponsiveGap(breakpoint, baseGap);\n}\n\n/**\n * Get responsive padding for containers\n */\nexport function getResponsivePadding(breakpoint: Breakpoint, basePadding: number = 12): number {\n switch (breakpoint) {\n case 'xs':\n return Math.max(8, basePadding * 0.67); // ~67% on extra small\n case 'sm':\n return Math.max(10, basePadding * 0.83); // ~83% on small\n case 'md':\n case 'lg':\n return basePadding; // 100% on medium/large\n case 'xl':\n case 'xxl':\n return basePadding * 1.33; // ~133% on extra large\n default:\n return basePadding;\n }\n}\n\n/**\n * Hook to get responsive padding\n */\nexport function useResponsivePadding(basePadding: number = 12): number {\n const breakpoint = useBreakpoint();\n return getResponsivePadding(breakpoint, basePadding);\n}\n\n/**\n * CSS media query strings for use in style objects\n */\nexport const MEDIA_QUERIES = {\n xs: `(max-width: ${BREAKPOINTS.sm - 1}px)`,\n sm: `(min-width: ${BREAKPOINTS.sm}px)`,\n md: `(min-width: ${BREAKPOINTS.md}px)`,\n lg: `(min-width: ${BREAKPOINTS.lg}px)`,\n xl: `(min-width: ${BREAKPOINTS.xl}px)`,\n xxl: `(min-width: ${BREAKPOINTS.xxl}px)`,\n mobile: `(max-width: ${BREAKPOINTS.md - 1}px)`,\n tablet: `(min-width: ${BREAKPOINTS.md}px) and (max-width: ${BREAKPOINTS.lg - 1}px)`,\n desktop: `(min-width: ${BREAKPOINTS.lg}px)`,\n} as const;\n\n/**\n * Helper to generate responsive CSS with media queries\n */\nexport function responsiveStyle<T extends React.CSSProperties>(\n base: T,\n mobile?: Partial<T>,\n tablet?: Partial<T>,\n desktop?: Partial<T>\n): T {\n // This returns base styles only - media queries should be handled via CSS-in-JS or CSS files\n // For inline styles, use the hooks instead\n return base;\n}\n","/**\n * Pagination Component\n *\n * Displays pagination controls for search results.\n * Supports three display variants: numbered, load-more, and simple.\n *\n * CSS Variables (applied to the container element):\n * --seekora-pagination-bg\n * --seekora-pagination-color\n * --seekora-pagination-active-bg\n * --seekora-pagination-active-color\n * --seekora-pagination-border\n * --seekora-pagination-radius\n */\n\nimport React from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { useIsMobile, useTouchTargetSize } from '../utils/responsive';\n\nexport interface PaginationTheme {\n container?: string;\n list?: string;\n item?: string;\n itemActive?: string;\n itemDisabled?: string;\n link?: string;\n ellipsis?: string;\n /** Class for the Load More button */\n loadMoreButton?: string;\n /** Class for the Load More descriptive text (e.g. \"X remaining\") */\n loadMoreText?: string;\n /** Class for the simple variant outer container */\n simpleContainer?: string;\n /** Class for the \"Page X of Y\" text in the simple variant */\n simpleText?: string;\n /** Class for Previous/Next buttons in the simple variant */\n simpleButton?: string;\n /** Class for the \"Page X of Y\" info text (usable in any variant) */\n pageInfo?: string;\n}\n\nexport interface PaginationProps {\n /** Search results response */\n results?: SearchResponse | null;\n /** Current page number (1-indexed) */\n currentPage?: number;\n /** Items per page */\n itemsPerPage?: number;\n /** Total number of pages */\n totalPages?: number;\n /** Callback when page changes */\n onPageChange?: (page: number) => void;\n /** Maximum number of page buttons to show */\n maxPages?: number;\n /** Show first/last page buttons */\n showFirstLast?: boolean;\n /** Show previous/next buttons */\n showPrevNext?: boolean;\n /** Custom render function for page button */\n renderPageButton?: (page: number, isActive: boolean, isDisabled: boolean) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: PaginationTheme;\n /**\n * Display variant.\n * - 'numbered' (default): numbered page buttons with prev/next\n * - 'load-more': single \"Load More\" button\n * - 'simple': Previous / Next buttons with \"Page X of Y\" text\n */\n variant?: 'numbered' | 'load-more' | 'simple';\n /** Label for the Load More button (default: \"Load More\") */\n loadMoreText?: string;\n /**\n * Button / text sizing.\n * - 'small': compact\n * - 'medium' (default): standard\n * - 'large': spacious\n */\n size?: 'small' | 'medium' | 'large';\n /**\n * Show \"Page X of Y\" text.\n * Defaults to false for numbered, true for simple.\n */\n showPageInfo?: boolean;\n /** Label for the Previous button (default: \"Previous\") */\n previousLabel?: string;\n /** Label for the Next button (default: \"Next\") */\n nextLabel?: string;\n}\n\n/** Size-specific style tokens (responsive) */\nconst getSizeTokens = (size: 'small' | 'medium' | 'large', isMobile: boolean) => {\n if (isMobile) {\n // Larger touch targets on mobile\n return {\n small: { paddingKey: 'small' as const, fontSizeKey: 'small' as const, minWidth: '40px', minHeight: '40px' },\n medium: { paddingKey: 'small' as const, fontSizeKey: 'medium' as const, minWidth: '44px', minHeight: '44px' },\n large: { paddingKey: 'medium' as const, fontSizeKey: 'large' as const, minWidth: '48px', minHeight: '48px' },\n }[size];\n }\n return {\n small: { paddingKey: 'small' as const, fontSizeKey: 'small' as const, minWidth: '32px', minHeight: '32px' },\n medium: { paddingKey: 'small' as const, fontSizeKey: 'medium' as const, minWidth: '40px', minHeight: '40px' },\n large: { paddingKey: 'medium' as const, fontSizeKey: 'large' as const, minWidth: '48px', minHeight: '48px' },\n }[size];\n};\n\nexport const Pagination: React.FC<PaginationProps> = ({\n results: resultsProp,\n currentPage: currentPageProp,\n itemsPerPage: itemsPerPageProp,\n totalPages: totalPagesProp,\n onPageChange,\n maxPages: maxPagesProp = 7,\n showFirstLast = true,\n showPrevNext = true,\n renderPageButton,\n className,\n style,\n theme: customTheme,\n variant = 'numbered',\n loadMoreText = 'Load More',\n size = 'medium',\n showPageInfo,\n previousLabel = 'Previous',\n nextLabel = 'Next',\n}) => {\n const { theme } = useSearchContext();\n const { results: stateResults, currentPage: stateCurrentPage, setPage } = useSearchState();\n const paginationTheme = customTheme || {};\n const isMobile = useIsMobile();\n\n // Responsive maxPages - show fewer pages on mobile\n const maxPages = isMobile ? Math.min(maxPagesProp, 5) : maxPagesProp;\n\n // Use results from prop if provided, otherwise from state manager\n const results = resultsProp || stateResults;\n\n // Use currentPage from prop if provided, otherwise from state manager\n const currentPage = currentPageProp || stateCurrentPage;\n\n const res = results as SearchResponse | null | undefined;\n const itemsPerPage = itemsPerPageProp\n || (res as any)?.perPage\n || (res as any)?.data?.per_page\n || (res as any)?.data?.data?.per_page\n || 20;\n\n const totalResults = (res as any)?.totalResults\n || (res as any)?.data?.total_results\n || (res as any)?.data?.data?.total_results\n || 0;\n\n const totalPages = totalPagesProp\n || (res as any)?.totalPages\n || (res as any)?.data?.total_pages\n || (res as any)?.data?.data?.total_pages\n || Math.ceil(totalResults / itemsPerPage);\n\n // Resolve whether to show page info text\n const resolvedShowPageInfo = showPageInfo !== undefined\n ? showPageInfo\n : variant === 'simple';\n\n // Size tokens (responsive)\n const sizeTokens = getSizeTokens(size, isMobile);\n\n // CSS variable aware helpers — allow overrides via custom properties\n const cssVarBg = 'var(--seekora-pagination-bg, ' + theme.colors.background + ')';\n const cssVarColor = 'var(--seekora-pagination-color, ' + theme.colors.text + ')';\n const cssVarActiveBg = 'var(--seekora-pagination-active-bg, ' + theme.colors.primary + ')';\n const cssVarActiveColor = 'var(--seekora-pagination-active-color, #fff)';\n const cssVarBorder = 'var(--seekora-pagination-border, ' + theme.colors.border + ')';\n const cssVarRadius = 'var(--seekora-pagination-radius, ' + (typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium) + ')';\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) return;\n\n // Update state manager (automatically triggers search)\n setPage(page);\n\n // Call callback for backwards compatibility\n if (onPageChange) {\n onPageChange(page);\n }\n };\n\n const defaultRenderPageButton = (page: number, isActive: boolean, isDisabled: boolean) => (\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => !isDisabled && handlePageChange(page)}\n aria-current={isActive ? 'page' : undefined}\n aria-label={`Page ${page}`}\n className={clsx(\n paginationTheme.item,\n isActive && paginationTheme.itemActive,\n isDisabled && paginationTheme.itemDisabled\n )}\n style={{\n padding: theme.spacing[sizeTokens.paddingKey],\n margin: isMobile ? `0 4px` : `0 ${theme.spacing.small}`,\n border: `1px solid ${cssVarBorder}`,\n borderRadius: cssVarRadius,\n backgroundColor: isActive ? cssVarActiveBg : cssVarBg,\n color: isActive ? cssVarActiveColor : cssVarColor,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n minWidth: sizeTokens.minWidth,\n minHeight: sizeTokens.minHeight,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...(isActive && {\n fontWeight: 'bold',\n }),\n }}\n >\n {page}\n </button>\n );\n\n if (totalPages <= 1 && variant !== 'load-more') {\n return null;\n }\n\n // For load-more, hide when there are no more pages to load\n if (variant === 'load-more' && currentPage >= totalPages) {\n return null;\n }\n\n // Calculate page range to display\n const getPageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = [];\n const halfRange = Math.floor(maxPages / 2);\n\n let startPage = Math.max(1, currentPage - halfRange);\n let endPage = Math.min(totalPages, currentPage + halfRange);\n\n // Adjust if we're near the beginning or end\n if (currentPage <= halfRange) {\n endPage = Math.min(maxPages, totalPages);\n }\n if (currentPage >= totalPages - halfRange) {\n startPage = Math.max(1, totalPages - maxPages + 1);\n }\n\n if (showFirstLast && startPage > 1) {\n pages.push(1);\n if (startPage > 2) {\n pages.push('ellipsis');\n }\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n\n if (showFirstLast && endPage < totalPages) {\n if (endPage < totalPages - 1) {\n pages.push('ellipsis');\n }\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n // ── Page info element ──────────────────────────────────────────────\n const pageInfoElement = resolvedShowPageInfo ? (\n <span\n className={clsx(paginationTheme.pageInfo)}\n style={{\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n color: cssVarColor,\n padding: `0 ${theme.spacing.small}`,\n whiteSpace: 'nowrap',\n }}\n aria-live=\"polite\"\n >\n Page {currentPage} of {totalPages}\n </span>\n ) : null;\n\n // ── Load More variant ──────────────────────────────────────────────\n if (variant === 'load-more') {\n const remaining = Math.max(0, totalResults - currentPage * itemsPerPage);\n\n return (\n <nav\n className={clsx(paginationTheme.container, className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: theme.spacing.small,\n ...style,\n }}\n aria-label=\"Pagination\"\n >\n <button\n type=\"button\"\n onClick={() => handlePageChange(currentPage + 1)}\n className={clsx(paginationTheme.loadMoreButton)}\n style={{\n padding: `${theme.spacing[sizeTokens.paddingKey]} ${theme.spacing.large}`,\n border: 'none',\n borderRadius: cssVarRadius,\n backgroundColor: cssVarActiveBg,\n color: cssVarActiveColor,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n fontWeight: theme.typography.fontWeight?.medium ?? 500,\n transition: theme.transitions?.fast ?? '150ms ease-in-out',\n minWidth: sizeTokens.minWidth,\n }}\n aria-label={remaining > 0 ? `${loadMoreText} (${remaining} remaining)` : loadMoreText}\n >\n {loadMoreText}\n {remaining > 0 && (\n <span\n className={clsx(paginationTheme.loadMoreText)}\n style={{\n marginLeft: theme.spacing.small,\n opacity: 0.85,\n fontSize: theme.typography.fontSize.small,\n }}\n >\n ({remaining} remaining)\n </span>\n )}\n </button>\n {pageInfoElement}\n </nav>\n );\n }\n\n // ── Simple variant ─────────────────────────────────────────────────\n if (variant === 'simple') {\n return (\n <nav\n className={clsx(paginationTheme.container, paginationTheme.simpleContainer, className)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.spacing.medium,\n ...style,\n }}\n aria-label=\"Pagination\"\n >\n <button\n type=\"button\"\n disabled={currentPage === 1}\n onClick={() => handlePageChange(currentPage - 1)}\n className={clsx(\n paginationTheme.simpleButton,\n currentPage === 1 && paginationTheme.itemDisabled\n )}\n style={{\n padding: `${theme.spacing[sizeTokens.paddingKey]} ${theme.spacing.medium}`,\n border: `1px solid ${cssVarBorder}`,\n borderRadius: cssVarRadius,\n backgroundColor: cssVarBg,\n color: cssVarColor,\n cursor: currentPage === 1 ? 'not-allowed' : 'pointer',\n opacity: currentPage === 1 ? 0.5 : 1,\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n minWidth: sizeTokens.minWidth,\n transition: theme.transitions?.fast ?? '150ms ease-in-out',\n }}\n aria-label=\"Previous page\"\n >\n {previousLabel}\n </button>\n\n <span\n className={clsx(paginationTheme.simpleText, paginationTheme.pageInfo)}\n style={{\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n color: cssVarColor,\n whiteSpace: 'nowrap',\n }}\n aria-live=\"polite\"\n >\n Page {currentPage} of {totalPages}\n </span>\n\n <button\n type=\"button\"\n disabled={currentPage === totalPages}\n onClick={() => handlePageChange(currentPage + 1)}\n className={clsx(\n paginationTheme.simpleButton,\n currentPage === totalPages && paginationTheme.itemDisabled\n )}\n style={{\n padding: `${theme.spacing[sizeTokens.paddingKey]} ${theme.spacing.medium}`,\n border: `1px solid ${cssVarBorder}`,\n borderRadius: cssVarRadius,\n backgroundColor: cssVarBg,\n color: cssVarColor,\n cursor: currentPage === totalPages ? 'not-allowed' : 'pointer',\n opacity: currentPage === totalPages ? 0.5 : 1,\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n minWidth: sizeTokens.minWidth,\n transition: theme.transitions?.fast ?? '150ms ease-in-out',\n }}\n aria-label=\"Next page\"\n >\n {nextLabel}\n </button>\n </nav>\n );\n }\n\n // ── Numbered variant (default — original behavior) ─────────────────\n const pageNumbers = getPageNumbers();\n\n return (\n <nav\n className={clsx(paginationTheme.container, className)}\n style={style}\n aria-label=\"Pagination\"\n >\n <ul\n className={paginationTheme.list}\n style={{\n listStyle: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n margin: 0,\n flexWrap: 'wrap',\n }}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n handlePageChange(currentPage - 1);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n handlePageChange(currentPage + 1);\n } else if (e.key === 'Home') {\n e.preventDefault();\n handlePageChange(1);\n } else if (e.key === 'End') {\n e.preventDefault();\n handlePageChange(totalPages);\n }\n }}\n >\n {showPrevNext && (\n <li>\n <button\n type=\"button\"\n disabled={currentPage === 1}\n onClick={() => handlePageChange(currentPage - 1)}\n className={clsx(\n paginationTheme.item,\n currentPage === 1 && paginationTheme.itemDisabled\n )}\n style={{\n padding: theme.spacing[sizeTokens.paddingKey],\n margin: `0 ${theme.spacing.small}`,\n border: `1px solid ${cssVarBorder}`,\n borderRadius: cssVarRadius,\n backgroundColor: cssVarBg,\n color: cssVarColor,\n cursor: currentPage === 1 ? 'not-allowed' : 'pointer',\n opacity: currentPage === 1 ? 0.5 : 1,\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n }}\n aria-label=\"Previous page\"\n >\n {previousLabel}\n </button>\n </li>\n )}\n\n {pageNumbers.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <li key={`ellipsis-${index}`}>\n <span\n className={paginationTheme.ellipsis}\n style={{\n padding: theme.spacing[sizeTokens.paddingKey],\n margin: `0 ${theme.spacing.small}`,\n color: cssVarColor,\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n }}\n >\n ...\n </span>\n </li>\n );\n }\n\n const isActive = page === currentPage;\n const isDisabled = false;\n\n return (\n <li key={page}>\n {renderPageButton\n ? renderPageButton(page, isActive, isDisabled)\n : defaultRenderPageButton(page, isActive, isDisabled)}\n </li>\n );\n })}\n\n {showPrevNext && (\n <li>\n <button\n type=\"button\"\n disabled={currentPage === totalPages}\n onClick={() => handlePageChange(currentPage + 1)}\n className={clsx(\n paginationTheme.item,\n currentPage === totalPages && paginationTheme.itemDisabled\n )}\n style={{\n padding: theme.spacing[sizeTokens.paddingKey],\n margin: `0 ${theme.spacing.small}`,\n border: `1px solid ${cssVarBorder}`,\n borderRadius: cssVarRadius,\n backgroundColor: cssVarBg,\n color: cssVarColor,\n cursor: currentPage === totalPages ? 'not-allowed' : 'pointer',\n opacity: currentPage === totalPages ? 0.5 : 1,\n fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],\n }}\n aria-label=\"Next page\"\n >\n {nextLabel}\n </button>\n </li>\n )}\n\n {resolvedShowPageInfo && (\n <li style={{ marginLeft: theme.spacing.small }}>\n {pageInfoElement}\n </li>\n )}\n </ul>\n </nav>\n );\n};\n","/**\n * CustomSelect — lightweight, accessible custom dropdown replacement for native <select>.\n *\n * CSS Variables (apply on a parent element to customize):\n * --seekora-select-bg — background color (default: #fff)\n * --seekora-select-color — text color (default: inherit)\n * --seekora-select-border — border color (default: rgba(128,128,128,0.3))\n * --seekora-select-hover-bg — option hover background (default: #f3f4f6)\n * --seekora-select-active-bg — selected option background (default: #eff6ff)\n * --seekora-select-active-color — selected option text color (default: inherit)\n * --seekora-select-radius — border radius (default: 6px)\n * --seekora-select-font-size — font size (default: 0.875rem)\n */\n\nimport React, { useState, useRef, useCallback, useEffect, useId } from 'react';\nimport { clsx } from 'clsx';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface CustomSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CustomSelectTheme {\n trigger?: string;\n menu?: string;\n option?: string;\n optionActive?: string;\n optionDisabled?: string;\n}\n\nexport interface CustomSelectProps {\n value: string;\n onChange: (value: string) => void;\n options: CustomSelectOption[];\n placeholder?: string;\n className?: string;\n style?: React.CSSProperties;\n theme?: CustomSelectTheme;\n /** aria-label for the trigger button */\n 'aria-label'?: string;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const CustomSelect: React.FC<CustomSelectProps> = ({\n value,\n onChange,\n options,\n placeholder = 'Select...',\n className,\n style,\n theme: customTheme,\n 'aria-label': ariaLabel,\n disabled = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const instanceId = useId();\n const t = customTheme || {};\n\n const selectedOption = options.find((o) => o.value === value);\n const displayLabel = selectedOption?.label ?? placeholder;\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n const handleMouseDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n setActiveIndex(-1);\n }\n };\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [isOpen]);\n\n // Scroll active item into view\n useEffect(() => {\n if (!isOpen || activeIndex < 0 || !menuRef.current) return;\n const item = menuRef.current.children[activeIndex] as HTMLElement | undefined;\n item?.scrollIntoView?.({ block: 'nearest' });\n }, [activeIndex, isOpen]);\n\n const toggle = useCallback(() => {\n if (disabled) return;\n setIsOpen((prev) => {\n if (!prev) {\n // Opening — highlight current selection\n const idx = options.findIndex((o) => o.value === value);\n setActiveIndex(idx >= 0 ? idx : 0);\n }\n return !prev;\n });\n }, [disabled, options, value]);\n\n const selectOption = useCallback(\n (opt: CustomSelectOption) => {\n if (opt.disabled) return;\n onChange(opt.value);\n setIsOpen(false);\n setActiveIndex(-1);\n },\n [onChange],\n );\n\n // Find next non-disabled index in given direction\n const findNextEnabled = (from: number, dir: 1 | -1): number => {\n let idx = from;\n for (let i = 0; i < options.length; i++) {\n idx += dir;\n if (idx < 0) idx = options.length - 1;\n if (idx >= options.length) idx = 0;\n if (!options[idx].disabled) return idx;\n }\n return from;\n };\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(e.key)) {\n e.preventDefault();\n toggle();\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setActiveIndex((prev) => findNextEnabled(prev, 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex((prev) => findNextEnabled(prev, -1));\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (activeIndex >= 0 && !options[activeIndex].disabled) {\n selectOption(options[activeIndex]);\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsOpen(false);\n setActiveIndex(-1);\n break;\n case 'Home':\n e.preventDefault();\n setActiveIndex(findNextEnabled(-1, 1));\n break;\n case 'End':\n e.preventDefault();\n setActiveIndex(findNextEnabled(options.length, -1));\n break;\n case 'Tab':\n setIsOpen(false);\n setActiveIndex(-1);\n break;\n }\n },\n [disabled, isOpen, activeIndex, options, toggle, selectOption],\n );\n\n const menuId = `seekora-select-menu-${instanceId}`;\n\n return (\n <div\n ref={containerRef}\n className={clsx('seekora-select', className)}\n style={{ position: 'relative', display: 'inline-block', ...style }}\n onKeyDown={handleKeyDown}\n >\n {/* Trigger */}\n <button\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n aria-label={ariaLabel}\n aria-activedescendant={\n isOpen && activeIndex >= 0\n ? `${menuId}-opt-${activeIndex}`\n : undefined\n }\n disabled={disabled}\n onClick={toggle}\n className={clsx('seekora-select__trigger', t.trigger)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n width: '100%',\n padding: '8px 12px',\n fontSize: 'var(--seekora-select-font-size, 0.875rem)',\n lineHeight: 1.4,\n border: '1px solid var(--seekora-select-border, rgba(128,128,128,0.3))',\n borderRadius: 'var(--seekora-select-radius, 6px)',\n backgroundColor: 'var(--seekora-select-bg, #fff)',\n color: 'var(--seekora-select-color, inherit)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n textAlign: 'left',\n fontFamily: 'inherit',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {displayLabel}\n </span>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n style={{\n flexShrink: 0,\n transition: 'transform 0.15s ease',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n >\n <path d=\"M2.5 4.5L6 8L9.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n\n {/* Dropdown menu */}\n {isOpen && (\n <div\n ref={menuRef}\n id={menuId}\n role=\"listbox\"\n className={clsx('seekora-select__menu', t.menu)}\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n zIndex: 9999,\n marginTop: 4,\n padding: '4px 0',\n border: '1px solid var(--seekora-select-border, rgba(128,128,128,0.3))',\n borderRadius: 'var(--seekora-select-radius, 6px)',\n backgroundColor: 'var(--seekora-select-bg, #fff)',\n boxShadow: '0 4px 12px rgba(0,0,0,0.1)',\n maxHeight: 220,\n overflowY: 'auto',\n }}\n >\n {options.map((opt, idx) => {\n const isSelected = opt.value === value;\n const isHighlighted = idx === activeIndex;\n\n return (\n <div\n key={opt.value}\n id={`${menuId}-opt-${idx}`}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled || undefined}\n className={clsx(\n 'seekora-select__option',\n t.option,\n isSelected && 'seekora-select__option--selected',\n isHighlighted && (t.optionActive || 'seekora-select__option--highlighted'),\n opt.disabled && (t.optionDisabled || 'seekora-select__option--disabled'),\n )}\n onMouseEnter={() => !opt.disabled && setActiveIndex(idx)}\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent blur\n if (!opt.disabled) selectOption(opt);\n }}\n style={{\n padding: '6px 12px',\n fontSize: 'var(--seekora-select-font-size, 0.875rem)',\n cursor: opt.disabled ? 'not-allowed' : 'pointer',\n backgroundColor: isHighlighted\n ? 'var(--seekora-select-hover-bg, #f3f4f6)'\n : isSelected\n ? 'var(--seekora-select-active-bg, #eff6ff)'\n : 'transparent',\n color: opt.disabled\n ? 'rgba(128,128,128,0.5)'\n : isSelected\n ? 'var(--seekora-select-active-color, inherit)'\n : 'var(--seekora-select-color, inherit)',\n fontWeight: isSelected ? 500 : 400,\n opacity: opt.disabled ? 0.5 : 1,\n transition: 'background-color 0.1s ease',\n }}\n >\n {opt.label}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","/**\n * SortBy Component\n *\n * Displays sort options for search results in multiple display variants:\n * - dropdown (default) — native select element\n * - button-group — horizontal row of toggle buttons\n * - radio-group — vertical list of radio inputs\n *\n * Integrates with SearchStateManager for automatic state sync.\n *\n * CSS Variables (apply on a parent element to customize):\n * --seekora-sort-bg — background color\n * --seekora-sort-color — text color\n * --seekora-sort-border — border color\n * --seekora-sort-active-bg — active item background\n * --seekora-sort-active-color — active item text color\n */\n\nimport React, { useCallback, useEffect, useId } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport { CustomSelect } from './primitives/CustomSelect';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SortOption {\n value: string;\n label: string;\n}\n\nexport type SortByVariant = 'dropdown' | 'button-group' | 'radio-group';\nexport type SortBySize = 'small' | 'medium' | 'large';\n\nexport interface SortByTheme {\n /** Root container */\n container?: string;\n /** Dropdown select element */\n select?: string;\n /** Dropdown option element */\n option?: string;\n /** Optional label above the control */\n label?: string;\n /** Button group wrapper */\n buttonGroup?: string;\n /** Individual button in the group */\n buttonGroupItem?: string;\n /** Active button in the group */\n buttonGroupItemActive?: string;\n /** Radio group wrapper */\n radioGroup?: string;\n /** Individual radio row (input + label) */\n radioItem?: string;\n /** Active radio row */\n radioItemActive?: string;\n /** Radio label text */\n radioLabel?: string;\n}\n\nexport interface SortByProps {\n /** Available sort options */\n options: SortOption[];\n /** Current sort value (controlled mode - overrides StateManager) */\n value?: string;\n /** Default sort value */\n defaultValue?: string;\n /** Callback when sort changes */\n onSortChange?: (value: string) => void;\n /** Custom render function for select (only used in dropdown variant) */\n renderSelect?: (props: {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n options: SortOption[];\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: SortByTheme;\n /** Placeholder text (dropdown variant) */\n placeholder?: string;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n /** Display variant (default: 'dropdown') */\n variant?: SortByVariant;\n /** Optional label text displayed above the control */\n label?: string;\n /** Whether to show the label (default: true when label is provided) */\n showLabel?: boolean;\n /** Size variant affecting padding and font size (default: 'medium') */\n size?: SortBySize;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Map a size token to theme fontSize and spacing values. */\nfunction sizeStyles(\n size: SortBySize,\n theme: { typography: { fontSize: { small: string; medium: string; large: string } }; spacing: { small: string; medium: string } },\n) {\n switch (size) {\n case 'small':\n return { fontSize: theme.typography.fontSize.small, padding: theme.spacing.small };\n case 'large':\n return { fontSize: theme.typography.fontSize.large, padding: theme.spacing.medium };\n case 'medium':\n default:\n return { fontSize: theme.typography.fontSize.medium, padding: theme.spacing.small };\n }\n}\n\nfunction resolveBorderRadius(br: string | { medium: string }): string {\n return typeof br === 'string' ? br : br.medium;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const SortBy: React.FC<SortByProps> = ({\n options,\n value: valueProp,\n defaultValue,\n onSortChange,\n renderSelect,\n className,\n style,\n theme: customTheme,\n placeholder = 'Sort by...',\n syncWithState = true,\n variant = 'dropdown',\n label,\n showLabel,\n size = 'medium',\n}) => {\n const { theme } = useSearchContext();\n const { sortBy: stateManagerSortBy, setSortBy } = useSearchState();\n const sortByTheme = customTheme || {};\n const instanceId = useId();\n\n // Determine whether the label should render.\n const shouldShowLabel = showLabel !== undefined ? showLabel : !!label;\n\n // ------ State ----------------------------------------------------------\n\n const [internalValue, setInternalValue] = React.useState(\n defaultValue || options[0]?.value || '',\n );\n\n // Sync with StateManager on mount if defaultValue is set\n useEffect(() => {\n if (syncWithState && defaultValue && !stateManagerSortBy) {\n setSortBy(defaultValue, false); // Don't trigger search on initial sync\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Determine the current value: controlled prop > StateManager > internal\n const value =\n valueProp !== undefined\n ? valueProp\n : syncWithState && stateManagerSortBy\n ? stateManagerSortBy\n : internalValue;\n\n // ------ Handlers -------------------------------------------------------\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n applyValue(e.target.value);\n };\n\n const applyValue = useCallback(\n (newValue: string) => {\n setInternalValue(newValue);\n\n if (syncWithState) {\n setSortBy(newValue);\n }\n\n if (onSortChange) {\n onSortChange(newValue);\n }\n },\n [syncWithState, setSortBy, onSortChange],\n );\n\n // ------ Derived styles -------------------------------------------------\n\n const { fontSize, padding } = sizeStyles(size, theme);\n const borderRadius = resolveBorderRadius(theme.borderRadius);\n\n const cssVarStyle: React.CSSProperties = {\n '--seekora-sort-bg': theme.colors.background,\n '--seekora-sort-color': theme.colors.text,\n '--seekora-sort-border': theme.colors.border,\n '--seekora-sort-active-bg': theme.colors.primary,\n '--seekora-sort-active-color': theme.colors.background,\n } as React.CSSProperties;\n\n // ------ Label ----------------------------------------------------------\n\n const labelElement =\n shouldShowLabel && label ? (\n <span\n className={clsx(sortByTheme.label)}\n style={{\n display: 'block',\n marginBottom: theme.spacing.small,\n fontSize,\n color: 'var(--seekora-sort-color)',\n fontWeight: 500,\n }}\n >\n {label}\n </span>\n ) : null;\n\n // ------ Dropdown variant (original) ------------------------------------\n\n if (variant === 'dropdown') {\n if (renderSelect) {\n return (\n <div\n className={clsx(sortByTheme.container, className)}\n style={{ ...cssVarStyle, ...style }}\n >\n {labelElement}\n {renderSelect({\n value,\n onChange: handleChange,\n options,\n })}\n </div>\n );\n }\n\n return (\n <div\n className={clsx(sortByTheme.container, className)}\n style={{ ...cssVarStyle, ...style }}\n >\n {labelElement}\n <CustomSelect\n value={value}\n onChange={applyValue}\n options={options}\n placeholder={placeholder}\n aria-label={label || 'Sort results'}\n className={clsx(sortByTheme.select)}\n style={{\n width: '100%',\n '--seekora-select-font-size': fontSize,\n '--seekora-select-border': 'var(--seekora-sort-border)',\n '--seekora-select-radius': borderRadius,\n '--seekora-select-bg': 'var(--seekora-sort-bg)',\n '--seekora-select-color': 'var(--seekora-sort-color)',\n } as React.CSSProperties}\n />\n </div>\n );\n }\n\n // ------ Button group variant -------------------------------------------\n\n if (variant === 'button-group') {\n return (\n <div\n className={clsx(sortByTheme.container, className)}\n style={{ ...cssVarStyle, ...style }}\n >\n {labelElement}\n <div\n role=\"group\"\n aria-label={label || 'Sort results'}\n className={clsx(sortByTheme.buttonGroup)}\n style={{\n display: 'inline-flex',\n borderRadius,\n overflow: 'hidden',\n border: '1px solid var(--seekora-sort-border)',\n }}\n >\n {options.map((option, index) => {\n const isActive = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"button\"\n aria-pressed={isActive}\n onClick={() => applyValue(option.value)}\n className={clsx(\n sortByTheme.buttonGroupItem,\n isActive && sortByTheme.buttonGroupItemActive,\n )}\n style={{\n padding,\n fontSize,\n border: 'none',\n borderRight:\n index < options.length - 1\n ? '1px solid var(--seekora-sort-border)'\n : 'none',\n backgroundColor: isActive\n ? 'var(--seekora-sort-active-bg)'\n : 'var(--seekora-sort-bg)',\n color: isActive\n ? 'var(--seekora-sort-active-color)'\n : 'var(--seekora-sort-color)',\n cursor: 'pointer',\n fontWeight: isActive ? 600 : 400,\n transition: 'background-color 0.15s ease, color 0.15s ease',\n outline: 'none',\n }}\n >\n {option.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n }\n\n // ------ Radio group variant --------------------------------------------\n\n if (variant === 'radio-group') {\n const radioName = `seekora-sort-${instanceId}`;\n\n return (\n <div\n className={clsx(sortByTheme.container, className)}\n style={{ ...cssVarStyle, ...style }}\n >\n {labelElement}\n <div\n role=\"radiogroup\"\n aria-label={label || 'Sort results'}\n className={clsx(sortByTheme.radioGroup)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing.small,\n }}\n >\n {options.map((option) => {\n const isActive = option.value === value;\n const radioId = `${radioName}-${option.value}`;\n\n return (\n <label\n key={option.value}\n htmlFor={radioId}\n className={clsx(\n sortByTheme.radioItem,\n isActive && sortByTheme.radioItemActive,\n )}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n padding,\n borderRadius,\n cursor: 'pointer',\n backgroundColor: isActive\n ? 'var(--seekora-sort-active-bg)'\n : 'transparent',\n color: isActive\n ? 'var(--seekora-sort-active-color)'\n : 'var(--seekora-sort-color)',\n fontWeight: isActive ? 600 : 400,\n transition: 'background-color 0.15s ease, color 0.15s ease',\n }}\n >\n <input\n type=\"radio\"\n id={radioId}\n name={radioName}\n value={option.value}\n checked={isActive}\n onChange={() => applyValue(option.value)}\n style={{ margin: 0 }}\n />\n <span\n className={clsx(sortByTheme.radioLabel)}\n style={{ fontSize }}\n >\n {option.label}\n </span>\n </label>\n );\n })}\n </div>\n </div>\n );\n }\n\n // Fallback — should never reach here, but satisfies TS exhaustiveness\n return null;\n};\n\n","/**\n * useFilters Hook\n *\n * React hook for fetching filter values, searching facet values,\n * and retrieving filter schema via the dedicated Filters API.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type {\n FilterOptions,\n FilterField,\n FiltersSchemaResponse,\n FacetValuesSearchResponse,\n} from '@seekora-ai/search-sdk';\nimport type { SearchState } from '@seekora-ai/ui-sdk-core';\nimport { useSearchContext } from '../components/SearchProvider';\n\nexport interface UseFiltersOptions extends FilterOptions {\n /** Whether to automatically refetch filters when query or refinements change (default: true) */\n autoFetch?: boolean;\n}\n\nexport interface UseFiltersReturn {\n /** Filter fields with values and counts */\n filters: FilterField[];\n /** Filter schema metadata (fetched once on mount) */\n schema: FiltersSchemaResponse | null;\n /** Whether filters are currently loading */\n loading: boolean;\n /** Error from the last fetch, if any */\n error: Error | null;\n /** Search within a facet's values (for typeahead/autocomplete) */\n searchFacetValues: (facetName: string, query: string) => Promise<FacetValuesSearchResponse>;\n /** Manually refetch filters */\n refetch: () => Promise<void>;\n}\n\nexport const useFilters = (options?: UseFiltersOptions): UseFiltersReturn => {\n const { stateManager } = useSearchContext();\n const [filters, setFilters] = useState<FilterField[]>([]);\n const [schema, setSchema] = useState<FiltersSchemaResponse | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const mountedRef = useRef(true);\n\n const autoFetch = options?.autoFetch !== false;\n\n // Track whether we've completed the first fetch (to avoid skeleton flash on refetches)\n const hasDataRef = useRef(false);\n\n // Extract non-autoFetch options to pass to fetchFilters\n const fetchFilters = useCallback(async () => {\n // Only show loading spinner on the very first fetch; subsequent refetches\n // keep previous data visible to avoid skeleton/flash on facet changes.\n if (!hasDataRef.current) {\n setLoading(true);\n }\n setError(null);\n try {\n const { autoFetch: _, ...filterOptions } = options || {} as UseFiltersOptions;\n const response = await stateManager.fetchFilters(filterOptions);\n if (mountedRef.current) {\n setFilters(response?.filters || []);\n hasDataRef.current = true;\n setLoading(false);\n }\n } catch (err) {\n if (mountedRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setLoading(false);\n }\n }\n }, [stateManager, options?.facetBy, options?.maxFacetValues, options?.disjunctiveFacets?.join(',')]);\n\n // Track query to only refetch filters when query actually changes.\n // Sentinel ensures the first subscribe callback always triggers a fetch.\n const prevKeyRef = useRef<string | null>(null);\n\n // Refetch when query or refinements change (not on every state update)\n useEffect(() => {\n if (!autoFetch) return;\n\n const unsubscribe = stateManager.subscribe((state: SearchState) => {\n // Only track query changes — refinements are NOT passed to the Filters API\n // (facets are generated from search query only, not narrowed by active filters).\n // This prevents redundant filters refetches on every facet toggle.\n const key = state.query;\n if (key === prevKeyRef.current) return;\n prevKeyRef.current = key;\n fetchFilters();\n });\n\n // subscribe() immediately invokes the listener with current state,\n // which handles the initial fetch (prevKeyRef starts as '' so key\n // will differ). No explicit fetchFilters() call needed here.\n\n return unsubscribe;\n }, [stateManager, autoFetch, fetchFilters]);\n\n // Fetch schema once on mount\n useEffect(() => {\n stateManager.getFiltersSchema().then((response) => {\n if (mountedRef.current) {\n setSchema(response);\n }\n }).catch(() => {\n // Schema fetch failure is non-critical\n });\n }, [stateManager]);\n\n // Cleanup\n useEffect(() => {\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const searchFacetValues = useCallback(\n (facetName: string, query: string) =>\n stateManager.searchFacetValues(facetName, query),\n [stateManager],\n );\n\n const refetch = useCallback(async () => {\n await fetchFilters();\n }, [fetchFilters]);\n\n return { filters, schema, loading, error, searchFacetValues, refetch };\n};\n","/**\n * RangeSlider Component\n * \n * Visual slider for numeric range filtering\n * Alternative to RangeInput for a more interactive UX\n */\n\nimport React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nconst SHADOWS = {\n sm: '0 1px 2px rgba(0,0,0,0.05)',\n md: '0 2px 4px rgba(0,0,0,0.1)',\n lg: '0 4px 6px rgba(0,0,0,0.1)',\n xl: '0 10px 15px rgba(0,0,0,0.1)',\n};\n\nexport interface RangeSliderTheme {\n root?: string;\n label?: string;\n slider?: string;\n track?: string;\n trackFilled?: string;\n thumb?: string;\n values?: string;\n value?: string;\n}\n\nexport interface RangeSliderProps {\n /** Field name for the range filter */\n field: string;\n /** Label for the slider */\n label?: string;\n /** Minimum value */\n min: number;\n /** Maximum value */\n max: number;\n /** Step value (default: 1) */\n step?: number;\n /** Current minimum value */\n currentMin?: number;\n /** Current maximum value */\n currentMax?: number;\n /** Callback when range changes */\n onRangeChange?: (min: number, max: number) => void;\n /** Format value for display (default: (v) => v.toString()) */\n formatValue?: (value: number) => string;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: RangeSliderTheme;\n /** Show current values (default: true) */\n showValues?: boolean;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n /** Debounce delay for updates (default: 300ms) */\n debounceMs?: number;\n}\n\nexport const RangeSlider: React.FC<RangeSliderProps> = ({\n field,\n label,\n min,\n max,\n step = 1,\n currentMin: currentMinProp,\n currentMax: currentMaxProp,\n onRangeChange,\n formatValue = (v) => v.toString(),\n className,\n style,\n theme: customTheme,\n showValues = true,\n syncWithState = true,\n debounceMs = 300,\n}) => {\n const { theme } = useSearchContext();\n const { refinements, addRefinement, removeRefinement } = useSearchState();\n const rangeSliderTheme = customTheme || {};\n const thumbClass = rangeSliderTheme.thumb || 'seekora-range-slider__thumb';\n \n // Parse current range from StateManager\n // NOTE: computed every render (no useMemo) because the state manager mutates\n // the refinements array in place — the reference never changes.\n let stateRange: { min: number | undefined; max: number | undefined };\n if (!syncWithState) {\n stateRange = { min: undefined, max: undefined };\n } else {\n let minVal: number | undefined;\n let maxVal: number | undefined;\n\n refinements.forEach(r => {\n if (r.field === field) {\n const minMatch = r.value.match(/^>=(\\d+(?:\\.\\d+)?)$/);\n if (minMatch) minVal = parseFloat(minMatch[1]);\n const maxMatch = r.value.match(/^<=(\\d+(?:\\.\\d+)?)$/);\n if (maxMatch) maxVal = parseFloat(maxMatch[1]);\n }\n });\n\n stateRange = { min: minVal, max: maxVal };\n }\n\n const [internalMin, setInternalMin] = useState(currentMinProp ?? stateRange.min ?? min);\n const [internalMax, setInternalMax] = useState(currentMaxProp ?? stateRange.max ?? max);\n const isDraggingRef = useRef(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pendingMinRef = useRef(internalMin);\n const pendingMaxRef = useRef(internalMax);\n\n // Sync with StateManager changes (only when stateRange actually changes, not on drag)\n useEffect(() => {\n if (syncWithState && !isDraggingRef.current) {\n if (stateRange.min !== undefined) setInternalMin(stateRange.min);\n else setInternalMin(min);\n if (stateRange.max !== undefined) setInternalMax(stateRange.max);\n else setInternalMax(max);\n }\n }, [syncWithState, stateRange.min, stateRange.max, min, max]);\n\n // Update StateManager with range refinements\n const updateStateManager = useCallback((minVal: number, maxVal: number) => {\n if (!syncWithState) return;\n\n // Remove existing range refinements for this field\n refinements.forEach(r => {\n if (r.field === field) {\n removeRefinement(field, r.value, false);\n }\n });\n\n // Add new range refinements — trigger search on the last one added\n const setMin = minVal > min;\n const setMax = maxVal < max;\n\n if (setMin && setMax) {\n addRefinement(field, `>=${minVal}`, false);\n addRefinement(field, `<=${maxVal}`, true);\n } else if (setMin) {\n addRefinement(field, `>=${minVal}`, true);\n } else if (setMax) {\n addRefinement(field, `<=${maxVal}`, true);\n }\n }, [syncWithState, field, refinements, addRefinement, removeRefinement, min, max]);\n\n // Debounced update (during drag only)\n const debouncedUpdate = useCallback((minVal: number, maxVal: number) => {\n pendingMinRef.current = minVal;\n pendingMaxRef.current = maxVal;\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n debounceRef.current = setTimeout(() => {\n updateStateManager(minVal, maxVal);\n if (onRangeChange) {\n onRangeChange(minVal, maxVal);\n }\n }, debounceMs);\n }, [updateStateManager, onRangeChange, debounceMs]);\n\n // Handle min slider change\n const handleMinChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = Math.min(Number(e.target.value), internalMax - step);\n setInternalMin(value);\n isDraggingRef.current = true;\n debouncedUpdate(value, internalMax);\n };\n\n // Handle max slider change\n const handleMaxChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = Math.max(Number(e.target.value), internalMin + step);\n setInternalMax(value);\n isDraggingRef.current = true;\n debouncedUpdate(internalMin, value);\n };\n\n // Handle drag end — flush pending update immediately\n const handleDragEnd = () => {\n isDraggingRef.current = false;\n // Cancel the debounce and commit immediately\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n updateStateManager(pendingMinRef.current, pendingMaxRef.current);\n if (onRangeChange) {\n onRangeChange(pendingMinRef.current, pendingMaxRef.current);\n }\n };\n\n // Handle keyboard navigation for enhanced control (Shift+Arrow for 10x step, Home/End)\n const handleMinKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n let newValue: number | null = null;\n\n if (e.key === 'Home') {\n e.preventDefault();\n newValue = min;\n } else if (e.key === 'End') {\n e.preventDefault();\n newValue = internalMax - step;\n } else if (e.shiftKey && (e.key === 'ArrowLeft' || e.key === 'ArrowDown')) {\n e.preventDefault();\n newValue = Math.max(min, internalMin - step * 10);\n } else if (e.shiftKey && (e.key === 'ArrowRight' || e.key === 'ArrowUp')) {\n e.preventDefault();\n newValue = Math.min(internalMax - step, internalMin + step * 10);\n }\n\n if (newValue !== null) {\n setInternalMin(newValue);\n debouncedUpdate(newValue, internalMax);\n }\n };\n\n const handleMaxKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n let newValue: number | null = null;\n\n if (e.key === 'Home') {\n e.preventDefault();\n newValue = internalMin + step;\n } else if (e.key === 'End') {\n e.preventDefault();\n newValue = max;\n } else if (e.shiftKey && (e.key === 'ArrowLeft' || e.key === 'ArrowDown')) {\n e.preventDefault();\n newValue = Math.max(internalMin + step, internalMax - step * 10);\n } else if (e.shiftKey && (e.key === 'ArrowRight' || e.key === 'ArrowUp')) {\n e.preventDefault();\n newValue = Math.min(max, internalMax + step * 10);\n }\n\n if (newValue !== null) {\n setInternalMax(newValue);\n debouncedUpdate(internalMin, newValue);\n }\n };\n\n // Calculate filled track position\n const minPercent = ((internalMin - min) / (max - min)) * 100;\n const maxPercent = ((internalMax - min) / (max - min)) * 100;\n\n return (\n <div\n className={clsx(rangeSliderTheme.root, className)}\n style={{\n fontFamily: 'inherit',\n ...style,\n }}\n >\n {label && (\n <label\n className={rangeSliderTheme.label}\n style={{\n display: 'block',\n marginBottom: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n }}\n >\n {label}\n </label>\n )}\n\n <div\n className={rangeSliderTheme.slider}\n style={{\n position: 'relative',\n minHeight: '40px',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {/* Track background */}\n <div\n className={rangeSliderTheme.track}\n style={{\n position: 'absolute',\n width: '100%',\n height: '4px',\n backgroundColor: theme.colors.border,\n borderRadius: '2px',\n }}\n />\n\n {/* Filled track */}\n <div\n className={rangeSliderTheme.trackFilled}\n style={{\n position: 'absolute',\n left: `${minPercent}%`,\n width: `${maxPercent - minPercent}%`,\n height: '4px',\n backgroundColor: theme.colors.primary,\n borderRadius: '2px',\n }}\n />\n\n {/* Min slider */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={internalMin}\n onChange={handleMinChange}\n onMouseUp={handleDragEnd}\n onTouchEnd={handleDragEnd}\n onKeyDown={handleMinKeyDown}\n tabIndex={0}\n aria-valuenow={internalMin}\n aria-valuemin={min}\n aria-valuemax={max}\n className={thumbClass}\n style={{\n position: 'absolute',\n width: '100%',\n height: '4px',\n background: 'transparent',\n WebkitAppearance: 'none',\n appearance: 'none',\n cursor: 'pointer',\n pointerEvents: 'none',\n }}\n aria-label={`Minimum ${label || field}`}\n />\n\n {/* Max slider */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={internalMax}\n onChange={handleMaxChange}\n onMouseUp={handleDragEnd}\n onTouchEnd={handleDragEnd}\n onKeyDown={handleMaxKeyDown}\n tabIndex={0}\n aria-valuenow={internalMax}\n aria-valuemin={min}\n aria-valuemax={max}\n className={thumbClass}\n style={{\n position: 'absolute',\n width: '100%',\n height: '4px',\n background: 'transparent',\n WebkitAppearance: 'none',\n appearance: 'none',\n cursor: 'pointer',\n pointerEvents: 'none',\n }}\n aria-label={`Maximum ${label || field}`}\n />\n </div>\n\n {showValues && (\n <div\n className={rangeSliderTheme.values}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.textSecondary,\n }}\n >\n <span className={rangeSliderTheme.value}>{formatValue(internalMin)}</span>\n <span className={rangeSliderTheme.value}>{formatValue(internalMax)}</span>\n </div>\n )}\n\n {/* Custom styles for range thumbs */}\n <style>{`\n .${thumbClass}::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 20px;\n height: 20px;\n background: ${theme.colors.primary};\n border-radius: 50%;\n cursor: pointer;\n pointer-events: all;\n box-shadow: ${SHADOWS.md};\n }\n .${thumbClass}::-moz-range-thumb {\n width: 20px;\n height: 20px;\n background: ${theme.colors.primary};\n border-radius: 50%;\n cursor: pointer;\n pointer-events: all;\n border: none;\n box-shadow: ${SHADOWS.md};\n }\n `}</style>\n </div>\n );\n};\n","/**\n * Facets Component\n *\n * Displays facet filters for search results with multiple display variants,\n * client-side search, count badges, and color swatch support.\n */\n\nimport React, { useState, useMemo, useRef, useEffect } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { useFilters } from '../hooks/useFilters';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { RangeSlider } from './RangeSlider';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface FacetItem {\n value: string;\n count: number;\n selected?: boolean;\n}\n\nexport interface FacetStats {\n min: number;\n max: number;\n avg?: number;\n sum?: number;\n}\n\nexport interface FacetRangeItem {\n label: string;\n from?: number;\n to?: number;\n}\n\nexport interface FacetRangeConfig {\n field: string;\n ranges: FacetRangeItem[];\n}\n\nexport interface Facet {\n field: string;\n label?: string;\n items: FacetItem[];\n stats?: FacetStats;\n}\n\nexport interface FacetsTheme {\n container?: string;\n facet?: string;\n facetHeader?: string;\n facetTitle?: string;\n facetList?: string;\n facetItem?: string;\n facetItemActive?: string;\n facetItemCount?: string;\n facetItemLabel?: string;\n checkbox?: string;\n /** Color swatch circle/square */\n colorSwatch?: string;\n /** Color swatch when selected */\n colorSwatchSelected?: string;\n /** Inner element of color swatch (for checkmark overlay) */\n colorSwatchInner?: string;\n /** Search input within a facet group */\n searchInput?: string;\n /** Collapsible header row */\n collapsibleHeader?: string;\n /** Chevron/expand icon in collapsible header */\n collapsibleIcon?: string;\n /** Count badge pill */\n countBadge?: string;\n /** Range button (pre-configured range option) */\n rangeButton?: string;\n /** Active range button */\n rangeButtonActive?: string;\n /** Count badge on range button */\n rangeButtonCount?: string;\n /** Clear button for range filters */\n rangeClear?: string;\n}\n\nexport type FacetVariant = 'checkbox' | 'color-swatch' | 'collapsible';\nexport type FacetSize = 'small' | 'medium' | 'large';\n\nexport interface FacetsProps {\n /** Search results response */\n results?: SearchResponse | null;\n /** Custom facets data */\n facets?: Facet[];\n /** Callback when facet is selected/deselected */\n onFacetChange?: (field: string, value: string, selected: boolean) => void;\n /** Custom render function for facet */\n renderFacet?: (facet: Facet, index: number) => React.ReactNode;\n /** Custom render function for facet item */\n renderFacetItem?: (item: FacetItem, facet: Facet, index: number) => React.ReactNode;\n /** Maximum number of items to show per facet */\n maxItems?: number;\n /** Show \"Show more\" button */\n showMore?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: FacetsTheme;\n\n // --- New props ---\n\n /** Display variant: checkbox (default), color-swatch, or collapsible */\n variant?: FacetVariant;\n /** When true, show a search input at the top of each facet group */\n searchable?: boolean;\n /** Show count badges (default: true) */\n showCounts?: boolean;\n /** Maps facet values to CSS colors (used by color-swatch variant) */\n colorMap?: Record<string, string>;\n /** For collapsible variant, whether facets start collapsed (default: false) */\n defaultCollapsed?: boolean;\n /** Size preset: small, medium (default), or large */\n size?: FacetSize;\n /** Pre-configured range button definitions for numeric facets */\n facetRanges?: FacetRangeConfig[];\n /** Use dedicated Filters API instead of extracting facets from search results */\n useFiltersApi?: boolean;\n /** Fields that should use disjunctive (OR) faceting (only with useFiltersApi) */\n disjunctiveFacets?: string[];\n /** Hide facets that have no selectable values (default: true) */\n hideEmptyFacets?: boolean;\n /** Fields that should start collapsed (collapsible variant only). Overrides defaultCollapsed for listed fields. */\n defaultCollapsedFields?: string[];\n /** Callback fired when facet availability changes. Receives true when facets are available, false when empty. */\n onFacetsAvailable?: (available: boolean) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Generate a deterministic colour from a string (used as fallback for color-swatch). */\nfunction stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n hash |= 0; // Convert to 32-bit int\n }\n const h = Math.abs(hash) % 360;\n return `hsl(${h}, 65%, 55%)`;\n}\n\n/** Return swatch pixel size from the size prop. */\nfunction swatchSize(size: FacetSize): number {\n switch (size) {\n case 'small':\n return 24;\n case 'large':\n return 40;\n case 'medium':\n default:\n return 32;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Chevron SVG icon for collapsible variant\n// ---------------------------------------------------------------------------\n\nconst ChevronIcon: React.FC<{ expanded: boolean; color?: string; size?: number }> = ({\n expanded,\n color = 'currentColor',\n size = 16,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 200ms ease',\n flexShrink: 0,\n }}\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke={color}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// Checkmark SVG for selected color swatches\n// ---------------------------------------------------------------------------\n\nconst CheckmarkIcon: React.FC<{ size?: number }> = ({ size = 16 }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"#fff\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// ---------------------------------------------------------------------------\n// CSS variable defaults\n// ---------------------------------------------------------------------------\n\nconst CSS_VAR_DEFAULTS: Record<string, string> = {\n '--seekora-facet-bg': 'transparent',\n '--seekora-facet-border': '#dee2e6',\n '--seekora-facet-active-bg': 'rgba(0, 0, 0, 0.05)',\n '--seekora-facet-swatch-size': '32px',\n '--seekora-facet-count-bg': '#e9ecef',\n '--seekora-facet-count-color': '#495057',\n '--seekora-primary': '#3b82f6',\n '--seekora-primary-text': '#ffffff',\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Facets: React.FC<FacetsProps> = ({\n results: resultsProp,\n facets: facetsProp,\n onFacetChange,\n renderFacet,\n renderFacetItem,\n maxItems = 10,\n showMore = true,\n className,\n style,\n theme: customTheme,\n variant = 'checkbox',\n searchable = false,\n showCounts = true,\n colorMap,\n defaultCollapsed = false,\n size = 'medium',\n facetRanges,\n useFiltersApi = false,\n disjunctiveFacets,\n hideEmptyFacets = true,\n defaultCollapsedFields,\n onFacetsAvailable,\n}) => {\n const { theme } = useSearchContext();\n const { results: stateResults, refinements, addRefinement, removeRefinement } = useSearchState();\n const facetsTheme = customTheme || {};\n\n // Use dedicated Filters API when useFiltersApi is enabled\n const { filters: filtersApiData, searchFacetValues } = useFilters(\n useFiltersApi ? { disjunctiveFacets } : { autoFetch: false }\n );\n\n // expandedFacets is used for \"Show more/less\" in checkbox/color-swatch variants\n // AND for collapse/expand in collapsible variant.\n const [expandedFacets, setExpandedFacets] = useState<Record<string, boolean>>({});\n const [searchTerms, setSearchTerms] = useState<Record<string, string>>({});\n\n // Use results from prop if provided, otherwise from state manager\n const results = resultsProp || stateResults;\n\n // -------------------------------------------------------------------\n // Extract facets from results (or Filters API)\n // -------------------------------------------------------------------\n\n const extractFacets = (): Facet[] => {\n if (facetsProp) return facetsProp;\n\n // When using Filters API, convert FilterField[] to Facet[]\n if (useFiltersApi && filtersApiData.length > 0) {\n log.verbose('Facets: Using Filters API data', { filterCount: filtersApiData.length });\n return filtersApiData.map((filter) => ({\n field: filter.field || '',\n label: filter.field || '',\n items: (filter.values || []).map((v) => ({\n value: v.value || '',\n count: v.count || 0,\n selected: refinements.some(r => r.field === filter.field && r.value === v.value),\n })),\n stats: filter.stats?.min != null && filter.stats?.max != null\n ? { min: filter.stats.min, max: filter.stats.max, avg: filter.stats.avg, sum: filter.stats.sum }\n : undefined,\n }));\n }\n\n // Try to get facets from various locations in the response\n // Primary location: data.facets (widget_mode response structure)\n const rawFacets = results?.data?.facets\n || results?.facets\n || results?.data?.data?.facets\n || null;\n\n log.verbose('Facets: Extracting facets', {\n hasResults: !!results,\n hasData: !!results?.data,\n rawFacets: rawFacets ? (Array.isArray(rawFacets) ? rawFacets.length : 'not array') : null,\n resultsKeys: results ? Object.keys(results) : [],\n dataKeys: results?.data ? Object.keys(results.data) : [],\n sampleFacet: rawFacets && Array.isArray(rawFacets) && rawFacets.length > 0 ? rawFacets[0] : null,\n });\n\n // Ensure rawFacets is an array before mapping\n if (!rawFacets || !Array.isArray(rawFacets)) {\n log.verbose('Facets: No facets found in response', {\n rawFacetsType: rawFacets ? typeof rawFacets : 'null',\n isArray: Array.isArray(rawFacets),\n resultsStructure: results ? JSON.stringify(Object.keys(results)) : 'null',\n dataStructure: results?.data ? JSON.stringify(Object.keys(results.data)) : 'null',\n });\n return [];\n }\n\n const extracted = rawFacets.map((facet: any) => {\n const fieldName = facet.field_name || facet.field;\n return {\n field: fieldName,\n label: facet.label || fieldName,\n items: Array.isArray(facet.counts) ? facet.counts.map((count: any) => ({\n value: count.value,\n count: count.count,\n selected: refinements.some(r => r.field === fieldName && r.value === count.value),\n })) : [],\n stats: facet.stats || undefined,\n };\n });\n\n log.verbose('Facets: Extracted facets', {\n count: extracted.length,\n facets: extracted.map(f => ({ field: f.field, itemsCount: f.items.length })),\n });\n\n return extracted;\n };\n\n const rawFacetList = extractFacets();\n const hasStats = (stats: any) => stats != null && (stats.min != null || stats.max != null);\n\n const facets = hideEmptyFacets\n ? rawFacetList.filter(f => f.items.length > 0 || hasStats(f.stats))\n : rawFacetList;\n\n // Notify parent about facet availability\n const facetCount = facets.length;\n const prevFacetAvailableRef = useRef<boolean | null>(null);\n useEffect(() => {\n if (!onFacetsAvailable) return;\n const available = facetCount > 0;\n if (prevFacetAvailableRef.current !== available) {\n prevFacetAvailableRef.current = available;\n onFacetsAvailable(available);\n }\n }, [facetCount, onFacetsAvailable]);\n\n // -------------------------------------------------------------------\n // Handlers\n // -------------------------------------------------------------------\n\n const handleFacetToggle = (field: string, value: string, selected: boolean) => {\n const newSelected = !selected;\n log.verbose('Facets: Facet toggled', { field, value, selected: newSelected });\n\n // Update state manager (automatically triggers search)\n if (newSelected) {\n addRefinement(field, value);\n } else {\n removeRefinement(field, value);\n }\n\n // Call callback for backwards compatibility\n if (onFacetChange) {\n try {\n onFacetChange(field, value, newSelected);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('Facets: Error in onFacetChange callback', {\n field,\n value,\n selected: newSelected,\n error: error.message,\n });\n }\n }\n };\n\n const toggleFacetExpansion = (field: string) => {\n setExpandedFacets((prev) => ({\n ...prev,\n [field]: !prev[field],\n }));\n };\n\n /** For collapsible variant — determine if a facet group is open. */\n const isFieldDefaultCollapsed = (field: string): boolean => {\n if (defaultCollapsedFields?.includes(field)) return true;\n return defaultCollapsed;\n };\n\n const isFacetGroupOpen = (field: string): boolean => {\n if (field in expandedFacets) {\n return expandedFacets[field];\n }\n return !isFieldDefaultCollapsed(field);\n };\n\n const toggleCollapsible = (field: string) => {\n setExpandedFacets((prev) => ({\n ...prev,\n [field]: !(prev[field] ?? !isFieldDefaultCollapsed(field)),\n }));\n };\n\n const getSearchTerm = (field: string): string => searchTerms[field] || '';\n\n const setSearchTerm = (field: string, term: string) => {\n setSearchTerms((prev) => ({ ...prev, [field]: term }));\n };\n\n /** Filter facet items by search term. */\n const filterItems = (items: FacetItem[], field: string): FacetItem[] => {\n if (!searchable) return items;\n const term = getSearchTerm(field).toLowerCase();\n if (!term) return items;\n return items.filter((item) => item.value.toLowerCase().includes(term));\n };\n\n // -------------------------------------------------------------------\n // Size helpers\n // -------------------------------------------------------------------\n\n const sizeScale = useMemo(() => {\n switch (size) {\n case 'small':\n return { font: theme.typography.fontSize.small, padding: '0.5rem', gap: '0.5rem' };\n case 'large':\n return { font: theme.typography.fontSize.large, padding: '0.75rem', gap: '0.75rem' };\n case 'medium':\n default:\n return { font: theme.typography.fontSize.medium, padding: theme.spacing.small, gap: theme.spacing.small };\n }\n }, [size, theme]);\n\n // -------------------------------------------------------------------\n // Count badge renderer\n // -------------------------------------------------------------------\n\n const renderCountBadge = (count: number) => {\n if (!showCounts) return null;\n return (\n <span\n className={clsx(facetsTheme.countBadge)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '1.5em',\n padding: '0.1em 0.5em',\n marginLeft: sizeScale.gap,\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.medium ?? 500,\n lineHeight: 1,\n color: 'var(--seekora-facet-count-color, #495057)',\n backgroundColor: 'var(--seekora-facet-count-bg, #e9ecef)',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.full,\n flexShrink: 0,\n }}\n >\n {count}\n </span>\n );\n };\n\n // -------------------------------------------------------------------\n // Search input renderer\n // -------------------------------------------------------------------\n\n const renderSearchInput = (facet: Facet) => {\n if (!searchable) return null;\n return (\n <input\n type=\"text\"\n value={getSearchTerm(facet.field)}\n onChange={(e) => setSearchTerm(facet.field, e.target.value)}\n placeholder={`Search ${facet.label || facet.field}...`}\n className={clsx(facetsTheme.searchInput)}\n aria-label={`Search within ${facet.label || facet.field}`}\n style={{\n width: '100%',\n boxSizing: 'border-box',\n padding: sizeScale.padding,\n marginBottom: sizeScale.gap,\n fontSize: theme.typography.fontSize.small,\n border: `1px solid var(--seekora-facet-border, ${theme.colors.border})`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.small,\n outline: 'none',\n color: theme.colors.text,\n backgroundColor: 'var(--seekora-facet-bg, transparent)',\n }}\n />\n );\n };\n\n // -------------------------------------------------------------------\n // Checkbox variant item renderer (original behaviour, preserved)\n // -------------------------------------------------------------------\n\n const defaultRenderFacetItem = (item: FacetItem, facet: Facet, index: number) => {\n const isExpanded = expandedFacets[facet.field] || index < maxItems;\n\n if (!isExpanded && index >= maxItems) {\n return null;\n }\n\n const isChecked = refinements.some(r => r.field === facet.field && r.value === item.value) || item.selected || false;\n\n return (\n <div\n key={`${facet.field}-${item.value}`}\n className={clsx(\n facetsTheme.facetItem,\n isChecked && facetsTheme.facetItemActive\n )}\n role=\"option\"\n aria-selected={isChecked}\n aria-checked={isChecked}\n tabIndex={-1}\n onClick={() => handleFacetToggle(facet.field, item.value, item.selected || false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: sizeScale.padding,\n cursor: 'pointer',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n marginBottom: sizeScale.gap,\n backgroundColor: isChecked\n ? 'var(--seekora-facet-active-bg, ' + theme.colors.hover + ')'\n : 'transparent',\n transition: 'background-color 0.2s ease',\n boxSizing: 'border-box',\n }}\n >\n <input\n type=\"checkbox\"\n checked={refinements.some(r => r.field === facet.field && r.value === item.value) || item.selected || false}\n onChange={() => handleFacetToggle(facet.field, item.value, item.selected || false)}\n className={facetsTheme.checkbox}\n style={{\n marginRight: sizeScale.gap,\n cursor: 'pointer',\n }}\n aria-label={`Filter by ${item.value}`}\n />\n <span\n className={facetsTheme.facetItemLabel}\n style={{\n flex: 1,\n fontSize: sizeScale.font,\n lineHeight: 1.5,\n color: theme.colors.text,\n }}\n >\n {item.value}\n </span>\n {renderCountBadge(item.count)}\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Color swatch variant item renderer\n // -------------------------------------------------------------------\n\n const renderColorSwatchItem = (item: FacetItem, facet: Facet, index: number) => {\n const isExpanded = expandedFacets[facet.field] || index < maxItems;\n if (!isExpanded && index >= maxItems) {\n return null;\n }\n\n const isChecked = refinements.some(r => r.field === facet.field && r.value === item.value) || item.selected || false;\n const color = colorMap?.[item.value] ?? stringToColor(item.value);\n const pxSize = swatchSize(size);\n\n return (\n <div\n key={`${facet.field}-${item.value}`}\n className={clsx(\n facetsTheme.facetItem,\n isChecked && facetsTheme.facetItemActive\n )}\n role=\"option\"\n aria-selected={isChecked}\n aria-checked={isChecked}\n tabIndex={-1}\n onClick={() => handleFacetToggle(facet.field, item.value, item.selected || false)}\n title={`${item.value}${showCounts ? ` (${item.count})` : ''}`}\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n margin: sizeScale.gap,\n }}\n >\n {/* Swatch circle */}\n <div\n className={clsx(\n facetsTheme.colorSwatch,\n isChecked && facetsTheme.colorSwatchSelected,\n )}\n style={{\n width: `var(--seekora-facet-swatch-size, ${pxSize}px)`,\n height: `var(--seekora-facet-swatch-size, ${pxSize}px)`,\n borderRadius: '50%',\n backgroundColor: color,\n border: isChecked\n ? `3px solid var(--seekora-primary, ${theme.colors.primary})`\n : `2px solid var(--seekora-facet-border, ${theme.colors.border})`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'border 0.2s ease, box-shadow 0.2s ease',\n boxShadow: isChecked ? `0 0 0 2px var(--seekora-primary-alpha, ${theme.colors.primary}33)` : 'none',\n position: 'relative',\n }}\n >\n {/* Checkmark overlay when selected */}\n {isChecked && (\n <span\n className={clsx(facetsTheme.colorSwatchInner)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <CheckmarkIcon size={Math.round(pxSize * 0.5)} />\n </span>\n )}\n </div>\n {/* Label below swatch */}\n <span\n className={facetsTheme.facetItemLabel}\n style={{\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.text,\n marginTop: '0.25rem',\n textAlign: 'center',\n maxWidth: `${pxSize + 16}px`,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {item.value}\n </span>\n {showCounts && (\n <span\n className={clsx(facetsTheme.countBadge)}\n style={{\n fontSize: theme.typography.fontSize.small,\n color: 'var(--seekora-facet-count-color, ' + (theme.colors.textSecondary || theme.colors.text) + ')',\n lineHeight: 1,\n marginTop: '0.125rem',\n }}\n >\n {item.count}\n </span>\n )}\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Item renderer dispatcher\n // -------------------------------------------------------------------\n\n const renderItem = (item: FacetItem, facet: Facet, index: number) => {\n if (renderFacetItem) {\n return renderFacetItem(item, facet, index);\n }\n switch (variant) {\n case 'color-swatch':\n return renderColorSwatchItem(item, facet, index);\n case 'collapsible':\n case 'checkbox':\n default:\n return defaultRenderFacetItem(item, facet, index);\n }\n };\n\n // -------------------------------------------------------------------\n // Keyboard handler (shared across variants)\n // -------------------------------------------------------------------\n\n const handleListKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n visibleItems: FacetItem[],\n facet: Facet,\n ) => {\n const currentEl = e.currentTarget.querySelector('[aria-selected=\"true\"]') as HTMLElement;\n const allItems = Array.from(e.currentTarget.querySelectorAll('[role=\"option\"]')) as HTMLElement[];\n const currentIdx = currentEl ? allItems.indexOf(currentEl) : -1;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const next = Math.min(currentIdx + 1, allItems.length - 1);\n allItems[next]?.focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = Math.max(currentIdx - 1, 0);\n allItems[prev]?.focus();\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (currentIdx >= 0 && currentIdx < visibleItems.length) {\n handleFacetToggle(facet.field, visibleItems[currentIdx].value, visibleItems[currentIdx].selected || false);\n }\n }\n };\n\n // -------------------------------------------------------------------\n // Show more / less buttons (shared)\n // -------------------------------------------------------------------\n\n const renderShowMoreLess = (facet: Facet, filteredItems: FacetItem[]) => {\n const isExpanded = expandedFacets[facet.field] || false;\n const hasMore = filteredItems.length > maxItems;\n\n return (\n <>\n {showMore && hasMore && !isExpanded && (\n <button\n type=\"button\"\n onClick={() => toggleFacetExpansion(facet.field)}\n style={{\n marginTop: sizeScale.gap,\n padding: sizeScale.padding,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Show more ({filteredItems.length - maxItems} more)\n </button>\n )}\n {isExpanded && hasMore && (\n <button\n type=\"button\"\n onClick={() => toggleFacetExpansion(facet.field)}\n style={{\n marginTop: sizeScale.gap,\n padding: sizeScale.padding,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Show less\n </button>\n )}\n </>\n );\n };\n\n // -------------------------------------------------------------------\n // Default facet group renderer — Checkbox variant\n // -------------------------------------------------------------------\n\n const renderCheckboxFacet = (facet: Facet, _index: number) => {\n const filteredItems = filterItems(facet.items, facet.field);\n const isExpanded = expandedFacets[facet.field] || false;\n const visibleItems = isExpanded ? filteredItems : filteredItems.slice(0, maxItems);\n\n return (\n <div\n key={facet.field}\n className={facetsTheme.facet}\n style={{\n marginBottom: theme.spacing.large,\n padding: theme.spacing.medium,\n backgroundColor: 'var(--seekora-facet-bg, ' + theme.colors.background + ')',\n border: `1px solid var(--seekora-facet-border, ${theme.colors.border})`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n }}\n >\n <h3\n className={facetsTheme.facetTitle}\n style={{\n margin: 0,\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {facet.label || facet.field}\n </h3>\n {renderSearchInput(facet)}\n <div\n className={facetsTheme.facetList}\n role=\"listbox\"\n aria-label={`${facet.label || facet.field} filters`}\n tabIndex={0}\n onKeyDown={(e) => handleListKeyDown(e, visibleItems, facet)}\n >\n {visibleItems.map((item, itemIndex) =>\n renderItem(item, facet, itemIndex)\n )}\n </div>\n {renderShowMoreLess(facet, filteredItems)}\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Color-swatch facet group renderer\n // -------------------------------------------------------------------\n\n const renderColorSwatchFacet = (facet: Facet, _index: number) => {\n const filteredItems = filterItems(facet.items, facet.field);\n const isExpanded = expandedFacets[facet.field] || false;\n const visibleItems = isExpanded ? filteredItems : filteredItems.slice(0, maxItems);\n\n return (\n <div\n key={facet.field}\n className={facetsTheme.facet}\n style={{\n marginBottom: theme.spacing.large,\n padding: theme.spacing.medium,\n backgroundColor: 'var(--seekora-facet-bg, ' + theme.colors.background + ')',\n border: `1px solid var(--seekora-facet-border, ${theme.colors.border})`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n }}\n >\n <h3\n className={facetsTheme.facetTitle}\n style={{\n margin: 0,\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {facet.label || facet.field}\n </h3>\n {renderSearchInput(facet)}\n <div\n className={facetsTheme.facetList}\n role=\"listbox\"\n aria-label={`${facet.label || facet.field} filters`}\n tabIndex={0}\n onKeyDown={(e) => handleListKeyDown(e, visibleItems, facet)}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: sizeScale.gap,\n }}\n >\n {visibleItems.map((item, itemIndex) =>\n renderItem(item, facet, itemIndex)\n )}\n </div>\n {renderShowMoreLess(facet, filteredItems)}\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Collapsible facet group renderer\n // -------------------------------------------------------------------\n\n const renderCollapsibleFacet = (facet: Facet, _index: number) => {\n const isOpen = isFacetGroupOpen(facet.field);\n const filteredItems = filterItems(facet.items, facet.field);\n const isItemsExpanded = expandedFacets[facet.field] || false;\n // Note: For collapsible, the expandedFacets state controls the collapse/expand\n // of the group itself. We use a separate concept for Show more/less within items.\n // To avoid collision, Show more/less for collapsible uses the same expandedFacets\n // key prefixed with `_items_`.\n const isShowMoreExpanded = expandedFacets[`_items_${facet.field}`] || false;\n const visibleItems = isShowMoreExpanded ? filteredItems : filteredItems.slice(0, maxItems);\n const hasMore = filteredItems.length > maxItems;\n\n return (\n <div\n key={facet.field}\n className={facetsTheme.facet}\n style={{\n marginBottom: theme.spacing.large,\n backgroundColor: 'var(--seekora-facet-bg, ' + theme.colors.background + ')',\n border: `1px solid var(--seekora-facet-border, ${theme.colors.border})`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n overflow: 'hidden',\n }}\n >\n {/* Collapsible header */}\n <button\n type=\"button\"\n className={clsx(facetsTheme.collapsibleHeader)}\n onClick={() => toggleCollapsible(facet.field)}\n aria-expanded={isOpen}\n aria-controls={`facet-group-${facet.field}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: theme.spacing.medium,\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span\n className={facetsTheme.facetTitle}\n style={{\n color: theme.colors.text,\n flex: 1,\n }}\n >\n {facet.label || facet.field}\n </span>\n <span className={clsx(facetsTheme.collapsibleIcon)}>\n <ChevronIcon expanded={isOpen} color={theme.colors.textSecondary || theme.colors.text} />\n </span>\n </button>\n\n {/* Collapsible body */}\n {isOpen && (\n <div\n id={`facet-group-${facet.field}`}\n style={{\n padding: `0 ${theme.spacing.medium} ${theme.spacing.medium}`,\n }}\n >\n {renderSearchInput(facet)}\n <div\n className={facetsTheme.facetList}\n role=\"listbox\"\n aria-label={`${facet.label || facet.field} filters`}\n tabIndex={0}\n onKeyDown={(e) => handleListKeyDown(e, visibleItems, facet)}\n >\n {visibleItems.map((item, itemIndex) =>\n renderItem(item, facet, itemIndex)\n )}\n </div>\n {/* Show more/less for collapsible uses the _items_ prefixed key */}\n {showMore && hasMore && !isShowMoreExpanded && (\n <button\n type=\"button\"\n onClick={() =>\n setExpandedFacets((prev) => ({\n ...prev,\n [`_items_${facet.field}`]: true,\n }))\n }\n style={{\n marginTop: sizeScale.gap,\n padding: sizeScale.padding,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Show more ({filteredItems.length - maxItems} more)\n </button>\n )}\n {isShowMoreExpanded && hasMore && (\n <button\n type=\"button\"\n onClick={() =>\n setExpandedFacets((prev) => ({\n ...prev,\n [`_items_${facet.field}`]: false,\n }))\n }\n style={{\n marginTop: sizeScale.gap,\n padding: sizeScale.padding,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Show less\n </button>\n )}\n </div>\n )}\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Render-type detection for numeric / range facets\n // -------------------------------------------------------------------\n\n const determineFacetRenderType = (\n fieldName: string,\n stats?: FacetStats,\n ): 'list' | 'range-buttons' | 'range-slider' => {\n // If explicit range config exists for this field → range buttons\n if (facetRanges?.some((rc) => rc.field === fieldName)) {\n return 'range-buttons';\n }\n // If stats with valid min/max → range slider\n if (stats && typeof stats.min === 'number' && typeof stats.max === 'number' && stats.min !== stats.max) {\n return 'range-slider';\n }\n return 'list';\n };\n\n // -------------------------------------------------------------------\n // Range button facet renderer\n // -------------------------------------------------------------------\n\n const renderRangeButtonFacet = (facet: Facet, _index: number) => {\n const rangeConfig = facetRanges?.find((rc) => rc.field === facet.field);\n if (!rangeConfig) return null;\n\n // Build a lookup from item value → count\n const countMap = new Map<string, number>();\n facet.items.forEach((item) => countMap.set(item.value, item.count));\n\n // Detect currently active range from refinements\n const activeMin = refinements.find(\n (r) => r.field === facet.field && r.value.startsWith('>='),\n );\n const activeMax = refinements.find(\n (r) => r.field === facet.field && r.value.startsWith('<='),\n );\n const activeFromVal = activeMin ? parseFloat(activeMin.value.slice(2)) : undefined;\n const activeToVal = activeMax ? parseFloat(activeMax.value.slice(2)) : undefined;\n\n const isRangeActive = (range: FacetRangeItem) => {\n const fromMatch =\n range.from === undefined\n ? activeFromVal === undefined\n : activeFromVal === range.from;\n const toMatch =\n range.to === undefined\n ? activeToVal === undefined\n : activeToVal === range.to;\n return fromMatch && toMatch;\n };\n\n const handleRangeClick = (range: FacetRangeItem) => {\n // Clear existing range refinements for this field\n refinements\n .filter((r) => r.field === facet.field)\n .forEach((r) => removeRefinement(facet.field, r.value, false));\n\n if (isRangeActive(range)) {\n // Was active → just clear (already removed above), trigger search\n addRefinement(facet.field, '__noop__', false);\n removeRefinement(facet.field, '__noop__', true);\n return;\n }\n\n // Set new range\n if (range.from !== undefined) {\n addRefinement(facet.field, `>=${range.from}`, false);\n }\n if (range.to !== undefined) {\n addRefinement(facet.field, `<=${range.to}`, true);\n } else if (range.from !== undefined) {\n // Only \"from\" set — trigger search\n addRefinement(facet.field, `>=${range.from}`, true);\n }\n };\n\n const hasActiveRange = activeMin !== undefined || activeMax !== undefined;\n\n const handleClear = () => {\n refinements\n .filter((r) => r.field === facet.field)\n .forEach((r) => removeRefinement(facet.field, r.value, false));\n // Trigger search after clearing\n addRefinement(facet.field, '__noop__', false);\n removeRefinement(facet.field, '__noop__', true);\n };\n\n return (\n <div\n key={facet.field}\n className={facetsTheme.facet}\n style={{\n marginBottom: theme.spacing.large,\n padding: theme.spacing.medium,\n backgroundColor: 'var(--seekora-facet-bg, ' + theme.colors.background + ')',\n border: `1px solid var(--seekora-facet-border, ${theme.colors.border})`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n }}\n >\n <h3\n className={facetsTheme.facetTitle}\n style={{\n margin: 0,\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {facet.label || facet.field}\n </h3>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: sizeScale.gap,\n }}\n >\n {rangeConfig.ranges.map((range) => {\n const count = countMap.get(range.label) ?? 0;\n const active = isRangeActive(range);\n return (\n <button\n key={range.label}\n type=\"button\"\n className={clsx(\n facetsTheme.rangeButton,\n active && facetsTheme.rangeButtonActive,\n )}\n disabled={count === 0 && !active}\n onClick={() => handleRangeClick(range)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.35em',\n padding: `${sizeScale.padding} 0.75em`,\n fontSize: sizeScale.font,\n border: `1px solid ${active ? 'var(--seekora-primary, ' + theme.colors.primary + ')' : 'var(--seekora-facet-border, ' + theme.colors.border + ')'}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.full,\n backgroundColor: active ? 'var(--seekora-primary, ' + theme.colors.primary + ')' : 'var(--seekora-facet-bg, ' + theme.colors.background + ')',\n color: active ? 'var(--seekora-primary-text, #fff)' : theme.colors.text,\n cursor: count === 0 && !active ? 'not-allowed' : 'pointer',\n opacity: count === 0 && !active ? 0.5 : 1,\n transition: 'all 0.2s ease',\n }}\n >\n {range.label}\n {showCounts && (\n <span\n className={clsx(facetsTheme.rangeButtonCount)}\n style={{\n fontSize: theme.typography.fontSize.small,\n opacity: 0.8,\n }}\n >\n ({count})\n </span>\n )}\n </button>\n );\n })}\n </div>\n {hasActiveRange && (\n <button\n type=\"button\"\n className={clsx(facetsTheme.rangeClear)}\n onClick={handleClear}\n style={{\n marginTop: sizeScale.gap,\n padding: sizeScale.padding,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Clear\n </button>\n )}\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Range slider facet renderer\n // -------------------------------------------------------------------\n\n const renderRangeSliderFacet = (facet: Facet, _index: number) => {\n if (!facet.stats) return null;\n\n const { min: statsMin, max: statsMax } = facet.stats;\n\n // Auto-detect formatting for common field names\n const fieldLower = facet.field.toLowerCase();\n const isPriceField = fieldLower.includes('price') || fieldLower.includes('cost') || fieldLower.includes('amount');\n const formatValue = isPriceField\n ? (v: number) => `$${v.toFixed(2)}`\n : (v: number) => v.toString();\n\n // Determine step: use 0.01 for price, 1 for integer ranges, 0.1 otherwise\n const range = statsMax - statsMin;\n const step = isPriceField ? 0.01 : range > 10 ? 1 : 0.1;\n\n // Check if there's an active range refinement\n const hasActiveRange = refinements.some(\n (r) => r.field === facet.field && (r.value.startsWith('>=') || r.value.startsWith('<=')),\n );\n\n const handleClear = () => {\n refinements\n .filter((r) => r.field === facet.field && (r.value.startsWith('>=') || r.value.startsWith('<=')))\n .forEach((r) => removeRefinement(facet.field, r.value, false));\n // Trigger search after clearing\n addRefinement(facet.field, '__noop__', false);\n removeRefinement(facet.field, '__noop__', true);\n };\n\n return (\n <div\n key={facet.field}\n className={facetsTheme.facet}\n style={{\n marginBottom: theme.spacing.large,\n padding: theme.spacing.medium,\n backgroundColor: 'var(--seekora-facet-bg, ' + theme.colors.background + ')',\n border: `1px solid var(--seekora-facet-border, ${theme.colors.border})`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: theme.spacing.small }}>\n <h3\n className={facetsTheme.facetTitle}\n style={{\n margin: 0,\n color: theme.colors.text,\n }}\n >\n {facet.label || facet.field}\n </h3>\n {hasActiveRange && (\n <button\n type=\"button\"\n className={clsx(facetsTheme.rangeClear)}\n onClick={handleClear}\n style={{\n padding: '0.15em 0.5em',\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Clear\n </button>\n )}\n </div>\n <RangeSlider\n field={facet.field}\n min={statsMin}\n max={statsMax}\n step={step}\n formatValue={formatValue}\n syncWithState={true}\n />\n </div>\n );\n };\n\n // -------------------------------------------------------------------\n // Default facet renderer dispatcher\n // -------------------------------------------------------------------\n\n const defaultRenderFacet = (facet: Facet, index: number) => {\n const renderType = determineFacetRenderType(facet.field, facet.stats);\n\n if (renderType === 'range-buttons') {\n return renderRangeButtonFacet(facet, index);\n }\n if (renderType === 'range-slider') {\n return renderRangeSliderFacet(facet, index);\n }\n\n switch (variant) {\n case 'color-swatch':\n return renderColorSwatchFacet(facet, index);\n case 'collapsible':\n return renderCollapsibleFacet(facet, index);\n case 'checkbox':\n default:\n return renderCheckboxFacet(facet, index);\n }\n };\n\n // -------------------------------------------------------------------\n // Empty state\n // -------------------------------------------------------------------\n\n if (facets.length === 0) {\n log.verbose('Facets: No facets to display', {\n hasResults: !!results,\n resultsType: results ? typeof results : 'null',\n });\n // Return a placeholder instead of null for debugging\n if (process.env.NODE_ENV === 'development') {\n return (\n <div style={{ padding: theme.spacing.small, color: theme.colors.textSecondary, fontSize: theme.typography.fontSize.small }}>\n No facets available\n </div>\n );\n }\n return null;\n }\n\n // -------------------------------------------------------------------\n // Render\n // -------------------------------------------------------------------\n\n return (\n <div\n className={clsx(facetsTheme.container, className)}\n style={{\n ...CSS_VAR_DEFAULTS as React.CSSProperties,\n ...style,\n }}\n >\n {facets.map((facet, index) => {\n return renderFacet\n ? renderFacet(facet, index)\n : defaultRenderFacet(facet, index);\n })}\n </div>\n );\n};\n","/**\n * FacetDropdown Component\n *\n * A dropdown component that displays facet values from a specific field\n * and allows users to filter search results by selecting values.\n *\n * Can be used standalone (fetches its own data) or integrated with SearchProvider.\n *\n * @cssVariables\n * Customize the dropdown appearance using CSS variables:\n *\n * Button:\n * - `--facet-dropdown-button-bg`: Button background color\n * - `--facet-dropdown-text`: Button text color\n * - `--facet-dropdown-border`: Button and panel border color\n * - `--facet-dropdown-font-size`: Button font size (default: 0.875rem)\n * - `--facet-dropdown-font-weight`: Button font weight (default: 500)\n *\n * Dropdown Panel:\n * - `--facet-dropdown-bg`: Panel background color\n * - `--facet-dropdown-shadow`: Panel box shadow\n *\n * Options:\n * - `--facet-dropdown-option-text`: Option text color\n * - `--facet-dropdown-option-font-size`: Option font size (default: 0.875rem)\n * - `--facet-dropdown-option-font-weight-active`: Active option font weight (default: 500)\n * - `--facet-dropdown-option-active-bg`: Active option background color\n *\n * Count Badge:\n * - `--facet-dropdown-count-text`: Count text color\n * - `--facet-dropdown-count-font-size`: Count font size (default: 0.75rem)\n *\n * Scrollbar:\n * - `--facet-dropdown-scrollbar-thumb`: Scrollbar thumb color\n * - `--facet-dropdown-scrollbar-thumb-hover`: Scrollbar thumb hover color\n *\n * @example\n * ```tsx\n * <FacetDropdown\n * field=\"category\"\n * placeholder=\"All Categories\"\n * applyFilter={true}\n * showCounts={true}\n * />\n * ```\n */\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\n\n// Z-index scale for consistent layering\n// SearchOverlay uses z-100, so dropdown must be higher\nconst Z_INDEX = {\n dropdown: 150, // Higher than SearchOverlay (100)\n modal: 200,\n overlay: 300,\n tooltip: 50,\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface FacetDropdownOption {\n value: string;\n count: number;\n label?: string;\n}\n\nexport interface FacetDropdownTheme {\n button?: string;\n buttonOpen?: string;\n panel?: string;\n option?: string;\n optionActive?: string;\n optionHover?: string;\n caretIcon?: string;\n}\n\nexport interface FacetDropdownProps {\n /** The facet field to display (e.g., \"category\", \"brand\", \"product_type\") */\n field: string;\n /** Placeholder text when no value is selected */\n placeholder?: string;\n /** Custom className for the button */\n className?: string;\n /** Custom theme overrides */\n theme?: FacetDropdownTheme;\n /** Called when a value is selected */\n onChange?: (value: string) => void;\n /** Current selected value (controlled mode) */\n value?: string;\n /** Maximum number of options to show before scrolling */\n maxOptions?: number;\n /** Whether to show facet counts */\n showCounts?: boolean;\n /** Custom options (if you want to provide static options instead of fetching) */\n options?: FacetDropdownOption[];\n /** Standalone mode: provide your own search client */\n client?: SeekoraClient;\n /** Apply filter immediately on selection (default: true) */\n applyFilter?: boolean;\n /** Navigate to search page on selection (default: false) */\n navigateOnSelect?: boolean;\n /** Base URL for navigation (e.g., \"/search\") */\n searchPageUrl?: string;\n /** Use dedicated Filters API instead of search API for fetching facet values */\n useFiltersApi?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const FacetDropdown: React.FC<FacetDropdownProps> = ({\n field,\n placeholder = 'All Categories',\n className,\n theme: customTheme = {},\n onChange,\n value: controlledValue,\n maxOptions = 10,\n showCounts = true,\n options: providedOptions,\n client: providedClient,\n applyFilter = true,\n navigateOnSelect = false,\n searchPageUrl = '/search',\n useFiltersApi = false,\n}) => {\n const { client: contextClient, theme, stateManager } = useSearchContext();\n const { addRefinement, removeRefinement, refinements, search } = useSearchState();\n\n const client = providedClient || contextClient;\n\n const [open, setOpen] = useState(false);\n const [facetOptions, setFacetOptions] = useState<FacetDropdownOption[]>(providedOptions || []);\n const [internalValue, setInternalValue] = useState(controlledValue || '');\n const [dropdownPosition, setDropdownPosition] = useState<{ top: number; left: number; width: number } | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Determine the current value (controlled or uncontrolled)\n const currentValue = controlledValue !== undefined ? controlledValue : internalValue;\n\n // ---------------------------------------------------------------------------\n // Fetch facet values\n // ---------------------------------------------------------------------------\n\n const fetchFacetValues = useCallback(async () => {\n if (providedOptions || !client) return;\n\n try {\n log.verbose('FacetDropdown: Fetching facet values', { field, useFiltersApi });\n\n if (useFiltersApi) {\n // Use dedicated Filters API via state manager\n const response = await stateManager.fetchFilters({\n facetBy: field,\n maxFacetValues: 100,\n });\n\n const targetFilter = (response?.filters || []).find((f: any) => f.field === field);\n if (targetFilter && targetFilter.values) {\n const options: FacetDropdownOption[] = targetFilter.values.map((v: any) => ({\n value: v.value || '',\n count: v.count || 0,\n label: v.value || '',\n }));\n setFacetOptions(options);\n log.verbose('FacetDropdown: Facet options loaded via Filters API', { field, count: options.length });\n } else {\n log.verbose('FacetDropdown: No filter data found', { field });\n setFacetOptions([]);\n }\n } else {\n // Fallback: use search API with per_page=0\n const response = await client.search('*', {\n facet_by: field,\n max_facet_values: 100,\n per_page: 0,\n });\n\n log.verbose('FacetDropdown: Search response', { response });\n\n const facetsData = response?.data?.facets || response?.facets;\n const facets: any[] = Array.isArray(facetsData) ? facetsData : [];\n const targetFacet = facets.find((f: any) => f.field_name === field || f.field === field);\n\n if (targetFacet && targetFacet.counts) {\n const options: FacetDropdownOption[] = targetFacet.counts.map((count: any) => ({\n value: count.value,\n count: count.count,\n label: count.value,\n }));\n\n setFacetOptions(options);\n log.verbose('FacetDropdown: Facet options loaded', { field, count: options.length });\n } else {\n log.verbose('FacetDropdown: No facet data found', { field, facets });\n setFacetOptions([]);\n }\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n log.error('FacetDropdown: Error fetching facet values', {\n field,\n error: err.message,\n });\n setFacetOptions([]);\n }\n }, [field, client, providedOptions, useFiltersApi]);\n\n useEffect(() => {\n if (!providedOptions && client) {\n fetchFacetValues();\n }\n }, [fetchFacetValues, providedOptions, client]);\n\n // ---------------------------------------------------------------------------\n // Calculate dropdown position when opened\n // ---------------------------------------------------------------------------\n\n useEffect(() => {\n if (!open || !buttonRef.current) return;\n\n const updatePosition = () => {\n if (!buttonRef.current) return;\n const rect = buttonRef.current.getBoundingClientRect();\n setDropdownPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n };\n\n updatePosition();\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [open]);\n\n // ---------------------------------------------------------------------------\n // Click outside handler\n // ---------------------------------------------------------------------------\n\n useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node) &&\n buttonRef.current &&\n !buttonRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [open]);\n\n // ---------------------------------------------------------------------------\n // Selection handler\n // ---------------------------------------------------------------------------\n\n const handleSelect = useCallback(\n (value: string) => {\n log.verbose('FacetDropdown: Value selected', { field, value });\n\n // Update internal state\n setInternalValue(value);\n setOpen(false);\n\n // Call onChange callback\n if (onChange) {\n onChange(value);\n }\n\n // Apply filter if enabled and we have search state\n if (applyFilter && addRefinement && removeRefinement) {\n // Remove any existing refinement for this field\n const existingRefinement = refinements.find(r => r.field === field);\n if (existingRefinement) {\n removeRefinement(field, existingRefinement.value, false);\n }\n\n // Add new refinement if value is not empty\n if (value) {\n addRefinement(field, value, true); // true = trigger search\n } else if (search) {\n // If clearing the filter, trigger search manually\n search();\n }\n }\n\n // Navigate to search page if enabled\n if (navigateOnSelect && value && typeof window !== 'undefined') {\n const url = new URL(window.location.origin + searchPageUrl);\n url.searchParams.set(field, value);\n window.location.href = url.toString();\n }\n },\n [field, onChange, applyFilter, addRefinement, removeRefinement, refinements, search, navigateOnSelect, searchPageUrl]\n );\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n const displayLabel = currentValue || placeholder;\n const hasOptions = facetOptions.length > 0;\n\n const buttonClass = [\n 'facet-dropdown-button',\n customTheme.button,\n className,\n open && customTheme.buttonOpen,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render dropdown panel via portal\n const renderDropdown = () => {\n if (!open || !hasOptions || !dropdownPosition || typeof document === 'undefined') {\n return null;\n }\n\n const dropdown = (\n <div\n ref={dropdownRef}\n className={customTheme.panel || 'facet-dropdown-panel'}\n role=\"listbox\"\n aria-label={`${field} options`}\n style={{\n position: 'absolute',\n top: `${dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n minWidth: `${dropdownPosition.width}px`,\n width: 'max-content',\n maxWidth: 'min(24rem, 90vw)',\n maxHeight: `calc(100vh - 100px)`,\n overflowY: 'auto',\n overflowX: 'hidden',\n backgroundColor: 'var(--facet-dropdown-bg, var(--background))',\n border: '1px solid var(--facet-dropdown-border, var(--border-color))',\n borderRadius: theme?.borderRadius && typeof theme.borderRadius !== 'string'\n ? theme.borderRadius.medium\n : '0.5rem',\n boxShadow: 'var(--facet-dropdown-shadow, var(--shadow-lg))',\n zIndex: Z_INDEX.dropdown,\n padding: '0.25rem',\n }}\n >\n {/* \"All\" option */}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={!currentValue}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleSelect('');\n }}\n className={[\n customTheme.option,\n !currentValue && customTheme.optionActive,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n width: '100%',\n textAlign: 'left',\n padding: '0.5rem 0.75rem',\n fontSize: 'var(--facet-dropdown-option-font-size, 0.875rem)',\n fontWeight: !currentValue ? 'var(--facet-dropdown-option-font-weight-active, 500)' : 'normal',\n color: 'var(--facet-dropdown-option-text, var(--text-color, currentColor))',\n backgroundColor: !currentValue ? 'var(--facet-dropdown-option-active-bg, var(--hover-color))' : 'transparent',\n border: 'none',\n borderRadius: theme?.borderRadius && typeof theme.borderRadius !== 'string'\n ? theme.borderRadius.small\n : '0.25rem',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <span>{placeholder}</span>\n </button>\n\n {/* Facet options */}\n {facetOptions.map((option) => {\n const isActive = currentValue === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleSelect(option.value);\n }}\n className={[\n customTheme.option,\n isActive && customTheme.optionActive,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n width: '100%',\n textAlign: 'left',\n padding: '0.5rem 0.75rem',\n fontSize: 'var(--facet-dropdown-option-font-size, 0.875rem)',\n fontWeight: isActive ? 'var(--facet-dropdown-option-font-weight-active, 500)' : 'normal',\n color: 'var(--facet-dropdown-option-text, var(--text-color, currentColor))',\n backgroundColor: isActive ? 'var(--facet-dropdown-option-active-bg, var(--hover-color))' : 'transparent',\n border: 'none',\n borderRadius: theme?.borderRadius && typeof theme.borderRadius !== 'string'\n ? theme.borderRadius.small\n : '0.25rem',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {option.label || option.value}\n </span>\n {showCounts && (\n <span\n style={{\n fontSize: 'var(--facet-dropdown-count-font-size, 0.75rem)',\n color: 'var(--facet-dropdown-count-text, var(--text-secondary, currentColor))',\n opacity: 0.7,\n marginLeft: '0.5rem',\n flexShrink: 0,\n }}\n >\n ({option.count})\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n\n return createPortal(dropdown, document.body);\n };\n\n return (\n <div className=\"facet-dropdown-container\" style={{ position: 'relative' }}>\n <style dangerouslySetInnerHTML={{\n __html: `\n .facet-dropdown-panel {\n --scrollbar-track: transparent;\n --scrollbar-thumb: var(--facet-dropdown-scrollbar-thumb, var(--border-color));\n --scrollbar-thumb-hover: var(--facet-dropdown-scrollbar-thumb-hover, var(--text-secondary));\n }\n .facet-dropdown-panel::-webkit-scrollbar {\n width: 6px;\n }\n .facet-dropdown-panel::-webkit-scrollbar-track {\n background: var(--scrollbar-track);\n }\n .facet-dropdown-panel::-webkit-scrollbar-thumb {\n background: var(--scrollbar-thumb);\n border-radius: 3px;\n }\n .facet-dropdown-panel::-webkit-scrollbar-thumb:hover {\n background: var(--scrollbar-thumb-hover);\n }\n .facet-dropdown-panel {\n scrollbar-width: thin;\n scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);\n }\n `\n }} />\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(prev => !prev);\n }}\n className={buttonClass}\n aria-label={`Filter by ${field}`}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.375rem',\n padding: '0.625rem 0.75rem',\n fontSize: 'var(--facet-dropdown-font-size, 0.875rem)',\n fontWeight: 'var(--facet-dropdown-font-weight, 500)',\n color: 'var(--facet-dropdown-text, var(--text-color, currentColor))',\n backgroundColor: 'var(--facet-dropdown-button-bg, var(--background, transparent))',\n border: '1px solid var(--facet-dropdown-border, var(--border-color))',\n borderRadius: theme?.borderRadius && typeof theme.borderRadius !== 'string'\n ? theme.borderRadius.medium\n : '0.5rem',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n outline: 'none',\n whiteSpace: 'nowrap',\n minWidth: '8rem',\n ...(!hasOptions && { opacity: 0.6, cursor: 'not-allowed' }),\n }}\n disabled={!hasOptions}\n >\n <span style={{ flex: 1, textAlign: 'left', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {displayLabel}\n </span>\n <svg\n className={customTheme.caretIcon}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n flexShrink: 0,\n }}\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {renderDropdown()}\n </div>\n );\n};\n","/**\n * CurrentRefinements Component\n *\n * Displays currently active filters/refinements with ability to clear them.\n * Supports StateManager auto-sync, display variants, layout modes, and animations.\n */\n\nimport React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nexport interface Refinement {\n field: string;\n label?: string;\n value: string;\n displayValue?: string;\n}\n\nexport interface CurrentRefinementsTheme {\n container?: string;\n list?: string;\n item?: string;\n label?: string;\n value?: string;\n clearButton?: string;\n clearAllButton?: string;\n /** Variant-specific class slots */\n chip?: string;\n tag?: string;\n pill?: string;\n badge?: string;\n group?: string;\n groupLabel?: string;\n}\n\n/** Display variant for refinement items */\nexport type RefinementVariant = 'chips' | 'tags' | 'pills' | 'badges' | 'text-list';\n\n/** Layout variant for the container */\nexport type RefinementLayout = 'horizontal' | 'vertical' | 'grouped';\n\nexport interface CurrentRefinementsProps {\n /** Current refinements (if not provided, auto-reads from StateManager) */\n refinements?: Refinement[];\n /** Callback when a refinement is cleared */\n onRefinementClear?: (field: string, value: string) => void;\n /** Callback when all refinements are cleared */\n onClearAll?: () => void;\n /** Custom render function for refinement */\n renderRefinement?: (refinement: Refinement, index: number) => React.ReactNode;\n /** Show \"Clear all\" button */\n showClearAll?: boolean;\n /** Display variant (default: 'chips') */\n variant?: RefinementVariant;\n /** Layout mode (default: 'horizontal') */\n layout?: RefinementLayout;\n /** Per-field color mapping */\n fieldColors?: Record<string, string>;\n /** Custom close icon renderer */\n renderCloseIcon?: () => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: CurrentRefinementsTheme;\n /** Fields to exclude from display (e.g. ['category'] on collection pages) */\n excludeFields?: string[];\n}\n\n/** Get variant-specific styles */\nconst getVariantStyles = (\n variant: RefinementVariant,\n themeColors: any,\n themeSpacing: any,\n themeBorderRadius: any,\n fieldColor?: string,\n): React.CSSProperties => {\n const baseBg = fieldColor || `var(--seekora-refinement-bg, ${themeColors.hover})`;\n const baseColor = `var(--seekora-refinement-color, ${themeColors.text})`;\n const baseBorder = `var(--seekora-refinement-border, ${themeColors.border})`;\n\n switch (variant) {\n case 'tags':\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: `2px ${themeSpacing.medium}`,\n backgroundColor: baseBg,\n border: `1px solid ${baseBorder}`,\n borderRadius: `var(--seekora-refinement-radius, 4px)`,\n fontSize: '12px',\n color: baseColor,\n fontWeight: 500,\n };\n case 'pills':\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: `${themeSpacing.small} ${themeSpacing.medium}`,\n backgroundColor: baseBg,\n border: 'none',\n borderRadius: `var(--seekora-refinement-radius, 9999px)`,\n fontSize: '13px',\n color: baseColor,\n };\n case 'badges':\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: `3px ${themeSpacing.small}`,\n backgroundColor: themeColors.primary,\n border: 'none',\n borderRadius: `var(--seekora-refinement-radius, 4px)`,\n fontSize: '11px',\n color: '#fff',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n };\n case 'text-list':\n return {\n display: 'flex',\n alignItems: 'center',\n padding: `${themeSpacing.small} 0`,\n backgroundColor: 'transparent',\n border: 'none',\n borderBottom: `1px solid ${baseBorder}`,\n borderRadius: '0',\n fontSize: '14px',\n color: baseColor,\n };\n case 'chips':\n default:\n return {\n display: 'inline-flex',\n alignItems: 'center',\n padding: `${themeSpacing.small} ${themeSpacing.medium}`,\n backgroundColor: baseBg,\n border: `1px solid ${baseBorder}`,\n borderRadius: `var(--seekora-refinement-radius, ${typeof themeBorderRadius === 'string' ? themeBorderRadius : themeBorderRadius.medium})`,\n fontSize: '13px',\n color: baseColor,\n };\n }\n};\n\n/** Get variant-specific class name from theme */\nconst getVariantClass = (variant: RefinementVariant, refinementsTheme: CurrentRefinementsTheme): string | undefined => {\n switch (variant) {\n case 'tags': return refinementsTheme.tag;\n case 'pills': return refinementsTheme.pill;\n case 'badges': return refinementsTheme.badge;\n case 'chips': return refinementsTheme.chip;\n default: return refinementsTheme.item;\n }\n};\n\nexport const CurrentRefinements: React.FC<CurrentRefinementsProps> = ({\n refinements: refinementsProp,\n onRefinementClear,\n onClearAll,\n renderRefinement,\n showClearAll = true,\n variant = 'chips',\n layout = 'horizontal',\n fieldColors,\n renderCloseIcon,\n className,\n style,\n theme: customTheme,\n excludeFields,\n}) => {\n const { theme } = useSearchContext();\n const { refinements: stateRefinements, removeRefinement, clearRefinements } = useSearchState();\n const refinementsTheme = customTheme || {};\n\n // Format a numeric value for display (auto-detect price fields)\n const formatRangeValue = (field: string, val: number): string => {\n const f = field.toLowerCase();\n if (f.includes('price') || f.includes('cost') || f.includes('amount')) {\n return `$${val.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n return val.toLocaleString();\n };\n\n // Create a stable serialized key from stateRefinements to detect actual changes\n // (needed because state manager mutates the array in place)\n const stateRefinementsKey = useMemo(\n () => stateRefinements.map(r => `${r.field}:${r.value}`).sort().join('|'),\n [stateRefinements.map(r => `${r.field}:${r.value}`).sort().join('|')]\n );\n\n // Use props if provided, otherwise auto-read from StateManager\n // Combines >= / <= range refinements into single formatted pills\n const refinements: Refinement[] = useMemo(() => {\n if (refinementsProp !== undefined) {\n return refinementsProp;\n }\n\n const rangeMap = new Map<string, { minVal?: number; maxVal?: number }>();\n const nonRange: Refinement[] = [];\n\n stateRefinements.forEach(r => {\n const minMatch = r.value.match(/^>=(\\d+(?:\\.\\d+)?)$/);\n const maxMatch = r.value.match(/^<=(\\d+(?:\\.\\d+)?)$/);\n if (minMatch || maxMatch) {\n if (!rangeMap.has(r.field)) rangeMap.set(r.field, {});\n const entry = rangeMap.get(r.field)!;\n if (minMatch) entry.minVal = parseFloat(minMatch[1]);\n if (maxMatch) entry.maxVal = parseFloat(maxMatch[1]);\n } else {\n nonRange.push({ field: r.field, value: r.value });\n }\n });\n\n rangeMap.forEach((range, field) => {\n let displayValue: string;\n if (range.minVal !== undefined && range.maxVal !== undefined) {\n displayValue = `${formatRangeValue(field, range.minVal)} – ${formatRangeValue(field, range.maxVal)}`;\n } else if (range.minVal !== undefined) {\n displayValue = `≥ ${formatRangeValue(field, range.minVal)}`;\n } else if (range.maxVal !== undefined) {\n displayValue = `≤ ${formatRangeValue(field, range.maxVal)}`;\n } else {\n return;\n }\n nonRange.push({ field, value: '__range__', displayValue });\n });\n\n const merged = nonRange;\n if (excludeFields && excludeFields.length > 0) {\n const excluded = new Set(excludeFields);\n return merged.filter(r => !excluded.has(r.field));\n }\n return merged;\n }, [refinementsProp, stateRefinementsKey, excludeFields]);\n\n // Track items for entry/exit animations\n const [visibleItems, setVisibleItems] = useState<Set<string>>(new Set());\n const [exitingItems, setExitingItems] = useState<Set<string>>(new Set());\n const prevRefinementsRef = useRef<Refinement[]>([]);\n\n useEffect(() => {\n const currentKeys = new Set(refinements.map(r => `${r.field}:${r.value}`));\n const prevKeys = new Set(prevRefinementsRef.current.map(r => `${r.field}:${r.value}`));\n\n // Detect removed items for exit animation\n const removed = new Set<string>();\n prevKeys.forEach(key => {\n if (!currentKeys.has(key)) removed.add(key);\n });\n\n if (removed.size > 0) {\n setExitingItems(removed);\n // Remove after animation completes\n setTimeout(() => setExitingItems(new Set()), 200);\n }\n\n // Mark new items for entry animation\n setVisibleItems(currentKeys);\n prevRefinementsRef.current = [...refinements];\n }, [refinements]);\n\n const handleClear = (field: string, value: string) => {\n if (refinementsProp === undefined) {\n if (value === '__range__') {\n // Clear all range refinements for this field\n const rangeRefs = stateRefinements.filter(\n r => r.field === field && (/^>=/.test(r.value) || /^<=/.test(r.value)),\n );\n rangeRefs.forEach((r, i) =>\n removeRefinement(field, r.value, i === rangeRefs.length - 1),\n );\n } else {\n removeRefinement(field, value);\n }\n }\n if (onRefinementClear) {\n onRefinementClear(field, value);\n }\n };\n\n const handleClearAll = () => {\n // If synced with StateManager, auto-clear all via StateManager\n if (refinementsProp === undefined) {\n clearRefinements();\n }\n if (onClearAll) {\n onClearAll();\n }\n };\n\n const defaultCloseIcon = () => (\n <span aria-hidden=\"true\" style={{ lineHeight: 1 }}>×</span>\n );\n\n const defaultRenderRefinement = (refinement: Refinement, index: number) => {\n const key = `${refinement.field}:${refinement.value}`;\n const fieldColor = fieldColors?.[refinement.field];\n const isEntering = visibleItems.has(key) && !prevRefinementsRef.current.some(\n r => `${r.field}:${r.value}` === key\n );\n const variantStyles = getVariantStyles(variant, theme.colors, theme.spacing, theme.borderRadius, fieldColor);\n const variantClass = getVariantClass(variant, refinementsTheme);\n\n return (\n <div\n key={`${key}-${index}`}\n className={clsx(refinementsTheme.item, variantClass)}\n role=\"listitem\"\n style={{\n ...variantStyles,\n margin: layout === 'vertical'\n ? `0 0 ${theme.spacing.small} 0`\n : `0 ${theme.spacing.small} ${theme.spacing.small} 0`,\n transition: `all ${TRANSITIONS.normal}`,\n opacity: exitingItems.has(key) ? 0 : 1,\n transform: exitingItems.has(key) ? 'scale(0.8)' : 'scale(1)',\n animation: isEntering ? 'seekoraChipIn 200ms ease-out' : undefined,\n }}\n >\n {variant !== 'badges' && (\n <span\n className={refinementsTheme.label}\n style={{\n marginRight: theme.spacing.small,\n fontWeight: '500',\n opacity: 0.7,\n }}\n >\n {refinement.label || refinement.field}:\n </span>\n )}\n <span className={refinementsTheme.value}>\n {refinement.displayValue || refinement.value}\n </span>\n <button\n type=\"button\"\n onClick={() => handleClear(refinement.field, refinement.value)}\n className={refinementsTheme.clearButton}\n style={{\n border: 'none',\n backgroundColor: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n fontSize: '14px',\n padding: '0 0 0 6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '50%',\n transition: `opacity ${TRANSITIONS.fast}`,\n opacity: 0.6,\n }}\n aria-label={`Clear ${refinement.label || refinement.field}: ${refinement.value}`}\n onMouseEnter={e => (e.currentTarget.style.opacity = '1')}\n onMouseLeave={e => (e.currentTarget.style.opacity = '0.6')}\n >\n {renderCloseIcon ? renderCloseIcon() : defaultCloseIcon()}\n </button>\n </div>\n );\n };\n\n // Group refinements by field for grouped layout\n const groupedRefinements = layout === 'grouped'\n ? refinements.reduce<Record<string, Refinement[]>>((acc, r) => {\n if (!acc[r.field]) acc[r.field] = [];\n acc[r.field].push(r);\n return acc;\n }, {})\n : null;\n\n const containerStyles: React.CSSProperties = {\n ...style,\n // When a custom list theme is provided, make the container transparent to layout\n // so the list div becomes the direct layout child (enables overflow scroll from parent)\n ...(refinementsTheme.list && !style?.display ? { display: 'contents' } : {}),\n };\n\n const listStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: layout === 'vertical' ? 'column' : 'row',\n alignItems: layout === 'vertical' ? 'flex-start' : 'center',\n marginBottom: showClearAll && refinements.length > 0 ? theme.spacing.medium : 0,\n // Only apply flex-wrap if no custom list theme is provided (let theme classes control wrapping)\n ...(!refinementsTheme.list ? { flexWrap: layout === 'vertical' ? 'nowrap' : 'wrap' } : {}),\n };\n\n return (\n <div\n className={clsx(refinementsTheme.container, className)}\n style={containerStyles}\n >\n {/* Inject entry animation keyframes */}\n <style>{`\n @keyframes seekoraChipIn {\n from { opacity: 0; transform: scale(0.8); }\n to { opacity: 1; transform: scale(1); }\n }\n `}</style>\n\n {refinements.length > 0 && (\n <>\n {layout === 'grouped' && groupedRefinements ? (\n Object.entries(groupedRefinements).map(([field, items]) => (\n <div key={field} className={refinementsTheme.group} style={{ marginBottom: theme.spacing.medium }}>\n <div\n className={refinementsTheme.groupLabel}\n style={{\n fontSize: theme.typography.fontSize.small,\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: theme.spacing.small,\n textTransform: 'capitalize',\n }}\n >\n {items[0]?.label || field}\n </div>\n <div role=\"list\" style={listStyles}>\n {items.map((refinement, index) => {\n return renderRefinement\n ? renderRefinement(refinement, index)\n : defaultRenderRefinement(refinement, index);\n })}\n </div>\n </div>\n ))\n ) : (\n <div role=\"list\" className={refinementsTheme.list} style={listStyles}>\n {refinements.map((refinement, index) => {\n return renderRefinement\n ? renderRefinement(refinement, index)\n : defaultRenderRefinement(refinement, index);\n })}\n </div>\n )}\n\n {showClearAll && refinements.length > 1 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className={refinementsTheme.clearAllButton}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n transition: `background-color ${TRANSITIONS.fast}`,\n }}\n >\n Clear all filters\n </button>\n )}\n </>\n )}\n </div>\n );\n};\n","/**\n * ClearRefinements Component\n * \n * A standalone button to clear all active refinements/filters\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface ClearRefinementsTheme {\n root?: string;\n button?: string;\n buttonDisabled?: string;\n}\n\nexport interface ClearRefinementsProps {\n /** Button text when there are refinements to clear */\n clearsQuery?: boolean;\n /** Whether clicking should also clear the search query */\n resetLabel?: string;\n /** Button text shown when there are no refinements */\n disabledLabel?: string;\n /** Fields to include (if not specified, all fields are included) */\n includedFields?: string[];\n /** Fields to exclude from clearing */\n excludedFields?: string[];\n /** Callback when refinements are cleared */\n onClear?: () => void;\n /** Custom render function */\n renderButton?: (props: {\n canClear: boolean;\n onClick: () => void;\n disabled: boolean;\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: ClearRefinementsTheme;\n /** Whether to hide when there are no refinements */\n hideWhenEmpty?: boolean;\n}\n\nexport const ClearRefinements: React.FC<ClearRefinementsProps> = ({\n clearsQuery = false,\n resetLabel = 'Clear all filters',\n disabledLabel = 'No filters applied',\n includedFields,\n excludedFields = [],\n onClear,\n renderButton,\n className,\n style,\n theme: customTheme,\n hideWhenEmpty = false,\n}) => {\n const { theme } = useSearchContext();\n const { query, refinements, clearRefinements, setQuery, removeRefinement } = useSearchState();\n const clearTheme = customTheme || {};\n\n // Filter refinements based on included/excluded fields\n const relevantRefinements = useMemo(() => {\n return refinements.filter(r => {\n if (excludedFields.includes(r.field)) return false;\n if (includedFields && !includedFields.includes(r.field)) return false;\n return true;\n });\n }, [refinements, includedFields, excludedFields]);\n\n const canClear = relevantRefinements.length > 0 || (clearsQuery && query.length > 0);\n\n const handleClick = () => {\n if (!canClear) return;\n\n // Clear relevant refinements\n if (includedFields || excludedFields.length > 0) {\n // Clear only specific refinements\n relevantRefinements.forEach(r => {\n removeRefinement(r.field, r.value, false);\n });\n // Trigger search after all removals\n if (relevantRefinements.length > 0) {\n clearRefinements(false); // This will trigger the search\n }\n } else {\n // Clear all refinements\n clearRefinements(!clearsQuery); // Trigger search if not also clearing query\n }\n\n // Clear query if requested\n if (clearsQuery && query.length > 0) {\n setQuery('', true);\n }\n\n // Call the callback\n if (onClear) {\n onClear();\n }\n };\n\n // Hide when empty if requested\n if (hideWhenEmpty && !canClear) {\n return null;\n }\n\n // Custom render function\n if (renderButton) {\n return (\n <div className={clsx(clearTheme.root, className)} style={style}>\n {renderButton({\n canClear,\n onClick: handleClick,\n disabled: !canClear,\n })}\n </div>\n );\n }\n\n return (\n <div className={clsx(clearTheme.root, className)} style={style}>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={!canClear}\n className={clsx(\n clearTheme.button,\n !canClear && clearTheme.buttonDisabled\n )}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n backgroundColor: theme.colors.primary,\n color: '#ffffff',\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: canClear ? 'pointer' : 'default',\n opacity: canClear ? 1 : 0,\n pointerEvents: canClear ? 'auto' : 'none',\n transition: 'none',\n }}\n aria-label={resetLabel}\n >\n {resetLabel}\n </button>\n </div>\n );\n};\n","/**\n * SearchLayout Component\n *\n * Provides a layout structure for search interfaces with sidebar and main content\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { clsx } from 'clsx';\nimport { useIsMobile, useResponsivePadding, useResponsiveGap } from '../utils/responsive';\n\nexport interface SearchLayoutTheme {\n container?: string;\n sidebar?: string;\n main?: string;\n header?: string;\n footer?: string;\n}\n\nexport interface SearchLayoutProps {\n /** Content to render in the sidebar (filters, facets, etc.) */\n sidebar?: React.ReactNode;\n /** Content to render in the main area (results, etc.) */\n children: React.ReactNode;\n /** Header content */\n header?: React.ReactNode;\n /** Footer content */\n footer?: React.ReactNode;\n /** Sidebar width */\n sidebarWidth?: string;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: SearchLayoutTheme;\n /** Show sidebar on mobile */\n showSidebarOnMobile?: boolean;\n}\n\nexport const SearchLayout: React.FC<SearchLayoutProps> = ({\n sidebar,\n children,\n header,\n footer,\n sidebarWidth = '300px',\n className,\n style,\n theme: customTheme,\n showSidebarOnMobile = false,\n}) => {\n const { theme } = useSearchContext();\n const layoutTheme = customTheme || {};\n const isMobile = useIsMobile();\n const responsivePadding = useResponsivePadding(parseInt(theme.spacing.medium) || 16);\n const responsiveGap = useResponsiveGap(parseInt(theme.spacing.large) || 24);\n\n return (\n <div\n className={clsx(layoutTheme.container, className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n width: '100%',\n maxWidth: '100%',\n backgroundColor: theme.colors.background,\n ...style,\n }}\n >\n {header && (\n <header\n className={layoutTheme.header}\n style={{\n padding: responsivePadding,\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n {header}\n </header>\n )}\n\n <div\n style={{\n display: 'flex',\n flex: 1,\n width: '100%',\n maxWidth: '100%',\n flexDirection: isMobile ? 'column' : 'row',\n gap: responsiveGap,\n padding: responsivePadding,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n overflow: 'visible',\n }}\n >\n {sidebar && (!isMobile || showSidebarOnMobile) && (\n <aside\n className={layoutTheme.sidebar}\n style={{\n width: isMobile ? '100%' : sidebarWidth,\n minWidth: isMobile ? '100%' : sidebarWidth,\n flexShrink: 0,\n }}\n >\n {sidebar}\n </aside>\n )}\n\n <main\n className={layoutTheme.main}\n style={{\n flex: 1,\n minWidth: 0,\n width: '100%',\n maxWidth: '100%',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n overflow: 'auto',\n }}\n >\n {children}\n </main>\n </div>\n\n {footer && (\n <footer\n className={layoutTheme.footer}\n style={{\n padding: responsivePadding,\n borderTop: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n {footer}\n </footer>\n )}\n </div>\n );\n};\n","/**\n * RangeInput Component\n * \n * Displays a range input for filtering numeric values (e.g., price range)\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface RangeInputTheme {\n container?: string;\n label?: string;\n inputGroup?: string;\n input?: string;\n separator?: string;\n button?: string;\n}\n\nexport interface RangeInputProps {\n /** Field name for the range filter */\n field: string;\n /** Label for the range input */\n label?: string;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Current minimum value (controlled mode) */\n currentMin?: number;\n /** Current maximum value (controlled mode) */\n currentMax?: number;\n /** Step value for inputs */\n step?: number;\n /** Callback when range changes */\n onRangeChange?: (min: number | undefined, max: number | undefined) => void;\n /** Custom render function */\n renderRangeInput?: (props: {\n min: number | undefined;\n max: number | undefined;\n onMinChange: (value: number | undefined) => void;\n onMaxChange: (value: number | undefined) => void;\n onApply: () => void;\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: RangeInputTheme;\n /** Show apply button */\n showApplyButton?: boolean;\n /** Placeholder text for inputs */\n placeholder?: {\n min?: string;\n max?: string;\n };\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\n/**\n * Helper to parse range values from refinements\n */\nconst parseRangeFromRefinements = (\n refinements: Array<{ field: string; value: string }>,\n field: string\n): { min?: number; max?: number } => {\n let min: number | undefined;\n let max: number | undefined;\n \n refinements.forEach(r => {\n if (r.field === field) {\n // Parse >=X format\n const minMatch = r.value.match(/^>=(\\d+(?:\\.\\d+)?)$/);\n if (minMatch) {\n min = parseFloat(minMatch[1]);\n }\n // Parse <=X format\n const maxMatch = r.value.match(/^<=(\\d+(?:\\.\\d+)?)$/);\n if (maxMatch) {\n max = parseFloat(maxMatch[1]);\n }\n }\n });\n \n return { min, max };\n};\n\nexport const RangeInput: React.FC<RangeInputProps> = ({\n field,\n label,\n min,\n max,\n currentMin: currentMinProp,\n currentMax: currentMaxProp,\n step = 1,\n onRangeChange,\n renderRangeInput,\n className,\n style,\n theme: customTheme,\n showApplyButton = true,\n placeholder = { min: 'Min', max: 'Max' },\n syncWithState = true,\n}) => {\n const { theme } = useSearchContext();\n const { refinements, addRefinement, removeRefinement } = useSearchState();\n const rangeInputTheme = customTheme || {};\n \n // Parse current range from StateManager\n // NOTE: computed every render (no useMemo) because the state manager mutates\n // the refinements array in place — the reference never changes.\n const stateRange = !syncWithState\n ? { min: undefined, max: undefined }\n : parseRangeFromRefinements(refinements, field);\n \n const [internalMin, setInternalMin] = useState<number | undefined>(currentMinProp ?? stateRange.min);\n const [internalMax, setInternalMax] = useState<number | undefined>(currentMaxProp ?? stateRange.max);\n const [appliedMin, setAppliedMin] = useState<number | undefined>(currentMinProp ?? stateRange.min);\n const [appliedMax, setAppliedMax] = useState<number | undefined>(currentMaxProp ?? stateRange.max);\n\n // Sync internal state when StateManager refinements change\n useEffect(() => {\n if (syncWithState) {\n if (stateRange.min !== appliedMin || stateRange.max !== appliedMax) {\n setInternalMin(stateRange.min);\n setInternalMax(stateRange.max);\n setAppliedMin(stateRange.min);\n setAppliedMax(stateRange.max);\n }\n }\n }, [syncWithState, stateRange.min, stateRange.max]);\n\n const currentMin = currentMinProp !== undefined ? currentMinProp : internalMin;\n const currentMax = currentMaxProp !== undefined ? currentMaxProp : internalMax;\n\n // Helper to update StateManager with range refinements\n const updateStateManager = useCallback((minVal: number | undefined, maxVal: number | undefined) => {\n if (!syncWithState) return;\n \n // Remove existing range refinements for this field\n refinements.forEach(r => {\n if (r.field === field) {\n removeRefinement(field, r.value, false); // Don't trigger search yet\n }\n });\n \n // Add new range refinements\n if (minVal !== undefined) {\n addRefinement(field, `>=${minVal}`, false); // Don't trigger search yet\n }\n if (maxVal !== undefined) {\n addRefinement(field, `<=${maxVal}`, true); // Trigger search on the last update\n } else if (minVal !== undefined) {\n // If only min is set, trigger search now\n addRefinement(field, `>=${minVal}`, true);\n }\n }, [syncWithState, field, refinements, addRefinement, removeRefinement]);\n\n const handleMinChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value === '' ? undefined : parseFloat(e.target.value);\n setInternalMin(value);\n if (!showApplyButton) {\n updateStateManager(value, currentMax);\n if (onRangeChange) {\n onRangeChange(value, currentMax);\n }\n }\n }, [currentMax, showApplyButton, onRangeChange, updateStateManager]);\n\n const handleMaxChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value === '' ? undefined : parseFloat(e.target.value);\n setInternalMax(value);\n if (!showApplyButton) {\n updateStateManager(currentMin, value);\n if (onRangeChange) {\n onRangeChange(currentMin, value);\n }\n }\n }, [currentMin, showApplyButton, onRangeChange, updateStateManager]);\n\n const handleApply = useCallback(() => {\n setAppliedMin(internalMin);\n setAppliedMax(internalMax);\n updateStateManager(internalMin, internalMax);\n if (onRangeChange) {\n onRangeChange(internalMin, internalMax);\n }\n }, [internalMin, internalMax, onRangeChange, updateStateManager]);\n\n const handleReset = useCallback(() => {\n setInternalMin(undefined);\n setInternalMax(undefined);\n setAppliedMin(undefined);\n setAppliedMax(undefined);\n \n // Clear refinements for this field from StateManager\n if (syncWithState) {\n refinements.forEach(r => {\n if (r.field === field) {\n removeRefinement(field, r.value, true);\n }\n });\n }\n \n if (onRangeChange) {\n onRangeChange(undefined, undefined);\n }\n }, [syncWithState, field, refinements, removeRefinement, onRangeChange]);\n\n const defaultRenderRangeInput = () => (\n <div\n className={clsx(rangeInputTheme.container, className)}\n style={style}\n >\n {label && (\n <label\n className={rangeInputTheme.label}\n style={{\n display: 'block',\n fontSize: theme.typography.fontSize.medium,\n fontWeight: 'bold',\n marginBottom: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {label}\n </label>\n )}\n <div\n className={rangeInputTheme.inputGroup}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n }}\n >\n <input\n type=\"number\"\n min={min}\n max={max}\n step={step}\n value={currentMin !== undefined ? currentMin : ''}\n onChange={handleMinChange}\n placeholder={placeholder.min}\n className={clsx(rangeInputTheme.input)}\n style={{\n flex: 1,\n padding: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n outline: 'none',\n }}\n />\n <span\n className={rangeInputTheme.separator}\n style={{\n color: theme.colors.text,\n opacity: 0.7,\n }}\n >\n to\n </span>\n <input\n type=\"number\"\n min={min}\n max={max}\n step={step}\n value={currentMax !== undefined ? currentMax : ''}\n onChange={handleMaxChange}\n placeholder={placeholder.max}\n className={clsx(rangeInputTheme.input)}\n style={{\n flex: 1,\n padding: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n outline: 'none',\n }}\n />\n {showApplyButton && (\n <button\n type=\"button\"\n onClick={handleApply}\n className={rangeInputTheme.button}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n backgroundColor: theme.colors.primary,\n color: '#fff',\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n fontWeight: '500',\n }}\n >\n Apply\n </button>\n )}\n {(appliedMin !== undefined || appliedMax !== undefined || currentMin !== undefined || currentMax !== undefined) && (\n <button\n type=\"button\"\n onClick={handleReset}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n backgroundColor: 'transparent',\n color: theme.colors.text,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n }}\n >\n Reset\n </button>\n )}\n </div>\n </div>\n );\n\n if (renderRangeInput) {\n return (\n <div className={clsx(rangeInputTheme.container, className)} style={style}>\n {renderRangeInput({\n min: currentMin,\n max: currentMax,\n onMinChange: (value) => {\n setInternalMin(value);\n if (!showApplyButton && onRangeChange) {\n onRangeChange(value, currentMax);\n }\n },\n onMaxChange: (value) => {\n setInternalMax(value);\n if (!showApplyButton && onRangeChange) {\n onRangeChange(currentMin, value);\n }\n },\n onApply: handleApply,\n })}\n </div>\n );\n }\n\n return defaultRenderRangeInput();\n};\n\n\n\n","/**\n * HitsPerPage Component\n * \n * A dropdown to let users change the number of displayed hits per page\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useEffect, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport { CustomSelect } from './primitives/CustomSelect';\n\nexport interface HitsPerPageItem {\n value: number;\n label: string;\n default?: boolean;\n}\n\nexport interface HitsPerPageTheme {\n root?: string;\n select?: string;\n option?: string;\n}\n\nexport interface HitsPerPageProps {\n /** Available items per page options */\n items: HitsPerPageItem[];\n /** Callback when hits per page changes */\n onHitsPerPageChange?: (value: number) => void;\n /** Custom render function for select */\n renderSelect?: (props: {\n value: number;\n onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n items: HitsPerPageItem[];\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: HitsPerPageTheme;\n /** Label text before the select */\n label?: string;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\nexport const HitsPerPage: React.FC<HitsPerPageProps> = ({\n items,\n onHitsPerPageChange,\n renderSelect,\n className,\n style,\n theme: customTheme,\n label = 'Show',\n syncWithState = true,\n}) => {\n const { theme } = useSearchContext();\n const { itemsPerPage, setPage } = useSearchState();\n const { stateManager } = useSearchContext();\n const hitsPerPageTheme = customTheme || {};\n\n // Find the default item or first item\n const defaultItem = items.find(i => i.default) || items[0];\n const [internalValue, setInternalValue] = React.useState(defaultItem?.value || 10);\n\n // Initialize StateManager on mount if default is set\n useEffect(() => {\n if (syncWithState && defaultItem && itemsPerPage !== defaultItem.value) {\n stateManager.setItemsPerPage(defaultItem.value, false);\n }\n }, []);\n\n // Determine the current value from StateManager or internal\n const value = syncWithState ? itemsPerPage : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newValue = parseInt(e.target.value, 10);\n setInternalValue(newValue);\n\n // Update StateManager\n if (syncWithState) {\n stateManager.setItemsPerPage(newValue, false);\n // Reset to page 1 when changing items per page\n setPage(1, true);\n }\n\n // Call callback\n if (onHitsPerPageChange) {\n onHitsPerPageChange(newValue);\n }\n };\n\n // Custom render function\n if (renderSelect) {\n return (\n <div className={clsx(hitsPerPageTheme.root, className)} style={style}>\n {renderSelect({\n value,\n onChange: handleChange,\n items,\n })}\n </div>\n );\n }\n\n return (\n <div\n className={clsx(hitsPerPageTheme.root, className)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n ...style,\n }}\n >\n {label && (\n <label\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n }}\n >\n {label}\n </label>\n )}\n <CustomSelect\n value={String(value)}\n onChange={(val) => {\n const newValue = parseInt(val, 10);\n setInternalValue(newValue);\n if (syncWithState) {\n stateManager.setItemsPerPage(newValue, false);\n setPage(1, true);\n }\n if (onHitsPerPageChange) {\n onHitsPerPageChange(newValue);\n }\n }}\n options={items.map((item) => ({\n value: String(item.value),\n label: item.label,\n }))}\n aria-label=\"Results per page\"\n className={hitsPerPageTheme.select}\n style={{\n '--seekora-select-font-size': theme.typography.fontSize.medium,\n '--seekora-select-border': theme.colors.border,\n '--seekora-select-radius': typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n '--seekora-select-bg': theme.colors.background,\n '--seekora-select-color': theme.colors.text,\n } as React.CSSProperties}\n />\n </div>\n );\n};\n","/**\n * InfiniteHits Component\n * \n * Displays search results with infinite scroll or \"Show More\" button\n * Accumulates results as user loads more pages\n */\n\nimport React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport type { ResultItem, FieldMapping } from '@seekora-ai/ui-sdk-types';\n\nexport interface InfiniteHitsTheme {\n root?: string;\n list?: string;\n item?: string;\n loadMore?: string;\n loadMoreDisabled?: string;\n empty?: string;\n sentinel?: string;\n}\n\nexport interface InfiniteHitsProps {\n /** Custom render function for each hit */\n renderHit?: (hit: ResultItem, index: number) => React.ReactNode;\n /** Custom render for empty state */\n renderEmpty?: () => React.ReactNode;\n /** Custom render for \"Show More\" button */\n renderShowMore?: (props: {\n isLoading: boolean;\n isLastPage: boolean;\n onClick: () => void;\n }) => React.ReactNode;\n /** Whether to show the \"Show More\" button (default: true) */\n showMoreButton?: boolean;\n /** Whether to use infinite scroll with IntersectionObserver (default: false) */\n useInfiniteScroll?: boolean;\n /** Threshold for IntersectionObserver (default: 0.1) */\n scrollThreshold?: number;\n /** Field mapping for extracting data from hits */\n fieldMapping?: FieldMapping;\n /** Text for \"Show More\" button */\n showMoreLabel?: string;\n /** Callback when a hit is clicked */\n onHitClick?: (hit: ResultItem, index: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: InfiniteHitsTheme;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\nexport const InfiniteHits: React.FC<InfiniteHitsProps> = ({\n renderHit,\n renderEmpty,\n renderShowMore,\n showMoreButton = true,\n useInfiniteScroll = false,\n scrollThreshold = 0.1,\n fieldMapping,\n showMoreLabel = 'Show more',\n onHitClick,\n className,\n style,\n theme: customTheme,\n syncWithState = true,\n}) => {\n const { theme, stateManager } = useSearchContext();\n const { results, loading, currentPage, setPage } = useSearchState();\n const infiniteHitsTheme = customTheme || {};\n \n // Accumulated hits across pages\n const [accumulatedHits, setAccumulatedHits] = useState<ResultItem[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const sentinelRef = useRef<HTMLDivElement>(null);\n const prevPageRef = useRef(currentPage);\n\n // Extract hits from results\n const extractHits = useCallback((response: any): ResultItem[] => {\n if (!response) return [];\n if (response.results) return response.results;\n if (response.hits) return response.hits;\n if (Array.isArray(response)) return response;\n return [];\n }, []);\n\n // Get current hits\n const currentHits = useMemo(() => extractHits(results), [results, extractHits]);\n\n // Calculate if we're on the last page\n const totalResults: number = results?.totalResults || (results as any)?.found || 0;\n const itemsPerPage: number = stateManager.getState().itemsPerPage || 10;\n const totalPages = Math.ceil(totalResults / itemsPerPage);\n const isLastPage = currentPage >= totalPages;\n\n // Accumulate hits when results change\n useEffect(() => {\n if (!currentHits.length) return;\n\n if (currentPage === 1) {\n // Reset accumulated hits on new search\n setAccumulatedHits(currentHits);\n } else if (currentPage > prevPageRef.current) {\n // Append new hits\n setAccumulatedHits(prev => [...prev, ...currentHits]);\n }\n \n prevPageRef.current = currentPage;\n setIsLoadingMore(false);\n }, [currentHits, currentPage]);\n\n // Reset when query changes\n useEffect(() => {\n if (currentPage === 1) {\n setAccumulatedHits(currentHits);\n prevPageRef.current = 1;\n }\n }, [results]);\n\n // Handle \"Show More\" click\n const handleShowMore = useCallback(() => {\n if (isLastPage || loading || isLoadingMore) return;\n \n setIsLoadingMore(true);\n if (syncWithState) {\n setPage(currentPage + 1);\n }\n }, [isLastPage, loading, isLoadingMore, syncWithState, setPage, currentPage]);\n\n // Infinite scroll with IntersectionObserver\n useEffect(() => {\n if (!useInfiniteScroll || !sentinelRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !isLastPage && !loading && !isLoadingMore) {\n handleShowMore();\n }\n },\n { threshold: scrollThreshold }\n );\n\n observer.observe(sentinelRef.current);\n\n return () => observer.disconnect();\n }, [useInfiniteScroll, scrollThreshold, isLastPage, loading, isLoadingMore, handleShowMore]);\n\n // Extract field from hit\n const extractField = (hit: ResultItem, field: keyof FieldMapping): string => {\n if (!fieldMapping || !fieldMapping[field]) {\n return (hit as any)[field] || '';\n }\n const mappedField = fieldMapping[field] as string;\n return (hit as any)[mappedField] || '';\n };\n\n // Default hit renderer\n const defaultRenderHit = (hit: ResultItem, index: number) => {\n const title = extractField(hit, 'title') || hit.title || '';\n const description = extractField(hit, 'description') || hit.description || '';\n const image = extractField(hit, 'image') || hit.image || (hit as any).imageUrl || '';\n const price = extractField(hit, 'price') || hit.price;\n\n return (\n <div\n key={hit.id || index}\n className={infiniteHitsTheme.item}\n style={{\n display: 'flex',\n gap: theme.spacing.medium,\n padding: theme.spacing.medium,\n borderBottom: `1px solid ${theme.colors.border}`,\n cursor: onHitClick ? 'pointer' : 'default',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n onClick={() => onHitClick?.(hit, index)}\n role={onHitClick ? 'button' : undefined}\n tabIndex={onHitClick ? 0 : undefined}\n >\n {image && (\n <img\n src={image}\n alt={title}\n style={{\n width: '80px',\n height: '80px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small,\n }}\n />\n )}\n <div style={{ flex: 1 }}>\n <h3\n style={{\n margin: 0,\n marginBottom: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h3>\n {description && (\n <p\n style={{\n margin: 0,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.textSecondary,\n lineHeight: theme.typography.lineHeight?.normal || 1.5,\n }}\n >\n {description}\n </p>\n )}\n {price && (\n <span\n style={{\n display: 'inline-block',\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: theme.colors.primary,\n }}\n >\n ${typeof price === 'number' ? (price as number).toFixed(2) : price}\n </span>\n )}\n </div>\n </div>\n );\n };\n\n // Default empty state\n const defaultRenderEmpty = () => (\n <div\n className={infiniteHitsTheme.empty}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n No results found\n </div>\n );\n\n // Default \"Show More\" button\n const defaultRenderShowMore = () => (\n <button\n type=\"button\"\n onClick={handleShowMore}\n disabled={isLastPage || isLoadingMore}\n className={clsx(\n infiniteHitsTheme.loadMore,\n (isLastPage || isLoadingMore) && infiniteHitsTheme.loadMoreDisabled\n )}\n style={{\n display: 'block',\n width: '100%',\n padding: theme.spacing.medium,\n marginTop: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n backgroundColor: isLastPage || isLoadingMore ? theme.colors.hover : theme.colors.primary,\n color: isLastPage || isLoadingMore ? theme.colors.textSecondary : '#ffffff',\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: isLastPage || isLoadingMore ? 'not-allowed' : 'pointer',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n >\n {isLastPage ? 'No more results' : showMoreLabel}\n </button>\n );\n\n if (loading && accumulatedHits.length === 0) {\n return <div className={clsx(infiniteHitsTheme.root, className)} style={style} />;\n }\n\n // Empty state\n if (!loading && accumulatedHits.length === 0) {\n return (\n <div className={clsx(infiniteHitsTheme.root, className)} style={style}>\n {renderEmpty ? renderEmpty() : defaultRenderEmpty()}\n </div>\n );\n }\n\n return (\n <div className={clsx(infiniteHitsTheme.root, className)} style={style}>\n <div className={infiniteHitsTheme.list}>\n {accumulatedHits.map((hit, index) =>\n renderHit ? renderHit(hit, index) : defaultRenderHit(hit, index)\n )}\n </div>\n\n {/* Show More button */}\n {showMoreButton && !useInfiniteScroll && !isLastPage && (\n renderShowMore\n ? renderShowMore({ isLoading: isLoadingMore, isLastPage, onClick: handleShowMore })\n : defaultRenderShowMore()\n )}\n\n {/* Sentinel for infinite scroll */}\n {useInfiniteScroll && !isLastPage && (\n <div\n ref={sentinelRef}\n className={infiniteHitsTheme.sentinel}\n style={{ height: '1px', visibility: 'hidden' }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n};\n","/**\n * Highlight Component\n * \n * Renders highlighted search result text with matching terms emphasized\n */\n\nimport React, { useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport {\n getHighlightedValue,\n parseHighlightedParts,\n parseQueryHighlightParts,\n HighlightPart,\n} from '@seekora-ai/ui-sdk-core';\n\nexport interface HighlightTheme {\n root?: string;\n highlighted?: string;\n nonHighlighted?: string;\n}\n\nexport interface HighlightProps {\n /** The search hit containing highlight data */\n hit: Record<string, any>;\n /** The attribute to highlight */\n attribute: string;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: HighlightTheme;\n /** Tag name for root element (default: 'span') */\n tagName?: keyof JSX.IntrinsicElements;\n /** Custom render for highlighted parts */\n renderHighlighted?: (part: HighlightPart, index: number) => React.ReactNode;\n /** Custom render for non-highlighted parts */\n renderNonHighlighted?: (part: HighlightPart, index: number) => React.ReactNode;\n /** Fallback query for client-side highlighting (when server highlight not available) */\n query?: string;\n}\n\nexport const Highlight: React.FC<HighlightProps> = ({\n hit,\n attribute,\n className,\n style,\n theme: customTheme,\n tagName: Tag = 'span',\n renderHighlighted,\n renderNonHighlighted,\n query,\n}) => {\n const { theme } = useSearchContext();\n const highlightTheme = customTheme || {};\n\n // Get highlighted value from hit\n const highlightedValue = useMemo(() => {\n return getHighlightedValue({\n hit,\n attribute,\n preTag: '<mark>',\n postTag: '</mark>',\n });\n }, [hit, attribute]);\n\n // Parse into parts\n const parts = useMemo((): HighlightPart[] => {\n // First try server-provided highlights\n const serverParts = parseHighlightedParts(highlightedValue, '<mark>', '</mark>');\n \n // If no highlights found and we have a query, do client-side highlighting\n if (serverParts.every((p: HighlightPart) => !p.isHighlighted) && query) {\n const plainValue = hit[attribute] || highlightedValue;\n return parseQueryHighlightParts(String(plainValue), query);\n }\n \n return serverParts;\n }, [highlightedValue, query, hit, attribute]);\n\n // Default highlight style\n const defaultHighlightStyle: React.CSSProperties = {\n backgroundColor: theme.colors.warning || '#fff59d',\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n padding: '0 2px',\n borderRadius: '2px',\n };\n\n // Render parts\n const renderedParts = parts.map((part: HighlightPart, index: number) => {\n if (part.isHighlighted) {\n if (renderHighlighted) {\n return <React.Fragment key={index}>{renderHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <mark\n key={index}\n className={highlightTheme.highlighted}\n style={defaultHighlightStyle}\n >\n {part.value}\n </mark>\n );\n }\n\n if (renderNonHighlighted) {\n return <React.Fragment key={index}>{renderNonHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <span key={index} className={highlightTheme.nonHighlighted}>\n {part.value}\n </span>\n );\n });\n\n return (\n <Tag className={className || highlightTheme.root} style={style}>\n {renderedParts}\n </Tag>\n );\n};\n\n/**\n * Snippet Component\n * \n * Renders a truncated, highlighted excerpt from search results\n */\n\nexport interface SnippetTheme extends HighlightTheme {\n ellipsis?: string;\n}\n\nexport interface SnippetProps extends Omit<HighlightProps, 'theme'> {\n /** Maximum length of snippet (default: 100) */\n maxLength?: number;\n /** Ellipsis to use when truncating (default: '...') */\n ellipsis?: string;\n /** Custom theme */\n theme?: SnippetTheme;\n}\n\nexport const Snippet: React.FC<SnippetProps> = ({\n hit,\n attribute,\n maxLength = 100,\n ellipsis = '...',\n className,\n style,\n theme: customTheme,\n tagName: Tag = 'span',\n renderHighlighted,\n renderNonHighlighted,\n query,\n}) => {\n const { theme } = useSearchContext();\n const snippetTheme = customTheme || {};\n\n // Get snippet or truncated highlighted value\n const snippetValue = useMemo(() => {\n // Check for server-provided snippet\n const snippetResult =\n hit._snippetResult?.[attribute]?.value ||\n hit.snippet_result?.[attribute]?.value ||\n hit._snippet?.[attribute] ||\n hit.snippet?.[attribute];\n\n if (snippetResult) {\n return snippetResult\n .replace(/<em>/g, '<mark>')\n .replace(/<\\/em>/g, '</mark>');\n }\n\n // Fall back to highlighted value, truncated\n let text = getHighlightedValue({\n hit,\n attribute,\n preTag: '<mark>',\n postTag: '</mark>',\n });\n\n // Remove tags for length calculation\n const plainText = text.replace(/<\\/?mark>/g, '');\n \n if (plainText.length > maxLength) {\n // Need to truncate while preserving tags\n const truncated = truncateWithTags(text, maxLength);\n return truncated + ellipsis;\n }\n\n return text;\n }, [hit, attribute, maxLength, ellipsis]);\n\n // Parse into parts\n const parts = useMemo((): HighlightPart[] => {\n const serverParts = parseHighlightedParts(snippetValue, '<mark>', '</mark>');\n \n if (serverParts.every((p: HighlightPart) => !p.isHighlighted) && query) {\n const plainValue = hit[attribute] || snippetValue;\n let text = String(plainValue);\n if (text.length > maxLength) {\n text = text.substring(0, maxLength) + ellipsis;\n }\n return parseQueryHighlightParts(text, query);\n }\n \n return serverParts;\n }, [snippetValue, query, hit, attribute, maxLength, ellipsis]);\n\n // Default highlight style\n const defaultHighlightStyle: React.CSSProperties = {\n backgroundColor: theme.colors.warning || '#fff59d',\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n padding: '0 2px',\n borderRadius: '2px',\n };\n\n // Render parts\n const renderedParts = parts.map((part: HighlightPart, index: number) => {\n if (part.isHighlighted) {\n if (renderHighlighted) {\n return <React.Fragment key={index}>{renderHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <mark\n key={index}\n className={snippetTheme.highlighted}\n style={defaultHighlightStyle}\n >\n {part.value}\n </mark>\n );\n }\n\n if (renderNonHighlighted) {\n return <React.Fragment key={index}>{renderNonHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <span key={index} className={snippetTheme.nonHighlighted}>\n {part.value}\n </span>\n );\n });\n\n return (\n <Tag className={className || snippetTheme.root} style={style}>\n {renderedParts}\n </Tag>\n );\n};\n\n/**\n * Truncate text while preserving HTML tags\n */\nfunction truncateWithTags(text: string, maxLength: number): string {\n let visibleLength = 0;\n let result = '';\n let inTag = false;\n \n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n \n if (char === '<') {\n inTag = true;\n result += char;\n } else if (char === '>') {\n inTag = false;\n result += char;\n } else if (inTag) {\n result += char;\n } else {\n if (visibleLength >= maxLength) {\n break;\n }\n result += char;\n visibleLength++;\n }\n }\n \n // Close any unclosed tags\n const openTags = result.match(/<mark>/g)?.length || 0;\n const closeTags = result.match(/<\\/mark>/g)?.length || 0;\n \n for (let i = 0; i < openTags - closeTags; i++) {\n result += '</mark>';\n }\n \n return result;\n}\n","/**\n * HierarchicalMenu Component\n * \n * Displays a hierarchical menu for nested category navigation\n * Example: Electronics > Phones > iPhone\n */\n\nimport React, { useState, useMemo, useCallback, useRef } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface HierarchicalMenuItem {\n label: string;\n value: string;\n count?: number;\n isRefined?: boolean;\n data?: HierarchicalMenuItem[];\n}\n\nexport interface HierarchicalMenuTheme {\n root?: string;\n list?: string;\n item?: string;\n itemSelected?: string;\n itemParent?: string;\n link?: string;\n label?: string;\n count?: string;\n showMore?: string;\n}\n\nexport interface HierarchicalMenuProps {\n /** Attributes for each level of hierarchy (e.g., ['category.lvl0', 'category.lvl1', 'category.lvl2']) */\n attributes: string[];\n /** Separator used in the hierarchical values (default: ' > ') */\n separator?: string;\n /** Maximum number of items to show per level (default: 10) */\n limit?: number;\n /** Show \"Show more\" button (default: true) */\n showMore?: boolean;\n /** Maximum items when \"Show more\" is clicked (default: 20) */\n showMoreLimit?: number;\n /** Custom render function for items */\n renderItem?: (item: HierarchicalMenuItem, level: number) => React.ReactNode;\n /** Callback when an item is selected */\n onSelect?: (value: string, level: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: HierarchicalMenuTheme;\n /** Root path (for pre-selecting a category) */\n rootPath?: string | null;\n /** Sort by (default: 'name') */\n sortBy?: 'name' | 'count' | 'isRefined';\n /** Custom facet data (if not using StateManager) */\n items?: HierarchicalMenuItem[];\n}\n\nexport const HierarchicalMenu: React.FC<HierarchicalMenuProps> = ({\n attributes,\n separator = ' > ',\n limit = 10,\n showMore = true,\n showMoreLimit = 20,\n renderItem,\n onSelect,\n className,\n style,\n theme: customTheme,\n rootPath = null,\n sortBy = 'name',\n items: itemsProp,\n}) => {\n const { theme, stateManager } = useSearchContext();\n const { results, refinements, addRefinement, removeRefinement } = useSearchState();\n const hierarchicalTheme = customTheme || {};\n\n const [expanded, setExpanded] = useState<Record<number, boolean>>({});\n\n // Get hierarchical facet data from results\n const getHierarchicalData = useCallback((): HierarchicalMenuItem[] => {\n if (itemsProp) return itemsProp;\n if (!results) return [];\n\n // Try to find hierarchical facet data in various response formats\n const facets: Record<string, Record<string, number>> = (results as any).facets || (results as any).facet_counts || {};\n \n // Build hierarchy from flat facet data\n const rootAttribute = attributes[0];\n const rootFacet: Record<string, number> = facets[rootAttribute] || {};\n \n const items: HierarchicalMenuItem[] = [];\n \n Object.entries(rootFacet).forEach(([value, count]) => {\n const isRefined = refinements.some(\n r => r.field === rootAttribute && r.value === value\n );\n \n items.push({\n label: value,\n value,\n count: count as number,\n isRefined,\n data: getChildItems(value, 1),\n });\n });\n\n return items;\n }, [results, attributes, refinements, itemsProp]);\n\n // Get child items for a parent value\n const getChildItems = useCallback((parentValue: string, level: number): HierarchicalMenuItem[] => {\n if (level >= attributes.length) return [];\n if (!results) return [];\n\n const facets: Record<string, Record<string, number>> = (results as any).facets || (results as any).facet_counts || {};\n const attribute = attributes[level];\n const facet: Record<string, number> = facets[attribute] || {};\n\n const items: HierarchicalMenuItem[] = [];\n \n Object.entries(facet).forEach(([value, count]) => {\n // Check if this item belongs to the parent\n if (value.startsWith(parentValue + separator)) {\n const label = value.replace(parentValue + separator, '').split(separator)[0];\n const isRefined = refinements.some(\n r => r.field === attribute && r.value === value\n );\n \n // Only add direct children\n const remainingPath = value.replace(parentValue + separator, '');\n if (!remainingPath.includes(separator)) {\n items.push({\n label,\n value,\n count: count as number,\n isRefined,\n data: getChildItems(value, level + 1),\n });\n }\n }\n });\n\n return items;\n }, [results, attributes, separator, refinements]);\n\n // Get sorted and limited items\n const processedItems = useMemo(() => {\n let items = getHierarchicalData();\n\n // Sort\n items = [...items].sort((a, b) => {\n if (sortBy === 'count') {\n return (b.count || 0) - (a.count || 0);\n }\n if (sortBy === 'isRefined') {\n if (a.isRefined && !b.isRefined) return -1;\n if (!a.isRefined && b.isRefined) return 1;\n }\n return a.label.localeCompare(b.label);\n });\n\n return items;\n }, [getHierarchicalData, sortBy]);\n\n // Handle item click\n const handleItemClick = useCallback((item: HierarchicalMenuItem, level: number) => {\n const attribute = attributes[level] || attributes[0];\n \n if (item.isRefined) {\n // Remove this and all child refinements\n attributes.slice(level).forEach((attr) => {\n refinements\n .filter(r => r.field === attr && r.value.startsWith(item.value))\n .forEach(r => removeRefinement(r.field, r.value, false));\n });\n stateManager.search();\n } else {\n // Clear sibling refinements at this level\n refinements\n .filter(r => r.field === attribute && r.value !== item.value)\n .forEach(r => removeRefinement(r.field, r.value, false));\n \n // Add this refinement\n addRefinement(attribute, item.value, true);\n }\n\n if (onSelect) {\n onSelect(item.value, level);\n }\n }, [attributes, refinements, addRefinement, removeRefinement, stateManager, onSelect]);\n\n // Toggle show more\n const toggleShowMore = (level: number) => {\n setExpanded(prev => ({ ...prev, [level]: !prev[level] }));\n };\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Collect all visible treeitem elements within the container\n const getVisibleTreeItems = useCallback((): HTMLElement[] => {\n if (!containerRef.current) return [];\n return Array.from(\n containerRef.current.querySelectorAll<HTMLElement>('[role=\"treeitem\"]')\n );\n }, []);\n\n // Keyboard navigation handler for the tree\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n const items = getVisibleTreeItems();\n if (items.length === 0) return;\n\n const activeElement = document.activeElement as HTMLElement;\n // Find the treeitem that is or contains the active element\n const currentItem = items.find(\n item => item === activeElement || item.contains(activeElement)\n );\n const currentIndex = currentItem ? items.indexOf(currentItem) : -1;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n const button = items[nextIndex].querySelector<HTMLElement>('button');\n if (button) button.focus();\n else items[nextIndex].focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n const button = items[prevIndex].querySelector<HTMLElement>('button');\n if (button) button.focus();\n else items[prevIndex].focus();\n break;\n }\n case 'ArrowRight': {\n if (!currentItem) break;\n const isExpanded = currentItem.getAttribute('aria-expanded');\n if (isExpanded === 'false') {\n // Expand (select) this item\n e.preventDefault();\n const button = currentItem.querySelector<HTMLElement>('button');\n if (button) button.click();\n } else if (isExpanded === 'true') {\n // Move to first child\n e.preventDefault();\n const childList = currentItem.querySelector<HTMLElement>('[role=\"group\"]');\n if (childList) {\n const firstChild = childList.querySelector<HTMLElement>('[role=\"treeitem\"]');\n if (firstChild) {\n const button = firstChild.querySelector<HTMLElement>('button');\n if (button) button.focus();\n else firstChild.focus();\n }\n }\n }\n break;\n }\n case 'ArrowLeft': {\n if (!currentItem) break;\n const isExpanded = currentItem.getAttribute('aria-expanded');\n if (isExpanded === 'true') {\n // Collapse this item\n e.preventDefault();\n const button = currentItem.querySelector<HTMLElement>('button');\n if (button) button.click();\n } else {\n // Move focus to parent treeitem\n e.preventDefault();\n const parentGroup = currentItem.closest('[role=\"group\"]');\n if (parentGroup) {\n const parentItem = parentGroup.closest<HTMLElement>('[role=\"treeitem\"]');\n if (parentItem) {\n const button = parentItem.querySelector<HTMLElement>(':scope > button');\n if (button) button.focus();\n else parentItem.focus();\n }\n }\n }\n break;\n }\n case 'Enter': {\n if (!currentItem) break;\n e.preventDefault();\n const button = currentItem.querySelector<HTMLElement>('button');\n if (button) button.click();\n break;\n }\n default:\n break;\n }\n }, [getVisibleTreeItems]);\n\n // Render a level of the hierarchy\n const renderLevel = (items: HierarchicalMenuItem[], level: number) => {\n if (!items || items.length === 0) return null;\n\n const isExpanded = expanded[level] || false;\n const displayLimit = isExpanded ? showMoreLimit : limit;\n const displayItems = items.slice(0, displayLimit);\n const hasMore = items.length > displayLimit;\n\n return (\n <ul\n role={level === 0 ? 'tree' : 'group'}\n className={hierarchicalTheme.list}\n style={{\n listStyle: 'none',\n margin: 0,\n padding: level > 0 ? `0 0 0 ${theme.spacing.medium}` : 0,\n }}\n >\n {displayItems.map((item, index) => (\n <li\n key={item.value}\n role=\"treeitem\"\n {...(item.data && item.data.length > 0\n ? { 'aria-expanded': !!item.isRefined }\n : {})}\n className={clsx(\n hierarchicalTheme.item,\n item.isRefined && hierarchicalTheme.itemSelected,\n item.data && item.data.length > 0 && hierarchicalTheme.itemParent\n )}\n style={{\n padding: `${theme.spacing.small} 0`,\n }}\n >\n {renderItem ? (\n renderItem(item, level)\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => handleItemClick(item, level)}\n className={hierarchicalTheme.link}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n width: '100%',\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n textAlign: 'left',\n fontFamily: 'inherit',\n fontSize: theme.typography.fontSize.small,\n color: item.isRefined ? theme.colors.primary : theme.colors.text,\n fontWeight: item.isRefined ? 600 : 400,\n }}\n >\n <span className={hierarchicalTheme.label} style={{ flex: 1 }}>\n {item.label}\n </span>\n {item.count !== undefined && (\n <span\n className={hierarchicalTheme.count}\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.typography.fontSize.small,\n }}\n >\n {item.count}\n </span>\n )}\n </button>\n {item.isRefined && item.data && item.data.length > 0 && (\n renderLevel(item.data, level + 1)\n )}\n </>\n )}\n </li>\n ))}\n {showMore && hasMore && (\n <li>\n <button\n type=\"button\"\n onClick={() => toggleShowMore(level)}\n className={hierarchicalTheme.showMore}\n style={{\n padding: `${theme.spacing.small} 0`,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.primary,\n textDecoration: 'underline',\n }}\n >\n {isExpanded ? 'Show less' : `Show ${items.length - displayLimit} more`}\n </button>\n </li>\n )}\n </ul>\n );\n };\n\n if (processedItems.length === 0) {\n return null;\n }\n\n return (\n <div\n ref={containerRef}\n className={clsx(hierarchicalTheme.root, className)}\n style={style}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n >\n {renderLevel(processedItems, 0)}\n </div>\n );\n};\n","/**\n * Breadcrumb Component\n * \n * Displays the current hierarchical navigation path\n * Allows users to navigate back to parent categories\n */\n\nimport React, { useMemo, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface BreadcrumbItem {\n label: string;\n value: string;\n}\n\nexport interface BreadcrumbTheme {\n root?: string;\n list?: string;\n item?: string;\n link?: string;\n separator?: string;\n current?: string;\n}\n\nexport interface BreadcrumbProps {\n /** Attributes for each level of hierarchy */\n attributes: string[];\n /** Separator between items (default: ' > ') */\n separator?: string;\n /** Root label (default: 'Home') */\n rootLabel?: string;\n /** Custom render function for items */\n renderItem?: (item: BreadcrumbItem, index: number, isLast: boolean) => React.ReactNode;\n /** Custom render for separator */\n renderSeparator?: () => React.ReactNode;\n /** Callback when an item is clicked */\n onNavigate?: (item: BreadcrumbItem | null, index: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: BreadcrumbTheme;\n /** Custom breadcrumb items (overrides automatic detection) */\n items?: BreadcrumbItem[];\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n attributes,\n separator = ' > ',\n rootLabel = 'Home',\n renderItem,\n renderSeparator,\n onNavigate,\n className,\n style,\n theme: customTheme,\n items: itemsProp,\n}) => {\n const { theme, stateManager } = useSearchContext();\n const { refinements, removeRefinement, clearRefinements } = useSearchState();\n const breadcrumbTheme = customTheme || {};\n\n // Build breadcrumb items from refinements\n const items = useMemo((): BreadcrumbItem[] => {\n if (itemsProp) return itemsProp;\n\n const breadcrumbItems: BreadcrumbItem[] = [];\n\n // Find hierarchical refinements\n attributes.forEach((attr, level) => {\n const refinement = refinements.find(r => r.field === attr);\n if (refinement) {\n // Parse the hierarchical value\n const parts = refinement.value.split(separator);\n parts.forEach((part, partIndex) => {\n const fullPath = parts.slice(0, partIndex + 1).join(separator);\n // Only add if not already in the list\n if (!breadcrumbItems.some(item => item.value === fullPath)) {\n breadcrumbItems.push({\n label: part,\n value: fullPath,\n });\n }\n });\n }\n });\n\n return breadcrumbItems;\n }, [attributes, refinements, separator, itemsProp]);\n\n // Handle click on breadcrumb item\n const handleClick = useCallback((item: BreadcrumbItem | null, index: number) => {\n if (item === null) {\n // Clicked on root - clear all hierarchical refinements\n attributes.forEach(attr => {\n refinements\n .filter(r => r.field === attr)\n .forEach(r => removeRefinement(r.field, r.value, false));\n });\n stateManager.search();\n } else {\n // Navigate to this level - remove refinements below this level\n const currentLevel = items.findIndex(i => i.value === item.value);\n \n attributes.forEach((attr, attrLevel) => {\n refinements\n .filter(r => r.field === attr)\n .forEach(r => {\n // Remove if this is below the clicked level\n if (attrLevel > currentLevel || \n (attrLevel === currentLevel && r.value !== item.value)) {\n removeRefinement(r.field, r.value, false);\n }\n });\n });\n stateManager.search();\n }\n\n if (onNavigate) {\n onNavigate(item, index);\n }\n }, [attributes, refinements, removeRefinement, stateManager, items, onNavigate]);\n\n // Default separator renderer\n const defaultRenderSeparator = () => (\n <span\n className={breadcrumbTheme.separator}\n style={{\n margin: `0 ${theme.spacing.small}`,\n color: theme.colors.textSecondary,\n }}\n aria-hidden=\"true\"\n >\n ›\n </span>\n );\n\n // Don't render if no items\n if (items.length === 0) {\n return null;\n }\n\n return (\n <nav\n className={clsx(breadcrumbTheme.root, className)}\n style={style}\n aria-label=\"Breadcrumb\"\n >\n <ol\n className={breadcrumbTheme.list}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n fontSize: theme.typography.fontSize.small,\n }}\n >\n {/* Root item */}\n <li className={breadcrumbTheme.item}>\n <button\n type=\"button\"\n onClick={() => handleClick(null, -1)}\n className={breadcrumbTheme.link}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.primary,\n fontFamily: 'inherit',\n fontSize: 'inherit',\n textDecoration: 'none',\n }}\n >\n {rootLabel}\n </button>\n </li>\n\n {/* Breadcrumb items */}\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={item.value}>\n {renderSeparator ? renderSeparator() : defaultRenderSeparator()}\n <li\n className={clsx(\n breadcrumbTheme.item,\n isLast && breadcrumbTheme.current\n )}\n >\n {renderItem ? (\n renderItem(item, index, isLast)\n ) : isLast ? (\n <span\n style={{\n color: theme.colors.text,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n }}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={() => handleClick(item, index)}\n className={breadcrumbTheme.link}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.primary,\n fontFamily: 'inherit',\n fontSize: 'inherit',\n textDecoration: 'none',\n }}\n >\n {item.label}\n </button>\n )}\n </li>\n </React.Fragment>\n );\n })}\n </ol>\n </nav>\n );\n};\n","/**\n * MobileFilters Component\n * \n * A full-screen filter drawer optimized for mobile devices\n * Slides in from the side or bottom to display facets and filters\n */\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface MobileFiltersTheme {\n overlay?: string;\n drawer?: string;\n header?: string;\n title?: string;\n closeButton?: string;\n content?: string;\n footer?: string;\n applyButton?: string;\n clearButton?: string;\n filterCount?: string;\n}\n\nexport interface MobileFiltersProps {\n /** Whether the drawer is open */\n isOpen: boolean;\n /** Callback when drawer should close */\n onClose: () => void;\n /** Callback when filters are applied */\n onApply?: () => void;\n /** Title text */\n title?: string;\n /** Apply button text */\n applyButtonText?: string;\n /** Clear button text */\n clearButtonText?: string;\n /** Position of the drawer */\n position?: 'left' | 'right' | 'bottom';\n /** Children (filter components) */\n children: React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom theme */\n theme?: MobileFiltersTheme;\n /** Show header */\n showHeader?: boolean;\n /** Show footer with apply/clear buttons */\n showFooter?: boolean;\n /** Show filter count badge */\n showFilterCount?: boolean;\n /** Close on backdrop click */\n closeOnBackdropClick?: boolean;\n /** Close on escape key */\n closeOnEscape?: boolean;\n}\n\nexport const MobileFilters: React.FC<MobileFiltersProps> = ({\n isOpen,\n onClose,\n onApply,\n title = 'Filters',\n applyButtonText = 'Apply',\n clearButtonText = 'Clear all',\n position = 'right',\n children,\n className,\n theme: customTheme,\n showHeader = true,\n showFooter = true,\n showFilterCount = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n}) => {\n const { theme } = useSearchContext();\n const { refinements, clearRefinements } = useSearchState();\n const mobileFiltersTheme = customTheme || {};\n const drawerRef = useRef<HTMLDivElement>(null);\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n // Handle escape key\n useEffect(() => {\n if (!closeOnEscape) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose, closeOnEscape]);\n\n // Focus trap\n useEffect(() => {\n if (isOpen && drawerRef.current) {\n const focusableElements = drawerRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n const handleTab = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleTab);\n firstElement?.focus();\n \n return () => document.removeEventListener('keydown', handleTab);\n }\n }, [isOpen]);\n\n const handleBackdropClick = useCallback(() => {\n if (closeOnBackdropClick) {\n onClose();\n }\n }, [closeOnBackdropClick, onClose]);\n\n const handleApply = useCallback(() => {\n if (onApply) {\n onApply();\n }\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n clearRefinements(true);\n }, [clearRefinements]);\n\n // Get drawer transform based on position\n const getTransform = (isVisible: boolean) => {\n if (isVisible) return 'translate(0, 0)';\n switch (position) {\n case 'left':\n return 'translateX(-100%)';\n case 'right':\n return 'translateX(100%)';\n case 'bottom':\n return 'translateY(100%)';\n default:\n return 'translateX(100%)';\n }\n };\n\n // Get drawer styles based on position\n const getDrawerPositionStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'fixed',\n backgroundColor: theme.colors.background,\n display: 'flex',\n flexDirection: 'column',\n transition: 'transform 300ms ease-in-out',\n transform: getTransform(isOpen),\n zIndex: (theme.zIndex?.modal || 1050) + 1,\n };\n\n switch (position) {\n case 'left':\n return { ...base, top: 0, left: 0, bottom: 0, width: '80%', maxWidth: '320px' };\n case 'right':\n return { ...base, top: 0, right: 0, bottom: 0, width: '80%', maxWidth: '320px' };\n case 'bottom':\n return { ...base, left: 0, right: 0, bottom: 0, maxHeight: '80vh', borderTopLeftRadius: '16px', borderTopRightRadius: '16px' };\n default:\n return base;\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n className={mobileFiltersTheme.overlay}\n onClick={handleBackdropClick}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: theme.zIndex?.modal || 1050,\n opacity: isOpen ? 1 : 0,\n transition: 'opacity 300ms ease-in-out',\n }}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n ref={drawerRef}\n className={clsx(mobileFiltersTheme.drawer, className)}\n style={getDrawerPositionStyles()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n >\n {/* Header */}\n {showHeader && (\n <div\n className={mobileFiltersTheme.header}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing.medium,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: theme.spacing.small }}>\n <h2\n className={mobileFiltersTheme.title}\n style={{\n margin: 0,\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h2>\n {showFilterCount && refinements.length > 0 && (\n <span\n className={mobileFiltersTheme.filterCount}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '24px',\n height: '24px',\n padding: '0 6px',\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n borderRadius: '12px',\n }}\n >\n {refinements.length}\n </span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className={mobileFiltersTheme.closeButton}\n style={{\n padding: theme.spacing.small,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '1.5rem',\n color: theme.colors.text,\n }}\n aria-label=\"Close filters\"\n >\n ×\n </button>\n </div>\n )}\n\n {/* Content */}\n <div\n className={mobileFiltersTheme.content}\n style={{\n flex: 1,\n overflow: 'auto',\n padding: theme.spacing.medium,\n }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {showFooter && (\n <div\n className={mobileFiltersTheme.footer}\n style={{\n display: 'flex',\n gap: theme.spacing.small,\n padding: theme.spacing.medium,\n borderTop: `1px solid ${theme.colors.border}`,\n }}\n >\n <button\n type=\"button\"\n onClick={handleClear}\n className={mobileFiltersTheme.clearButton}\n style={{\n flex: 1,\n padding: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n backgroundColor: 'transparent',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n }}\n >\n {clearButtonText}\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n className={mobileFiltersTheme.applyButton}\n style={{\n flex: 2,\n padding: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n }}\n >\n {applyButtonText}\n {showFilterCount && refinements.length > 0 && ` (${refinements.length})`}\n </button>\n </div>\n )}\n </div>\n </>\n );\n};\n\n/**\n * MobileFiltersButton Component\n * \n * A button to toggle the MobileFilters drawer\n */\n\nexport interface MobileFiltersButtonProps {\n /** Callback when clicked */\n onClick: () => void;\n /** Button text */\n text?: string;\n /** Show filter count */\n showCount?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\nexport const MobileFiltersButton: React.FC<MobileFiltersButtonProps> = ({\n onClick,\n text = 'Filters',\n showCount = true,\n className,\n style,\n}) => {\n const { theme } = useSearchContext();\n const { refinements } = useSearchState();\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n ...style,\n }}\n >\n <span>☰</span>\n <span>{text}</span>\n {showCount && refinements.length > 0 && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '20px',\n padding: '0 4px',\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n borderRadius: '10px',\n }}\n >\n {refinements.length}\n </span>\n )}\n </button>\n );\n};\n","/**\n * Recommendation Components\n * \n * Components for displaying product recommendations:\n * - RelatedProducts: Show related items based on a product\n * - TrendingItems: Display trending/popular products\n * - FrequentlyBoughtTogether: Bundle recommendations\n * - RecentlyViewed: User's recently viewed items\n */\n\nimport React, { useEffect, useState, useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { clsx } from 'clsx';\nimport type { ResultItem } from '@seekora-ai/ui-sdk-types';\n\n// Common types\nexport interface RecommendationItem extends ResultItem {\n [key: string]: any;\n}\n\nexport interface RecommendationTheme {\n root?: string;\n title?: string;\n list?: string;\n item?: string;\n image?: string;\n content?: string;\n name?: string;\n price?: string;\n empty?: string;\n}\n\ninterface BaseRecommendationProps {\n /** Title for the section */\n title?: string;\n /** Maximum items to show */\n maxItems?: number;\n /** Custom render function for items */\n renderItem?: (item: RecommendationItem, index: number) => React.ReactNode;\n /** Callback when item is clicked */\n onItemClick?: (item: RecommendationItem, index: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: RecommendationTheme;\n /** Layout mode */\n layout?: 'horizontal' | 'grid' | 'list';\n /** Currency symbol for prices */\n currencySymbol?: string;\n}\n\n// ============================================================================\n// RelatedProducts Component\n// ============================================================================\n\nexport interface RelatedProductsProps extends BaseRecommendationProps {\n /** Product ID to get related products for */\n productId: string;\n /** Custom items (if not using API) */\n items?: RecommendationItem[];\n /** Loading state */\n loading?: boolean;\n}\n\nexport const RelatedProducts: React.FC<RelatedProductsProps> = ({\n productId,\n items: itemsProp,\n loading: loadingProp = false,\n title = 'Related Products',\n maxItems = 6,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n // If items are provided, use them directly\n const items = itemsProp?.slice(0, maxItems) || [];\n const loading = loadingProp;\n\n if (loading && items.length === 0) return null;\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <RecommendationSection\n title={title}\n items={items}\n renderItem={renderItem}\n onItemClick={onItemClick}\n className={className}\n style={style}\n theme={customTheme}\n layout={layout}\n currencySymbol={currencySymbol}\n />\n );\n};\n\n// ============================================================================\n// TrendingItems Component\n// ============================================================================\n\nexport interface TrendingItemsProps extends BaseRecommendationProps {\n /** Custom items (if not using API) */\n items?: RecommendationItem[];\n /** Loading state */\n loading?: boolean;\n /** Facet name for trending (if using facet data) */\n facetName?: string;\n}\n\nexport const TrendingItems: React.FC<TrendingItemsProps> = ({\n items: itemsProp,\n loading: loadingProp = false,\n title = 'Trending Now',\n maxItems = 8,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n const items = itemsProp?.slice(0, maxItems) || [];\n const loading = loadingProp;\n\n if (loading && items.length === 0) return null;\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <RecommendationSection\n title={title}\n items={items}\n renderItem={renderItem}\n onItemClick={onItemClick}\n className={className}\n style={style}\n theme={customTheme}\n layout={layout}\n currencySymbol={currencySymbol}\n />\n );\n};\n\n// ============================================================================\n// FrequentlyBoughtTogether Component\n// ============================================================================\n\nexport interface FrequentlyBoughtTogetherProps extends BaseRecommendationProps {\n /** Product ID to get frequently bought together items for */\n productId: string;\n /** Custom items (if not using API) */\n items?: RecommendationItem[];\n /** Loading state */\n loading?: boolean;\n /** Show \"Add all to cart\" button */\n showAddAllButton?: boolean;\n /** Callback when \"Add all\" is clicked */\n onAddAll?: (items: RecommendationItem[]) => void;\n}\n\nexport const FrequentlyBoughtTogether: React.FC<FrequentlyBoughtTogetherProps> = ({\n productId,\n items: itemsProp,\n loading: loadingProp = false,\n title = 'Frequently Bought Together',\n maxItems = 4,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n showAddAllButton = true,\n onAddAll,\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n const items = itemsProp?.slice(0, maxItems) || [];\n const loading = loadingProp;\n\n // Calculate total price\n const totalPrice = useMemo(() => {\n return items.reduce((sum, item) => {\n const itemPrice = item.price;\n const price = typeof itemPrice === 'number' ? itemPrice : parseFloat(String(itemPrice)) || 0;\n return sum + price;\n }, 0);\n }, [items]);\n\n if (loading && items.length === 0) return null;\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n {title && (\n <h3\n className={recommendationTheme.title}\n style={{\n margin: `0 0 ${theme.spacing.medium} 0`,\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h3>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.medium,\n flexWrap: 'wrap',\n }}\n >\n {items.map((item, index) => (\n <React.Fragment key={item.id || index}>\n {index > 0 && (\n <span style={{ fontSize: '1.5rem', color: theme.colors.textSecondary }}>+</span>\n )}\n <div\n onClick={() => onItemClick?.(item, index)}\n style={{\n cursor: onItemClick ? 'pointer' : 'default',\n textAlign: 'center',\n }}\n >\n {renderItem ? (\n renderItem(item, index)\n ) : (\n <>\n <img\n src={item.image || item.imageUrl || ''}\n alt={item.title || item.name || ''}\n style={{\n width: '80px',\n height: '80px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small,\n border: `1px solid ${theme.colors.border}`,\n }}\n />\n <div\n style={{\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.text,\n }}\n >\n {currencySymbol}{typeof item.price === 'number' ? (item.price as number).toFixed(2) : item.price}\n </div>\n </>\n )}\n </div>\n </React.Fragment>\n ))}\n\n {showAddAllButton && items.length > 0 && (\n <div\n style={{\n marginLeft: 'auto',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: theme.colors.text,\n marginBottom: theme.spacing.small,\n }}\n >\n Total: {currencySymbol}{totalPrice.toFixed(2)}\n </div>\n <button\n type=\"button\"\n onClick={() => onAddAll?.(items)}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n }}\n >\n Add all to cart\n </button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n// ============================================================================\n// RecentlyViewed Component\n// ============================================================================\n\nexport interface RecentlyViewedProps extends BaseRecommendationProps {\n /** Storage key for localStorage */\n storageKey?: string;\n /** Custom items (overrides localStorage) */\n items?: RecommendationItem[];\n}\n\nexport const RecentlyViewed: React.FC<RecentlyViewedProps> = ({\n storageKey = 'seekora_recently_viewed',\n items: itemsProp,\n title = 'Recently Viewed',\n maxItems = 6,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const [storedItems, setStoredItems] = useState<RecommendationItem[]>([]);\n\n useEffect(() => {\n if (itemsProp) return;\n \n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n setStoredItems(JSON.parse(stored));\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n }, [storageKey, itemsProp]);\n\n const items = (itemsProp || storedItems).slice(0, maxItems);\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <RecommendationSection\n title={title}\n items={items}\n renderItem={renderItem}\n onItemClick={onItemClick}\n className={className}\n style={style}\n theme={customTheme}\n layout={layout}\n currencySymbol={currencySymbol}\n />\n );\n};\n\n/**\n * Add item to recently viewed (utility function)\n */\nexport function addToRecentlyViewed(\n item: RecommendationItem,\n storageKey: string = 'seekora_recently_viewed',\n maxItems: number = 20\n): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const stored = localStorage.getItem(storageKey);\n let items: RecommendationItem[] = stored ? JSON.parse(stored) : [];\n \n // Remove if already exists\n items = items.filter(i => i.id !== item.id);\n \n // Add to beginning\n items.unshift(item);\n \n // Limit\n items = items.slice(0, maxItems);\n \n localStorage.setItem(storageKey, JSON.stringify(items));\n } catch (e) {\n // Ignore localStorage errors\n }\n}\n\n// ============================================================================\n// Shared Recommendation Section Component\n// ============================================================================\n\ninterface RecommendationSectionProps extends BaseRecommendationProps {\n items: RecommendationItem[];\n}\n\nconst RecommendationSection: React.FC<RecommendationSectionProps> = ({\n title,\n items,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n const getListStyle = (): React.CSSProperties => {\n switch (layout) {\n case 'horizontal':\n return {\n display: 'flex',\n gap: theme.spacing.medium,\n overflowX: 'auto',\n scrollSnapType: 'x mandatory',\n paddingBottom: theme.spacing.small,\n };\n case 'grid':\n return {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(150px, 1fr))',\n gap: theme.spacing.medium,\n };\n case 'list':\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing.small,\n };\n default:\n return {};\n }\n };\n\n const getItemStyle = (): React.CSSProperties => {\n switch (layout) {\n case 'horizontal':\n return {\n flexShrink: 0,\n width: '150px',\n scrollSnapAlign: 'start',\n };\n case 'grid':\n return {};\n case 'list':\n return {\n display: 'flex',\n gap: theme.spacing.medium,\n padding: theme.spacing.small,\n borderBottom: `1px solid ${theme.colors.border}`,\n };\n default:\n return {};\n }\n };\n\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n {title && (\n <h3\n className={recommendationTheme.title}\n style={{\n margin: `0 0 ${theme.spacing.medium} 0`,\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h3>\n )}\n\n <div className={recommendationTheme.list} style={getListStyle()}>\n {items.map((item, index) => (\n <div\n key={item.id || index}\n className={recommendationTheme.item}\n onClick={() => onItemClick?.(item, index)}\n style={{\n ...getItemStyle(),\n cursor: onItemClick ? 'pointer' : 'default',\n }}\n >\n {renderItem ? (\n renderItem(item, index)\n ) : (\n <DefaultRecommendationItem\n item={item}\n theme={recommendationTheme}\n currencySymbol={currencySymbol}\n layout={layout}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\n// Default item render\ninterface DefaultRecommendationItemProps {\n item: RecommendationItem;\n theme: RecommendationTheme;\n currencySymbol: string;\n layout: 'horizontal' | 'grid' | 'list';\n}\n\nconst DefaultRecommendationItem: React.FC<DefaultRecommendationItemProps> = ({\n item,\n theme: recommendationTheme,\n currencySymbol,\n layout,\n}) => {\n const { theme } = useSearchContext();\n const image = item.image || item.imageUrl || '';\n const title = item.title || item.name || '';\n const price = item.price;\n\n const imageSize = layout === 'list' ? '60px' : '100%';\n\n return (\n <>\n {image && (\n <img\n src={image}\n alt={title}\n className={recommendationTheme.image}\n style={{\n width: imageSize,\n height: layout === 'list' ? '60px' : '120px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small,\n }}\n />\n )}\n <div className={recommendationTheme.content} style={{ flex: layout === 'list' ? 1 : undefined }}>\n <div\n className={recommendationTheme.name}\n style={{\n marginTop: layout === 'list' ? 0 : theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {title}\n </div>\n {price !== undefined && (\n <div\n className={recommendationTheme.price}\n style={{\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: theme.colors.primary,\n }}\n >\n {currencySymbol}{typeof price === 'number' ? (price as number).toFixed(2) : price}\n </div>\n )}\n </div>\n </>\n );\n};\n\n","/**\n * QuerySuggestions Component\n * \n * Standalone component for displaying query suggestions\n */\n\nimport React, { useState } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestions } from '../hooks/useQuerySuggestions';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\n\nexport interface SuggestionItem {\n query: string;\n count?: number;\n metadata?: Record<string, any>;\n}\n\nexport interface QuerySuggestionsTheme {\n container?: string;\n title?: string;\n suggestionsList?: string;\n suggestionItem?: string;\n suggestionItemHover?: string;\n suggestionItemActive?: string;\n emptyState?: string;\n}\n\nexport interface QuerySuggestionsProps {\n query?: string;\n maxSuggestions?: number;\n debounceMs?: number;\n minQueryLength?: number;\n onSuggestionClick?: (suggestion: string) => void;\n renderSuggestion?: (suggestion: SuggestionItem, index: number) => React.ReactNode;\n renderEmpty?: () => React.ReactNode;\n showTitle?: boolean;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n theme?: QuerySuggestionsTheme;\n}\n\nexport const QuerySuggestions: React.FC<QuerySuggestionsProps> = ({\n query = '',\n maxSuggestions = 10,\n debounceMs = 300,\n minQueryLength = 2,\n onSuggestionClick,\n renderSuggestion,\n renderEmpty,\n showTitle = false,\n title = 'Suggestions',\n className,\n style,\n theme: customTheme,\n}) => {\n const { client, theme } = useSearchContext();\n const [selectedIndex, setSelectedIndex] = useState(-1);\n\n const { suggestions, loading, error } = useQuerySuggestions({\n client,\n query,\n enabled: query.length >= minQueryLength,\n debounceMs,\n maxSuggestions,\n });\n\n const displayedSuggestions = suggestions.slice(0, maxSuggestions);\n const suggestionsTheme = customTheme || {};\n\n const defaultRenderSuggestion = (suggestion: SuggestionItem, index: number) => (\n <div key={index}>\n <span>{suggestion.query}</span>\n {suggestion.count !== undefined && (\n <span style={{ opacity: 0.6, marginLeft: theme.spacing.small }}>\n ({suggestion.count})\n </span>\n )}\n </div>\n );\n\n const defaultRenderEmpty = () => (\n <div\n style={{\n padding: theme.spacing.medium,\n textAlign: 'center',\n color: theme.colors.text,\n opacity: 0.6,\n }}\n >\n No suggestions available\n </div>\n );\n\n const handleSuggestionClick = (suggestion: SuggestionItem) => {\n if (onSuggestionClick) {\n onSuggestionClick(suggestion.query);\n }\n };\n\n if (query.length < minQueryLength) {\n return null;\n }\n\n if (error || (!loading && displayedSuggestions.length === 0)) {\n return (\n <div className={clsx(suggestionsTheme.container, className)} style={style}>\n {showTitle && (\n <div\n className={suggestionsTheme.title}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </div>\n )}\n {renderEmpty ? renderEmpty() : defaultRenderEmpty()}\n </div>\n );\n }\n\n const renderFn = renderSuggestion || defaultRenderSuggestion;\n\n return (\n <div\n className={clsx(suggestionsTheme.container, className)}\n style={style}\n >\n {showTitle && (\n <div\n className={suggestionsTheme.title}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </div>\n )}\n \n <div className={suggestionsTheme.suggestionsList}>\n {displayedSuggestions.map((suggestion, index) => {\n const isSelected = index === selectedIndex;\n \n return (\n <div\n key={index}\n className={clsx(\n suggestionsTheme.suggestionItem,\n isSelected && suggestionsTheme.suggestionItemActive\n )}\n onClick={() => handleSuggestionClick(suggestion)}\n onMouseEnter={() => setSelectedIndex(index)}\n onMouseLeave={() => setSelectedIndex(-1)}\n style={{\n padding: theme.spacing.medium,\n cursor: 'pointer',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n transition: 'background-color 0.2s ease',\n backgroundColor: isSelected ? theme.colors.hover : 'transparent',\n marginBottom: index < displayedSuggestions.length - 1 ? theme.spacing.small : 0,\n }}\n >\n {renderFn(suggestion, index)}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\n","/**\n * Enhanced Query Suggestions Hook\n * \n * Provides full support for query suggestions API including:\n * - Basic suggestions\n * - Dropdown recommendations (trending, top searches, related)\n * - Filtered tabs with products\n * - Recent searches (local storage)\n * - Analytics tracking\n */\n\nimport { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport type { SeekoraClient, QuerySuggestionsFullResponse } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type {\n SuggestionItem,\n ProductItem,\n FilteredTab,\n DropdownRecommendations,\n RecentSearch,\n QuerySuggestionsResponse,\n TrendingSearch,\n TopSearch,\n RelatedSearch,\n PopularBrand,\n SuggestionCategory,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseQuerySuggestionsEnhancedOptions {\n /** Seekora client instance */\n client: SeekoraClient;\n /** Current search query */\n query: string;\n /** Enable/disable the hook */\n enabled?: boolean;\n /** Prefetch initial (empty-query) data on mount even if not enabled yet */\n prefetch?: boolean;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Max suggestions to fetch */\n maxSuggestions?: number;\n /** Minimum query length to trigger search */\n minQueryLength?: number;\n /** Include dropdown recommendations (trending, products, etc.) */\n includeDropdownRecommendations?: boolean;\n /** When false, omit product hits list from dropdown (default true) */\n includeDropdownProductList?: boolean;\n /** When false, omit filtered_tabs from dropdown extensions (default true) */\n includeFilteredTabs?: boolean;\n /** Include categories in suggestions */\n includeCategories?: boolean;\n /** Include facets in suggestions */\n includeFacets?: boolean;\n /** Max categories per suggestion */\n maxCategories?: number;\n /** Max facets per suggestion */\n maxFacets?: number;\n /** Filtered tabs configuration */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Minimum popularity threshold */\n minPopularity?: number;\n /** Time range for analytics data */\n timeRange?: '7d' | '30d' | '90d';\n /** Disable typo tolerance */\n disableTypoTolerance?: boolean;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Enable recent searches from localStorage */\n enableRecentSearches?: boolean;\n /** Max recent searches to store */\n maxRecentSearches?: number;\n /** Local storage key for recent searches */\n recentSearchesKey?: string;\n /** Callback when suggestions are loaded */\n onSuggestionsLoaded?: (response: QuerySuggestionsResponse) => void;\n /** Callback on error */\n onError?: (error: Error) => void;\n}\n\nexport interface UseQuerySuggestionsEnhancedReturn {\n /** Basic suggestion items */\n suggestions: SuggestionItem[];\n /** Loading state */\n loading: boolean;\n /** Error state */\n error: Error | null;\n /** Dropdown recommendations */\n dropdownRecommendations: DropdownRecommendations | null;\n /** Trending searches */\n trendingSearches: TrendingSearch[];\n /** Top searches */\n topSearches: TopSearch[];\n /** Related searches */\n relatedSearches: RelatedSearch[];\n /** Popular brands */\n popularBrands: PopularBrand[];\n /** Filtered tabs with products */\n filteredTabs: FilteredTab[];\n /** Trending products */\n trendingProducts: ProductItem[];\n /** Recent searches (from localStorage) */\n recentSearches: RecentSearch[];\n /** Processing time in ms */\n processingTimeMs: number | null;\n /** Total hits count */\n totalHits: number;\n /** Current page */\n currentPage: number;\n /** Total pages */\n totalPages: number;\n /** Original query */\n originalQuery: string;\n /** Add a search to recent searches */\n addRecentSearch: (query: string, resultsCount?: number) => void;\n /** Remove a search from recent searches */\n removeRecentSearch: (query: string) => void;\n /** Clear all recent searches */\n clearRecentSearches: () => void;\n /** Manually refetch suggestions */\n refetch: () => Promise<void>;\n /** Check if dropdown has any content to show */\n hasContent: boolean;\n /** Get all items for keyboard navigation (flattened) */\n getAllNavigableItems: () => NavigableItem[];\n}\n\nexport interface NavigableItem {\n type: 'suggestion' | 'recent' | 'trending' | 'product' | 'category' | 'brand' | 'tab';\n index: number;\n data: SuggestionItem | RecentSearch | TrendingSearch | ProductItem | SuggestionCategory | PopularBrand | FilteredTab;\n}\n\n// ============================================================================\n// Local Storage Helpers\n// ============================================================================\n\nconst RECENT_SEARCHES_DEFAULT_KEY = 'seekora_recent_searches';\nconst MAX_RECENT_SEARCHES_DEFAULT = 10;\n\nfunction getRecentSearchesFromStorage(key: string): RecentSearch[] {\n if (typeof window === 'undefined') return [];\n try {\n const stored = localStorage.getItem(key);\n if (!stored) return [];\n return JSON.parse(stored) as RecentSearch[];\n } catch {\n return [];\n }\n}\n\nfunction saveRecentSearchesToStorage(key: string, searches: RecentSearch[]): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, JSON.stringify(searches));\n } catch (error) {\n log.warn('Failed to save recent searches to localStorage', { error });\n }\n}\n\n// ============================================================================\n// Transform API Response\n// ============================================================================\n\nfunction transformSuggestion(raw: any): SuggestionItem {\n const query = raw.query || raw.text || String(raw);\n const highlighted = raw._highlightResult?.query?.value;\n \n return {\n query,\n popularity: raw.popularity,\n count: raw.instant_search?.exact_nb_hits ?? raw.popularity ?? raw.count,\n objectID: raw.objectID,\n highlightedQuery: highlighted ? parseHighlight(highlighted) : undefined,\n categories: raw.categories?.map((c: any) => ({\n value: c.value || c.name,\n count: c.count,\n path: c.path,\n })),\n facets: raw.instant_search?.facets || raw.facets,\n metadata: raw,\n };\n}\n\nfunction parseHighlight(highlighted: string): string {\n // Convert __ais-highlight__ markers to HTML\n return highlighted\n .replace(/__ais-highlight__/g, '<mark>')\n .replace(/__\\/ais-highlight__/g, '</mark>');\n}\n\nfunction transformProduct(raw: any): ProductItem {\n const meta = raw.metadata || {};\n return {\n id: raw.id || raw.objectID,\n objectID: raw.objectID || raw.id,\n title: raw.title || raw.name || raw.productName || meta.name || meta.productName || '',\n name: raw.name || raw.title || meta.name || meta.productName || '',\n image: raw.image || raw.imageUrl || meta.image || meta.image_url || meta.images?.[0] || '',\n price: raw.price ?? raw.sellPrice ?? meta.sellPrice ?? meta.price,\n currency: raw.currency || meta.currency || '',\n url: raw.url || raw.productId || meta.url || meta.productId || '',\n clicks: raw.clicks,\n conversions: raw.conversions,\n revenue: raw.revenue,\n trend_score: raw.trend_score,\n metadata: raw.metadata || raw,\n };\n}\n\nfunction transformFilteredTab(raw: any): FilteredTab {\n return {\n id: raw.id,\n label: raw.label,\n filter: raw.filter,\n products: raw.products?.map(transformProduct) || [],\n nb_hits: raw.nb_hits,\n processing_time_ms: raw.processing_time_ms,\n };\n}\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\nexport function useQuerySuggestionsEnhanced(\n options: UseQuerySuggestionsEnhancedOptions\n): UseQuerySuggestionsEnhancedReturn {\n const {\n client,\n query,\n enabled = true,\n prefetch = false,\n debounceMs = 200,\n maxSuggestions = 10,\n minQueryLength = 1,\n includeDropdownRecommendations = false,\n includeDropdownProductList = true,\n includeFilteredTabs = true,\n includeCategories = true,\n includeFacets = true, // CHANGED: Enable facets by default\n maxCategories = 3,\n maxFacets = 5,\n filteredTabs,\n minPopularity,\n timeRange,\n disableTypoTolerance,\n analyticsTags,\n enableRecentSearches = true,\n maxRecentSearches = MAX_RECENT_SEARCHES_DEFAULT,\n recentSearchesKey = RECENT_SEARCHES_DEFAULT_KEY,\n onSuggestionsLoaded,\n onError,\n } = options;\n\n // State\n const [suggestions, setSuggestions] = useState<SuggestionItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [dropdownRecommendations, setDropdownRecommendations] = useState<DropdownRecommendations | null>(null);\n const [recentSearches, setRecentSearches] = useState<RecentSearch[]>([]);\n const [processingTimeMs, setProcessingTimeMs] = useState<number | null>(null);\n const [totalHits, setTotalHits] = useState(0);\n const [currentPage, setCurrentPage] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [originalQuery, setOriginalQuery] = useState('');\n\n // Refs\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n const mountedRef = useRef(true);\n\n // Load recent searches on mount\n useEffect(() => {\n if (enableRecentSearches) {\n const stored = getRecentSearchesFromStorage(recentSearchesKey);\n setRecentSearches(stored.slice(0, maxRecentSearches));\n }\n return () => {\n mountedRef.current = false;\n };\n }, [enableRecentSearches, recentSearchesKey, maxRecentSearches]);\n\n // Fetch suggestions\n const fetchSuggestions = useCallback(async (searchQuery: string) => {\n if (!client) return;\n // When minQueryLength is 0, allow empty query so overlay can show default/trending recommendations on open\n if (!searchQuery.trim() && minQueryLength > 0) {\n setSuggestions([]);\n setDropdownRecommendations(null);\n return;\n }\n\n // Cancel previous request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await client.getSuggestions?.(searchQuery, {\n hitsPerPage: maxSuggestions,\n include_dropdown_recommendations: includeDropdownRecommendations || (filteredTabs && filteredTabs.length > 0),\n include_dropdown_product_list: includeDropdownProductList,\n include_filtered_tabs: includeFilteredTabs,\n include_categories: includeCategories,\n include_facets: includeFacets,\n max_categories: maxCategories,\n max_facets: maxFacets,\n filtered_tabs: filteredTabs,\n min_popularity: minPopularity,\n time_range: timeRange,\n disable_typo_tolerance: disableTypoTolerance,\n analytics_tags: analyticsTags,\n returnFullResponse: true,\n }) as QuerySuggestionsFullResponse;\n\n if (!mountedRef.current) return;\n\n // Transform suggestions\n const rawSuggestions = response.suggestions || [];\n const transformedSuggestions = rawSuggestions.map(transformSuggestion);\n setSuggestions(transformedSuggestions);\n\n // Extract dropdown recommendations from extensions\n const extensions = (response.extensions || {}) as Record<string, unknown>;\n const rawResults = (response as { results?: { hits?: unknown[] }[] }).results;\n const secondResultHits = Array.isArray(rawResults?.[1]?.hits) ? rawResults[1].hits : [];\n // Multi-index response: results[0]=suggestions, results[1]=product hits; expose results[1].hits as product_hits for fallback when extensions have no products\n const productHits = secondResultHits.length > 0 ? secondResultHits.map((h: any) => transformProduct(h)) : [];\n const recommendations: DropdownRecommendations = {\n trending_searches: Array.isArray(extensions.trending_searches) ? extensions.trending_searches as TrendingSearch[] : [],\n top_searches: Array.isArray(extensions.top_searches) ? extensions.top_searches as TopSearch[] : [],\n related_searches: Array.isArray(extensions.related_searches) ? extensions.related_searches as RelatedSearch[] : [],\n trending_products: Array.isArray(extensions.trending_products) ? (extensions.trending_products as unknown[]).map(transformProduct) : [],\n item_recommendations: Array.isArray(extensions.item_recommendations) ? (extensions.item_recommendations as unknown[]).map(transformProduct) : [],\n product_hits: productHits.length > 0 ? productHits : undefined,\n popular_brands: Array.isArray(extensions.popular_brands) ? extensions.popular_brands as PopularBrand[] : [],\n filtered_tabs: Array.isArray(extensions.filtered_tabs) ? (extensions.filtered_tabs as unknown[]).map(transformFilteredTab) : [],\n processing_time_ms: typeof extensions.processing_time_ms === 'number' ? extensions.processing_time_ms : undefined,\n cached_at: typeof extensions.cached_at === 'string' ? extensions.cached_at : undefined,\n };\n setDropdownRecommendations(recommendations);\n\n // Extract metadata from raw response\n const raw = response.raw as Record<string, unknown> | undefined;\n const rawResultsArr = raw?.results as unknown[] | undefined;\n const rawResult = (rawResultsArr?.[0] ?? raw ?? {}) as Record<string, unknown>;\n const num = (v: unknown): number => (typeof v === 'number' && !Number.isNaN(v) ? v : 0);\n const str = (v: unknown): string => (typeof v === 'string' ? v : '');\n setProcessingTimeMs(typeof rawResult.processingTimeMS === 'number' ? rawResult.processingTimeMS : null);\n setTotalHits(num(rawResult.nbHits) || transformedSuggestions.length);\n setCurrentPage(num(rawResult.page) || 0);\n setTotalPages(num(rawResult.nbPages) || 1);\n setOriginalQuery(str(rawResult.query) || searchQuery);\n\n // Callback\n if (onSuggestionsLoaded) {\n onSuggestionsLoaded({\n suggestions: transformedSuggestions,\n nbHits: num(rawResult.nbHits) || transformedSuggestions.length,\n page: num(rawResult.page) || 0,\n nbPages: num(rawResult.nbPages) || 1,\n hitsPerPage: num(rawResult.hitsPerPage) || maxSuggestions,\n processingTimeMS: typeof rawResult.processingTimeMS === 'number' ? rawResult.processingTimeMS : undefined,\n query: str(rawResult.query) || searchQuery,\n dropdownRecommendations: recommendations,\n results: Array.isArray(response.results) ? response.results : undefined,\n extensions,\n });\n }\n\n log.verbose('Query suggestions loaded', {\n query: searchQuery,\n suggestionsCount: transformedSuggestions.length,\n hasRecommendations: Object.keys(recommendations).some(\n k => Array.isArray((recommendations as any)[k]) && (recommendations as any)[k].length > 0\n ),\n });\n } catch (err) {\n if (!mountedRef.current) return;\n\n const error = err instanceof Error ? err : new Error(String(err));\n if (error.name === 'AbortError') return;\n\n // Check if it's a 404 error (suggestions not enabled for this store).\n // The search SDK wraps axios errors into plain Error objects with the status\n // embedded in the message, e.g. \"[getSuggestions] ... (404)\".\n const errMsg = error.message || '';\n const is404 =\n (err as any)?.response?.status === 404 ||\n (err as any)?.status === 404 ||\n /\\(404\\)/.test(errMsg);\n\n if (is404) {\n // Silently handle 404 - suggestions feature not enabled\n log.verbose('Query suggestions not enabled for this store (404)');\n setSuggestions([]);\n setDropdownRecommendations(null);\n setError(null);\n } else {\n // For other errors, log and set error state\n log.error('Failed to fetch query suggestions', { query: searchQuery, error: error.message });\n setError(error);\n setSuggestions([]);\n setDropdownRecommendations(null);\n\n if (onError) {\n onError(error);\n }\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [\n client,\n minQueryLength,\n maxSuggestions,\n includeDropdownRecommendations,\n includeDropdownProductList,\n includeFilteredTabs,\n includeCategories,\n includeFacets,\n maxCategories,\n maxFacets,\n filteredTabs,\n minPopularity,\n timeRange,\n disableTypoTolerance,\n analyticsTags,\n onSuggestionsLoaded,\n onError,\n ]);\n\n // Prefetch: fire initial empty-query fetch once client is ready (before dropdown opens)\n const prefetchedRef = useRef(false);\n useEffect(() => {\n if (!prefetch || prefetchedRef.current) return;\n if (minQueryLength > 0) return;\n if (!client?.getSuggestions) return;\n prefetchedRef.current = true;\n fetchSuggestions('');\n }, [prefetch, client, minQueryLength, fetchSuggestions]);\n\n // Debounced fetch effect\n useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (!enabled || query.length < minQueryLength) {\n // Don't clear prefetched data when dropdown is closed\n if (prefetch && prefetchedRef.current && query === '') {\n // Keep prefetched data intact\n setLoading(false);\n setError(null);\n return;\n }\n setSuggestions([]);\n setDropdownRecommendations(null);\n setLoading(false);\n setError(null);\n return;\n }\n\n // When dropdown opens with empty query and we already have prefetched data, skip re-fetch\n if (prefetch && prefetchedRef.current && query === '') {\n return;\n }\n\n setLoading(true);\n\n debounceTimerRef.current = setTimeout(() => {\n fetchSuggestions(query);\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [query, enabled, prefetch, minQueryLength, debounceMs, fetchSuggestions]);\n\n // Recent search management\n const addRecentSearch = useCallback((searchQuery: string, resultsCount?: number) => {\n if (!enableRecentSearches || !searchQuery.trim()) return;\n\n setRecentSearches(prev => {\n // Remove existing entry for same query\n const filtered = prev.filter(s => s.query.toLowerCase() !== searchQuery.toLowerCase());\n // Add new entry at the beginning\n const newSearch: RecentSearch = {\n query: searchQuery.trim(),\n timestamp: Date.now(),\n resultsCount,\n };\n const updated = [newSearch, ...filtered].slice(0, maxRecentSearches);\n saveRecentSearchesToStorage(recentSearchesKey, updated);\n return updated;\n });\n }, [enableRecentSearches, maxRecentSearches, recentSearchesKey]);\n\n const removeRecentSearch = useCallback((searchQuery: string) => {\n setRecentSearches(prev => {\n const updated = prev.filter(s => s.query !== searchQuery);\n saveRecentSearchesToStorage(recentSearchesKey, updated);\n return updated;\n });\n }, [recentSearchesKey]);\n\n const clearRecentSearches = useCallback(() => {\n setRecentSearches([]);\n saveRecentSearchesToStorage(recentSearchesKey, []);\n }, [recentSearchesKey]);\n\n // Manual refetch\n const refetch = useCallback(async () => {\n if (query.length >= minQueryLength) {\n await fetchSuggestions(query);\n }\n }, [query, minQueryLength, fetchSuggestions]);\n\n // Derived values\n const trendingSearches = dropdownRecommendations?.trending_searches || [];\n const topSearches = dropdownRecommendations?.top_searches || [];\n const relatedSearches = dropdownRecommendations?.related_searches || [];\n const popularBrands = dropdownRecommendations?.popular_brands || [];\n const filteredTabsResult = dropdownRecommendations?.filtered_tabs || [];\n // Use trending_products, then item_recommendations, then first filtered_tab's products, then results[1].hits (product_hits) so grid shows for any API shape\n const trendingProducts = useMemo(() => {\n const fromTrending = dropdownRecommendations?.trending_products;\n if (fromTrending && fromTrending.length > 0) return fromTrending;\n const fromItemRecs = dropdownRecommendations?.item_recommendations;\n if (fromItemRecs && fromItemRecs.length > 0) return fromItemRecs;\n const firstTab = dropdownRecommendations?.filtered_tabs?.[0];\n if (firstTab?.products && firstTab.products.length > 0) return firstTab.products;\n return dropdownRecommendations?.product_hits ?? [];\n }, [dropdownRecommendations?.trending_products, dropdownRecommendations?.item_recommendations, dropdownRecommendations?.filtered_tabs, dropdownRecommendations?.product_hits]);\n\n const hasContent = useMemo(() => {\n return (\n suggestions.length > 0 ||\n recentSearches.length > 0 ||\n trendingSearches.length > 0 ||\n topSearches.length > 0 ||\n relatedSearches.length > 0 ||\n popularBrands.length > 0 ||\n filteredTabsResult.length > 0 ||\n trendingProducts.length > 0\n );\n }, [\n suggestions,\n recentSearches,\n trendingSearches,\n topSearches,\n relatedSearches,\n popularBrands,\n filteredTabsResult,\n trendingProducts,\n ]);\n\n // Get all navigable items for keyboard navigation\n const getAllNavigableItems = useCallback((): NavigableItem[] => {\n const items: NavigableItem[] = [];\n let index = 0;\n\n // Recent searches first (when query is empty)\n if (query.length === 0 && recentSearches.length > 0) {\n recentSearches.forEach(search => {\n items.push({ type: 'recent', index: index++, data: search });\n });\n }\n\n // Suggestions\n suggestions.forEach(suggestion => {\n items.push({ type: 'suggestion', index: index++, data: suggestion });\n });\n\n // Trending searches\n trendingSearches.forEach(trending => {\n items.push({ type: 'trending', index: index++, data: trending as TrendingSearch });\n });\n\n // Products\n trendingProducts.forEach(product => {\n items.push({ type: 'product', index: index++, data: product });\n });\n\n // Brands\n popularBrands.forEach(brand => {\n items.push({ type: 'brand', index: index++, data: brand as PopularBrand });\n });\n\n return items;\n }, [query, recentSearches, suggestions, trendingSearches, trendingProducts, popularBrands]);\n\n return {\n suggestions,\n loading,\n error,\n dropdownRecommendations,\n trendingSearches,\n topSearches,\n relatedSearches,\n popularBrands,\n filteredTabs: filteredTabsResult,\n trendingProducts,\n recentSearches,\n processingTimeMs,\n totalHits,\n currentPage,\n totalPages,\n originalQuery,\n addRecentSearch,\n removeRecentSearch,\n clearRecentSearches,\n refetch,\n hasContent,\n getAllNavigableItems,\n };\n}\n\nexport default useQuerySuggestionsEnhanced;\n","/**\n * QuerySuggestionsDropdown Component\n * \n * Classic dropdown variant with:\n * - Highlighted matches\n * - Keyboard navigation\n * - Recent searches\n * - Customizable styling\n * - Analytics tracking\n * - Accessibility support\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../hooks/useQuerySuggestionsEnhanced';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n RecentSearch,\n QuerySuggestionsClassNames,\n HighlightConfig,\n KeyboardNavConfig,\n AnimationConfig,\n QuerySuggestionsEventHandlers,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface QuerySuggestionsDropdownProps extends QuerySuggestionsEventHandlers {\n /** Current query string */\n query: string;\n /** Whether the dropdown is visible */\n isOpen?: boolean;\n /** Maximum suggestions to display */\n maxSuggestions?: number;\n /** Minimum query length to trigger suggestions */\n minQueryLength?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Show recent searches section */\n showRecentSearches?: boolean;\n /** Maximum recent searches to display */\n maxRecentSearches?: number;\n /** Show suggestion counts */\n showCounts?: boolean;\n /** Show empty state when no results */\n showEmptyState?: boolean;\n /** Highlight configuration */\n highlight?: HighlightConfig;\n /** Keyboard navigation configuration */\n keyboardNav?: KeyboardNavConfig;\n /** Animation configuration */\n animation?: AnimationConfig;\n /** Custom class names */\n classNames?: QuerySuggestionsClassNames;\n /** Custom CSS styles */\n style?: React.CSSProperties;\n /** Custom render for suggestion item */\n renderSuggestion?: (\n suggestion: SuggestionItem,\n index: number,\n isActive: boolean,\n highlight: (text: string) => React.ReactNode\n ) => React.ReactNode;\n /** Custom render for recent search item */\n renderRecentSearch?: (\n search: RecentSearch,\n index: number,\n isActive: boolean\n ) => React.ReactNode;\n /** Custom render for empty state */\n renderEmpty?: () => React.ReactNode;\n /** Custom footer content */\n footer?: React.ReactNode;\n /** Position of dropdown */\n position?: 'absolute' | 'fixed';\n /** Dropdown width */\n width?: string | number;\n /** Z-index for dropdown */\n zIndex?: number;\n /** Input element ref for positioning */\n inputRef?: React.RefObject<HTMLInputElement>;\n /** Close on click outside */\n closeOnClickOutside?: boolean;\n /** Close on escape key */\n closeOnEscape?: boolean;\n /** ARIA label */\n ariaLabel?: string;\n}\n\nexport interface QuerySuggestionsDropdownRef {\n /** Select the currently active item */\n selectActive: () => void;\n /** Navigate to next item */\n navigateNext: () => void;\n /** Navigate to previous item */\n navigatePrevious: () => void;\n /** Reset selection */\n resetSelection: () => void;\n /** Get active index */\n getActiveIndex: () => number;\n /** Get total items count */\n getTotalItems: () => number;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst defaultStyles = {\n container: {\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderRadius: `var(--seekora-border-radius, ${BORDER_RADIUS.lg}px)`,\n boxShadow: 'var(--seekora-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05))',\n maxHeight: '400px',\n overflowY: 'auto' as const,\n overflowX: 'hidden' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionTitle: {\n fontSize: '12px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, inherit)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n padding: '8px 16px 4px',\n margin: 0,\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '10px 16px',\n cursor: 'pointer',\n transition: `background-color ${TRANSITIONS.fast}`,\n fontSize: '14px',\n color: 'var(--seekora-text-primary, inherit)',\n gap: '12px',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f3f4f6)',\n },\n suggestionQuery: {\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n suggestionCount: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n marginLeft: 'auto',\n flexShrink: 0,\n },\n highlight: {\n fontWeight: 600,\n color: 'var(--seekora-text-primary, inherit)',\n backgroundColor: 'var(--seekora-highlight-bg, #fef3c7)',\n padding: '0 2px',\n borderRadius: `${BORDER_RADIUS.sm / 2}px`,\n },\n recentIcon: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n flexShrink: 0,\n },\n removeButton: {\n padding: '4px',\n borderRadius: `${BORDER_RADIUS.sm}px`,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n opacity: 0,\n transition: `opacity ${TRANSITIONS.fast}, color ${TRANSITIONS.fast}`,\n },\n removeButtonVisible: {\n opacity: 1,\n },\n emptyState: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px 16px',\n color: 'var(--seekora-text-secondary, inherit)',\n fontSize: '14px',\n textAlign: 'center' as const,\n },\n divider: {\n height: '1px',\n backgroundColor: 'var(--seekora-border-color, rgba(128,128,128,0.2))',\n margin: '4px 0',\n },\n footer: {\n borderTop: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n padding: '8px 16px',\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, inherit)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n keyboardHint: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n fontSize: '11px',\n },\n keyboardKey: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '18px',\n padding: '0 4px',\n borderRadius: `${BORDER_RADIUS.sm - 1}px`,\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n fontSize: '10px',\n fontWeight: 500,\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClockIcon: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst CloseIcon: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const QuerySuggestionsDropdown = forwardRef<\n QuerySuggestionsDropdownRef,\n QuerySuggestionsDropdownProps\n>(function QuerySuggestionsDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n maxSuggestions = 8,\n minQueryLength = 1,\n debounceMs = 200,\n showRecentSearches = true,\n maxRecentSearches = 5,\n showCounts = true,\n showEmptyState = true,\n highlight = { enabled: true, preTag: '<mark>', postTag: '</mark>' },\n keyboardNav = { enabled: true },\n animation = { enabled: true, duration: 150, entrance: 'fade' },\n classNames = {},\n style,\n renderSuggestion,\n renderRecentSearch,\n renderEmpty,\n footer,\n position = 'absolute',\n width = '100%',\n zIndex = 1000,\n closeOnClickOutside = true,\n closeOnEscape = true,\n ariaLabel = 'Search suggestions',\n onSuggestionSelect,\n onRecentSearchClick,\n onRecentSearchRemove,\n onOpen,\n onClose,\n onNavigate,\n } = props;\n\n const { client, theme } = useSearchContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [isVisible, setIsVisible] = useState(false);\n\n // Use enhanced hook\n const {\n suggestions,\n loading,\n error,\n recentSearches,\n addRecentSearch,\n removeRecentSearch,\n hasContent,\n } = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen && query.length >= minQueryLength,\n debounceMs,\n maxSuggestions,\n minQueryLength,\n enableRecentSearches: showRecentSearches,\n maxRecentSearches,\n });\n\n // Calculate all navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: 'recent' | 'suggestion'; data: RecentSearch | SuggestionItem }> = [];\n \n // Add recent searches if query is empty or short\n if (showRecentSearches && query.length === 0 && recentSearches.length > 0) {\n recentSearches.slice(0, maxRecentSearches).forEach(search => {\n items.push({ type: 'recent', data: search });\n });\n }\n \n // Add suggestions\n suggestions.forEach(suggestion => {\n items.push({ type: 'suggestion', data: suggestion });\n });\n \n return items;\n }, [suggestions, recentSearches, query, showRecentSearches, maxRecentSearches]);\n\n // Handle visibility animation\n useEffect(() => {\n if (isOpen && (hasContent || loading)) {\n setIsVisible(true);\n onOpen?.();\n } else {\n if (animation.enabled) {\n const timer = setTimeout(() => setIsVisible(false), animation.duration);\n return () => clearTimeout(timer);\n } else {\n setIsVisible(false);\n }\n onClose?.();\n }\n }, [isOpen, hasContent, loading, animation.enabled, animation.duration, onOpen, onClose]);\n\n // Reset active index when items change\n useEffect(() => {\n setActiveIndex(-1);\n }, [allItems.length]);\n\n // Keyboard navigation\n const navigateNext = useCallback(() => {\n if (!keyboardNav.enabled) return;\n setActiveIndex(prev => {\n const next = prev < allItems.length - 1 ? prev + 1 : 0;\n onNavigate?.('down', next);\n return next;\n });\n }, [keyboardNav.enabled, allItems.length, onNavigate]);\n\n const navigatePrevious = useCallback(() => {\n if (!keyboardNav.enabled) return;\n setActiveIndex(prev => {\n const next = prev > 0 ? prev - 1 : allItems.length - 1;\n onNavigate?.('up', next);\n return next;\n });\n }, [keyboardNav.enabled, allItems.length, onNavigate]);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n \n const item = allItems[activeIndex];\n if (item.type === 'recent') {\n const search = item.data as RecentSearch;\n onRecentSearchClick?.(search);\n } else {\n const suggestion = item.data as SuggestionItem;\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query, suggestion.count);\n }\n }, [activeIndex, allItems, onRecentSearchClick, onSuggestionSelect, addRecentSearch]);\n\n const resetSelection = useCallback(() => {\n setActiveIndex(-1);\n }, []);\n\n // Expose methods via ref\n useImperativeHandle(ref, () => ({\n selectActive,\n navigateNext,\n navigatePrevious,\n resetSelection,\n getActiveIndex: () => activeIndex,\n getTotalItems: () => allItems.length,\n }), [selectActive, navigateNext, navigatePrevious, resetSelection, activeIndex, allItems.length]);\n\n // Click outside handler\n useEffect(() => {\n if (!closeOnClickOutside || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [closeOnClickOutside, isOpen, onClose]);\n\n // Highlight text helper\n const highlightText = useCallback((text: string, searchQuery?: string): React.ReactNode => {\n if (!highlight.enabled || !searchQuery) {\n return text;\n }\n\n const parts = text.split(new RegExp(`(${searchQuery})`, 'gi'));\n return parts.map((part, i) => \n part.toLowerCase() === searchQuery.toLowerCase() ? (\n <mark\n key={i}\n className={classNames.suggestionItemHighlight}\n style={defaultStyles.highlight}\n >\n {part}\n </mark>\n ) : part\n );\n }, [highlight.enabled, classNames.suggestionItemHighlight]);\n\n // Parse highlighted query from API\n const parseHighlightedQuery = useCallback((suggestion: SuggestionItem): React.ReactNode => {\n if (suggestion.highlightedQuery && highlight.enabled) {\n // Parse the highlighted HTML\n return (\n <span\n dangerouslySetInnerHTML={{ __html: suggestion.highlightedQuery }}\n style={{ display: 'inline' }}\n />\n );\n }\n return highlightText(suggestion.query, query);\n }, [highlight.enabled, highlightText, query]);\n\n // Render helpers\n const renderSuggestionItem = (suggestion: SuggestionItem, index: number, isActive: boolean) => {\n if (renderSuggestion) {\n return renderSuggestion(suggestion, index, isActive, (text) => highlightText(text, query));\n }\n\n return (\n <div\n style={{\n ...defaultStyles.suggestionItem,\n ...(isActive ? defaultStyles.suggestionItemActive : {}),\n }}\n >\n <SearchIcon style={defaultStyles.recentIcon} />\n <span style={defaultStyles.suggestionQuery}>\n {parseHighlightedQuery(suggestion)}\n </span>\n {showCounts && suggestion.count !== undefined && (\n <span style={defaultStyles.suggestionCount}>\n {suggestion.count.toLocaleString()}\n </span>\n )}\n </div>\n );\n };\n\n const renderRecentSearchItem = (search: RecentSearch, index: number, isActive: boolean) => {\n if (renderRecentSearch) {\n return renderRecentSearch(search, index, isActive);\n }\n\n return (\n <div\n style={{\n ...defaultStyles.suggestionItem,\n ...(isActive ? defaultStyles.suggestionItemActive : {}),\n }}\n >\n <ClockIcon style={defaultStyles.recentIcon} />\n <span style={defaultStyles.suggestionQuery}>{search.query}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n removeRecentSearch(search.query);\n onRecentSearchRemove?.(search);\n }}\n style={{\n ...defaultStyles.removeButton,\n ...(isActive ? defaultStyles.removeButtonVisible : {}),\n }}\n aria-label={`Remove ${search.query} from recent searches`}\n >\n <CloseIcon />\n </button>\n </div>\n );\n };\n\n // Don't render if not visible\n if (!isVisible && !isOpen) {\n return null;\n }\n\n // Determine what to show\n const showRecent = showRecentSearches && query.length === 0 && recentSearches.length > 0;\n const showSuggestions = suggestions.length > 0;\n const showEmpty = showEmptyState && !loading && !showRecent && !showSuggestions && query.length >= minQueryLength;\n\n // Animation styles\n const animationStyle: React.CSSProperties = animation.enabled\n ? {\n opacity: isOpen ? 1 : 0,\n transform: isOpen ? 'translateY(0)' : 'translateY(-8px)',\n transition: `opacity ${animation.duration}ms ease, transform ${animation.duration}ms ease`,\n }\n : {};\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n className={clsx('seekora-suggestions-dropdown', classNames.root, classNames.container)}\n style={{\n position,\n width,\n zIndex,\n ...defaultStyles.container,\n ...animationStyle,\n ...style,\n }}\n >\n {/* Recent Searches Section */}\n {showRecent && (\n <div className={clsx('seekora-suggestions-section', classNames.section, classNames.recentSearches)}>\n <div className={classNames.sectionTitle} style={defaultStyles.sectionTitle}>\n Recent Searches\n </div>\n {recentSearches.slice(0, maxRecentSearches).map((search, index) => {\n const isActive = activeIndex === index;\n return (\n <div\n key={`recent-${search.query}-${index}`}\n role=\"option\"\n aria-selected={isActive}\n className={clsx(\n classNames.recentItem,\n isActive && classNames.suggestionItemActive\n )}\n onClick={() => {\n onRecentSearchClick?.(search);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {renderRecentSearchItem(search, index, isActive)}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Divider */}\n {showRecent && showSuggestions && (\n <div style={defaultStyles.divider} />\n )}\n\n {/* Suggestions Section */}\n {showSuggestions && (\n <div className={clsx('seekora-suggestions-section', classNames.section, classNames.suggestionsList)}>\n {query.length > 0 && (\n <div className={classNames.sectionTitle} style={defaultStyles.sectionTitle}>\n Suggestions\n </div>\n )}\n {suggestions.map((suggestion, index) => {\n const itemIndex = showRecent ? recentSearches.length + index : index;\n const isActive = activeIndex === itemIndex;\n return (\n <div\n key={suggestion.objectID || `suggestion-${index}`}\n role=\"option\"\n aria-selected={isActive}\n className={clsx(\n classNames.suggestionItem,\n isActive && classNames.suggestionItemActive\n )}\n onClick={() => {\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query, suggestion.count);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n >\n {renderSuggestionItem(suggestion, index, isActive)}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Empty State */}\n {showEmpty && (\n <div className={classNames.emptyState} style={defaultStyles.emptyState}>\n {renderEmpty ? renderEmpty() : (\n <>\n <SearchIcon style={{ width: 24, height: 24, marginBottom: 8, opacity: 0.5 }} />\n <span>No suggestions found for \"{query}\"</span>\n </>\n )}\n </div>\n )}\n\n {/* Footer */}\n {footer || (keyboardNav.enabled && allItems.length > 0) ? (\n <div className={classNames.footer} style={defaultStyles.footer}>\n {footer || (\n <div style={defaultStyles.keyboardHint}>\n <span style={defaultStyles.keyboardKey}>↑</span>\n <span style={defaultStyles.keyboardKey}>↓</span>\n <span>to navigate</span>\n <span style={defaultStyles.keyboardKey}>↵</span>\n <span>to select</span>\n <span style={defaultStyles.keyboardKey}>esc</span>\n <span>to close</span>\n </div>\n )}\n </div>\n ) : null}\n\n {/* Animation keyframes */}\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n .seekora-suggestions-dropdown mark {\n background-color: var(--seekora-highlight-bg, #fef3c7);\n font-weight: 600;\n padding: 0 2px;\n border-radius: 2px;\n }\n .seekora-suggestions-dropdown [role=\"option\"]:hover button {\n opacity: 1;\n }\n `}</style>\n </div>\n );\n});\n\nexport default QuerySuggestionsDropdown;\n","/**\n * RichQuerySuggestions Component\n * \n * Advanced multi-section dropdown with:\n * - Suggestions with categories\n * - Trending searches\n * - Recent searches\n * - Top searches (popular)\n * - Related searches\n * - Configurable sections\n * - Rich styling options\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../hooks/useQuerySuggestionsEnhanced';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n RecentSearch,\n TrendingSearch,\n TopSearch,\n RelatedSearch,\n SuggestionCategory,\n QuerySuggestionsClassNames,\n QuerySuggestionsEventHandlers,\n DropdownSection,\n DropdownSectionConfig,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface RichQuerySuggestionsProps extends QuerySuggestionsEventHandlers {\n /** Current query string */\n query: string;\n /** Whether the dropdown is visible */\n isOpen?: boolean;\n /** Section configuration */\n sections?: DropdownSectionConfig[];\n /** Maximum suggestions per section */\n maxSuggestionsPerSection?: number;\n /** Minimum query length */\n minQueryLength?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Include dropdown recommendations from API */\n includeDropdownRecommendations?: boolean;\n /** When false, omit product hits list from dropdown (default true) */\n includeDropdownProductList?: boolean;\n /** When false, omit filtered_tabs from dropdown (default true) */\n includeFilteredTabs?: boolean;\n /** Include categories in suggestions */\n includeCategories?: boolean;\n /** Max categories per suggestion */\n maxCategories?: number;\n /** Show suggestion counts */\n showCounts?: boolean;\n /** Show category counts */\n showCategoryCounts?: boolean;\n /** Show section headers */\n showSectionHeaders?: boolean;\n /** Custom class names */\n classNames?: QuerySuggestionsClassNames;\n /** Custom CSS styles */\n style?: React.CSSProperties;\n /** Custom render for suggestion */\n renderSuggestion?: (suggestion: SuggestionItem, isActive: boolean) => React.ReactNode;\n /** Custom render for category pill */\n renderCategory?: (category: SuggestionCategory) => React.ReactNode;\n /** Custom render for trending item */\n renderTrendingItem?: (item: TrendingSearch, index: number) => React.ReactNode;\n /** Custom render for recent item */\n renderRecentItem?: (item: RecentSearch) => React.ReactNode;\n /** Custom header content */\n header?: React.ReactNode;\n /** Custom footer content */\n footer?: React.ReactNode;\n /** Dropdown width */\n width?: string | number;\n /** Dropdown max height */\n maxHeight?: string | number;\n /** Z-index */\n zIndex?: number;\n /** ARIA label */\n ariaLabel?: string;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Highlight options for query suggestions (passed to highlight rendering) */\n highlightOptions?: {\n highlightColor?: string;\n highlightTextColor?: string;\n highlightFontWeight?: string | number;\n highlightStyle?: 'background' | 'underline' | 'bold' | 'color-only';\n };\n}\n\nexport interface RichQuerySuggestionsRef {\n getActiveIndex: () => number;\n setActiveIndex: (index: number) => void;\n selectActive: () => void;\n navigateNext: () => void;\n navigatePrevious: () => void;\n getTotalItems: () => number;\n}\n\n// Default section order\nconst DEFAULT_SECTIONS: DropdownSectionConfig[] = [\n { id: 'recent', title: 'Recent Searches', maxItems: 5, enabled: true, order: 1 },\n { id: 'suggestions', title: 'Suggestions', maxItems: 8, enabled: true, order: 2 },\n { id: 'trending', title: 'Trending', maxItems: 5, enabled: true, order: 3 },\n { id: 'categories', title: 'Categories', maxItems: 6, enabled: false, order: 4 },\n];\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderRadius: `var(--seekora-border-radius-lg, ${BORDER_RADIUS.lg * 1.5}px)`,\n boxShadow: 'var(--seekora-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04))',\n overflow: 'hidden',\n },\n header: {\n padding: '12px 16px',\n borderBottom: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n },\n content: {\n overflowY: 'auto' as const,\n overflowX: 'hidden' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px 4px',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n margin: 0,\n },\n sectionAction: {\n fontSize: '12px',\n color: 'var(--seekora-primary, #3b82f6)',\n cursor: 'pointer',\n textDecoration: 'none',\n fontWeight: 500,\n },\n item: {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '10px 16px',\n cursor: 'pointer',\n transition: `background-color ${TRANSITIONS.fast}`,\n gap: '12px',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f3f4f6)',\n },\n itemIcon: {\n width: '18px',\n height: '18px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n flexShrink: 0,\n marginTop: '2px',\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemQuery: {\n fontSize: '14px',\n color: 'var(--seekora-text-primary, inherit)',\n fontWeight: 500,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n itemMeta: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, inherit)',\n marginTop: '2px',\n },\n itemCount: {\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n flexShrink: 0,\n },\n categoriesContainer: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '6px',\n marginTop: '6px',\n },\n categoryPill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '3px 8px',\n fontSize: '11px',\n fontWeight: 500,\n color: 'var(--seekora-text-secondary, inherit)',\n backgroundColor: 'var(--seekora-bg-tertiary, rgba(255, 255, 255, 0.1))',\n borderRadius: `${BORDER_RADIUS.lg * 1.5}px`,\n cursor: 'pointer',\n transition: `all ${TRANSITIONS.fast}`,\n },\n categoryPillHover: {\n backgroundColor: 'var(--seekora-primary-light, #dbeafe)',\n color: 'var(--seekora-primary, #3b82f6)',\n },\n categoryCount: {\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n },\n trendingList: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '8px',\n padding: '8px 16px',\n },\n trendingChip: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderRadius: `${BORDER_RADIUS.full}px`,\n cursor: 'pointer',\n transition: `all ${TRANSITIONS.fast}`,\n },\n trendingChipHover: {\n borderColor: 'var(--seekora-primary, #3b82f6)',\n backgroundColor: 'var(--seekora-primary-light, #eff6ff)',\n },\n trendingIcon: {\n width: '14px',\n height: '14px',\n color: 'var(--seekora-success, #10b981)',\n },\n trendingRank: {\n width: '18px',\n height: '18px',\n borderRadius: `${BORDER_RADIUS.full}px`,\n backgroundColor: 'var(--seekora-primary, #3b82f6)',\n color: 'white',\n fontSize: '10px',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n removeButton: {\n padding: '4px',\n marginLeft: 'auto',\n borderRadius: `${BORDER_RADIUS.sm}px`,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n opacity: 0,\n transition: `opacity ${TRANSITIONS.fast}`,\n },\n divider: {\n height: '1px',\n backgroundColor: 'var(--seekora-border-color, rgba(128,128,128,0.2))',\n margin: '4px 16px',\n },\n footer: {\n padding: '12px 16px',\n borderTop: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, inherit)',\n },\n emptyState: {\n padding: '32px 16px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, inherit)',\n },\n highlight: {\n backgroundColor: 'var(--seekora-highlight-bg, #fef9c3)',\n fontWeight: 600,\n borderRadius: '2px',\n padding: '0 1px',\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.itemIcon}>\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.itemIcon}>\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.trendingIcon}>\n <path fillRule=\"evenodd\" d=\"M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ArrowIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 16, height: 16 }}>\n <path fillRule=\"evenodd\" d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 14, height: 14 }}>\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const RichQuerySuggestions = forwardRef<RichQuerySuggestionsRef, RichQuerySuggestionsProps>(\n function RichQuerySuggestions(props, ref) {\n const {\n query,\n isOpen = true,\n sections = DEFAULT_SECTIONS,\n maxSuggestionsPerSection = 8,\n minQueryLength = 0,\n debounceMs = 200,\n includeDropdownRecommendations = true,\n includeDropdownProductList = true,\n includeFilteredTabs = true,\n includeCategories = true,\n maxCategories = 3,\n showCounts = true,\n showCategoryCounts = true,\n showSectionHeaders = true,\n classNames = {},\n style,\n renderSuggestion,\n renderCategory,\n renderTrendingItem,\n renderRecentItem,\n header,\n footer,\n width = '100%',\n maxHeight = '480px',\n zIndex = 1000,\n ariaLabel = 'Search suggestions',\n analyticsTags,\n onSuggestionSelect,\n onCategoryClick,\n onRecentSearchClick,\n onRecentSearchRemove,\n onViewAllClick,\n onOpen,\n onClose,\n } = props;\n\n const { client } = useSearchContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredCategory, setHoveredCategory] = useState<string | null>(null);\n\n // Use enhanced hook\n const {\n suggestions,\n loading,\n trendingSearches,\n topSearches,\n recentSearches,\n addRecentSearch,\n removeRecentSearch,\n hasContent,\n } = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen,\n debounceMs,\n maxSuggestions: maxSuggestionsPerSection,\n minQueryLength,\n includeDropdownRecommendations,\n includeDropdownProductList,\n includeFilteredTabs,\n includeCategories,\n maxCategories,\n analyticsTags,\n enableRecentSearches: true,\n });\n\n // Sort and filter sections\n const enabledSections = useMemo(() => {\n return sections\n .filter(s => s.enabled !== false)\n .sort((a, b) => (a.order || 0) - (b.order || 0));\n }, [sections]);\n\n // Get section config\n const getSectionConfig = (id: DropdownSection): DropdownSectionConfig | undefined => {\n return enabledSections.find(s => s.id === id);\n };\n\n // Build flat list of all navigable items\n const allItems = useMemo(() => {\n const items: Array<{\n type: 'recent' | 'suggestion' | 'trending' | 'category';\n data: any;\n sectionIndex: number;\n }> = [];\n\n enabledSections.forEach((section, sectionIndex) => {\n switch (section.id) {\n case 'recent':\n if (query.length === 0) {\n recentSearches.slice(0, section.maxItems || 5).forEach(search => {\n items.push({ type: 'recent', data: search, sectionIndex });\n });\n }\n break;\n case 'suggestions':\n suggestions.slice(0, section.maxItems || maxSuggestionsPerSection).forEach(suggestion => {\n items.push({ type: 'suggestion', data: suggestion, sectionIndex });\n });\n break;\n case 'trending':\n if (query.length === 0) {\n (trendingSearches.length > 0 ? trendingSearches : topSearches)\n .slice(0, section.maxItems || 5)\n .forEach(trending => {\n items.push({ type: 'trending', data: trending, sectionIndex });\n });\n }\n break;\n }\n });\n\n return items;\n }, [enabledSections, query, recentSearches, suggestions, trendingSearches, topSearches, maxSuggestionsPerSection]);\n\n // Navigation functions\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => (prev < allItems.length - 1 ? prev + 1 : 0));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => (prev > 0 ? prev - 1 : allItems.length - 1));\n }, [allItems.length]);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n\n const item = allItems[activeIndex];\n switch (item.type) {\n case 'recent':\n onRecentSearchClick?.(item.data);\n break;\n case 'suggestion':\n onSuggestionSelect?.(item.data);\n addRecentSearch(item.data.query, item.data.count);\n break;\n case 'trending':\n onSuggestionSelect?.({ query: item.data.query, count: item.data.count } as SuggestionItem);\n addRecentSearch(item.data.query);\n break;\n }\n }, [activeIndex, allItems, onRecentSearchClick, onSuggestionSelect, addRecentSearch]);\n\n // Expose ref methods\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n getTotalItems: () => allItems.length,\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, allItems.length]);\n\n // Highlight query in text\n const highlightQuery = (text: string): React.ReactNode => {\n if (!query) return text;\n const parts = text.split(new RegExp(`(${query})`, 'gi'));\n return parts.map((part, i) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <span key={i} style={styles.highlight}>{part}</span>\n ) : part\n );\n };\n\n // Get item index offset for a section\n const getItemIndex = (sectionId: DropdownSection, itemIndex: number): number => {\n let offset = 0;\n for (const item of allItems) {\n const sectionConfig = enabledSections[item.sectionIndex];\n if (sectionConfig.id === sectionId) {\n return offset + itemIndex;\n }\n if (item.sectionIndex < enabledSections.findIndex(s => s.id === sectionId)) {\n offset++;\n }\n }\n return offset + itemIndex;\n };\n\n // Render recent searches section\n const renderRecentSection = () => {\n const config = getSectionConfig('recent');\n if (!config || query.length > 0 || recentSearches.length === 0) return null;\n\n return (\n <div className={clsx('seekora-section', 'seekora-section-recent', classNames.section)}>\n {showSectionHeaders && (\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>{config.title || 'Recent Searches'}</h3>\n {recentSearches.length > (config.maxItems || 5) && (\n <button\n style={styles.sectionAction}\n onClick={() => onViewAllClick?.('recent')}\n >\n View all\n </button>\n )}\n </div>\n )}\n {recentSearches.slice(0, config.maxItems || 5).map((search, index) => {\n const itemIndex = getItemIndex('recent', index);\n const isActive = activeIndex === itemIndex;\n\n return (\n <div\n key={`recent-${search.query}`}\n role=\"option\"\n aria-selected={isActive}\n style={{ ...styles.item, ...(isActive ? styles.itemActive : {}) }}\n onClick={() => {\n onRecentSearchClick?.(search);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.recentItem, isActive && classNames.suggestionItemActive)}\n >\n {renderRecentItem ? renderRecentItem(search) : (\n <>\n <ClockIcon />\n <div style={styles.itemContent}>\n <p style={styles.itemQuery}>{search.query}</p>\n </div>\n <button\n style={styles.removeButton}\n onClick={(e) => {\n e.stopPropagation();\n removeRecentSearch(search.query);\n onRecentSearchRemove?.(search);\n }}\n aria-label=\"Remove\"\n >\n <CloseIcon />\n </button>\n </>\n )}\n </div>\n );\n })}\n </div>\n );\n };\n\n // Render suggestions section\n const renderSuggestionsSection = () => {\n const config = getSectionConfig('suggestions');\n if (!config || suggestions.length === 0) return null;\n\n return (\n <div className={clsx('seekora-section', 'seekora-section-suggestions', classNames.section)}>\n {showSectionHeaders && query.length > 0 && (\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>{config.title || 'Suggestions'}</h3>\n </div>\n )}\n {suggestions.slice(0, config.maxItems || maxSuggestionsPerSection).map((suggestion, index) => {\n const itemIndex = allItems.findIndex(\n (item, idx) => item.type === 'suggestion' && \n allItems.slice(0, idx).filter(i => i.type === 'suggestion').length === index\n );\n const isActive = activeIndex === itemIndex;\n\n return (\n <div\n key={suggestion.objectID || `suggestion-${index}`}\n role=\"option\"\n aria-selected={isActive}\n style={{ ...styles.item, ...(isActive ? styles.itemActive : {}) }}\n onClick={() => {\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query, suggestion.count);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.suggestionItem, isActive && classNames.suggestionItemActive)}\n >\n {renderSuggestion ? renderSuggestion(suggestion, isActive) : (\n <>\n <SearchIcon />\n <div style={styles.itemContent}>\n <p style={styles.itemQuery}>{highlightQuery(suggestion.query)}</p>\n {includeCategories && suggestion.categories && suggestion.categories.length > 0 && (\n <div style={styles.categoriesContainer}>\n {suggestion.categories.slice(0, maxCategories).map((category, catIndex) => (\n renderCategory ? renderCategory(category) : (\n <span\n key={`cat-${catIndex}`}\n style={{\n ...styles.categoryPill,\n ...(hoveredCategory === category.value ? styles.categoryPillHover : {}),\n }}\n onClick={(e) => {\n e.stopPropagation();\n onCategoryClick?.(category);\n }}\n onMouseEnter={() => setHoveredCategory(category.value)}\n onMouseLeave={() => setHoveredCategory(null)}\n >\n {category.value}\n {showCategoryCounts && category.count !== undefined && (\n <span style={styles.categoryCount}>({category.count})</span>\n )}\n </span>\n )\n ))}\n </div>\n )}\n </div>\n {showCounts && suggestion.count !== undefined && (\n <span style={styles.itemCount}>{suggestion.count.toLocaleString()}</span>\n )}\n </>\n )}\n </div>\n );\n })}\n </div>\n );\n };\n\n // Render trending section\n const renderTrendingSection = () => {\n const config = getSectionConfig('trending');\n const trending = trendingSearches.length > 0 ? trendingSearches : topSearches;\n if (!config || query.length > 0 || trending.length === 0) return null;\n\n return (\n <div className={clsx('seekora-section', 'seekora-section-trending', classNames.section)}>\n {showSectionHeaders && (\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>{config.title || 'Trending'}</h3>\n </div>\n )}\n <div style={styles.trendingList}>\n {trending.slice(0, config.maxItems || 5).map((item, index) => {\n const itemIndex = allItems.findIndex(\n (navItem, idx) => navItem.type === 'trending' && \n allItems.slice(0, idx).filter(i => i.type === 'trending').length === index\n );\n const isActive = activeIndex === itemIndex;\n\n return renderTrendingItem ? renderTrendingItem(item, index) : (\n <button\n key={`trending-${item.query}`}\n style={{\n ...styles.trendingChip,\n ...(isActive ? styles.trendingChipHover : {}),\n }}\n onClick={() => {\n onSuggestionSelect?.({\n query: item.query,\n count: item.count,\n } as SuggestionItem);\n addRecentSearch(item.query);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.trendingItem, isActive && classNames.suggestionItemActive)}\n >\n <span style={styles.trendingRank}>{index + 1}</span>\n <span>{item.query}</span>\n <TrendingIcon />\n </button>\n );\n })}\n </div>\n </div>\n );\n };\n\n // Don't render if closed or no content\n if (!isOpen) return null;\n\n const showContent = hasContent || loading || query.length === 0;\n if (!showContent) return null;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n className={clsx('seekora-rich-suggestions', classNames.root, classNames.container)}\n style={{\n position: 'absolute',\n width,\n zIndex,\n ...styles.container,\n ...style,\n }}\n >\n {/* Header */}\n {header && <div style={styles.header}>{header}</div>}\n\n {/* Content */}\n <div style={{ ...styles.content, maxHeight }}>\n {/* Sections */}\n {enabledSections.map((section, index) => {\n let content: React.ReactNode = null;\n\n switch (section.id) {\n case 'recent':\n content = renderRecentSection();\n break;\n case 'suggestions':\n content = renderSuggestionsSection();\n break;\n case 'trending':\n content = renderTrendingSection();\n break;\n }\n\n if (!content) return null;\n\n return (\n <React.Fragment key={section.id}>\n {index > 0 && <div style={styles.divider} />}\n {content}\n </React.Fragment>\n );\n })}\n\n {/* Empty state when query but no suggestions */}\n {!loading && query.length > 0 && suggestions.length === 0 && (\n <div style={styles.emptyState}>\n <p>No suggestions found for \"{query}\"</p>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {footer && <div style={styles.footer}>{footer}</div>}\n\n {/* Styles */}\n <style>{`\n .seekora-rich-suggestions [role=\"option\"]:hover button {\n opacity: 1;\n }\n .seekora-rich-suggestions mark {\n background-color: var(--seekora-highlight-bg, #fef9c3);\n font-weight: 600;\n border-radius: 2px;\n padding: 0 1px;\n }\n `}</style>\n </div>\n );\n }\n);\n\nexport default RichQuerySuggestions;\n","/**\n * FederatedDropdown Component\n * \n * Full-featured federated search dropdown with:\n * - Multi-column layout (suggestions + products)\n * - Filtered tabs with product results\n * - Popular brands\n * - Trending products\n * - Category navigation\n * - Responsive design\n * - Rich product cards\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../hooks/useQuerySuggestionsEnhanced';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n ProductItem,\n FilteredTab,\n PopularBrand,\n RecentSearch,\n QuerySuggestionsClassNames,\n QuerySuggestionsEventHandlers,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FederatedDropdownProps extends QuerySuggestionsEventHandlers {\n /** Current query string */\n query: string;\n /** Whether the dropdown is visible */\n isOpen?: boolean;\n /** Maximum suggestions to show */\n maxSuggestions?: number;\n /** Maximum products to show per section */\n maxProducts?: number;\n /** Maximum brands to show */\n maxBrands?: number;\n /** Minimum query length */\n minQueryLength?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Filtered tabs configuration */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Show products section */\n showProducts?: boolean;\n /** Show brands section */\n showBrands?: boolean;\n /** Show filtered tabs */\n showFilteredTabs?: boolean;\n /** Show recent searches */\n showRecentSearches?: boolean;\n /** Layout mode */\n layout?: 'side-by-side' | 'stacked' | 'full-width';\n /** Products column width (for side-by-side) */\n productsColumnWidth?: string;\n /** Suggestions column width (for side-by-side) */\n suggestionsColumnWidth?: string;\n /** Show product prices */\n showPrices?: boolean;\n /** Currency symbol */\n currencySymbol?: string;\n /** Custom class names */\n classNames?: QuerySuggestionsClassNames;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom product card renderer */\n renderProduct?: (product: ProductItem, index: number) => React.ReactNode;\n /** Custom suggestion renderer */\n renderSuggestion?: (suggestion: SuggestionItem, index: number, isActive: boolean) => React.ReactNode;\n /** Custom brand renderer */\n renderBrand?: (brand: PopularBrand, index: number) => React.ReactNode;\n /** Custom tab renderer */\n renderTab?: (tab: FilteredTab, isActive: boolean) => React.ReactNode;\n /** Header content */\n header?: React.ReactNode;\n /** Footer content */\n footer?: React.ReactNode;\n /** View all products link */\n viewAllProductsLink?: string;\n /** Width */\n width?: string | number;\n /** Max height */\n maxHeight?: string | number;\n /** Z-index */\n zIndex?: number;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Include facets in suggestions API response */\n includeFacets?: boolean;\n /** Include categories in suggestions API response */\n includeCategories?: boolean;\n /** Include dropdown recommendations (trending products, top searches, etc.) */\n includeDropdownRecommendations?: boolean;\n}\n\nexport interface FederatedDropdownRef {\n getActiveIndex: () => number;\n setActiveIndex: (index: number) => void;\n selectActive: () => void;\n navigateNext: () => void;\n navigatePrevious: () => void;\n getActiveTab: () => string | null;\n setActiveTab: (tabId: string) => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderRadius: `var(--seekora-border-radius-lg, ${BORDER_RADIUS.lg * 1.5}px)`,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n overflow: 'hidden',\n },\n header: {\n padding: '12px 20px',\n borderBottom: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n },\n content: {\n display: 'flex',\n overflowY: 'auto' as const,\n },\n contentStacked: {\n flexDirection: 'column' as const,\n },\n suggestionsColumn: {\n borderRight: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n overflowY: 'auto' as const,\n },\n productsColumn: {\n flex: 1,\n overflowY: 'auto' as const,\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n },\n section: {\n padding: '12px 0',\n },\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px 8px',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 700,\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.08em',\n margin: 0,\n },\n viewAllLink: {\n fontSize: '12px',\n color: 'var(--seekora-primary, #3b82f6)',\n textDecoration: 'none',\n fontWeight: 600,\n cursor: 'pointer',\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '10px 20px',\n cursor: 'pointer',\n transition: `background-color ${TRANSITIONS.fast}`,\n gap: '12px',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f3f4f6)',\n },\n suggestionIcon: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n flexShrink: 0,\n },\n suggestionText: {\n flex: 1,\n fontSize: '14px',\n color: 'var(--seekora-text-primary, inherit)',\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n suggestionArrow: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-tertiary, #d1d5db)',\n opacity: 0,\n transition: 'opacity 100ms ease',\n },\n suggestionArrowVisible: {\n opacity: 1,\n },\n suggestionCount: {\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n },\n tabsContainer: {\n display: 'flex',\n gap: '4px',\n padding: '12px 20px',\n borderBottom: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n overflowX: 'auto' as const,\n },\n tab: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-secondary, inherit)',\n backgroundColor: 'transparent',\n border: '1px solid transparent',\n borderRadius: `${BORDER_RADIUS.full}px`,\n cursor: 'pointer',\n whiteSpace: 'nowrap' as const,\n transition: `all ${TRANSITIONS.fast}`,\n },\n tabActive: {\n color: 'var(--seekora-primary, #3b82f6)',\n backgroundColor: 'var(--seekora-primary-light, #eff6ff)',\n borderColor: 'var(--seekora-primary, #3b82f6)',\n },\n tabCount: {\n fontSize: '11px',\n fontWeight: 600,\n padding: '2px 6px',\n borderRadius: `${BORDER_RADIUS.lg}px`,\n backgroundColor: 'var(--seekora-bg-tertiary, rgba(255, 255, 255, 0.1))',\n },\n tabCountActive: {\n backgroundColor: 'var(--seekora-primary, #3b82f6)',\n color: 'white',\n },\n productsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\n gap: '16px',\n padding: '16px 20px',\n },\n productCard: {\n display: 'flex',\n flexDirection: 'column' as const,\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n borderRadius: `${BORDER_RADIUS.lg}px`,\n overflow: 'hidden',\n cursor: 'pointer',\n transition: `transform ${TRANSITIONS.fast}, box-shadow ${TRANSITIONS.fast}`,\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n },\n productCardHover: {\n transform: 'translateY(-2px)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n },\n productImage: {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n },\n productInfo: {\n padding: '10px',\n },\n productTitle: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n lineHeight: 1.3,\n },\n productPrice: {\n fontSize: '14px',\n fontWeight: 700,\n color: 'var(--seekora-primary, #3b82f6)',\n marginTop: '4px',\n },\n brandsGrid: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '8px',\n padding: '8px 20px 16px',\n },\n brandChip: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 14px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderRadius: `${BORDER_RADIUS.lg}px`,\n cursor: 'pointer',\n transition: `all ${TRANSITIONS.fast}`,\n },\n brandChipHover: {\n borderColor: 'var(--seekora-primary, #3b82f6)',\n backgroundColor: 'var(--seekora-primary-light, #eff6ff)',\n },\n brandLogo: {\n width: '20px',\n height: '20px',\n borderRadius: `${BORDER_RADIUS.sm}px`,\n objectFit: 'contain' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n },\n footer: {\n padding: '12px 20px',\n borderTop: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, inherit)',\n },\n emptyState: {\n padding: '48px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, inherit)',\n },\n highlight: {\n backgroundColor: 'var(--seekora-highlight-bg, #fef9c3)',\n fontWeight: 600,\n padding: '0 2px',\n borderRadius: `${BORDER_RADIUS.sm / 2}px`,\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ ...styles.suggestionIcon, ...style }}>\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClockIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ ...styles.suggestionIcon, ...style }}>\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ArrowRightIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ ...styles.suggestionArrow, ...style }}>\n <path fillRule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst TrendingIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 14, height: 14, color: '#10b981', ...style }}>\n <path fillRule=\"evenodd\" d=\"M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ImagePlaceholder = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" style={{ width: '40%', height: '40%', color: '#d1d5db' }}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" strokeWidth=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" strokeWidth=\"2\" />\n <polyline points=\"21 15 16 10 5 21\" strokeWidth=\"2\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const FederatedDropdown = forwardRef<FederatedDropdownRef, FederatedDropdownProps>(\n function FederatedDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n maxSuggestions = 8,\n maxProducts = 8,\n maxBrands = 8,\n minQueryLength = 0,\n debounceMs = 200,\n filteredTabs: tabsConfig,\n showProducts = true,\n showBrands = true,\n showFilteredTabs = true,\n showRecentSearches = true,\n layout = 'side-by-side',\n productsColumnWidth = '60%',\n suggestionsColumnWidth = '40%',\n showPrices = true,\n currencySymbol = '$',\n classNames = {},\n style,\n renderProduct,\n renderSuggestion,\n renderBrand,\n renderTab,\n header,\n footer,\n viewAllProductsLink,\n width = '800px',\n maxHeight = '600px',\n zIndex = 1000,\n analyticsTags,\n includeFacets: includeFacetsProp = true,\n includeCategories: includeCategoriesProp = true,\n includeDropdownRecommendations: includeDropdownRecommendationsProp = true,\n onSuggestionSelect,\n onProductClick,\n onBrandClick,\n onTabSelect,\n onRecentSearchClick,\n onRecentSearchRemove,\n onViewAllClick,\n onOpen,\n onClose,\n } = props;\n\n const { client } = useSearchContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [activeTab, setActiveTab] = useState<string>('all');\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n const [hoveredBrand, setHoveredBrand] = useState<string | null>(null);\n\n // Use enhanced hook\n const {\n suggestions,\n loading,\n filteredTabs,\n trendingProducts,\n popularBrands,\n recentSearches,\n addRecentSearch,\n removeRecentSearch,\n hasContent,\n } = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen,\n debounceMs,\n maxSuggestions,\n minQueryLength,\n includeDropdownRecommendations: includeDropdownRecommendationsProp,\n includeCategories: includeCategoriesProp,\n includeFacets: includeFacetsProp,\n filteredTabs: tabsConfig,\n analyticsTags,\n enableRecentSearches: showRecentSearches,\n });\n\n // Get products for current tab\n const currentTabProducts = useMemo(() => {\n if (activeTab === 'all') {\n // Combine trending products with first tab products\n const allProducts = [...trendingProducts];\n filteredTabs.forEach(tab => {\n if (tab.products) {\n tab.products.forEach(product => {\n if (!allProducts.find(p => p.id === product.id)) {\n allProducts.push(product);\n }\n });\n }\n });\n return allProducts.slice(0, maxProducts);\n }\n const tab = filteredTabs.find(t => t.id === activeTab);\n return tab?.products?.slice(0, maxProducts) || [];\n }, [activeTab, filteredTabs, trendingProducts, maxProducts]);\n\n // All navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any }> = [];\n\n // Recent searches (when no query)\n if (query.length === 0 && showRecentSearches) {\n recentSearches.slice(0, 5).forEach(search => {\n items.push({ type: 'recent', data: search });\n });\n }\n\n // Suggestions\n suggestions.forEach(suggestion => {\n items.push({ type: 'suggestion', data: suggestion });\n });\n\n return items;\n }, [query, showRecentSearches, recentSearches, suggestions]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => (prev < allItems.length - 1 ? prev + 1 : 0));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => (prev > 0 ? prev - 1 : allItems.length - 1));\n }, [allItems.length]);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n const item = allItems[activeIndex];\n if (item.type === 'recent') {\n onRecentSearchClick?.(item.data);\n } else if (item.type === 'suggestion') {\n onSuggestionSelect?.(item.data);\n addRecentSearch(item.data.query);\n }\n }, [activeIndex, allItems, onRecentSearchClick, onSuggestionSelect, addRecentSearch]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n getActiveTab: () => activeTab,\n setActiveTab,\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, activeTab]);\n\n // Highlight query in text\n const highlightQuery = (text: string): React.ReactNode => {\n if (!query) return text;\n const parts = text.split(new RegExp(`(${query})`, 'gi'));\n return parts.map((part, i) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <span key={i} style={styles.highlight}>{part}</span>\n ) : part\n );\n };\n\n // Format price\n const formatPrice = (price?: number, currency?: string): string => {\n if (price === undefined) return '';\n const symbol = currency || currencySymbol;\n return `${symbol}${price.toLocaleString()}`;\n };\n\n // Handle tab change\n const handleTabChange = (tabId: string) => {\n setActiveTab(tabId);\n const tab = filteredTabs.find(t => t.id === tabId);\n if (tab) {\n onTabSelect?.(tab);\n }\n };\n\n if (!isOpen) return null;\n\n const showTabs = showFilteredTabs && (filteredTabs.length > 0 || trendingProducts.length > 0);\n const showProductsSection = showProducts && currentTabProducts.length > 0;\n const showBrandsSection = showBrands && popularBrands.length > 0;\n const showRecent = showRecentSearches && query.length === 0 && recentSearches.length > 0;\n const showSuggestions = suggestions.length > 0;\n\n const isStackedLayout = layout === 'stacked' || layout === 'full-width';\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions and products\"\n className={clsx('seekora-federated-dropdown', classNames.root, classNames.container)}\n style={{\n position: 'absolute',\n width,\n zIndex,\n ...styles.container,\n ...style,\n }}\n >\n {/* Header */}\n {header && <div style={styles.header}>{header}</div>}\n\n {/* Tabs */}\n {showTabs && (\n <div style={styles.tabsContainer} className={classNames.tabsList}>\n <button\n style={{\n ...styles.tab,\n ...(activeTab === 'all' ? styles.tabActive : {}),\n }}\n onClick={() => handleTabChange('all')}\n className={clsx(classNames.tabItem, activeTab === 'all' && classNames.tabActive)}\n >\n All Results\n {trendingProducts.length > 0 && (\n <span style={{\n ...styles.tabCount,\n ...(activeTab === 'all' ? styles.tabCountActive : {}),\n }}>\n {trendingProducts.length}+\n </span>\n )}\n </button>\n {filteredTabs.map((tab) => (\n renderTab ? renderTab(tab, activeTab === tab.id) : (\n <button\n key={tab.id}\n style={{\n ...styles.tab,\n ...(activeTab === tab.id ? styles.tabActive : {}),\n }}\n onClick={() => handleTabChange(tab.id)}\n className={clsx(classNames.tabItem, activeTab === tab.id && classNames.tabActive)}\n >\n {tab.label}\n {tab.nb_hits !== undefined && (\n <span style={{\n ...styles.tabCount,\n ...(activeTab === tab.id ? styles.tabCountActive : {}),\n }}>\n {tab.nb_hits}\n </span>\n )}\n </button>\n )\n ))}\n </div>\n )}\n\n {/* Main Content */}\n <div\n style={{\n ...styles.content,\n ...(isStackedLayout ? styles.contentStacked : {}),\n maxHeight,\n }}\n >\n {/* Suggestions Column */}\n <div\n style={{\n ...styles.suggestionsColumn,\n width: isStackedLayout ? '100%' : suggestionsColumnWidth,\n minWidth: isStackedLayout ? undefined : '280px',\n borderRight: isStackedLayout ? 'none' : styles.suggestionsColumn.borderRight,\n }}\n >\n {/* Recent Searches */}\n {showRecent && (\n <div style={styles.section} className={classNames.recentSearches}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>Recent Searches</h3>\n </div>\n {recentSearches.slice(0, 5).map((search, index) => {\n const isActive = activeIndex === index;\n return (\n <div\n key={`recent-${search.query}`}\n role=\"option\"\n aria-selected={isActive}\n style={{\n ...styles.suggestionItem,\n ...(isActive ? styles.suggestionItemActive : {}),\n }}\n onClick={() => onRecentSearchClick?.(search)}\n onMouseEnter={() => setActiveIndex(index)}\n className={clsx(classNames.recentItem, isActive && classNames.suggestionItemActive)}\n >\n <ClockIcon />\n <span style={styles.suggestionText}>{search.query}</span>\n <ArrowRightIcon style={isActive ? styles.suggestionArrowVisible : {}} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {showSuggestions && (\n <div style={styles.section} className={classNames.suggestionsList}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>\n {query ? 'Suggestions' : 'Popular Searches'}\n </h3>\n </div>\n {suggestions.slice(0, maxSuggestions).map((suggestion, index) => {\n const itemIndex = showRecent ? recentSearches.length + index : index;\n const isActive = activeIndex === itemIndex;\n \n return renderSuggestion ? renderSuggestion(suggestion, index, isActive) : (\n <div\n key={suggestion.objectID || `suggestion-${index}`}\n role=\"option\"\n aria-selected={isActive}\n style={{\n ...styles.suggestionItem,\n ...(isActive ? styles.suggestionItemActive : {}),\n }}\n onClick={() => {\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.suggestionItem, isActive && classNames.suggestionItemActive)}\n >\n <SearchIcon />\n <span style={styles.suggestionText}>{highlightQuery(suggestion.query)}</span>\n {suggestion.count !== undefined && (\n <span style={styles.suggestionCount}>{suggestion.count.toLocaleString()}</span>\n )}\n <ArrowRightIcon style={isActive ? styles.suggestionArrowVisible : {}} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Brands */}\n {showBrandsSection && (\n <div style={styles.section} className={classNames.brandsList}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>Popular Brands</h3>\n </div>\n <div style={styles.brandsGrid}>\n {popularBrands.slice(0, maxBrands).map((brand, index) => (\n renderBrand ? renderBrand(brand, index) : (\n <button\n key={`brand-${brand.name}`}\n style={{\n ...styles.brandChip,\n ...(hoveredBrand === brand.name ? styles.brandChipHover : {}),\n }}\n onClick={() => onBrandClick?.(brand)}\n onMouseEnter={() => setHoveredBrand(brand.name)}\n onMouseLeave={() => setHoveredBrand(null)}\n className={classNames.brandItem}\n >\n {brand.logo && (\n <img\n src={brand.logo}\n alt={brand.name}\n style={styles.brandLogo}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n )}\n <span>{brand.name}</span>\n </button>\n )\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Products Column */}\n {showProductsSection && !isStackedLayout && (\n <div\n style={{\n ...styles.productsColumn,\n width: productsColumnWidth,\n }}\n >\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>\n {activeTab === 'all' ? 'Trending Products' : `Products in ${filteredTabs.find(t => t.id === activeTab)?.label || activeTab}`}\n </h3>\n {viewAllProductsLink && (\n <a\n href={viewAllProductsLink}\n style={styles.viewAllLink}\n onClick={(e) => {\n e.preventDefault();\n onViewAllClick?.('products');\n }}\n >\n View all\n </a>\n )}\n </div>\n <div style={styles.productsGrid} className={classNames.productsList}>\n {currentTabProducts.map((product, index) => (\n renderProduct ? renderProduct(product, index) : (\n <div\n key={product.id || product.objectID}\n style={{\n ...styles.productCard,\n ...(hoveredProduct === product.id ? styles.productCardHover : {}),\n }}\n onClick={() => onProductClick?.(product)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n className={classNames.productItem}\n >\n {product.image ? (\n <img\n src={product.image}\n alt={product.title || product.name || ''}\n style={styles.productImage}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n ) : (\n <div\n style={{\n ...styles.productImage,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <ImagePlaceholder />\n </div>\n )}\n <div style={styles.productInfo}>\n <h4 style={styles.productTitle}>\n {product.title || product.name}\n </h4>\n {showPrices && product.price !== undefined && (\n <p style={styles.productPrice}>\n {formatPrice(product.price, product.currency)}\n </p>\n )}\n </div>\n </div>\n )\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {footer ? (\n <div style={styles.footer}>{footer}</div>\n ) : (\n <div style={styles.footer}>\n <span>Press ↵ to search, ↑↓ to navigate</span>\n {query && (\n <button\n style={{ ...styles.viewAllLink, background: 'none', border: 'none' }}\n onClick={() => onViewAllClick?.('suggestions')}\n >\n See all results for \"{query}\"\n </button>\n )}\n </div>\n )}\n\n {/* Styles */}\n <style>{`\n .seekora-federated-dropdown mark {\n background-color: var(--seekora-highlight-bg, #fef9c3);\n font-weight: 600;\n border-radius: 2px;\n padding: 0 2px;\n }\n .seekora-federated-dropdown [role=\"option\"]:hover svg:last-child {\n opacity: 1;\n }\n `}</style>\n </div>\n );\n }\n);\n\nexport default FederatedDropdown;\n","/**\n * Suggestions Analytics Hook\n *\n * Provides analytics tracking for query suggestions components using\n * Analytics V3 event structure and schema/fields (event_name, event_ts,\n * correlation_id/search_id via context, and V3 top-level fields such as\n * original_query, position, section, clicked_item_id, click_type, tab_id,\n * suggestions_count, etc.). All events are sent via client.trackEvent(payload, context)\n * so the SDK can attach correlation_id, search_id, event_ts, orgcode, xstoreid.\n */\n\nimport { useCallback, useRef, useEffect } from 'react';\nimport type { SeekoraClient, SearchContext } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type {\n SuggestionItem,\n ProductItem,\n SuggestionCategory,\n PopularBrand,\n FilteredTab,\n RecentSearch,\n TrendingSearch,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseSuggestionsAnalyticsOptions {\n /** Seekora client instance */\n client: SeekoraClient;\n /** Enable analytics tracking */\n enabled?: boolean;\n /** Analytics tags to include with all events */\n analyticsTags?: string[];\n /** Debounce impression events (ms) */\n impressionDebounce?: number;\n /** Track suggestion impressions automatically */\n trackImpressions?: boolean;\n /** Track clicks automatically */\n trackClicks?: boolean;\n /** Optional search context (correlationId, searchId) to attach to events when available */\n context?: SearchContext | Partial<SearchContext>;\n}\n\nexport interface SuggestionClickEventData {\n /** The clicked suggestion */\n suggestion: SuggestionItem;\n /** Position in the list (0-indexed) */\n position: number;\n /** Section where the suggestion appeared */\n section?: 'suggestions' | 'trending' | 'recent' | 'related';\n /** Original query that triggered suggestions */\n query?: string;\n /** Total suggestions shown */\n totalSuggestions?: number;\n}\n\nexport interface ProductClickEventData {\n /** The clicked product */\n product: ProductItem;\n /** Position in the list (0-indexed) */\n position: number;\n /** Section where the product appeared */\n section?: 'products' | 'trending' | 'recommendations' | 'filtered_tab';\n /** Tab ID if from filtered tab */\n tabId?: string;\n /** Original query */\n query?: string;\n}\n\nexport interface SuggestionImpressionEventData {\n /** Suggestions that were shown */\n suggestions: SuggestionItem[];\n /** Products that were shown */\n products?: ProductItem[];\n /** Categories that were shown */\n categories?: SuggestionCategory[];\n /** Brands that were shown */\n brands?: PopularBrand[];\n /** Original query */\n query: string;\n /** Timestamp when impressions occurred */\n timestamp: number;\n}\n\nexport interface UseSuggestionsAnalyticsReturn {\n /** Track a suggestion click */\n trackSuggestionClick: (data: SuggestionClickEventData) => void;\n /** Track a product click from suggestions dropdown */\n trackProductClick: (data: ProductClickEventData) => void;\n /** Track a category click */\n trackCategoryClick: (category: SuggestionCategory, query?: string) => void;\n /** Track a brand click */\n trackBrandClick: (brand: PopularBrand, query?: string) => void;\n /** Track a tab selection */\n trackTabSelect: (tab: FilteredTab, query?: string) => void;\n /** Track recent search click */\n trackRecentSearchClick: (search: RecentSearch) => void;\n /** Track trending search click */\n trackTrendingClick: (trending: TrendingSearch, position: number) => void;\n /** Track suggestions impression */\n trackImpression: (data: SuggestionImpressionEventData) => void;\n /** Track search submission from suggestion */\n trackSearchSubmit: (query: string, fromSuggestion: boolean, suggestion?: SuggestionItem) => void;\n /** Track dropdown open */\n trackDropdownOpen: (query: string) => void;\n /** Track dropdown close */\n trackDropdownClose: (query: string, selectedSuggestion?: string) => void;\n}\n\n// ============================================================================\n// Event Names\n// ============================================================================\n\nconst EVENTS = {\n SUGGESTION_CLICK: 'suggestions.click',\n SUGGESTION_IMPRESSION: 'suggestions.impression',\n PRODUCT_CLICK: 'suggestions.product_click',\n CATEGORY_CLICK: 'suggestions.category_click',\n BRAND_CLICK: 'suggestions.brand_click',\n TAB_SELECT: 'suggestions.tab_select',\n RECENT_CLICK: 'suggestions.recent_click',\n TRENDING_CLICK: 'suggestions.trending_click',\n SEARCH_SUBMIT: 'suggestions.search_submit',\n DROPDOWN_OPEN: 'suggestions.dropdown_open',\n DROPDOWN_CLOSE: 'suggestions.dropdown_close',\n // Variant & product interaction events\n VARIANT_SELECT: 'product.variant_select',\n VARIANT_HOVER: 'product.variant_hover',\n ADD_TO_CART: 'product.add_to_cart',\n PRODUCT_IMPRESSION: 'product.impression',\n SWATCH_CLICK: 'product.swatch_click',\n};\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\nexport function useSuggestionsAnalytics(\n options: UseSuggestionsAnalyticsOptions\n): UseSuggestionsAnalyticsReturn {\n const {\n client,\n enabled = true,\n analyticsTags = [],\n impressionDebounce = 500,\n trackImpressions = true,\n trackClicks = true,\n context: contextOption,\n } = options;\n\n // Refs for debouncing and tracking\n const impressionTimerRef = useRef<NodeJS.Timeout | null>(null);\n const lastImpressionRef = useRef<string | null>(null);\n const dropdownOpenTimeRef = useRef<number | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (impressionTimerRef.current) {\n clearTimeout(impressionTimerRef.current);\n }\n };\n }, []);\n\n // Helper to send event (optional context links event to search for v3 analytics)\n const sendEvent = useCallback(\n async (eventName: string, metadata: Record<string, any>, context?: SearchContext | Partial<SearchContext>) => {\n if (!enabled || !client) return;\n\n const searchContext = context ?? contextOption;\n try {\n // Extract query for search-related events (backend requires query at top level for search events)\n const { query, ...restMetadata } = metadata;\n const isSearchEvent = eventName.includes('search') || eventName === EVENTS.SEARCH_SUBMIT;\n\n await client.trackEvent?.({\n event_name: eventName,\n analytics_tags: analyticsTags,\n // Include query at top level for search events\n ...(isSearchEvent && query ? { query } : {}),\n metadata: {\n ...restMetadata,\n timestamp: Date.now(),\n source: 'suggestions_dropdown',\n },\n }, searchContext);\n log.verbose(`Analytics: ${eventName}`, metadata);\n } catch (error) {\n log.warn(`Failed to track ${eventName}`, { error });\n }\n },\n [client, enabled, analyticsTags, contextOption]\n );\n\n // Track suggestion click\n const trackSuggestionClick = useCallback(\n (data: SuggestionClickEventData) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.SUGGESTION_CLICK, {\n suggestion_query: data.suggestion.query,\n suggestion_id: data.suggestion.objectID,\n suggestion_popularity: data.suggestion.popularity,\n position: data.position,\n section: data.section || 'suggestions',\n original_query: data.query,\n total_suggestions: data.totalSuggestions,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track product click\n const trackProductClick = useCallback(\n (data: ProductClickEventData) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.PRODUCT_CLICK, {\n product_id: data.product.id || data.product.objectID,\n product_title: data.product.title || data.product.name,\n product_price: data.product.price,\n position: data.position,\n section: data.section || 'products',\n tab_id: data.tabId,\n original_query: data.query,\n });\n\n // Also track as a general product click for analytics (with context when available)\n const searchContext = contextOption;\n if (client?.trackClick) {\n Promise.resolve(client.trackClick(data.product.id || data.product.objectID || '', data.position + 1, searchContext as SearchContext)).catch(() => {});\n }\n },\n [client, contextOption, sendEvent, trackClicks]\n );\n\n // Track category click\n const trackCategoryClick = useCallback(\n (category: SuggestionCategory, query?: string) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.CATEGORY_CLICK, {\n category_value: category.value,\n category_count: category.count,\n category_path: category.path,\n original_query: query,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track brand click\n const trackBrandClick = useCallback(\n (brand: PopularBrand, query?: string) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.BRAND_CLICK, {\n brand_name: brand.name,\n brand_count: brand.count,\n original_query: query,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track tab selection\n const trackTabSelect = useCallback(\n (tab: FilteredTab, query?: string) => {\n sendEvent(EVENTS.TAB_SELECT, {\n tab_id: tab.id,\n tab_label: tab.label,\n tab_filter: tab.filter,\n products_count: tab.products?.length || 0,\n nb_hits: tab.nb_hits,\n original_query: query,\n });\n },\n [sendEvent]\n );\n\n // Track recent search click\n const trackRecentSearchClick = useCallback(\n (search: RecentSearch) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.RECENT_CLICK, {\n query: search.query,\n original_timestamp: search.timestamp,\n results_count: search.resultsCount,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track trending click\n const trackTrendingClick = useCallback(\n (trending: TrendingSearch, position: number) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.TRENDING_CLICK, {\n query: trending.query,\n count: trending.count,\n trend_score: trending.trend_score,\n position,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track impression (debounced)\n const trackImpression = useCallback(\n (data: SuggestionImpressionEventData) => {\n if (!trackImpressions) return;\n\n // Create a hash of the impression to avoid duplicates\n const impressionHash = `${data.query}:${data.suggestions.length}:${data.products?.length || 0}`;\n if (impressionHash === lastImpressionRef.current) return;\n\n // Clear existing timer\n if (impressionTimerRef.current) {\n clearTimeout(impressionTimerRef.current);\n }\n\n // Debounce the impression\n impressionTimerRef.current = setTimeout(() => {\n lastImpressionRef.current = impressionHash;\n\n sendEvent(EVENTS.SUGGESTION_IMPRESSION, {\n query: data.query,\n suggestions_count: data.suggestions.length,\n suggestions: data.suggestions.slice(0, 10).map((s, i) => ({\n query: s.query,\n position: i,\n popularity: s.popularity,\n })),\n products_count: data.products?.length || 0,\n categories_count: data.categories?.length || 0,\n brands_count: data.brands?.length || 0,\n impression_timestamp: data.timestamp,\n });\n }, impressionDebounce);\n },\n [sendEvent, trackImpressions, impressionDebounce]\n );\n\n // Track search submit\n const trackSearchSubmit = useCallback(\n (query: string, fromSuggestion: boolean, suggestion?: SuggestionItem) => {\n sendEvent(EVENTS.SEARCH_SUBMIT, {\n query,\n from_suggestion: fromSuggestion,\n suggestion_query: suggestion?.query,\n suggestion_id: suggestion?.objectID,\n suggestion_popularity: suggestion?.popularity,\n });\n },\n [sendEvent]\n );\n\n // Track dropdown open\n const trackDropdownOpen = useCallback(\n (query: string) => {\n dropdownOpenTimeRef.current = Date.now();\n sendEvent(EVENTS.DROPDOWN_OPEN, {\n query,\n has_query: query.length > 0,\n });\n },\n [sendEvent]\n );\n\n // Track dropdown close\n const trackDropdownClose = useCallback(\n (query: string, selectedSuggestion?: string) => {\n const duration = dropdownOpenTimeRef.current\n ? Date.now() - dropdownOpenTimeRef.current\n : null;\n\n sendEvent(EVENTS.DROPDOWN_CLOSE, {\n query,\n selected_suggestion: selectedSuggestion,\n had_selection: !!selectedSuggestion,\n duration_ms: duration,\n });\n\n dropdownOpenTimeRef.current = null;\n },\n [sendEvent]\n );\n\n return {\n trackSuggestionClick,\n trackProductClick,\n trackCategoryClick,\n trackBrandClick,\n trackTabSelect,\n trackRecentSearchClick,\n trackTrendingClick,\n trackImpression,\n trackSearchSubmit,\n trackDropdownOpen,\n trackDropdownClose,\n };\n}\n\nexport default useSuggestionsAnalytics;\n","/**\n * SearchBarWithSuggestions Component\n * \n * Integrated search bar with query suggestions dropdown.\n * Combines SearchBar with any of the suggestion dropdown variants.\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { QuerySuggestionsDropdown, QuerySuggestionsDropdownRef } from './QuerySuggestionsDropdown';\nimport { RichQuerySuggestions, RichQuerySuggestionsRef } from './RichQuerySuggestions';\nimport { FederatedDropdown, FederatedDropdownRef } from './FederatedDropdown';\nimport { useSuggestionsAnalytics } from '../hooks/useSuggestionsAnalytics';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n ProductItem,\n QuerySuggestionsVariant,\n RecentSearch,\n QuerySuggestionsClassNames,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SearchBarWithSuggestionsProps {\n /** Dropdown variant to use */\n variant?: QuerySuggestionsVariant;\n /** Placeholder text */\n placeholder?: string;\n /** Initial query value */\n initialQuery?: string;\n /** Controlled query value */\n value?: string;\n /** Callback when query changes */\n onQueryChange?: (query: string) => void;\n /** Callback when search is submitted */\n onSearch?: (query: string) => void;\n /** Callback when suggestion is selected */\n onSuggestionSelect?: (suggestion: SuggestionItem) => void;\n /** Callback when product is clicked */\n onProductClick?: (product: ProductItem) => void;\n /** Show search button */\n showSearchButton?: boolean;\n /** Search button text */\n searchButtonText?: string;\n /** Show clear button */\n showClearButton?: boolean;\n /** Auto focus on mount */\n autoFocus?: boolean;\n /** Min query length for suggestions */\n minQueryLength?: number;\n /** Max suggestions to show */\n maxSuggestions?: number;\n /** Max products to show in dropdown (federated/rich) */\n maxProducts?: number;\n /** Debounce delay (ms) */\n debounceMs?: number;\n /** Show recent searches */\n showRecentSearches?: boolean;\n /** Show trending when empty */\n showTrendingOnEmpty?: boolean;\n /** Include dropdown recommendations */\n includeDropdownRecommendations?: boolean;\n /** Filtered tabs config */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Enable analytics tracking */\n enableAnalytics?: boolean;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Include facets in suggestions API response (federated/rich) */\n includeFacets?: boolean;\n /** Include categories in suggestions API response (federated/rich) */\n includeCategories?: boolean;\n /** Dropdown width */\n dropdownWidth?: string | number;\n /** Dropdown max height */\n dropdownMaxHeight?: string | number;\n /** Custom class names */\n classNames?: {\n wrapper?: string;\n input?: string;\n button?: string;\n clearButton?: string;\n dropdown?: string;\n } & QuerySuggestionsClassNames;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Input style */\n inputStyle?: React.CSSProperties;\n /** ARIA label */\n ariaLabel?: string;\n}\n\nexport interface SearchBarWithSuggestionsRef {\n /** Focus the input */\n focus: () => void;\n /** Blur the input */\n blur: () => void;\n /** Clear the input */\n clear: () => void;\n /** Get current query */\n getQuery: () => string;\n /** Set query value */\n setQuery: (query: string) => void;\n /** Open dropdown */\n openDropdown: () => void;\n /** Close dropdown */\n closeDropdown: () => void;\n /** Navigate to next suggestion */\n navigateNext: () => void;\n /** Navigate to previous suggestion */\n navigatePrevious: () => void;\n /** Select current suggestion */\n selectCurrent: () => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n wrapper: {\n position: 'relative' as const,\n width: '100%',\n },\n inputWrapper: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: 'var(--seekora-border-radius-lg, 8px)',\n overflow: 'hidden',\n transition: 'border-color 150ms ease, box-shadow 150ms ease',\n },\n inputWrapperFocused: {\n borderColor: 'var(--seekora-border-focus, var(--seekora-primary, #3b82f6))',\n boxShadow: '0 0 0 3px var(--seekora-border-focus-alpha, var(--seekora-primary-light, rgba(59, 130, 246, 0.1)))',\n },\n input: {\n flex: 1,\n padding: '12px 16px',\n fontSize: '16px',\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n color: 'var(--seekora-text-primary, #111827)',\n fontFamily: 'inherit',\n },\n searchIcon: {\n width: '20px',\n height: '20px',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n marginLeft: '12px',\n flexShrink: 0,\n },\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n marginRight: '4px',\n padding: 0,\n border: 'none',\n backgroundColor: 'transparent',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n borderRadius: '50%',\n cursor: 'pointer',\n transition: 'background-color 150ms ease, color 150ms ease',\n },\n searchButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '12px 20px',\n margin: '4px',\n border: 'none',\n backgroundColor: 'var(--seekora-primary, #3b82f6)',\n color: 'var(--seekora-primary-text, white)',\n borderRadius: 'var(--seekora-border-radius, 6px)',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 150ms ease',\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.searchIcon}>\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClearIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 16, height: 16 }}>\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const SearchBarWithSuggestions = forwardRef<SearchBarWithSuggestionsRef, SearchBarWithSuggestionsProps>(\n function SearchBarWithSuggestions(props, ref) {\n const {\n variant = 'classic',\n placeholder = 'Powered by Seekora',\n initialQuery = '',\n value,\n onQueryChange,\n onSearch,\n onSuggestionSelect,\n onProductClick,\n showSearchButton = false,\n searchButtonText = 'Search',\n showClearButton = true,\n autoFocus = false,\n minQueryLength = 1,\n maxSuggestions = 8,\n maxProducts = 8,\n debounceMs = 200,\n showRecentSearches = true,\n showTrendingOnEmpty = true,\n includeDropdownRecommendations = false,\n filteredTabs,\n enableAnalytics = true,\n analyticsTags,\n includeFacets,\n includeCategories,\n dropdownWidth,\n dropdownMaxHeight,\n classNames = {},\n style,\n inputStyle,\n ariaLabel = 'Search',\n } = props;\n\n const { client } = useSearchContext();\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<QuerySuggestionsDropdownRef | RichQuerySuggestionsRef | FederatedDropdownRef>(null);\n \n const [query, setQuery] = useState(value ?? initialQuery);\n const [isFocused, setIsFocused] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n // Analytics\n const analytics = useSuggestionsAnalytics({\n client,\n enabled: enableAnalytics,\n analyticsTags,\n });\n\n // Sync controlled value\n useEffect(() => {\n if (value !== undefined && value !== query) {\n setQuery(value);\n }\n }, [value]);\n\n // Handle query change\n const handleQueryChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = e.target.value;\n setQuery(newQuery);\n onQueryChange?.(newQuery);\n \n // Open dropdown when typing\n if (newQuery.length >= minQueryLength || (showTrendingOnEmpty && newQuery.length === 0)) {\n setIsDropdownOpen(true);\n }\n }, [onQueryChange, minQueryLength, showTrendingOnEmpty]);\n\n // Handle search submit\n const handleSubmit = useCallback((e?: React.FormEvent) => {\n e?.preventDefault();\n if (query.trim()) {\n onSearch?.(query.trim());\n analytics.trackSearchSubmit(query.trim(), false);\n setIsDropdownOpen(false);\n }\n }, [query, onSearch, analytics]);\n\n // Handle suggestion select\n const handleSuggestionSelect = useCallback((suggestion: SuggestionItem) => {\n setQuery(suggestion.query);\n onQueryChange?.(suggestion.query);\n onSuggestionSelect?.(suggestion);\n analytics.trackSuggestionClick({\n suggestion,\n position: 0, // Would need to track actual position\n query,\n });\n setIsDropdownOpen(false);\n \n // Optionally trigger search\n onSearch?.(suggestion.query);\n }, [query, onQueryChange, onSuggestionSelect, onSearch, analytics]);\n\n // Handle product click\n const handleProductClick = useCallback((product: ProductItem) => {\n onProductClick?.(product);\n analytics.trackProductClick({\n product,\n position: 0,\n query,\n });\n setIsDropdownOpen(false);\n }, [query, onProductClick, analytics]);\n\n // Handle recent search click\n const handleRecentSearchClick = useCallback((search: RecentSearch) => {\n setQuery(search.query);\n onQueryChange?.(search.query);\n analytics.trackRecentSearchClick(search);\n setIsDropdownOpen(false);\n onSearch?.(search.query);\n }, [onQueryChange, onSearch, analytics]);\n\n // Handle focus\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n setIsDropdownOpen(true);\n analytics.trackDropdownOpen(query);\n }, [query, analytics]);\n\n // Handle blur\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n // Delay closing to allow click events on dropdown\n setTimeout(() => {\n setIsDropdownOpen(false);\n analytics.trackDropdownClose(query);\n }, 200);\n }, [query, analytics]);\n\n // Handle clear\n const handleClear = useCallback(() => {\n setQuery('');\n onQueryChange?.('');\n inputRef.current?.focus();\n }, [onQueryChange]);\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!isDropdownOpen) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n setIsDropdownOpen(true);\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n dropdownRef.current?.navigateNext?.();\n break;\n case 'ArrowUp':\n e.preventDefault();\n dropdownRef.current?.navigatePrevious?.();\n break;\n case 'Enter':\n e.preventDefault();\n if ((dropdownRef.current?.getActiveIndex?.() ?? -1) >= 0) {\n dropdownRef.current?.selectActive?.();\n } else {\n handleSubmit();\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsDropdownOpen(false);\n inputRef.current?.blur();\n break;\n }\n }, [isDropdownOpen, handleSubmit]);\n\n // Expose ref methods\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n clear: handleClear,\n getQuery: () => query,\n setQuery: (newQuery: string) => {\n setQuery(newQuery);\n onQueryChange?.(newQuery);\n },\n openDropdown: () => setIsDropdownOpen(true),\n closeDropdown: () => setIsDropdownOpen(false),\n navigateNext: () => dropdownRef.current?.navigateNext?.(),\n navigatePrevious: () => dropdownRef.current?.navigatePrevious?.(),\n selectCurrent: () => dropdownRef.current?.selectActive?.(),\n }), [query, handleClear, onQueryChange]);\n\n // Render dropdown based on variant\n const renderDropdown = () => {\n const commonProps = {\n query,\n isOpen: isDropdownOpen,\n maxSuggestions,\n minQueryLength,\n debounceMs,\n showRecentSearches,\n classNames,\n onSuggestionSelect: handleSuggestionSelect,\n onRecentSearchClick: handleRecentSearchClick,\n onClose: () => setIsDropdownOpen(false),\n analyticsTags,\n };\n\n switch (variant) {\n case 'rich':\n return (\n <RichQuerySuggestions\n ref={dropdownRef as React.Ref<RichQuerySuggestionsRef>}\n {...commonProps}\n includeDropdownRecommendations={includeDropdownRecommendations}\n includeCategories\n width={dropdownWidth || '100%'}\n maxHeight={dropdownMaxHeight || '480px'}\n />\n );\n\n case 'federated':\n return (\n <FederatedDropdown\n ref={dropdownRef as React.Ref<FederatedDropdownRef>}\n {...commonProps}\n maxProducts={maxProducts}\n filteredTabs={filteredTabs}\n showProducts\n showBrands\n showFilteredTabs={!!filteredTabs}\n onProductClick={handleProductClick}\n width={dropdownWidth || '800px'}\n maxHeight={dropdownMaxHeight || '600px'}\n includeFacets={includeFacets}\n includeCategories={includeCategories}\n includeDropdownRecommendations={includeDropdownRecommendations}\n />\n );\n\n case 'compact':\n return (\n <QuerySuggestionsDropdown\n ref={dropdownRef as React.Ref<QuerySuggestionsDropdownRef>}\n {...commonProps}\n maxSuggestions={5}\n showCounts={false}\n width={dropdownWidth || '100%'}\n />\n );\n\n case 'classic':\n default:\n return (\n <QuerySuggestionsDropdown\n ref={dropdownRef as React.Ref<QuerySuggestionsDropdownRef>}\n {...commonProps}\n width={dropdownWidth || '100%'}\n />\n );\n }\n };\n\n return (\n <div\n className={clsx('seekora-search-bar-with-suggestions', classNames.wrapper)}\n style={{ ...styles.wrapper, ...style }}\n >\n <form onSubmit={handleSubmit}>\n <div\n style={{\n ...styles.inputWrapper,\n ...(isFocused ? styles.inputWrapperFocused : {}),\n }}\n >\n <SearchIcon />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleQueryChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label={ariaLabel}\n aria-expanded={isDropdownOpen}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n className={classNames.input}\n style={{ ...styles.input, ...inputStyle }}\n />\n {showClearButton && query && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={classNames.clearButton}\n style={styles.clearButton}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n {showSearchButton && (\n <button\n type=\"submit\"\n className={classNames.button}\n style={styles.searchButton}\n >\n {searchButtonText}\n </button>\n )}\n </div>\n </form>\n\n {/* Dropdown */}\n <div className={classNames.dropdown}>\n {renderDropdown()}\n </div>\n </div>\n );\n }\n);\n\nexport default SearchBarWithSuggestions;\n","/**\n * Suggestions Context\n *\n * Type definitions and React context for composable suggestions primitives.\n * Consuming components use useSuggestionsContext() for state and actions.\n */\n\nimport React, { createContext, useContext } from 'react';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type {\n SuggestionItem,\n ProductItem,\n RecentSearch,\n TrendingSearch,\n FilteredTab,\n} from '@seekora-ai/ui-sdk-types';\nimport type { NavigableItem } from '../../hooks/useQuerySuggestionsEnhanced';\n\nexport interface SuggestionsContextValue {\n // --- State (from useQuerySuggestionsEnhanced + local) ---\n query: string;\n setQuery: (query: string) => void;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n activeIndex: number;\n setActiveIndex: (index: number) => void;\n\n suggestions: SuggestionItem[];\n recentSearches: RecentSearch[];\n trendingSearches: TrendingSearch[];\n trendingProducts: ProductItem[];\n /** Products prefetched on mount via client.search(\"*\") — available before dropdown opens */\n prefetchedProducts: unknown[];\n filteredTabs: FilteredTab[];\n activeTabId: string;\n setActiveTabId: (id: string) => void;\n\n loading: boolean;\n error: Error | null;\n hasContent: boolean;\n getAllNavigableItems: () => NavigableItem[];\n\n // --- Actions (wire analytics inside provider) ---\n selectSuggestion: (suggestion: SuggestionItem, position: number) => void;\n selectProduct: (product: ProductItem, position: number, section?: string, tabId?: string) => void;\n selectRecentSearch: (search: RecentSearch) => void;\n selectTrendingSearch: (trending: TrendingSearch, position: number) => void;\n setActiveTab: (tab: FilteredTab) => void;\n submitSearch: (query: string, fromSuggestion?: boolean, suggestion?: SuggestionItem) => void;\n clearRecentSearches: () => void;\n close: () => void;\n\n // Keyboard navigation\n navigateNext: () => void;\n navigatePrev: () => void;\n selectActive: () => void;\n}\n\nexport const SuggestionsContext = createContext<SuggestionsContextValue | null>(null);\n\nexport function useSuggestionsContext(): SuggestionsContextValue {\n const context = useContext(SuggestionsContext);\n if (!context) {\n const error = new Error('useSuggestionsContext must be used within a SuggestionsProvider');\n log.error('SuggestionsContext: not available', { error: error.message });\n throw error;\n }\n return context;\n}\n","/**\n * SuggestionsProvider\n *\n * Provides suggestions state (query, suggestions, products, recent, trending, tabs),\n * actions (selectSuggestion, selectProduct, submitSearch, etc.), and keyboard navigation.\n * Uses useQuerySuggestionsEnhanced and useSuggestionsAnalytics; must be inside SearchProvider.\n */\n\nimport React, {\n useState,\n useCallback,\n useMemo,\n useEffect,\n useRef,\n} from 'react';\nimport { useSearchContext } from '../SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../../hooks/useQuerySuggestionsEnhanced';\nimport { useSuggestionsAnalytics } from '../../hooks/useSuggestionsAnalytics';\nimport { SuggestionsContext } from './SuggestionsContext';\nimport type { SuggestionItem, ProductItem, RecentSearch, TrendingSearch, FilteredTab } from '@seekora-ai/ui-sdk-types';\nimport type { NavigableItem } from '../../hooks/useQuerySuggestionsEnhanced';\n\nexport interface SuggestionsProviderProps {\n children: React.ReactNode;\n /** Min query length to fetch suggestions */\n minQueryLength?: number;\n /** Debounce ms for suggestion fetch */\n debounceMs?: number;\n /** Max suggestions */\n maxSuggestions?: number;\n /** Include dropdown recommendations (trending, products, etc.) */\n includeDropdownRecommendations?: boolean;\n /** Filtered tabs config */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Enable analytics (V3) */\n enableAnalytics?: boolean;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Callback when user submits search (e.g. navigate to results page) */\n onSearch?: (query: string) => void;\n /** Callback when user selects a suggestion */\n onSuggestionSelect?: (suggestion: SuggestionItem) => void;\n /** Callback when user clicks a product */\n onProductClick?: (product: ProductItem) => void;\n}\n\nexport function SuggestionsProvider({\n children,\n minQueryLength = 1,\n debounceMs = 200,\n maxSuggestions = 10,\n includeDropdownRecommendations = true,\n filteredTabs,\n enableAnalytics = true,\n analyticsTags,\n onSearch,\n onSuggestionSelect,\n onProductClick,\n}: SuggestionsProviderProps) {\n const { client } = useSearchContext();\n const [query, setQueryState] = useState('');\n const [isOpen, setIsOpenState] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [activeTabId, setActiveTabId] = useState('');\n const [prefetchedProducts, setPrefetchedProducts] = useState<unknown[]>([]);\n\n // Prefetch product results on mount so they're available instantly when dropdown opens\n const prefetchedProductsRef = useRef(false);\n useEffect(() => {\n if (prefetchedProductsRef.current || !client?.search) return;\n prefetchedProductsRef.current = true;\n client.search('*', { per_page: 12, page: 1 } as any)\n .then((res: any) => {\n const data = res?.data;\n const items = data?.results || data?.data || res?.results || res?.hits || [];\n if (Array.isArray(items) && items.length > 0) {\n setPrefetchedProducts(items);\n }\n })\n .catch(() => {});\n }, [client]);\n\n const suggestionsData = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen,\n prefetch: minQueryLength === 0,\n minQueryLength,\n debounceMs,\n maxSuggestions,\n includeDropdownRecommendations,\n filteredTabs,\n includeCategories: true,\n enableRecentSearches: true,\n maxRecentSearches: 8,\n analyticsTags,\n });\n\n const analytics = useSuggestionsAnalytics({\n client,\n enabled: enableAnalytics,\n analyticsTags,\n trackClicks: true,\n trackImpressions: true,\n });\n\n const {\n suggestions,\n recentSearches,\n trendingSearches,\n trendingProducts,\n filteredTabs: filteredTabsData,\n loading,\n error,\n hasContent,\n getAllNavigableItems,\n addRecentSearch,\n clearRecentSearches,\n } = suggestionsData;\n\n // Wrap getAllNavigableItems to include prefetchedProducts when trendingProducts is empty\n const getAllNavigableItemsWithPrefetched = useCallback(() => {\n const items = getAllNavigableItems();\n // If there are already product items in the list, return as-is\n if (items.some(i => i.type === 'product')) return items;\n // Otherwise append prefetchedProducts as navigable product items\n if (prefetchedProducts.length > 0) {\n let idx = items.length;\n prefetchedProducts.forEach(product => {\n items.push({ type: 'product' as const, index: idx++, data: product as ProductItem });\n });\n }\n return items;\n }, [getAllNavigableItems, prefetchedProducts]);\n\n const onSearchRef = useRef(onSearch);\n const onSuggestionSelectRef = useRef(onSuggestionSelect);\n const onProductClickRef = useRef(onProductClick);\n onSearchRef.current = onSearch;\n onSuggestionSelectRef.current = onSuggestionSelect;\n onProductClickRef.current = onProductClick;\n\n const setQuery = useCallback((q: string) => {\n setQueryState(q);\n setActiveIndex(-1);\n }, []);\n\n const close = useCallback(() => {\n analytics.trackDropdownClose(query);\n setIsOpenState(false);\n setActiveIndex(-1);\n }, [analytics, query]);\n\n const setIsOpen = useCallback((open: boolean) => {\n if (open) {\n setIsOpenState(true);\n analytics.trackDropdownOpen(query);\n } else {\n close();\n }\n }, [analytics, query, close]);\n\n const selectSuggestion = useCallback((suggestion: SuggestionItem, position: number) => {\n analytics.trackSuggestionClick({\n suggestion,\n position,\n query,\n totalSuggestions: suggestions.length,\n });\n setQuery(suggestion.query);\n onSuggestionSelectRef.current?.(suggestion);\n analytics.trackSearchSubmit(suggestion.query, true, suggestion);\n addRecentSearch(suggestion.query);\n close();\n onSearchRef.current?.(suggestion.query);\n }, [analytics, query, suggestions.length, addRecentSearch, close]);\n\n const selectProduct = useCallback((product: ProductItem, position: number, section?: string, tabId?: string) => {\n analytics.trackProductClick({\n product,\n position,\n section: (section as any) ?? 'products',\n tabId,\n query,\n });\n close();\n onProductClickRef.current?.(product);\n }, [analytics, query, close]);\n\n const selectRecentSearch = useCallback((search: RecentSearch) => {\n analytics.trackRecentSearchClick(search);\n setQuery(search.query);\n close();\n onSearchRef.current?.(search.query);\n analytics.trackSearchSubmit(search.query, false);\n }, [analytics, close]);\n\n const selectTrendingSearch = useCallback((trending: TrendingSearch, position: number) => {\n analytics.trackTrendingClick(trending, position);\n setQuery(trending.query);\n close();\n onSearchRef.current?.(trending.query);\n analytics.trackSearchSubmit(trending.query, false);\n }, [analytics, close]);\n\n const setActiveTab = useCallback((tab: FilteredTab) => {\n setActiveTabId(tab.id);\n analytics.trackTabSelect(tab, query);\n }, [analytics, query]);\n\n const submitSearch = useCallback((q: string, fromSuggestion?: boolean, suggestion?: SuggestionItem) => {\n const trimmed = q.trim();\n if (!trimmed) return;\n analytics.trackSearchSubmit(trimmed, !!fromSuggestion, suggestion);\n addRecentSearch(trimmed);\n close();\n onSearchRef.current?.(trimmed);\n }, [analytics, addRecentSearch, close]);\n\n const navigateNext = useCallback(() => {\n const items = getAllNavigableItemsWithPrefetched();\n if (items.length === 0) return;\n setActiveIndex((i) => (i < items.length - 1 ? i + 1 : 0));\n }, [getAllNavigableItemsWithPrefetched]);\n\n const navigatePrev = useCallback(() => {\n const items = getAllNavigableItemsWithPrefetched();\n if (items.length === 0) return;\n setActiveIndex((i) => (i <= 0 ? items.length - 1 : i - 1));\n }, [getAllNavigableItemsWithPrefetched]);\n\n const selectActive = useCallback(() => {\n const items = getAllNavigableItemsWithPrefetched();\n if (activeIndex < 0 || activeIndex >= items.length) {\n submitSearch(query);\n return;\n }\n const item = items[activeIndex];\n switch (item.type) {\n case 'suggestion':\n selectSuggestion(item.data as SuggestionItem, item.index);\n break;\n case 'product':\n selectProduct(item.data as ProductItem, item.index, 'products');\n break;\n case 'recent':\n selectRecentSearch(item.data as RecentSearch);\n break;\n case 'trending':\n selectTrendingSearch(item.data as TrendingSearch, item.index);\n break;\n default:\n submitSearch(query);\n }\n }, [activeIndex, getAllNavigableItemsWithPrefetched, query, submitSearch, selectSuggestion, selectProduct, selectRecentSearch, selectTrendingSearch]);\n\n // Impression when open and content changes\n useEffect(() => {\n if (!isOpen || !hasContent || !query) return;\n analytics.trackImpression({\n suggestions,\n products: trendingProducts,\n query,\n timestamp: Date.now(),\n });\n }, [isOpen, hasContent, query, suggestions, trendingProducts, analytics]);\n\n const value = useMemo<import('./SuggestionsContext').SuggestionsContextValue>(() => ({\n query,\n setQuery,\n isOpen,\n setIsOpen,\n activeIndex,\n setActiveIndex,\n suggestions,\n recentSearches,\n trendingSearches,\n trendingProducts,\n prefetchedProducts,\n filteredTabs: filteredTabsData,\n activeTabId,\n setActiveTabId,\n loading,\n error,\n hasContent,\n getAllNavigableItems: getAllNavigableItemsWithPrefetched,\n selectSuggestion,\n selectProduct,\n selectRecentSearch,\n selectTrendingSearch,\n setActiveTab,\n submitSearch,\n clearRecentSearches,\n close,\n navigateNext,\n navigatePrev,\n selectActive,\n }), [\n query,\n setQuery,\n isOpen,\n setIsOpen,\n activeIndex,\n setActiveIndex,\n suggestions,\n recentSearches,\n trendingSearches,\n trendingProducts,\n prefetchedProducts,\n filteredTabsData,\n activeTabId,\n setActiveTabId,\n loading,\n error,\n hasContent,\n getAllNavigableItemsWithPrefetched,\n selectSuggestion,\n selectProduct,\n selectRecentSearch,\n selectTrendingSearch,\n setActiveTab,\n submitSearch,\n clearRecentSearches,\n close,\n navigateNext,\n navigatePrev,\n selectActive,\n ]);\n\n return (\n <SuggestionsContext.Provider value={value}>\n {children}\n </SuggestionsContext.Provider>\n );\n}\n","/**\n * SearchInput – suggestion-scoped search input (primitive)\n *\n * Single input bound to suggestions context: query, setQuery, focus opens dropdown,\n * keydown ArrowUp/Down/Enter/Escape delegates to context. Overridable via className/style.\n */\n\nimport React, { useRef, useCallback } from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { clsx } from 'clsx';\n\nconst SPACING = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n};\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\nexport interface SearchInputProps {\n placeholder?: string;\n autoFocus?: boolean;\n showClearButton?: boolean;\n /** When false, blur does not close the dropdown (e.g. for overlay mode). Default true. */\n closeOnBlur?: boolean;\n /** Optional icon (e.g. magnifying glass) rendered to the left of the input */\n leftIcon?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n inputClassName?: string;\n inputStyle?: React.CSSProperties;\n ariaLabel?: string;\n}\n\nconst defaultStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n};\nconst inputWrapperStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: `${SPACING.sm}px`,\n padding: `${SPACING.sm}px ${SPACING.md}px`,\n border: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n borderRadius: `var(--seekora-border-radius, ${BORDER_RADIUS.md}px)`,\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n transition: `border-color ${TRANSITIONS.fast}, box-shadow ${TRANSITIONS.fast}`,\n boxSizing: 'border-box',\n};\nconst inputStyles: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n padding: `${SPACING.sm}px 0`,\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n fontSize: 'inherit',\n color: 'var(--seekora-text-primary, inherit)',\n fontFamily: 'inherit',\n};\n\nexport function SearchInput({\n placeholder = 'Powered by Seekora',\n autoFocus = false,\n showClearButton = true,\n closeOnBlur = true,\n leftIcon,\n className,\n style,\n inputClassName,\n inputStyle,\n ariaLabel = 'Search',\n}: SearchInputProps) {\n const {\n query,\n setQuery,\n isOpen,\n setIsOpen,\n navigateNext,\n navigatePrev,\n selectActive,\n close,\n } = useSuggestionsContext();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleFocus = useCallback(() => {\n setIsOpen(true);\n }, [setIsOpen]);\n\n const handleBlur = useCallback(() => {\n if (!closeOnBlur) return;\n setTimeout(() => close(), 200);\n }, [close, closeOnBlur]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value);\n }, [setQuery]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n navigateNext();\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n navigatePrev();\n return;\n }\n if (e.key === 'Enter') {\n e.preventDefault();\n selectActive();\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n inputRef.current?.blur();\n return;\n }\n }, [navigateNext, navigatePrev, selectActive, close]);\n\n const handleClear = useCallback(() => {\n setQuery('');\n inputRef.current?.focus();\n }, [setQuery]);\n\n return (\n <div className={clsx('seekora-suggestions-search-input-wrapper', className)} style={{ ...defaultStyles, ...style }}>\n <div\n className=\"seekora-suggestions-input-wrapper\"\n style={inputWrapperStyles}\n >\n {leftIcon ? (\n <span className=\"seekora-suggestions-input-left-icon\" style={{ display: 'flex', flexShrink: 0, color: 'inherit', opacity: 0.5 }}>\n {leftIcon}\n </span>\n ) : null}\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n className={clsx('seekora-suggestions-input', inputClassName)}\n style={{ ...inputStyles, ...inputStyle }}\n />\n {showClearButton && query ? (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"seekora-suggestions-input-clear\"\n aria-label=\"Clear search\"\n style={{\n padding: 8,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: 'inherit', opacity: 0.5,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <ClearIcon />\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden>\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n );\n}\n","/**\n * DropdownPanel – floating panel for suggestions (primitive)\n *\n * Shows when isOpen; handles click-outside and Escape to close. Children = any composition\n * of SuggestionList, ProductGrid, etc. Position and z-index configurable.\n */\n\nimport React, { useRef, useEffect, useCallback } from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { clsx } from 'clsx';\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\n// Z-index scale for consistent layering\nconst Z_INDEX = {\n dropdown: 100,\n modal: 200,\n overlay: 300,\n tooltip: 50,\n};\n\nexport interface DropdownPanelProps {\n children: React.ReactNode;\n position?: 'absolute' | 'fixed';\n /** CSS top offset (e.g. '100%', '4px') */\n top?: string | number;\n left?: string | number;\n right?: string | number;\n width?: string | number;\n maxHeight?: string | number;\n zIndex?: number;\n className?: string;\n style?: React.CSSProperties;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n}\n\nexport function DropdownPanel({\n children,\n position = 'absolute',\n top = '100%',\n left = 0,\n right,\n width = '100%',\n maxHeight = '80vh',\n zIndex = Z_INDEX.dropdown,\n className,\n style,\n closeOnClickOutside = true,\n closeOnEscape = true,\n}: DropdownPanelProps) {\n const { isOpen, close } = useSuggestionsContext();\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!closeOnEscape || !isOpen) return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close();\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [closeOnEscape, isOpen, close]);\n\n const handleClickOutside = useCallback((e: MouseEvent) => {\n if (!closeOnClickOutside || !panelRef.current) return;\n const target = e.target as Node;\n if (!panelRef.current.contains(target)) close();\n }, [closeOnClickOutside, close]);\n\n useEffect(() => {\n if (!isOpen) return;\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, handleClickOutside]);\n\n if (!isOpen) return null;\n\n const panelStyle: React.CSSProperties = {\n position,\n top,\n left,\n right,\n width,\n maxHeight,\n zIndex,\n overflow: 'auto',\n backgroundColor: 'var(--seekora-bg-surface, #fff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: `var(--seekora-border-radius, ${BORDER_RADIUS.md}px)`,\n boxShadow: 'var(--seekora-shadow-lg, 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05))',\n marginTop: 4,\n };\n\n return (\n <div\n ref={panelRef}\n role=\"listbox\"\n className={clsx('seekora-suggestions-dropdown-panel', className)}\n style={{ ...panelStyle, ...style }}\n >\n {children}\n </div>\n );\n}\n","/**\n * Parses suggestion text containing <mark>...</mark> and returns React nodes\n * with the marked segments rendered as styled elements. Safe: inner content\n * is rendered as text, not HTML.\n */\n\nimport React from 'react';\n\n/** Visual highlight styles */\nexport type HighlightStyle = 'background' | 'underline' | 'bold' | 'color-only';\n\nexport interface HighlightMarkupOptions {\n /** Class name for the highlight element. */\n markClassName?: string;\n /** Inline style for the highlight element (merged with computed styles). */\n markStyle?: React.CSSProperties;\n /** Override background color for highlighted segments */\n highlightColor?: string;\n /** Text color for highlighted segments */\n highlightTextColor?: string;\n /** Font weight for highlighted segments */\n highlightFontWeight?: string | number;\n /** Visual highlight style (default: 'background') */\n highlightStyle?: HighlightStyle;\n /** Which HTML element to render for highlights (default: 'mark') */\n highlightTag?: keyof JSX.IntrinsicElements;\n}\n\nconst defaultMarkStyle: React.CSSProperties = {\n backgroundColor: 'var(--seekora-highlight-bg, rgba(251, 191, 36, 0.4))',\n fontWeight: 500,\n borderRadius: '2px',\n padding: '0 2px',\n};\n\n/** Compute styles based on highlight options */\nfunction computeHighlightStyles(options: HighlightMarkupOptions): React.CSSProperties {\n const style = options.highlightStyle || 'background';\n const base: React.CSSProperties = {};\n\n switch (style) {\n case 'background':\n base.backgroundColor = options.highlightColor || 'var(--seekora-highlight-bg, rgba(251, 191, 36, 0.4))';\n base.borderRadius = '2px';\n base.padding = '0 2px';\n break;\n case 'underline':\n base.textDecoration = 'underline';\n base.textDecorationColor = options.highlightColor || 'var(--seekora-highlight-bg, rgba(251, 191, 36, 0.8))';\n base.textUnderlineOffset = '2px';\n break;\n case 'bold':\n // Only bold, no background\n break;\n case 'color-only':\n // Only color, no background\n break;\n }\n\n if (options.highlightTextColor) {\n base.color = options.highlightTextColor;\n } else {\n base.color = 'var(--seekora-highlight-color, inherit)';\n }\n\n base.fontWeight = options.highlightFontWeight || 'var(--seekora-highlight-weight, 500)' as any;\n\n return base;\n}\n\n/**\n * Converts a string like \"lined <mark>blue</mark>\" into React nodes with\n * the marked part rendered as a styled element. When no <mark> tags are\n * present, returns the string as-is.\n */\nexport function parseHighlightMarkup(\n text: string,\n options: HighlightMarkupOptions = {}\n): React.ReactNode {\n if (text == null || typeof text !== 'string') return text;\n const parts = text.split(/(<mark>[\\s\\S]*?<\\/mark>)/g);\n if (parts.length <= 1) return text;\n\n const { markClassName, markStyle, highlightTag } = options;\n const Tag = (highlightTag || 'mark') as any;\n\n // Compute styles: if no custom options provided, use legacy defaults\n const hasCustomOptions = options.highlightColor || options.highlightTextColor\n || options.highlightFontWeight || options.highlightStyle;\n const computedStyle = hasCustomOptions\n ? computeHighlightStyles(options)\n : defaultMarkStyle;\n\n return (\n <>\n {parts.map((part, i) => {\n const m = part.match(/^<mark>([\\s\\S]*)<\\/mark>$/);\n if (m) {\n return (\n <Tag\n key={i}\n className={markClassName}\n style={{ ...computedStyle, ...markStyle }}\n >\n {m[1]}\n </Tag>\n );\n }\n return part;\n })}\n </>\n );\n}\n","/**\n * SuggestionItem – single text suggestion row (primitive)\n *\n * Highlights when isActive; onClick calls context selectSuggestion.\n * When enableHighlightMarkup is true (default), parses <mark>...</mark> in\n * suggestion text and renders as highlighted <mark> elements. Overridable via\n * renderHighlight, className/style.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport type { SuggestionItem as SuggestionItemType } from '@seekora-ai/ui-sdk-types';\nimport { parseHighlightMarkup } from './highlightMarkup';\nimport type { HighlightMarkupOptions } from './highlightMarkup';\n\nexport interface SuggestionItemProps {\n suggestion: SuggestionItemType;\n index: number;\n isActive: boolean;\n onSelect: () => void;\n className?: string;\n style?: React.CSSProperties;\n /**\n * When true (default), text containing <mark>...</mark> is rendered with\n * those segments as highlighted <mark> elements. When false, plain query\n * text is shown with no markup parsing.\n */\n enableHighlightMarkup?: boolean;\n /** Options for the default highlight <mark> styling when enableHighlightMarkup is true. */\n highlightMarkupOptions?: HighlightMarkupOptions;\n /** Custom renderer for suggestion text; overrides default highlight parsing when provided. */\n renderHighlight?: (text: string) => React.ReactNode;\n}\n\nconst defaultItemStyle: React.CSSProperties = {\n padding: '10px 12px',\n cursor: 'pointer',\n listStyle: 'none',\n border: 'none',\n width: '100%',\n textAlign: 'left',\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n color: 'inherit',\n transition: 'background-color 120ms ease',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nexport function SuggestionItem({\n suggestion,\n index,\n isActive,\n onSelect,\n className,\n style,\n enableHighlightMarkup = true,\n highlightMarkupOptions,\n renderHighlight,\n}: SuggestionItemProps) {\n const [isHovered, setIsHovered] = React.useState(false);\n const displayText = suggestion.highlightedQuery ?? suggestion.query;\n const content =\n renderHighlight != null\n ? renderHighlight(displayText)\n : enableHighlightMarkup\n ? parseHighlightMarkup(displayText ?? '', highlightMarkupOptions)\n : (suggestion.query ?? displayText ?? '');\n\n const showHighlight = isActive || isHovered;\n\n return (\n <li\n role=\"option\"\n aria-selected={isActive}\n id={`seekora-suggestion-${index}`}\n className={clsx(\n 'seekora-suggestions-item',\n isActive && 'seekora-suggestions-item--active',\n isHovered && 'seekora-suggestions-item--hover',\n className\n )}\n style={{\n ...defaultItemStyle,\n ...(showHighlight ? { backgroundColor: 'var(--seekora-bg-hover, rgba(0,0,0,0.05))' } : {}),\n ...style,\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onMouseDown={(e) => {\n e.preventDefault();\n onSelect();\n }}\n >\n {content}\n {suggestion.count != null ? (\n <span\n className=\"seekora-suggestions-item-count\"\n style={{ marginLeft: 8, color: 'inherit', opacity: 0.6, fontSize: '0.875em' }}\n >\n {suggestion.count}\n </span>\n ) : null}\n </li>\n );\n}\n","/**\n * SuggestionList – container for text suggestions (primitive)\n *\n * Renders list of SuggestionItem from context; uses activeIndex for highlight.\n * Optional renderItem. When not using renderItem, enableHighlightMarkup and\n * highlightMarkupOptions control parsing of <mark>...</mark> in suggestion text.\n */\n\nimport React from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { SuggestionItem } from './SuggestionItem';\nimport { clsx } from 'clsx';\nimport type { HighlightMarkupOptions } from './highlightMarkup';\n\nexport interface SuggestionListProps {\n maxItems?: number;\n className?: string;\n style?: React.CSSProperties;\n listClassName?: string;\n /**\n * When true (default), suggestion text with <mark>...</mark> is rendered\n * with those segments highlighted. When false, plain text is shown.\n * Only applies when not using custom renderItem.\n */\n enableHighlightMarkup?: boolean;\n /** Options for default highlight <mark> styling. Only applies when not using custom renderItem. */\n highlightMarkupOptions?: HighlightMarkupOptions;\n renderItem?: (\n suggestion: import('@seekora-ai/ui-sdk-types').SuggestionItem,\n index: number,\n isActive: boolean,\n onSelect: () => void\n ) => React.ReactNode;\n}\n\nconst listStyle: React.CSSProperties = {\n margin: 0,\n padding: '4px 0',\n};\n\nexport function SuggestionList({\n maxItems = 10,\n className,\n style,\n listClassName,\n enableHighlightMarkup = true,\n highlightMarkupOptions,\n renderItem,\n}: SuggestionListProps) {\n const {\n suggestions,\n activeIndex,\n loading,\n selectSuggestion,\n getAllNavigableItems,\n } = useSuggestionsContext();\n\n const items = suggestions.slice(0, maxItems);\n const navigableItems = getAllNavigableItems();\n const suggestionStartIndex = navigableItems.findIndex((n) => n.type === 'suggestion');\n const activeIsInSuggestions = suggestionStartIndex >= 0 && activeIndex >= suggestionStartIndex && activeIndex < suggestionStartIndex + items.length;\n\n // When loading with previous results, show previous results (no loading UI)\n if (items.length === 0) return null;\n\n return (\n <div className={clsx('seekora-suggestions-list', className)} style={style}>\n <ul className={clsx('seekora-suggestions-list-ul', listClassName)} style={listStyle} role=\"listbox\">\n {items.map((suggestion, i) => {\n const globalIndex = suggestionStartIndex >= 0 ? suggestionStartIndex + i : i;\n const isActive = activeIsInSuggestions && activeIndex === globalIndex;\n const onSelect = () => selectSuggestion(suggestion, globalIndex);\n\n if (renderItem) {\n return (\n <li key={suggestion.objectID ?? suggestion.query ?? i} role=\"option\">\n {renderItem(suggestion, globalIndex, isActive, onSelect)}\n </li>\n );\n }\n return (\n <SuggestionItem\n key={suggestion.objectID ?? suggestion.query ?? i}\n suggestion={suggestion}\n index={globalIndex}\n isActive={isActive}\n onSelect={onSelect}\n enableHighlightMarkup={enableHighlightMarkup}\n highlightMarkupOptions={highlightMarkupOptions}\n />\n );\n })}\n </ul>\n </div>\n );\n}\n","/**\n * ImageZoom – zoom on hover and click (Amazon-style magnifier + lightbox)\n *\n * Supports three zoom modes:\n * - hover: Magnified view in a separate panel on the right (Amazon style)\n * - lens: Magnifying glass that follows cursor\n * - click: Full-screen lightbox modal\n */\n\nimport React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { clsx } from 'clsx';\n\nexport type ImageZoomMode = 'hover' | 'lens' | 'click' | 'both'; // 'both' = hover + click\n\nexport interface ImageZoomProps {\n src: string;\n alt?: string;\n mode?: ImageZoomMode;\n zoomLevel?: number; // 2 = 200%, 3 = 300%, etc.\n className?: string;\n style?: React.CSSProperties;\n /** Show zoom indicator icon */\n showZoomIndicator?: boolean;\n /** Lens size in pixels (for lens mode) */\n lensSize?: number;\n /** Zoom panel size (for hover mode) */\n zoomPanelSize?: { width: number; height: number };\n /** Multiple images for lightbox carousel */\n images?: string[];\n /** Current image index (for multi-image support) */\n currentIndex?: number;\n}\n\nexport function ImageZoom({\n src,\n alt = '',\n mode = 'both',\n zoomLevel = 2.5,\n className,\n style,\n showZoomIndicator = true,\n lensSize = 150,\n zoomPanelSize = { width: 400, height: 400 },\n images,\n currentIndex = 0,\n}: ImageZoomProps) {\n const [isHovering, setIsHovering] = useState(false);\n const [isLightboxOpen, setIsLightboxOpen] = useState(false);\n const [lightboxIndex, setLightboxIndex] = useState(currentIndex);\n const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 });\n const [imageLoaded, setImageLoaded] = useState(false);\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const allImages = images && images.length > 0 ? images : [src];\n const hasMultipleImages = allImages.length > 1;\n\n // Minimum swipe distance (in px) to trigger navigation\n const minSwipeDistance = 50;\n\n const supportsHover = mode === 'hover' || mode === 'both';\n const supportsClick = mode === 'click' || mode === 'both';\n const supportsLens = mode === 'lens';\n\n const handleMouseMove = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n setCursorPos({ x, y });\n }, []);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovering(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovering(false);\n }, []);\n\n const handleClick = useCallback((e?: React.MouseEvent) => {\n if (supportsClick) {\n e?.stopPropagation();\n setLightboxIndex(currentIndex);\n setIsLightboxOpen(true);\n }\n }, [supportsClick, currentIndex]);\n\n const closeLightbox = useCallback((e?: React.MouseEvent) => {\n e?.stopPropagation();\n setIsLightboxOpen(false);\n }, []);\n\n const goToNext = useCallback(() => {\n setLightboxIndex((i) => (i + 1) % allImages.length);\n }, [allImages.length]);\n\n const goToPrev = useCallback(() => {\n setLightboxIndex((i) => (i - 1 + allImages.length) % allImages.length);\n }, [allImages.length]);\n\n // Touch event handlers for swipe\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n }, []);\n\n const handleTouchEnd = useCallback(() => {\n if (!touchStart || !touchEnd) return;\n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe) {\n goToNext();\n } else if (isRightSwipe) {\n goToPrev();\n }\n }, [touchStart, touchEnd, minSwipeDistance, goToNext, goToPrev]);\n\n // Close lightbox on Escape key, navigate with arrow keys\n useEffect(() => {\n if (!isLightboxOpen) return;\n const handleKeyboard = (e: KeyboardEvent) => {\n if (e.key === 'Escape') closeLightbox();\n if (hasMultipleImages) {\n if (e.key === 'ArrowRight') goToNext();\n if (e.key === 'ArrowLeft') goToPrev();\n }\n };\n window.addEventListener('keydown', handleKeyboard);\n return () => window.removeEventListener('keydown', handleKeyboard);\n }, [isLightboxOpen, closeLightbox, hasMultipleImages, goToNext, goToPrev]);\n\n const containerStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-block',\n cursor: supportsClick ? 'zoom-in' : supportsHover || supportsLens ? 'crosshair' : 'default',\n overflow: 'hidden',\n ...style,\n };\n\n const imageStyle: React.CSSProperties = {\n width: '100%',\n height: '100%',\n objectFit: style?.objectFit ?? 'cover',\n display: 'block',\n };\n\n // Compute the indicator rectangle (what portion of the image the zoom panel shows).\n // indW / containerW = 1 / zoomLevel (the panel shows 1/zoomLevel of the image width).\n // indH is derived from the zoom panel's aspect ratio so it's consistent with what the\n // panel actually renders — no need for the image's natural dimensions.\n const getIndicatorRect = useCallback(() => {\n if (!containerRef.current) return { indL: 0, indT: 0, indW: 0, indH: 0 };\n const rect = containerRef.current.getBoundingClientRect();\n const indW = rect.width / zoomLevel;\n const indH = (zoomPanelSize.height / zoomPanelSize.width) * rect.width / zoomLevel;\n const indL = Math.max(0, Math.min(rect.width - indW, cursorPos.x - indW / 2));\n const indT = Math.max(0, Math.min(rect.height - indH, cursorPos.y - indH / 2));\n return { indL, indT, indW, indH };\n }, [cursorPos, zoomLevel, zoomPanelSize]);\n\n // Calculate zoom panel background position (Amazon-style)\n const getZoomPanelStyle = (): React.CSSProperties => {\n if (!containerRef.current || !imageLoaded) return { display: 'none' };\n const rect = containerRef.current.getBoundingClientRect();\n const { indL, indT, indW, indH } = getIndicatorRect();\n // bgPos is derived from the clamped indicator position, not the raw cursor.\n // At indL=0 → bgPosX=0% (show left), at indL=containerW-indW → bgPosX=100% (show right).\n const bgPosX = (rect.width - indW) > 0 ? (indL / (rect.width - indW)) * 100 : 0;\n const bgPosY = (rect.height - indH) > 0 ? (indT / (rect.height - indH)) * 100 : 0;\n\n // Calculate available space in all directions\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 16;\n const mouseBuffer = 50; // Minimum distance from mouse cursor\n\n // Calculate mouse position in viewport\n const mouseX = rect.left + cursorPos.x;\n const mouseY = rect.top + cursorPos.y;\n\n // Calculate space available in each direction\n const spaceRight = viewportWidth - rect.right - gap;\n const spaceLeft = rect.left - gap;\n\n // Determine optimal horizontal position\n let left: number;\n let top: number = rect.top;\n\n // Try right side first (default Amazon-style)\n if (spaceRight >= zoomPanelSize.width) {\n left = rect.right + gap;\n }\n // Try left side\n else if (spaceLeft >= zoomPanelSize.width) {\n left = rect.left - zoomPanelSize.width - gap;\n }\n // Not enough space on either side - center on the side with more space\n else if (spaceRight > spaceLeft) {\n left = rect.right + gap;\n } else {\n left = Math.max(gap, rect.left - zoomPanelSize.width - gap);\n }\n\n // Adjust vertical position to keep within viewport\n // Try to align with image top by default\n if (rect.top + zoomPanelSize.height > viewportHeight - gap) {\n // Panel would overflow bottom - adjust upward\n top = Math.max(gap, viewportHeight - zoomPanelSize.height - gap);\n }\n\n // Ensure panel doesn't overlap with mouse cursor\n const panelRight = left + zoomPanelSize.width;\n const panelBottom = top + zoomPanelSize.height;\n\n // Check if mouse is inside the panel area\n if (\n mouseX >= left - mouseBuffer &&\n mouseX <= panelRight + mouseBuffer &&\n mouseY >= top - mouseBuffer &&\n mouseY <= panelBottom + mouseBuffer\n ) {\n // Mouse is too close - try to reposition\n // If on right side and there's space on left, flip to left\n if (left > rect.right && spaceLeft >= zoomPanelSize.width) {\n left = rect.left - zoomPanelSize.width - gap;\n }\n // If on left side and there's space on right, flip to right\n else if (left < rect.left && spaceRight >= zoomPanelSize.width) {\n left = rect.right + gap;\n }\n }\n\n // Clamp to viewport boundaries\n left = Math.max(gap, Math.min(left, viewportWidth - zoomPanelSize.width - gap));\n top = Math.max(gap, Math.min(top, viewportHeight - zoomPanelSize.height - gap));\n\n return {\n position: 'fixed',\n top,\n left,\n width: zoomPanelSize.width,\n height: zoomPanelSize.height,\n backgroundImage: `url(${src})`,\n backgroundSize: `${zoomLevel * 100}%`,\n backgroundPosition: `${bgPosX}% ${bgPosY}%`,\n backgroundRepeat: 'no-repeat',\n border: '2px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: 8,\n boxShadow: 'var(--seekora-zoom-panel-shadow, 0 8px 24px rgba(0,0,0,0.2))',\n backgroundColor: 'var(--seekora-zoom-panel-bg, #fff)',\n pointerEvents: 'none',\n zIndex: 9998,\n };\n };\n\n // Calculate lens position and zoom\n const getLensStyle = (): React.CSSProperties => {\n if (!containerRef.current) return { display: 'none' };\n return {\n position: 'absolute',\n width: lensSize,\n height: lensSize,\n left: cursorPos.x - lensSize / 2,\n top: cursorPos.y - lensSize / 2,\n border: 'var(--seekora-lens-border, 2px solid rgba(255,255,255,0.8))',\n borderRadius: '50%',\n boxShadow: 'var(--seekora-lens-shadow, 0 0 0 1px rgba(0,0,0,0.3), inset 0 0 0 1px rgba(0,0,0,0.3))',\n pointerEvents: 'none',\n overflow: 'hidden',\n zIndex: 100,\n };\n };\n\n const getLensImageStyle = (): React.CSSProperties => {\n if (!containerRef.current || !imageRef.current) return {};\n const rect = containerRef.current.getBoundingClientRect();\n\n return {\n position: 'absolute',\n width: rect.width * zoomLevel,\n height: rect.height * zoomLevel,\n left: -(cursorPos.x * zoomLevel - lensSize / 2),\n top: -(cursorPos.y * zoomLevel - lensSize / 2),\n objectFit: 'cover',\n };\n };\n\n return (\n <>\n <div\n ref={containerRef}\n className={clsx('seekora-image-zoom', className)}\n style={containerStyle}\n onMouseMove={handleMouseMove}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n >\n <img\n ref={imageRef}\n src={src}\n alt={alt}\n style={imageStyle}\n onLoad={() => setImageLoaded(true)}\n />\n\n {/* Zoom indicator icon */}\n {showZoomIndicator && supportsClick && (\n <div\n style={{\n position: 'absolute',\n top: 8,\n right: 8,\n width: 32,\n height: 32,\n borderRadius: '50%',\n backgroundColor: 'var(--seekora-zoom-indicator-bg, rgba(0,0,0,0.6))',\n color: 'var(--seekora-zoom-indicator-text, #fff)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '1.25rem',\n pointerEvents: 'none',\n opacity: isHovering ? 1 : 0.7,\n transition: 'opacity 150ms',\n }}\n >\n 🔍\n </div>\n )}\n\n {/* Lens zoom */}\n {supportsLens && isHovering && imageLoaded && (\n <div style={getLensStyle()}>\n <img src={src} alt=\"\" style={getLensImageStyle()} />\n </div>\n )}\n\n {/* Hover area indicator overlay */}\n {supportsHover && isHovering && imageLoaded && containerRef.current && (() => {\n const { indL, indT, indW, indH } = getIndicatorRect();\n return (\n <div\n style={{\n position: 'absolute',\n left: indL,\n top: indT,\n width: indW,\n height: indH,\n border: 'var(--seekora-hover-area-border, 2px solid rgba(0,0,0,0.3))',\n backgroundColor: 'var(--seekora-hover-area-bg, rgba(255,255,255,0.1))',\n pointerEvents: 'none',\n zIndex: 50,\n }}\n />\n );\n })()}\n\n </div>\n\n {/* Hover zoom panel (Amazon style) — rendered in portal to escape ancestor stacking contexts */}\n {supportsHover && isHovering && imageLoaded && typeof document !== 'undefined' && createPortal(\n <div style={getZoomPanelStyle()} />,\n document.body\n )}\n\n {/* Click zoom lightbox — rendered in portal to escape ancestor stacking contexts */}\n {isLightboxOpen && typeof document !== 'undefined' && createPortal(\n <div\n className=\"seekora-image-zoom-lightbox\"\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'var(--seekora-lightbox-bg, rgba(0,0,0,0.95))',\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'zoom-out',\n padding: 20,\n }}\n onClick={closeLightbox}\n onTouchStart={hasMultipleImages ? handleTouchStart : undefined}\n onTouchMove={hasMultipleImages ? handleTouchMove : undefined}\n onTouchEnd={hasMultipleImages ? handleTouchEnd : undefined}\n >\n {/* Close button */}\n <button\n type=\"button\"\n aria-label=\"Close zoom\"\n style={{\n position: 'absolute',\n top: 20,\n right: 20,\n width: 44,\n height: 44,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'var(--seekora-lightbox-btn-bg, rgba(255,255,255,0.2))',\n color: 'var(--seekora-lightbox-btn-text, #fff)',\n fontSize: '1.5rem',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 150ms',\n zIndex: 10001,\n }}\n onClick={(e) => {\n e.stopPropagation();\n closeLightbox();\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--seekora-lightbox-btn-bg-hover, rgba(255,255,255,0.3))';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--seekora-lightbox-btn-bg, rgba(255,255,255,0.2))';\n }}\n >\n ✕\n </button>\n\n {/* Previous/Next arrows for multiple images */}\n {hasMultipleImages && (\n <>\n <button\n type=\"button\"\n aria-label=\"Previous image\"\n style={{\n position: 'absolute',\n left: 20,\n top: '50%',\n transform: 'translateY(-50%)',\n width: 56,\n height: 56,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'var(--seekora-lightbox-btn-bg, rgba(255,255,255,0.2))',\n color: 'var(--seekora-lightbox-btn-text, #fff)',\n fontSize: '2rem',\n fontWeight: 'bold',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 150ms',\n zIndex: 10001,\n }}\n onClick={(e) => {\n e.stopPropagation();\n goToPrev();\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--seekora-lightbox-btn-bg-hover, rgba(255,255,255,0.3))';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--seekora-lightbox-btn-bg, rgba(255,255,255,0.2))';\n }}\n >\n ‹\n </button>\n <button\n type=\"button\"\n aria-label=\"Next image\"\n style={{\n position: 'absolute',\n right: 20,\n top: '50%',\n transform: 'translateY(-50%)',\n width: 56,\n height: 56,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'var(--seekora-lightbox-btn-bg, rgba(255,255,255,0.2))',\n color: 'var(--seekora-lightbox-btn-text, #fff)',\n fontSize: '2rem',\n fontWeight: 'bold',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 150ms',\n zIndex: 10001,\n }}\n onClick={(e) => {\n e.stopPropagation();\n goToNext();\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--seekora-lightbox-btn-bg-hover, rgba(255,255,255,0.3))';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--seekora-lightbox-btn-bg, rgba(255,255,255,0.2))';\n }}\n >\n ›\n </button>\n </>\n )}\n\n {/* Zoomed image */}\n <img\n src={allImages[lightboxIndex]}\n alt={alt}\n style={{\n maxWidth: '90%',\n maxHeight: '90%',\n objectFit: 'contain',\n borderRadius: 4,\n cursor: 'default',\n }}\n onClick={(e) => e.stopPropagation()}\n />\n\n {/* Image counter and thumbnails */}\n {hasMultipleImages && (\n <div\n style={{\n position: 'absolute',\n bottom: 20,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 12,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Thumbnail strip */}\n <div style={{ display: 'flex', gap: 8, overflowX: 'auto', maxWidth: '80vw', padding: '8px 0' }}>\n {allImages.map((img, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setLightboxIndex(i);\n }}\n style={{\n width: 60,\n height: 60,\n padding: 0,\n border: i === lightboxIndex ? 'var(--seekora-lightbox-thumb-border-active, 3px solid #fff)' : 'var(--seekora-lightbox-thumb-border, 2px solid rgba(255,255,255,0.3))',\n borderRadius: 4,\n overflow: 'hidden',\n cursor: 'pointer',\n opacity: i === lightboxIndex ? 1 : 0.6,\n transition: 'all 150ms ease',\n flexShrink: 0,\n background: 'none',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = '1';\n }}\n onMouseLeave={(e) => {\n if (i !== lightboxIndex) e.currentTarget.style.opacity = '0.6';\n }}\n >\n <img src={img} alt=\"\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n </button>\n ))}\n </div>\n {/* Counter */}\n <div\n style={{\n color: 'var(--seekora-lightbox-counter-text, rgba(255,255,255,0.9))',\n fontSize: '0.875rem',\n textAlign: 'center',\n backgroundColor: 'var(--seekora-lightbox-counter-bg, rgba(0,0,0,0.5))',\n padding: '4px 12px',\n borderRadius: 12,\n }}\n >\n {lightboxIndex + 1} / {allImages.length}\n </div>\n </div>\n )}\n\n {/* Instructions */}\n <div\n style={{\n position: 'absolute',\n top: 20,\n left: '50%',\n transform: 'translateX(-50%)',\n color: 'var(--seekora-lightbox-instructions-text, rgba(255,255,255,0.7))',\n fontSize: '0.875rem',\n textAlign: 'center',\n backgroundColor: 'var(--seekora-lightbox-instructions-bg, rgba(0,0,0,0.5))',\n padding: '8px 16px',\n borderRadius: 12,\n }}\n >\n {hasMultipleImages ? 'Use arrow keys or click thumbnails to navigate • ESC to close' : 'Click outside or press ESC to close'}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n","/**\n * ImageDisplay – configurable multi-image display (primitive)\n *\n * Variants: single, carousel, hover, thumbStrip, thumbList. Use in ItemCard,\n * ProductCard, ProductGallery. Overridable via className/style.\n */\n\nimport React, { useState, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { ImageZoom } from './ImageZoom';\nimport type { ImageZoomMode } from './ImageZoom';\nimport { useIsMobile, useTouchTargetSize, useResponsiveGap } from '../../utils/responsive';\n\nexport type ImageDisplayVariant = 'single' | 'carousel' | 'hover' | 'thumbStrip' | 'thumbList';\n\nexport interface ImageDisplayProps {\n images: string[];\n variant?: ImageDisplayVariant;\n alt?: string;\n className?: string;\n style?: React.CSSProperties;\n carouselAutoplay?: boolean;\n carouselIntervalMs?: number;\n /** Enable zoom functionality */\n enableZoom?: boolean;\n /** Zoom mode: 'hover' (Amazon-style), 'lens', 'click' (lightbox), 'both' (hover + click) */\n zoomMode?: ImageZoomMode;\n /** Zoom magnification level (2 = 200%, 3 = 300%) */\n zoomLevel?: number;\n /** Show navigation dots for carousel */\n showDots?: boolean;\n}\n\nconst imgBaseStyle: React.CSSProperties = {\n width: '100%',\n height: 'auto',\n aspectRatio: '1',\n objectFit: 'cover',\n borderRadius: 4,\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n display: 'block',\n overflow: 'hidden',\n};\n\nexport function ImageDisplay({\n images,\n variant = 'single',\n alt = '',\n className,\n style,\n carouselAutoplay = false,\n carouselIntervalMs = 4000,\n enableZoom = false,\n zoomMode = 'both',\n zoomLevel = 2.5,\n showDots = true,\n}: ImageDisplayProps) {\n const [index, setIndex] = useState(0);\n const [hovering, setHovering] = useState(false);\n const safeImages = Array.isArray(images) ? images.filter(Boolean) : [];\n const current = safeImages[index] ?? safeImages[0];\n\n // Responsive values\n const isMobile = useIsMobile();\n const arrowSize = useTouchTargetSize(32); // 44px on mobile, 32px on desktop\n const thumbSize = isMobile ? 56 : 48; // Larger thumbnails on mobile\n const responsiveGap = useResponsiveGap(8);\n\n if (safeImages.length === 0) {\n return <div className={clsx('seekora-img-display', 'seekora-img-placeholder', className)} style={{ ...imgBaseStyle, ...style }} aria-hidden />;\n }\n\n if (variant === 'single') {\n if (enableZoom) {\n return (\n <ImageZoom\n src={safeImages[0]}\n alt={alt}\n mode={zoomMode}\n zoomLevel={zoomLevel}\n images={safeImages}\n currentIndex={0}\n className={clsx('seekora-img-display', 'seekora-img-single', className)}\n style={{ ...imgBaseStyle, ...style }}\n />\n );\n }\n return (\n <img\n src={safeImages[0]}\n alt={alt}\n className={clsx('seekora-img-display', 'seekora-img-single', className)}\n style={{ ...imgBaseStyle, ...style }}\n loading=\"lazy\"\n />\n );\n }\n\n if (variant === 'hover') {\n const showSecond = safeImages.length > 1 && hovering;\n const src = showSecond ? safeImages[1] : safeImages[0];\n const hoverImgStyle = style?.aspectRatio || style?.objectFit ? { ...imgBaseStyle, ...(style.aspectRatio ? { aspectRatio: style.aspectRatio } : {}), ...(style.objectFit ? { objectFit: style.objectFit } : {}) } : imgBaseStyle;\n\n if (enableZoom) {\n return (\n <div\n className={clsx('seekora-img-display', 'seekora-img-hover', className)}\n style={{ position: 'relative', ...style }}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n <ImageZoom\n src={src}\n alt={alt}\n mode={zoomMode}\n zoomLevel={zoomLevel}\n images={safeImages}\n currentIndex={showSecond ? 1 : 0}\n className=\"seekora-img-hover-img\"\n style={hoverImgStyle}\n />\n </div>\n );\n }\n\n return (\n <div\n className={clsx('seekora-img-display', 'seekora-img-hover', className)}\n style={{ position: 'relative', ...style }}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n <img src={src} alt={alt} className=\"seekora-img-hover-img\" style={hoverImgStyle} loading=\"lazy\" />\n </div>\n );\n }\n\n if (variant === 'carousel') {\n const go = (delta: number) => {\n setIndex((i) => {\n const next = i + delta;\n if (next < 0) return safeImages.length - 1;\n if (next >= safeImages.length) return 0;\n return next;\n });\n };\n const carouselImgStyle = style?.aspectRatio || style?.objectFit ? { ...imgBaseStyle, ...(style.aspectRatio ? { aspectRatio: style.aspectRatio } : {}), ...(style.objectFit ? { objectFit: style.objectFit } : {}) } : imgBaseStyle;\n\n const mainImage = enableZoom ? (\n <ImageZoom\n src={current}\n alt={alt}\n mode={zoomMode}\n zoomLevel={zoomLevel}\n images={safeImages}\n currentIndex={index}\n className=\"seekora-img-carousel-main\"\n style={carouselImgStyle}\n />\n ) : (\n <img src={current} alt={alt} className=\"seekora-img-carousel-main\" style={carouselImgStyle} loading=\"lazy\" />\n );\n\n return (\n <div className={clsx('seekora-img-display', 'seekora-img-carousel', className)} style={{ position: 'relative', ...style }}>\n {mainImage}\n {safeImages.length > 1 && (\n <>\n <button\n type=\"button\"\n aria-label=\"Previous\"\n className=\"seekora-img-carousel-prev\"\n style={arrowStyle(true, arrowSize)}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); go(-1); }}\n onClick={(e) => { e.stopPropagation(); e.preventDefault(); }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--seekora-carousel-btn-bg-hover, rgba(255,255,255,1))'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'var(--seekora-carousel-btn-bg, rgba(255,255,255,0.9))'; }}\n >\n ‹\n </button>\n <button\n type=\"button\"\n aria-label=\"Next\"\n className=\"seekora-img-carousel-next\"\n style={arrowStyle(false, arrowSize)}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); go(1); }}\n onClick={(e) => { e.stopPropagation(); e.preventDefault(); }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = 'var(--seekora-carousel-btn-bg-hover, rgba(255,255,255,1))'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'var(--seekora-carousel-btn-bg, rgba(255,255,255,0.9))'; }}\n >\n ›\n </button>\n {/* Navigation dots */}\n {showDots && (\n <div\n className=\"seekora-img-carousel-dots\"\n style={{\n position: 'absolute',\n bottom: isMobile ? 12 : 8,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n gap: isMobile ? 8 : 6,\n padding: isMobile ? '8px 16px' : '6px 12px',\n backgroundColor: 'var(--seekora-carousel-dots-bg, rgba(0,0,0,0.5))',\n borderRadius: 12,\n zIndex: 10,\n }}\n >\n {safeImages.map((_, i) => (\n <button\n key={i}\n type=\"button\"\n aria-label={`Go to image ${i + 1}`}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); }}\n onClick={(e) => { e.stopPropagation(); e.preventDefault(); setIndex(i); }}\n style={{\n width: isMobile ? 10 : 8,\n height: isMobile ? 10 : 8,\n minWidth: isMobile ? 44 : 32, // Ensure touch target\n minHeight: isMobile ? 44 : 32,\n borderRadius: '50%',\n border: 'none',\n padding: 0,\n backgroundColor: i === index ? 'var(--seekora-carousel-dot-active, #fff)' : 'var(--seekora-carousel-dot, rgba(255,255,255,0.5))',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n }}\n />\n ))}\n </div>\n )}\n </>\n )}\n </div>\n );\n }\n\n if (variant === 'thumbStrip' || variant === 'thumbList') {\n const thumbMainStyle = style?.aspectRatio || style?.objectFit ? { ...imgBaseStyle, ...(style.aspectRatio ? { aspectRatio: style.aspectRatio } : {}), ...(style.objectFit ? { objectFit: style.objectFit } : {}) } : imgBaseStyle;\n\n const mainImage = enableZoom ? (\n <ImageZoom\n src={current}\n alt={alt}\n mode={zoomMode}\n zoomLevel={zoomLevel}\n images={safeImages}\n currentIndex={index}\n className=\"seekora-img-thumb-main\"\n style={thumbMainStyle}\n />\n ) : (\n <img src={current} alt={alt} className=\"seekora-img-thumb-main\" style={thumbMainStyle} loading=\"lazy\" />\n );\n\n return (\n <div className={clsx('seekora-img-display', 'seekora-img-thumbstrip', className)} style={{ display: 'flex', flexDirection: 'column', gap: responsiveGap, ...style }}>\n {mainImage}\n <div className=\"seekora-img-thumbs\" style={{ display: 'flex', gap: isMobile ? 6 : 4, overflowX: 'auto', paddingBottom: isMobile ? 6 : 4 }}>\n {safeImages.map((src, i) => (\n <button\n type=\"button\"\n key={i}\n className={clsx('seekora-img-thumb', i === index && 'seekora-img-thumb--active')}\n style={{ flexShrink: 0, width: thumbSize, height: thumbSize, minWidth: thumbSize, minHeight: thumbSize, padding: 0, border: i === index ? '2px solid var(--seekora-primary)' : '1px solid transparent', borderRadius: 4, overflow: 'hidden', cursor: 'pointer', background: 'none' }}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); setIndex(i); }}\n onClick={(e) => { e.stopPropagation(); e.preventDefault(); }}\n >\n <img src={src} alt=\"\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n </button>\n ))}\n </div>\n </div>\n );\n }\n\n return <img src={current} alt={alt} className={clsx('seekora-img-display', className)} style={{ ...imgBaseStyle, ...style }} loading=\"lazy\" />;\n}\n\nfunction arrowStyle(left: boolean, size: number = 32): React.CSSProperties {\n return {\n position: 'absolute',\n top: '50%',\n [left ? 'left' : 'right']: size >= 44 ? 4 : 8, // Less offset on mobile for larger buttons\n transform: 'translateY(-50%)',\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'var(--seekora-carousel-btn-bg, rgba(255, 255, 255, 0.9))',\n color: 'var(--seekora-carousel-btn-text, #111)',\n fontSize: size >= 44 ? '1.5rem' : '1.25rem', // Larger font on mobile\n fontWeight: 'bold',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 8px rgba(0,0,0,0.15)',\n zIndex: 10,\n transition: 'all 150ms ease',\n };\n}\n","/**\n * ActionButtons – card action buttons (add to cart, wishlist, buy now, quick view)\n *\n * Renders a set of action buttons for product cards. Can be positioned absolutely\n * over the image (on hover) or inline below the card content.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\n\nconst SPACING = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n};\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\nconst SHADOWS = {\n sm: '0 1px 2px rgba(0,0,0,0.05)',\n md: '0 2px 4px rgba(0,0,0,0.1)',\n lg: '0 4px 6px rgba(0,0,0,0.1)',\n xl: '0 10px 15px rgba(0,0,0,0.1)',\n};\n\nexport type ActionButtonType = 'addToCart' | 'wishlist' | 'buyNow' | 'quickView' | 'compare';\n\nexport interface ActionButton {\n type: ActionButtonType;\n label?: string;\n icon?: React.ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n disabled?: boolean;\n loading?: boolean;\n}\n\nexport interface ActionButtonsProps {\n buttons: ActionButton[];\n layout?: 'horizontal' | 'vertical' | 'overlay';\n position?: 'top-right' | 'bottom-center' | 'inline';\n showLabels?: boolean;\n size?: 'small' | 'medium' | 'large';\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst DEFAULT_ICONS: Record<ActionButtonType, string> = {\n addToCart: '🛒',\n wishlist: '♡',\n buyNow: '⚡',\n quickView: '👁',\n compare: '⚖',\n};\n\nconst DEFAULT_LABELS: Record<ActionButtonType, string> = {\n addToCart: 'Add to Cart',\n wishlist: 'Wishlist',\n buyNow: 'Buy Now',\n quickView: 'Quick View',\n compare: 'Compare',\n};\n\nconst BUTTON_SIZES = {\n small: { width: 44, height: 44, fontSize: '0.75rem', iconSize: '1rem' },\n medium: { width: 44, height: 44, fontSize: '0.875rem', iconSize: '1.25rem' },\n large: { width: 44, height: 44, fontSize: '1rem', iconSize: '1.5rem' },\n};\n\nexport function ActionButtons({\n buttons,\n layout = 'horizontal',\n position = 'inline',\n showLabels = false,\n size = 'medium',\n className,\n style,\n}: ActionButtonsProps) {\n const sizeConfig = BUTTON_SIZES[size];\n const isOverlay = position !== 'inline';\n\n const containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: layout === 'vertical' ? 'column' : 'row',\n gap: SPACING.sm,\n ...(isOverlay ? {\n position: 'absolute',\n ...(position === 'top-right' ? { top: SPACING.sm, right: SPACING.sm } : {}),\n ...(position === 'bottom-center' ? { bottom: SPACING.sm, left: '50%', transform: 'translateX(-50%)' } : {}),\n } : {}),\n ...style,\n };\n\n const buttonBaseStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n padding: showLabels ? '0 12px' : 0,\n width: showLabels ? 'auto' : sizeConfig.width,\n height: sizeConfig.height,\n fontSize: sizeConfig.fontSize,\n fontWeight: 500,\n border: 'none',\n borderRadius: BORDER_RADIUS.md,\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n color: 'var(--seekora-text, inherit)',\n cursor: 'pointer',\n transition: `all ${TRANSITIONS.fast}`,\n boxShadow: SHADOWS.md,\n };\n\n const handleClick = (btn: ActionButton, e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n if (btn.onClick && !btn.disabled && !btn.loading) {\n btn.onClick(e);\n }\n };\n\n return (\n <div\n className={clsx('seekora-action-buttons', `seekora-action-buttons--${layout}`, className)}\n style={containerStyle}\n >\n {buttons.map((btn, i) => {\n const icon = btn.icon ?? DEFAULT_ICONS[btn.type];\n const label = btn.label ?? DEFAULT_LABELS[btn.type];\n\n return (\n <button\n key={i}\n type=\"button\"\n className={clsx(\n 'seekora-action-button',\n `seekora-action-button--${btn.type}`,\n btn.disabled && 'seekora-action-button--disabled',\n btn.loading && 'seekora-action-button--loading'\n )}\n style={{\n ...buttonBaseStyle,\n opacity: btn.disabled ? 0.5 : 1,\n cursor: btn.disabled ? 'not-allowed' : 'pointer',\n }}\n onClick={(e) => handleClick(btn, e)}\n disabled={btn.disabled}\n aria-label={label}\n title={label}\n >\n {btn.loading ? (\n <span style={{ fontSize: sizeConfig.iconSize }}>⏳</span>\n ) : (\n <>\n <span style={{ fontSize: sizeConfig.iconSize }}>{icon}</span>\n {showLabels && <span>{label}</span>}\n </>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n","/**\n * ItemCard – generic item tile (primitive)\n *\n * Domain-agnostic: works for docs, articles, products, or any hit with id, title,\n * optional description, image, url. Overridable via className/style. Use for\n * search results, section blocks, or any list; for e-commerce products use ProductCard.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ImageDisplay } from '../primitives/ImageDisplay';\nimport { ActionButtons } from '../primitives/ActionButtons';\nimport type { ActionButton } from '../primitives/ActionButtons';\nimport { useIsMobile, useResponsiveGap } from '../../utils/responsive';\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\n/** Generic item shape for ItemCard – compatible with ResultItem and most hit types */\nexport interface GenericItem {\n id: string;\n title: string;\n description?: string;\n image?: string;\n /** Multiple images for carousel/hover/thumbStrip */\n images?: string[];\n url?: string;\n /** Widget/display fields */\n primaryText?: string;\n secondaryText?: string;\n tertiaryText?: string;\n imageUrl?: string;\n [key: string]: unknown;\n}\n\nexport type ImageDisplayVariant = 'single' | 'carousel' | 'hover' | 'thumbStrip' | 'thumbList';\n\nexport interface ItemCardProps {\n item: GenericItem;\n /** Position in list (for analytics) */\n position?: number;\n onSelect?: () => void;\n className?: string;\n style?: React.CSSProperties;\n /** Render as link (anchor) when item.url is set; otherwise button */\n asLink?: boolean;\n /** When multiple images, use ImageDisplay with this variant */\n imageVariant?: ImageDisplayVariant;\n /** Layout direction: vertical (default) or horizontal (image left, content right) */\n layout?: 'vertical' | 'horizontal';\n /** Action buttons (add to cart, wishlist, etc.) */\n actionButtons?: ActionButton[];\n /** Action buttons position */\n actionButtonsPosition?: 'overlay-top-right' | 'overlay-bottom' | 'inline';\n /** Show action button labels */\n showActionLabels?: boolean;\n}\n\nconst cardStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n padding: 8,\n cursor: 'pointer',\n border: 'none',\n borderRadius: `var(--seekora-border-radius, ${BORDER_RADIUS.md}px)`,\n backgroundColor: 'transparent',\n textAlign: 'left',\n fontSize: 'inherit',\n fontFamily: 'inherit',\n transition: `background-color ${TRANSITIONS.fast}, box-shadow ${TRANSITIONS.fast}`,\n};\nconst imgStyle: React.CSSProperties = {\n width: '100%',\n aspectRatio: 'var(--seekora-card-aspect-ratio, 1)',\n objectFit: 'cover',\n borderRadius: BORDER_RADIUS.sm,\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.04))',\n display: 'block',\n overflow: 'hidden',\n};\n\nexport function ItemCard({\n item,\n position,\n onSelect,\n className,\n style,\n asLink = true,\n imageVariant = 'single',\n layout = 'vertical',\n actionButtons,\n actionButtonsPosition = 'overlay-top-right',\n showActionLabels = false,\n}: ItemCardProps) {\n const images = item.images?.length ? item.images : item.image ?? item.imageUrl ? [String(item.image ?? item.imageUrl)] : [];\n const title = item.title ?? item.primaryText ?? '';\n const description = item.description ?? item.secondaryText;\n const href = item.url;\n\n const isMobile = useIsMobile();\n const horizontalGap = useResponsiveGap(12);\n const isHorizontal = layout === 'horizontal';\n const [isHovered, setIsHovered] = React.useState(false);\n\n // Responsive dimensions for horizontal layout\n const imageMinWidth = isMobile ? 60 : 80;\n const imageMaxWidth = isMobile ? 100 : 120;\n const imageFlex = isMobile ? '20%' : '20%';\n const imageHeight = isMobile ? 60 : 80;\n\n // Responsive font sizes\n const titleFontSize = isMobile ? '0.9375rem' : '0.875rem';\n const descriptionFontSize = isMobile ? '0.875rem' : '0.8125rem';\n const textGap = isMobile ? 6 : 4;\n const lineClamp = isMobile ? 3 : 2; // More lines on mobile\n\n // Hover style\n const cardHoverStyle = isHovered\n ? {\n backgroundColor: 'var(--seekora-card-hover-bg, var(--seekora-bg-hover, rgba(0,0,0,0.03)))',\n boxShadow: 'var(--seekora-card-hover-shadow, 0 2px 8px rgba(0, 0, 0, 0.08))',\n }\n : {};\n\n const imageBlock = images.length > 0 ? (\n <div style={{ position: 'relative', overflow: 'hidden', borderRadius: 4, ...(isHorizontal ? { minWidth: imageMinWidth, flexBasis: imageFlex, maxWidth: imageMaxWidth, flexShrink: 0 } : {}) }}>\n <ImageDisplay images={images} variant={imageVariant} alt={String(title)} className=\"seekora-item-card-image\" />\n {/* Overlay action buttons on image */}\n {actionButtons && actionButtons.length > 0 && actionButtonsPosition?.startsWith('overlay') && (\n <ActionButtons\n buttons={actionButtons}\n position={actionButtonsPosition === 'overlay-top-right' ? 'top-right' : 'bottom-center'}\n showLabels={showActionLabels}\n size=\"small\"\n />\n )}\n </div>\n ) : (\n <div\n className=\"seekora-item-card-placeholder\"\n style={{ ...imgStyle, ...(isHorizontal ? { minWidth: imageMinWidth, flexBasis: imageFlex, maxWidth: imageMaxWidth, height: imageHeight, flexShrink: 0 } : {}) }}\n aria-hidden\n />\n );\n\n const textBlock = (\n <div style={isHorizontal ? { display: 'flex', flexDirection: 'column', gap: textGap, flex: 1, minWidth: 0 } : undefined}>\n <span className=\"seekora-item-card-title\" style={{ fontSize: titleFontSize, fontWeight: 500, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis', display: '-webkit-box', WebkitLineClamp: isHorizontal ? 2 : 3, WebkitBoxOrient: 'vertical' }}>\n {String(title)}\n </span>\n {description ? (\n <span className=\"seekora-item-card-description\" style={{ fontSize: descriptionFontSize, color: 'inherit', opacity: 0.6, lineHeight: 1.3, display: '-webkit-box', WebkitLineClamp: lineClamp, WebkitBoxOrient: 'vertical', overflow: 'hidden' }}>\n {String(description)}\n </span>\n ) : null}\n {/* Inline action buttons below text */}\n {actionButtons && actionButtons.length > 0 && actionButtonsPosition === 'inline' && (\n <ActionButtons\n buttons={actionButtons}\n position=\"inline\"\n showLabels={showActionLabels}\n size=\"small\"\n layout=\"horizontal\"\n />\n )}\n </div>\n );\n\n const content = isHorizontal ? (\n <div style={{ display: 'flex', gap: horizontalGap, alignItems: 'flex-start' }}>\n {imageBlock}\n {textBlock}\n </div>\n ) : (\n <>\n {imageBlock}\n {textBlock}\n </>\n );\n\n const commonProps = {\n className: clsx('seekora-item-card', isHorizontal && 'seekora-item-card--horizontal', isHovered && 'seekora-item-card--hover', className),\n style: {\n ...cardStyle,\n ...(isHorizontal ? { flexDirection: 'row' as const } : {}),\n ...cardHoverStyle,\n ...style,\n },\n 'data-position': position,\n onClick: onSelect,\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n onMouseDown: onSelect ? (e: React.MouseEvent) => { e.preventDefault(); onSelect(); } : undefined,\n };\n\n if (asLink && href) {\n return (\n <a href={href} {...commonProps} data-item-id={item.id}>\n {content}\n </a>\n );\n }\n\n return (\n <button type=\"button\" {...commonProps} data-item-id={item.id}>\n {content}\n </button>\n );\n}\n","/**\n * ItemGrid – generic grid of items (primitive)\n *\n * Domain-agnostic: accepts any items[] and onItemClick. Renders ItemCard by default\n * or custom renderItem. Use for search hits, section blocks, docs, articles; for\n * product-only lists use ProductGrid.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ItemCard, type GenericItem } from './ItemCard';\nimport { useResponsiveColumns, useResponsiveGap, useResponsivePadding } from '../../utils/responsive';\n\nconst SPACING = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n};\n\nexport interface ItemGridProps<T = GenericItem> {\n items: T[];\n onItemClick?: (item: T, index: number) => void;\n /** Map item to GenericItem for default ItemCard rendering */\n getItemId?: (item: T) => string;\n getItemTitle?: (item: T) => string;\n getItemImage?: (item: T) => string | undefined;\n getItemDescription?: (item: T) => string | undefined;\n getItemUrl?: (item: T) => string | undefined;\n /** Custom render for each item; overrides default ItemCard */\n renderItem?: (item: T, index: number) => React.ReactNode;\n maxItems?: number;\n columns?: number;\n className?: string;\n style?: React.CSSProperties;\n gridClassName?: string;\n}\n\nconst defaultGridStyle: React.CSSProperties = {\n display: 'grid',\n gap: SPACING.md,\n padding: SPACING.md,\n};\n\nfunction toGenericItem<T>(\n item: T,\n getItemId: (item: T) => string,\n getItemTitle: (item: T) => string,\n getItemImage?: (item: T) => string | undefined,\n getItemDescription?: (item: T) => string | undefined,\n getItemUrl?: (item: T) => string | undefined\n): GenericItem {\n return {\n id: getItemId(item),\n title: getItemTitle(item),\n image: getItemImage?.(item),\n description: getItemDescription?.(item),\n url: getItemUrl?.(item),\n ...(typeof item === 'object' && item !== null ? (item as Record<string, unknown>) : {}),\n };\n}\n\nexport function ItemGrid<T = GenericItem>({\n items,\n onItemClick,\n getItemId = (i: T) => (i as GenericItem).id,\n getItemTitle = (i: T) => (i as GenericItem).title,\n getItemImage = (i: T) => (i as GenericItem).image,\n getItemDescription = (i: T) => (i as GenericItem).description,\n getItemUrl = (i: T) => (i as GenericItem).url,\n renderItem,\n maxItems = 24,\n columns = 4,\n className,\n style,\n gridClassName,\n}: ItemGridProps<T>) {\n // Responsive columns and spacing\n const responsiveColumns = useResponsiveColumns(columns);\n const responsiveGap = useResponsiveGap(SPACING.md);\n const responsivePadding = useResponsivePadding(SPACING.md);\n\n const slice = items.slice(0, maxItems);\n if (slice.length === 0) return null;\n\n const gridStyle: React.CSSProperties = {\n display: 'grid',\n gap: responsiveGap,\n padding: responsivePadding,\n gridTemplateColumns: `repeat(${responsiveColumns}, minmax(0, 1fr))`,\n };\n\n return (\n <div className={clsx('seekora-item-grid', className)} style={style}>\n <div className={clsx('seekora-item-grid-inner', gridClassName)} style={gridStyle}>\n {slice.map((item, i) => {\n if (renderItem) return <React.Fragment key={getItemId(item)}>{renderItem(item, i)}</React.Fragment>;\n const generic = toGenericItem(item, getItemId, getItemTitle, getItemImage, getItemDescription, getItemUrl);\n return (\n <ItemCard\n key={generic.id}\n item={generic}\n position={i}\n onSelect={onItemClick ? () => onItemClick(item, i) : undefined}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * Utility functions for Query Suggestions components\n */\n\nimport { createElement, type CSSProperties, type ReactNode } from 'react';\nimport type {\n SuggestionFieldMapping,\n ProductFieldMapping,\n CategoryFieldMapping,\n BrandFieldMapping,\n DropdownThemeConfig,\n ProductDisplayConfig,\n} from './types';\nimport type { ProductBadge, ProductOption, ProductVariant, PriceRange } from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Field Extraction\n// ============================================================================\n\n/**\n * Get nested value from object using dot notation\n * @example getNestedValue({ a: { b: 'value' } }, 'a.b') => 'value'\n */\nexport const getNestedValue = (obj: any, path: string): any => {\n if (!obj || !path) return undefined;\n return path.split('.').reduce((current, key) => {\n if (current === null || current === undefined) return undefined;\n return current[key];\n }, obj);\n};\n\n/**\n * Extract suggestion fields from raw data\n */\nexport const extractSuggestion = (\n item: any,\n mapping: SuggestionFieldMapping = { query: 'query' }\n) => {\n return {\n query: getNestedValue(item, mapping.query) ?? '',\n count: mapping.count ? getNestedValue(item, mapping.count) : undefined,\n id: mapping.id ? getNestedValue(item, mapping.id) : item?.objectID || item?.id,\n categories: mapping.categories ? getNestedValue(item, mapping.categories) : undefined,\n highlighted: mapping.highlighted ? getNestedValue(item, mapping.highlighted) : undefined,\n _raw: item,\n };\n};\n\n/**\n * Extract product fields from raw data\n */\nexport const extractProduct = (\n item: any,\n mapping: ProductFieldMapping = { id: 'id', title: 'title' }\n) => {\n return {\n id: getNestedValue(item, mapping.id) ?? item?.objectID ?? item?.id,\n title: getNestedValue(item, mapping.title) ?? '',\n image: mapping.image ? getNestedValue(item, mapping.image) : undefined,\n price: mapping.price ? getNestedValue(item, mapping.price) : undefined,\n comparePrice: mapping.comparePrice ? getNestedValue(item, mapping.comparePrice) : undefined,\n url: mapping.url ? getNestedValue(item, mapping.url) : undefined,\n brand: mapping.brand ? getNestedValue(item, mapping.brand) : undefined,\n category: mapping.category ? getNestedValue(item, mapping.category) : undefined,\n rating: mapping.rating ? getNestedValue(item, mapping.rating) : undefined,\n reviewCount: mapping.reviewCount ? getNestedValue(item, mapping.reviewCount) : undefined,\n discount: mapping.discount ? getNestedValue(item, mapping.discount) : undefined,\n inStock: mapping.inStock ? getNestedValue(item, mapping.inStock) : undefined,\n currency: mapping.currency ? getNestedValue(item, mapping.currency) : undefined,\n images: mapping.images ? getNestedValue(item, mapping.images) : item?.images,\n originalPrice: mapping.originalPrice ? getNestedValue(item, mapping.originalPrice) : (item?.original_price ?? item?.compare_at_price),\n available: mapping.available ? getNestedValue(item, mapping.available) : item?.available,\n options: mapping.options ? getNestedValue(item, mapping.options) : item?.options,\n variants: mapping.variants ? getNestedValue(item, mapping.variants) : item?.variants,\n tags: mapping.tags ? getNestedValue(item, mapping.tags) : item?.tags,\n _raw: item,\n };\n};\n\n/**\n * Extract category fields from raw data\n */\nexport const extractCategory = (\n item: any,\n mapping: CategoryFieldMapping = { id: 'id', label: 'label' }\n) => {\n return {\n id: getNestedValue(item, mapping.id) ?? item?.id,\n label: getNestedValue(item, mapping.label) ?? '',\n count: mapping.count ? getNestedValue(item, mapping.count) : undefined,\n icon: mapping.icon ? getNestedValue(item, mapping.icon) : undefined,\n image: mapping.image ? getNestedValue(item, mapping.image) : undefined,\n _raw: item,\n };\n};\n\n/**\n * Extract brand fields from raw data\n */\nexport const extractBrand = (\n item: any,\n mapping: BrandFieldMapping = { name: 'name' }\n) => {\n return {\n id: mapping.id ? getNestedValue(item, mapping.id) : item?.id,\n name: getNestedValue(item, mapping.name) ?? '',\n logo: mapping.logo ? getNestedValue(item, mapping.logo) : undefined,\n count: mapping.count ? getNestedValue(item, mapping.count) : undefined,\n _raw: item,\n };\n};\n\n// ============================================================================\n// Formatting\n// ============================================================================\n\n/**\n * Format price with currency\n */\nexport const formatPrice = (\n value: number | string | undefined,\n config: Pick<ProductDisplayConfig, 'currency' | 'currencyPosition' | 'priceDecimals'> = {}\n): string => {\n if (value === undefined || value === null) return '';\n \n const { \n currency = '$', \n currencyPosition = 'before', \n priceDecimals = 2 \n } = config;\n \n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return String(value);\n \n const formatted = num.toLocaleString(undefined, {\n minimumFractionDigits: priceDecimals,\n maximumFractionDigits: priceDecimals,\n });\n \n return currencyPosition === 'before' \n ? `${currency}${formatted}` \n : `${formatted}${currency}`;\n};\n\n/**\n * Format count with abbreviation (1.2K, 3.4M, etc.)\n */\nexport const formatCount = (count: number | undefined): string => {\n if (count === undefined || count === null) return '';\n if (count < 1000) return count.toString();\n if (count < 1000000) return `${(count / 1000).toFixed(1)}K`;\n return `${(count / 1000000).toFixed(1)}M`;\n};\n\n/**\n * Calculate discount percentage\n */\nexport const calculateDiscount = (\n price: number | undefined,\n comparePrice: number | undefined\n): number | undefined => {\n if (!price || !comparePrice || comparePrice <= price) return undefined;\n return Math.round(((comparePrice - price) / comparePrice) * 100);\n};\n\n// ============================================================================\n// Text Processing\n// ============================================================================\n\n/**\n * Escape HTML special characters\n */\nexport const escapeHtml = (text: string): string => {\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n };\n return text.replace(/[&<>\"']/g, (char) => map[char]);\n};\n\n/**\n * Highlight matching text in a string\n */\nexport const highlightText = (\n text: string,\n query: string,\n options: {\n tag?: string;\n className?: string;\n style?: CSSProperties;\n } = {}\n): string => {\n if (!query || !text) return escapeHtml(text);\n \n const { tag = 'mark', className = '', style } = options;\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, 'gi');\n \n const styleAttr = style \n ? ` style=\"${Object.entries(style).map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`).join(';')}\"` \n : '';\n const classAttr = className ? ` class=\"${className}\"` : '';\n \n return escapeHtml(text).replace(\n new RegExp(`(${escapeHtml(escapedQuery)})`, 'gi'),\n `<${tag}${classAttr}${styleAttr}>$1</${tag}>`\n );\n};\n\n/**\n * Safe React-based highlight rendering (no dangerouslySetInnerHTML).\n * Returns React nodes with matched text wrapped in the specified tag element.\n */\nexport const highlightTextReact = (\n text: string,\n query: string,\n options: {\n tag?: string;\n className?: string;\n style?: CSSProperties;\n } = {}\n): ReactNode => {\n if (!query || !text) return text;\n\n const { tag = 'mark', className, style } = options;\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, 'gi');\n const parts = text.split(regex);\n\n if (parts.length <= 1) return text;\n\n const defaultHighlightStyle: CSSProperties = {\n backgroundColor: 'var(--seekora-highlight-bg, rgba(251, 191, 36, 0.4))',\n fontWeight: 500,\n borderRadius: '2px',\n padding: '0 2px',\n ...style,\n };\n\n return parts.map((part, i) => {\n if (regex.test(part)) {\n // Reset lastIndex after test\n regex.lastIndex = 0;\n return createElement(tag, {\n key: i,\n className,\n style: defaultHighlightStyle,\n }, part);\n }\n // Reset lastIndex after test\n regex.lastIndex = 0;\n return part;\n });\n};\n\n/**\n * Truncate text to specified length\n */\nexport const truncateText = (\n text: string,\n maxLength: number,\n ellipsis: string = '...'\n): string => {\n if (!text || text.length <= maxLength) return text;\n return text.slice(0, maxLength - ellipsis.length) + ellipsis;\n};\n\n// ============================================================================\n// Variant Utilities\n// ============================================================================\n\n/**\n * Extract badges from product tags (Shopify convention: \"badge:new\", \"badge:limited\")\n * and auto-generate sale/soldOut badges from product data.\n */\nexport const extractBadges = (\n tags?: string[],\n product?: { price?: number; original_price?: number; compare_at_price?: number; available?: boolean }\n): ProductBadge[] => {\n const badges: ProductBadge[] = [];\n\n // Extract from tags (Shopify convention)\n if (tags) {\n for (const tag of tags) {\n const lower = tag.toLowerCase().trim();\n if (lower.startsWith('badge:') || lower.startsWith('badge: ')) {\n const text = tag.slice(tag.indexOf(':') + 1).trim();\n if (text) {\n badges.push({ text, type: 'custom' });\n }\n } else if (lower === 'new' || lower === 'new arrival') {\n badges.push({ text: 'New', type: 'new' });\n } else if (lower === 'limited' || lower === 'limited edition') {\n badges.push({ text: 'Limited', type: 'limited' });\n }\n }\n }\n\n // Auto-generate sale badge\n if (product) {\n const comparePrice = product.original_price ?? product.compare_at_price;\n if (comparePrice && product.price && comparePrice > product.price) {\n const discount = Math.round(((comparePrice - product.price) / comparePrice) * 100);\n badges.push({ text: `${discount}% Off`, type: 'sale' });\n }\n }\n\n // Auto-generate sold out badge\n if (product && product.available === false) {\n badges.push({ text: 'Sold Out', type: 'soldOut' });\n }\n\n return badges;\n};\n\n/**\n * Compute min/max price from variants. Returns null if all variants have the same price.\n */\nexport const getPriceRange = (variants?: ProductVariant[]): PriceRange | null => {\n if (!variants || variants.length === 0) return null;\n\n const prices = variants\n .map((v) => v.price)\n .filter((p): p is number => p != null && !isNaN(p));\n\n if (prices.length === 0) return null;\n\n const min = Math.min(...prices);\n const max = Math.max(...prices);\n\n if (min === max) return null;\n\n return { min, max };\n};\n\n/**\n * Format a price range like \"$54.00 - $72.00\"\n */\nexport const formatPriceRange = (\n range: PriceRange,\n config: Pick<ProductDisplayConfig, 'currency' | 'currencyPosition' | 'priceDecimals'> = {}\n): string => {\n return `${formatPrice(range.min, config)} - ${formatPrice(range.max, config)}`;\n};\n\n/**\n * Given current selections, return which values for an option are still available\n * based on variant availability.\n */\nexport const getAvailableValuesForOption = (\n optionName: string,\n options: ProductOption[],\n variants: ProductVariant[],\n selections: Record<string, string>\n): { value: string; available: boolean }[] => {\n const option = options.find((o) => o.name === optionName);\n if (!option) return [];\n\n const optionIndex = options.indexOf(option);\n const optionKey = `option${optionIndex + 1}` as 'option1' | 'option2' | 'option3';\n\n return option.values.map((value) => {\n // Check if any variant with this value and current other selections is available\n const available = variants.some((variant) => {\n if (variant[optionKey] !== value) return false;\n if (variant.available === false) return false;\n\n // Check other selections match\n for (const [selName, selValue] of Object.entries(selections)) {\n if (selName === optionName) continue;\n const selOption = options.find((o) => o.name === selName);\n if (!selOption) continue;\n const selIdx = options.indexOf(selOption);\n const selKey = `option${selIdx + 1}` as 'option1' | 'option2' | 'option3';\n if (variant[selKey] !== selValue) return false;\n }\n\n return true;\n });\n\n return { value, available };\n });\n};\n\n/**\n * Find the exact variant matching all selected options.\n */\nexport const findVariantBySelections = (\n options: ProductOption[],\n variants: ProductVariant[],\n selections: Record<string, string>\n): ProductVariant | null => {\n return variants.find((variant) => {\n return options.every((option, idx) => {\n const key = `option${idx + 1}` as 'option1' | 'option2' | 'option3';\n const selected = selections[option.name];\n if (!selected) return true; // not yet selected\n return variant[key] === selected;\n });\n }) ?? null;\n};\n\n// ============================================================================\n// Theme & Styling\n// ============================================================================\n\n/**\n * Generate CSS variables from theme config\n */\nexport const generateCSSVariables = (\n theme: DropdownThemeConfig,\n prefix: string = 'seekora'\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n \n if (theme.primaryColor) vars[`--${prefix}-primary`] = theme.primaryColor;\n if (theme.backgroundColor) vars[`--${prefix}-bg-surface`] = theme.backgroundColor;\n if (theme.surfaceColor) vars[`--${prefix}-bg-secondary`] = theme.surfaceColor;\n if (theme.textColor) vars[`--${prefix}-text-primary`] = theme.textColor;\n if (theme.textSecondaryColor) vars[`--${prefix}-text-secondary`] = theme.textSecondaryColor;\n if (theme.borderColor) vars[`--${prefix}-border-color`] = theme.borderColor;\n if (theme.hoverColor) vars[`--${prefix}-bg-hover`] = theme.hoverColor;\n if (theme.highlightColor) vars[`--${prefix}-highlight-bg`] = theme.highlightColor;\n if (theme.successColor) vars[`--${prefix}-success`] = theme.successColor;\n if (theme.errorColor) vars[`--${prefix}-error`] = theme.errorColor;\n if (theme.fontFamily) vars[`--${prefix}-font-family`] = theme.fontFamily;\n if (theme.fontSize) vars[`--${prefix}-font-size`] = typeof theme.fontSize === 'number' ? `${theme.fontSize}px` : theme.fontSize;\n if (theme.borderRadius) vars[`--${prefix}-border-radius`] = typeof theme.borderRadius === 'number' ? `${theme.borderRadius}px` : theme.borderRadius;\n if (theme.boxShadow) vars[`--${prefix}-box-shadow`] = theme.boxShadow;\n \n // Merge custom CSS variables\n if (theme.cssVariables) {\n Object.entries(theme.cssVariables).forEach(([key, value]) => {\n vars[key.startsWith('--') ? key : `--${key}`] = value;\n });\n }\n \n return vars;\n};\n\n/**\n * Merge class names, filtering out falsy values\n */\nexport const cx = (...classes: (string | undefined | null | false)[]): string => {\n return classes.filter(Boolean).join(' ');\n};\n\n/**\n * Merge styles, filtering out undefined values\n */\nexport const mergeStyles = (...styles: (CSSProperties | undefined)[]): CSSProperties => {\n return Object.assign({}, ...styles.filter(Boolean));\n};\n\n// ============================================================================\n// Animation\n// ============================================================================\n\ninterface AnimationState {\n opacity: number;\n transform?: string;\n}\n\ninterface AnimationConfig {\n initial: AnimationState;\n animate: AnimationState;\n exit: AnimationState;\n}\n\nexport const animations: Record<'fade' | 'slide' | 'scale' | 'spring', AnimationConfig> = {\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n slide: {\n initial: { opacity: 0, transform: 'translateY(-10px)' },\n animate: { opacity: 1, transform: 'translateY(0)' },\n exit: { opacity: 0, transform: 'translateY(-10px)' },\n },\n scale: {\n initial: { opacity: 0, transform: 'scale(0.95)' },\n animate: { opacity: 1, transform: 'scale(1)' },\n exit: { opacity: 0, transform: 'scale(0.95)' },\n },\n spring: {\n initial: { opacity: 0, transform: 'translateY(-20px) scale(0.9)' },\n animate: { opacity: 1, transform: 'translateY(0) scale(1)' },\n exit: { opacity: 0, transform: 'translateY(-10px) scale(0.95)' },\n },\n};\n\n/**\n * Get animation keyframes CSS\n */\nexport const getAnimationCSS = (\n type: 'fade' | 'slide' | 'scale' | 'spring' | 'none',\n duration: number = 200\n): string => {\n if (type === 'none') return '';\n \n const anim = animations[type];\n return `\n @keyframes seekoraDropdownEnter {\n from {\n opacity: ${anim.initial.opacity};\n transform: ${anim.initial.transform || 'none'};\n }\n to {\n opacity: ${anim.animate.opacity};\n transform: ${anim.animate.transform || 'none'};\n }\n }\n @keyframes seekoraDropdownExit {\n from {\n opacity: ${anim.animate.opacity};\n transform: ${anim.animate.transform || 'none'};\n }\n to {\n opacity: ${anim.exit.opacity};\n transform: ${anim.exit.transform || 'none'};\n }\n }\n `;\n};\n\n// ============================================================================\n// Keyboard Navigation\n// ============================================================================\n\n/**\n * Create keyboard handler for dropdown navigation\n */\nexport const createKeyboardHandler = (handlers: {\n onUp?: () => void;\n onDown?: () => void;\n onLeft?: () => void;\n onRight?: () => void;\n onEnter?: () => void;\n onEscape?: () => void;\n onTab?: (shift: boolean) => void;\n}) => {\n return (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n handlers.onUp?.();\n break;\n case 'ArrowDown':\n event.preventDefault();\n handlers.onDown?.();\n break;\n case 'ArrowLeft':\n handlers.onLeft?.();\n break;\n case 'ArrowRight':\n handlers.onRight?.();\n break;\n case 'Enter':\n event.preventDefault();\n handlers.onEnter?.();\n break;\n case 'Escape':\n event.preventDefault();\n handlers.onEscape?.();\n break;\n case 'Tab':\n handlers.onTab?.(event.shiftKey);\n break;\n }\n };\n};\n\n// ============================================================================\n// Local Storage (Recent Searches)\n// ============================================================================\n\nconst RECENT_SEARCHES_KEY = 'seekora_recent_searches';\nconst MAX_RECENT_SEARCHES = 10;\n\nexport const getRecentSearches = (storeId?: string): string[] => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n const stored = localStorage.getItem(key);\n return stored ? JSON.parse(stored) : [];\n } catch {\n return [];\n }\n};\n\nexport const addRecentSearch = (query: string, storeId?: string): string[] => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n let searches = getRecentSearches(storeId);\n searches = searches.filter(s => s !== query);\n searches.unshift(query);\n searches = searches.slice(0, MAX_RECENT_SEARCHES);\n localStorage.setItem(key, JSON.stringify(searches));\n return searches;\n } catch {\n return [];\n }\n};\n\nexport const removeRecentSearch = (query: string, storeId?: string): string[] => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n let searches = getRecentSearches(storeId);\n searches = searches.filter(s => s !== query);\n localStorage.setItem(key, JSON.stringify(searches));\n return searches;\n } catch {\n return [];\n }\n};\n\nexport const clearRecentSearches = (storeId?: string): void => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n localStorage.removeItem(key);\n } catch {\n // Silent fail\n }\n};\n\n// ============================================================================\n// Misc Utilities\n// ============================================================================\n\n/**\n * Debounce function\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) & { cancel: () => void } => {\n let timeoutId: NodeJS.Timeout | null = null;\n \n const debounced = (...args: Parameters<T>) => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n \n debounced.cancel = () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n \n return debounced;\n};\n\n/**\n * Generate unique ID\n */\nexport const generateId = (prefix: string = 'seekora'): string => {\n return `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Check if element is in viewport\n */\nexport const isInViewport = (element: HTMLElement): boolean => {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n};\n\n/**\n * Scroll element into view if needed\n */\nexport const scrollIntoViewIfNeeded = (element: HTMLElement, container: HTMLElement): void => {\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n \n if (elementRect.top < containerRect.top) {\n element.scrollIntoView({ block: 'start', behavior: 'smooth' });\n } else if (elementRect.bottom > containerRect.bottom) {\n element.scrollIntoView({ block: 'end', behavior: 'smooth' });\n }\n};\n\n// ============================================================================\n// Caching Utilities\n// ============================================================================\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\n/**\n * Simple in-memory cache with TTL support for suggestions\n * Reduces API calls by caching results for quick repeated queries\n */\nclass SuggestionsCache {\n private cache = new Map<string, CacheEntry<any>>();\n private maxSize: number;\n private defaultTtl: number;\n\n constructor(options: { maxSize?: number; defaultTtlMs?: number } = {}) {\n this.maxSize = options.maxSize ?? 100;\n this.defaultTtl = options.defaultTtlMs ?? 30000; // 30 seconds default\n }\n\n /**\n * Generate a cache key from query and options\n */\n generateKey(query: string, options?: Record<string, any>): string {\n const normalizedQuery = query.toLowerCase().trim();\n if (!options) return normalizedQuery;\n \n // Create a stable key from options\n const optionsKey = Object.keys(options)\n .sort()\n .filter(k => options[k] !== undefined && options[k] !== null)\n .map(k => `${k}:${JSON.stringify(options[k])}`)\n .join('|');\n \n return optionsKey ? `${normalizedQuery}::${optionsKey}` : normalizedQuery;\n }\n\n /**\n * Get cached data if valid (not expired)\n */\n get<T>(key: string): T | null {\n const entry = this.cache.get(key);\n if (!entry) return null;\n\n const now = Date.now();\n if (now - entry.timestamp > entry.ttl) {\n // Expired - remove and return null\n this.cache.delete(key);\n return null;\n }\n\n return entry.data as T;\n }\n\n /**\n * Store data in cache\n */\n set<T>(key: string, data: T, ttlMs?: number): void {\n // Evict oldest entries if at max size\n if (this.cache.size >= this.maxSize) {\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey) this.cache.delete(oldestKey);\n }\n\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n ttl: ttlMs ?? this.defaultTtl,\n });\n }\n\n /**\n * Check if key exists and is valid\n */\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n\n /**\n * Clear all cached entries\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Clear expired entries\n */\n cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.cache.entries()) {\n if (now - entry.timestamp > entry.ttl) {\n this.cache.delete(key);\n }\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { size: number; maxSize: number } {\n return {\n size: this.cache.size,\n maxSize: this.maxSize,\n };\n }\n}\n\n// Global cache instance for suggestions (shared across components)\nlet globalSuggestionsCache: SuggestionsCache | null = null;\n\n/**\n * Get the global suggestions cache instance\n */\nexport const getSuggestionsCache = (options?: { maxSize?: number; defaultTtlMs?: number }): SuggestionsCache => {\n if (!globalSuggestionsCache) {\n globalSuggestionsCache = new SuggestionsCache(options);\n }\n return globalSuggestionsCache;\n};\n\n/**\n * Create a new cache instance (for isolated caching per component)\n */\nexport const createSuggestionsCache = (options?: { maxSize?: number; defaultTtlMs?: number }): SuggestionsCache => {\n return new SuggestionsCache(options);\n};\n\n/**\n * Clear the global cache\n */\nexport const clearSuggestionsCache = (): void => {\n globalSuggestionsCache?.clear();\n};\n\nexport { SuggestionsCache };\n","/**\n * PriceDisplay – reusable price display primitive\n *\n * Handles single price, compare price with strikethrough, discount percentage,\n * and price range display.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport type { PriceRange } from '@seekora-ai/ui-sdk-types';\n\nexport interface PriceDisplayProps {\n price?: number;\n comparePrice?: number;\n priceRange?: PriceRange | null;\n currency?: string;\n currencyPosition?: 'before' | 'after';\n priceDecimals?: number;\n showDiscount?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst formatNum = (\n value: number,\n currency: string,\n position: 'before' | 'after',\n decimals: number\n): string => {\n const formatted = value.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n return position === 'before' ? `${currency}${formatted}` : `${formatted}${currency}`;\n};\n\nexport function PriceDisplay({\n price,\n comparePrice,\n priceRange,\n currency = '$',\n currencyPosition = 'before',\n priceDecimals = 2,\n showDiscount = true,\n className,\n style,\n}: PriceDisplayProps) {\n const fmt = (v: number) => formatNum(v, currency, currencyPosition, priceDecimals);\n\n // Price range mode\n if (priceRange) {\n return (\n <span className={clsx('seekora-price-display', 'seekora-price-range', className)} style={style}>\n {fmt(priceRange.min)} – {fmt(priceRange.max)}\n </span>\n );\n }\n\n if (price == null) return null;\n\n const hasCompare = comparePrice != null && comparePrice > price;\n const discount = hasCompare ? Math.round(((comparePrice! - price) / comparePrice!) * 100) : 0;\n\n return (\n <span className={clsx('seekora-price-display', className)} style={{ display: 'inline-flex', alignItems: 'center', gap: 6, flexWrap: 'wrap', ...style }}>\n <span className=\"seekora-price-current\" style={{ fontWeight: 600 }}>\n {fmt(price)}\n </span>\n {hasCompare && (\n <span\n className=\"seekora-price-compare\"\n style={{\n textDecoration: 'line-through',\n color: 'var(--seekora-text-secondary, #6b7280)',\n fontSize: '0.875em',\n }}\n >\n {fmt(comparePrice!)}\n </span>\n )}\n {hasCompare && showDiscount && discount > 0 && (\n <span\n className=\"seekora-price-discount\"\n style={{\n color: 'var(--seekora-error, #ef4444)',\n fontSize: '0.8125em',\n fontWeight: 600,\n }}\n >\n -{discount}%\n </span>\n )}\n </span>\n );\n}\n","/**\n * BadgeList – renders product badges (sale, new, sold out, custom)\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport type { ProductBadge } from '@seekora-ai/ui-sdk-types';\n\nconst SPACING = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\n// Z-index scale for consistent layering\nconst Z_INDEX = {\n dropdown: 100,\n modal: 200,\n overlay: 300,\n tooltip: 50,\n};\n\nexport interface BadgeListProps {\n badges: ProductBadge[];\n maxBadges?: number;\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'inline';\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst positionStyles: Record<string, React.CSSProperties> = {\n 'top-left': { position: 'absolute', top: SPACING.sm, left: SPACING.sm },\n 'top-right': { position: 'absolute', top: SPACING.sm, right: SPACING.sm },\n 'bottom-left': { position: 'absolute', bottom: SPACING.sm, left: SPACING.sm },\n 'bottom-right': { position: 'absolute', bottom: SPACING.sm, right: SPACING.sm },\n inline: {},\n};\n\nconst typeColors: Record<string, { bg: string; text: string }> = {\n sale: { bg: 'var(--seekora-badge-sale-bg, #ef4444)', text: 'var(--seekora-badge-sale-text, #fff)' },\n new: { bg: 'var(--seekora-badge-new-bg, #3b82f6)', text: 'var(--seekora-badge-new-text, #fff)' },\n soldOut: { bg: 'var(--seekora-badge-soldout-bg, #6b7280)', text: 'var(--seekora-badge-soldout-text, #fff)' },\n limited: { bg: 'var(--seekora-badge-limited-bg, #f59e0b)', text: 'var(--seekora-badge-limited-text, #fff)' },\n custom: { bg: 'var(--seekora-badge-custom-bg, #111827)', text: 'var(--seekora-badge-custom-text, #fff)' },\n};\n\nexport function BadgeList({\n badges,\n maxBadges,\n position = 'top-left',\n className,\n style,\n}: BadgeListProps) {\n if (!badges || badges.length === 0) return null;\n\n const visible = maxBadges ? badges.slice(0, maxBadges) : badges;\n\n return (\n <div\n className={clsx('seekora-badge-list', className)}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: SPACING.xs,\n zIndex: 2,\n ...positionStyles[position],\n ...style,\n }}\n >\n {visible.map((badge, i) => {\n const colors = typeColors[badge.type ?? 'custom'];\n return (\n <span\n key={`${badge.text}-${i}`}\n className={clsx(\n 'seekora-badge',\n badge.type && `seekora-badge--${badge.type === 'soldOut' ? 'sold-out' : badge.type}`\n )}\n style={{\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: BORDER_RADIUS.sm,\n fontSize: '0.6875rem',\n fontWeight: 600,\n lineHeight: 1.2,\n backgroundColor: badge.color ?? colors.bg,\n color: badge.textColor ?? colors.text,\n whiteSpace: 'nowrap',\n }}\n >\n {badge.text}\n </span>\n );\n })}\n </div>\n );\n}\n","/**\n * RatingDisplay – star rating display with review count\n *\n * Supports multiple variants: stars-only, compact, full, inline.\n * Can be read-only (display) or interactive (for reviews).\n */\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\n\nexport type RatingVariant = 'stars-only' | 'compact' | 'full' | 'inline';\nexport type RatingSize = 'small' | 'medium' | 'large';\n\nexport interface RatingDisplayProps {\n /** Rating value (0-5) */\n rating: number;\n /** Total number of reviews */\n reviewCount?: number;\n /** Display variant */\n variant?: RatingVariant;\n /** Size of stars */\n size?: RatingSize;\n /** Maximum rating (default: 5) */\n maxRating?: number;\n /** Show decimal rating number */\n showNumeric?: boolean;\n /** Show half stars */\n showHalfStars?: boolean;\n /** Interactive mode (for leaving reviews) */\n interactive?: boolean;\n /** Callback when rating is clicked (interactive mode) */\n onRatingChange?: (rating: number) => void;\n /** Custom star color */\n starColor?: string;\n /** Custom empty star color */\n emptyStarColor?: string;\n /** Custom text color */\n textColor?: string;\n /** Show review count in parentheses */\n showReviewCount?: boolean;\n /** Custom review count format */\n reviewCountFormat?: (count: number) => string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst sizeMap: Record<RatingSize, number> = {\n small: 14,\n medium: 18,\n large: 24,\n};\n\nconst fontSizeMap: Record<RatingSize, string> = {\n small: '0.75rem',\n medium: '0.875rem',\n large: '1rem',\n};\n\nfunction StarIcon({\n filled,\n half,\n size,\n color,\n emptyColor,\n interactive,\n onHover,\n onClick,\n}: {\n filled: boolean;\n half: boolean;\n size: number;\n color: string;\n emptyColor: string;\n interactive?: boolean;\n onHover?: () => void;\n onClick?: () => void;\n}) {\n if (half) {\n return (\n <span\n className={clsx('seekora-rating-star', 'seekora-rating-star--half', interactive && 'seekora-rating-star--interactive')}\n style={{\n position: 'relative',\n display: 'inline-block',\n width: size,\n height: size,\n cursor: interactive ? 'pointer' : 'default',\n }}\n onMouseEnter={onHover}\n onClick={onClick}\n >\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ position: 'absolute', top: 0, left: 0 }}\n >\n <defs>\n <linearGradient id=\"half-fill\">\n <stop offset=\"50%\" stopColor={color} />\n <stop offset=\"50%\" stopColor={emptyColor} />\n </linearGradient>\n </defs>\n <path\n d=\"M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z\"\n fill=\"url(#half-fill)\"\n stroke={color}\n strokeWidth=\"1\"\n />\n </svg>\n </span>\n );\n }\n\n return (\n <span\n className={clsx(\n 'seekora-rating-star',\n filled ? 'seekora-rating-star--filled' : 'seekora-rating-star--empty',\n interactive && 'seekora-rating-star--interactive'\n )}\n style={{\n display: 'inline-block',\n width: size,\n height: size,\n cursor: interactive ? 'pointer' : 'default',\n }}\n onMouseEnter={onHover}\n onClick={onClick}\n >\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? color : 'none'}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z\"\n stroke={filled ? color : emptyColor}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n );\n}\n\nexport function RatingDisplay({\n rating,\n reviewCount,\n variant = 'compact',\n size = 'medium',\n maxRating = 5,\n showNumeric = false,\n showHalfStars = true,\n interactive = false,\n onRatingChange,\n starColor = '#f59e0b',\n emptyStarColor = '#d1d5db',\n textColor = 'var(--seekora-text-secondary, #6b7280)',\n showReviewCount = true,\n reviewCountFormat,\n className,\n style,\n}: RatingDisplayProps) {\n const [hoverRating, setHoverRating] = useState<number | null>(null);\n\n const clampedRating = Math.max(0, Math.min(maxRating, rating));\n const displayRating = interactive && hoverRating !== null ? hoverRating : clampedRating;\n\n const starSize = sizeMap[size];\n const fontSize = fontSizeMap[size];\n\n const formatReviewCount = (count: number): string => {\n if (reviewCountFormat) return reviewCountFormat(count);\n if (count >= 1000000) return `${(count / 1000000).toFixed(1)}M`;\n if (count >= 1000) return `${(count / 1000).toFixed(1)}K`;\n return count.toString();\n };\n\n const renderStars = () => {\n const stars = [];\n for (let i = 1; i <= maxRating; i++) {\n const filled = i <= Math.floor(displayRating);\n const half = showHalfStars && i === Math.ceil(displayRating) && displayRating % 1 >= 0.25 && displayRating % 1 < 0.75;\n\n stars.push(\n <StarIcon\n key={i}\n filled={filled}\n half={half}\n size={starSize}\n color={starColor}\n emptyColor={emptyStarColor}\n interactive={interactive}\n onHover={interactive ? () => setHoverRating(i) : undefined}\n onClick={\n interactive\n ? () => {\n setHoverRating(null);\n onRatingChange?.(i);\n }\n : undefined\n }\n />\n );\n }\n return stars;\n };\n\n const handleMouseLeave = () => {\n if (interactive) {\n setHoverRating(null);\n }\n };\n\n if (variant === 'stars-only') {\n return (\n <div\n className={clsx('seekora-rating-display', 'seekora-rating-display--stars-only', className)}\n style={{ display: 'inline-flex', alignItems: 'center', gap: 2, ...style }}\n onMouseLeave={handleMouseLeave}\n >\n {renderStars()}\n </div>\n );\n }\n\n if (variant === 'compact') {\n return (\n <div\n className={clsx('seekora-rating-display', 'seekora-rating-display--compact', className)}\n style={{ display: 'inline-flex', alignItems: 'center', gap: 4, fontSize, ...style }}\n onMouseLeave={handleMouseLeave}\n >\n <div style={{ display: 'inline-flex', alignItems: 'center', gap: 2 }}>\n {renderStars()}\n </div>\n {showNumeric && (\n <span className=\"seekora-rating-numeric\" style={{ fontWeight: 600, color: textColor }}>\n {clampedRating.toFixed(1)}\n </span>\n )}\n {showReviewCount && reviewCount != null && reviewCount > 0 && (\n <span className=\"seekora-rating-review-count\" style={{ color: textColor }}>\n ({formatReviewCount(reviewCount)})\n </span>\n )}\n </div>\n );\n }\n\n if (variant === 'full') {\n return (\n <div\n className={clsx('seekora-rating-display', 'seekora-rating-display--full', className)}\n style={{ display: 'flex', flexDirection: 'column', gap: 4, fontSize, ...style }}\n onMouseLeave={handleMouseLeave}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <div style={{ display: 'inline-flex', alignItems: 'center', gap: 2 }}>\n {renderStars()}\n </div>\n <span className=\"seekora-rating-numeric\" style={{ fontWeight: 600, color: 'var(--seekora-text-primary, #111827)' }}>\n {clampedRating.toFixed(1)}\n </span>\n <span className=\"seekora-rating-max\" style={{ color: textColor }}>\n / {maxRating}\n </span>\n </div>\n {showReviewCount && reviewCount != null && reviewCount > 0 && (\n <span className=\"seekora-rating-review-text\" style={{ fontSize: '0.875em', color: textColor }}>\n Based on {formatReviewCount(reviewCount)} {reviewCount === 1 ? 'review' : 'reviews'}\n </span>\n )}\n </div>\n );\n }\n\n if (variant === 'inline') {\n return (\n <div\n className={clsx('seekora-rating-display', 'seekora-rating-display--inline', className)}\n style={{ display: 'inline-flex', alignItems: 'center', gap: 6, fontSize, ...style }}\n onMouseLeave={handleMouseLeave}\n >\n <span className=\"seekora-rating-numeric\" style={{ fontWeight: 600, color: 'var(--seekora-text-primary, #111827)' }}>\n {clampedRating.toFixed(1)}\n </span>\n <div style={{ display: 'inline-flex', alignItems: 'center', gap: 2 }}>\n {renderStars()}\n </div>\n {showReviewCount && reviewCount != null && reviewCount > 0 && (\n <span className=\"seekora-rating-review-count\" style={{ color: textColor }}>\n ({formatReviewCount(reviewCount)})\n </span>\n )}\n </div>\n );\n }\n\n return null;\n}\n","/**\n * VariantSwatches – inline variant indicators for card display\n *\n * Shows color dots, size labels, and \"+N more\" overflow for compact card views.\n */\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\nimport type { ProductOption, ProductVariant } from '@seekora-ai/ui-sdk-types';\nimport { useIsMobile } from '../../utils/responsive';\n\nexport interface VariantSwatchesProps {\n options: ProductOption[];\n /** Which option names to show (default: all) */\n visibleOptions?: string[];\n /** Max values per option before \"+N more\" (default: 5) */\n maxValues?: number;\n /** Map option value names to CSS color strings */\n colorMap?: Record<string, string>;\n /** Currently selected value per option (e.g., { Color: 'Black', Size: 'M' }) */\n selectedValues?: Record<string, string>;\n /** Product variants for availability checking */\n variants?: ProductVariant[];\n /** Show availability cross-out for unavailable combos (default: true) */\n showAvailability?: boolean;\n onSwatchHover?: (optionName: string, value: string) => void;\n onSwatchClick?: (optionName: string, value: string) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst COLOR_NAMES: Record<string, string> = {\n black: '#000', white: '#fff', red: '#ef4444', blue: '#3b82f6',\n green: '#22c55e', yellow: '#eab308', orange: '#f97316', purple: '#a855f7',\n pink: '#ec4899', brown: '#92400e', grey: '#6b7280', gray: '#6b7280',\n navy: '#1e3a5f', beige: '#d4c5a9', cream: '#fffdd0', ivory: '#fffff0',\n khaki: '#c3b091', olive: '#808000', teal: '#0d9488', coral: '#ff7f50',\n maroon: '#800000', tan: '#d2b48c', charcoal: '#36454f', burgundy: '#800020',\n sage: '#9caf88', lavender: '#e6e6fa', mint: '#98fb98', rust: '#b7410e',\n plum: '#8e4585', slate: '#708090', indigo: '#4b0082', gold: '#ffd700',\n silver: '#c0c0c0', rose: '#ff007f', mauve: '#e0b0ff', wine: '#722f37',\n raven: '#0a0a0a', natural: '#f5f0e1', bone: '#e3dac9', sand: '#c2b280',\n};\n\nconst isColorOption = (name: string): boolean => {\n const lower = name.toLowerCase();\n return lower === 'color' || lower === 'colour' || lower === 'colors' || lower === 'colours';\n};\n\nconst resolveColor = (value: string, colorMap?: Record<string, string>): string | null => {\n if (colorMap?.[value]) return colorMap[value];\n const lower = value.toLowerCase();\n if (colorMap?.[lower]) return colorMap[lower];\n return COLOR_NAMES[lower] ?? null;\n};\n\nconst getAvailability = (\n optionName: string,\n value: string,\n options: ProductOption[],\n variants: ProductVariant[] | undefined,\n selectedValues: Record<string, string> | undefined\n): boolean => {\n if (!variants || variants.length === 0) return true;\n\n const optionIndex = options.findIndex((o) => o.name === optionName);\n if (optionIndex === -1) return true;\n const optionKey = `option${optionIndex + 1}` as 'option1' | 'option2' | 'option3';\n\n return variants.some((variant) => {\n // Must match the current option value\n if (variant[optionKey] !== value) return false;\n // Must be available\n if (variant.available === false) return false;\n\n // Must match all other selected values\n if (selectedValues) {\n for (const [selName, selValue] of Object.entries(selectedValues)) {\n if (selName === optionName) continue; // Skip current option\n const selIdx = options.findIndex((o) => o.name === selName);\n if (selIdx === -1) continue;\n const selKey = `option${selIdx + 1}` as 'option1' | 'option2' | 'option3';\n if (variant[selKey] !== selValue) return false;\n }\n }\n return true;\n });\n};\n\nexport function VariantSwatches({\n options,\n visibleOptions,\n maxValues = 5,\n colorMap,\n selectedValues,\n variants,\n showAvailability = true,\n onSwatchHover,\n onSwatchClick,\n className,\n style,\n}: VariantSwatchesProps) {\n const [expandedOptions, setExpandedOptions] = useState<Set<string>>(new Set());\n const isMobile = useIsMobile();\n\n // Responsive sizing\n const colorSwatchSize = isMobile ? 20 : 14; // Larger on mobile for touch\n const textSwatchPadding = isMobile ? '4px 10px' : '1px 6px';\n const textSwatchFontSize = isMobile ? '0.75rem' : '0.6875rem';\n const gap = isMobile ? 6 : 4;\n\n if (!options || options.length === 0) return null;\n\n const filtered = visibleOptions\n ? options.filter((o) => visibleOptions.includes(o.name))\n : options;\n\n if (filtered.length === 0) return null;\n\n const toggleExpanded = (optionName: string, e: React.MouseEvent) => {\n e.stopPropagation();\n setExpandedOptions((prev) => {\n const next = new Set(prev);\n if (next.has(optionName)) {\n next.delete(optionName);\n } else {\n next.add(optionName);\n }\n return next;\n });\n };\n\n return (\n <div className={clsx('seekora-variant-swatches', className)} style={{ display: 'flex', flexDirection: 'column', gap, ...style }}>\n {filtered.map((option) => {\n const isColor = isColorOption(option.name);\n const isExpanded = expandedOptions.has(option.name);\n const visible = isExpanded ? option.values : option.values.slice(0, maxValues);\n const overflow = option.values.length - maxValues;\n const hasOverflow = overflow > 0;\n const selectedValue = selectedValues?.[option.name];\n\n return (\n <div key={option.name} className=\"seekora-variant-swatch-group\" style={{ display: 'flex', alignItems: 'center', gap, flexWrap: 'wrap' }}>\n {visible.map((value) => {\n const color = isColor ? resolveColor(value, colorMap) : null;\n const isSelected = selectedValue === value;\n const isAvailable = showAvailability\n ? getAvailability(option.name, value, options, variants, selectedValues)\n : true;\n\n if (color) {\n return (\n <span\n key={value}\n className={clsx(\n 'seekora-variant-swatch',\n 'seekora-variant-swatch--color',\n isSelected && 'seekora-variant-swatch--selected',\n !isAvailable && 'seekora-variant-swatch--unavailable'\n )}\n title={`${value}${!isAvailable ? ' (Unavailable)' : ''}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: colorSwatchSize,\n height: colorSwatchSize,\n minWidth: colorSwatchSize,\n minHeight: colorSwatchSize,\n borderRadius: '50%',\n backgroundColor: color,\n border: isSelected\n ? '2px solid var(--seekora-primary, #111827)'\n : '1px solid var(--seekora-border-color, #e5e7eb)',\n outline: isSelected ? '2px solid var(--seekora-primary, #111827)' : 'none',\n outlineOffset: 2,\n cursor: onSwatchClick && isAvailable ? 'pointer' : 'not-allowed',\n flexShrink: 0,\n boxShadow: isSelected ? 'var(--seekora-swatch-ring, 0 0 0 1px #fff)' : 'none',\n opacity: isAvailable ? 1 : 0.3,\n position: 'relative',\n }}\n onMouseEnter={() => isAvailable && onSwatchHover?.(option.name, value)}\n onMouseDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={(e) => {\n e.stopPropagation();\n if (isAvailable) {\n onSwatchClick?.(option.name, value);\n }\n }}\n >\n {!isAvailable && (\n <span\n style={{\n position: 'absolute',\n top: '50%',\n left: '-2px',\n right: '-2px',\n height: 1,\n backgroundColor: 'var(--seekora-unavailable-line, #ef4444)',\n transform: 'translateY(-50%) rotate(-45deg)',\n }}\n />\n )}\n </span>\n );\n }\n\n return (\n <span\n key={value}\n className={clsx(\n 'seekora-variant-swatch',\n 'seekora-variant-swatch--text',\n isSelected && 'seekora-variant-swatch--selected',\n !isAvailable && 'seekora-variant-swatch--unavailable'\n )}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: textSwatchPadding,\n minHeight: isMobile ? 32 : 24, // Minimum touch target on mobile\n fontSize: textSwatchFontSize,\n borderRadius: 3,\n border: isSelected\n ? '1px solid var(--seekora-primary, #111827)'\n : '1px solid var(--seekora-border-color, #e5e7eb)',\n backgroundColor: isSelected\n ? 'var(--seekora-primary, #111827)'\n : 'transparent',\n color: isSelected\n ? 'var(--seekora-primary-text, #fff)'\n : 'var(--seekora-text-secondary, #6b7280)',\n cursor: onSwatchClick && isAvailable ? 'pointer' : 'not-allowed',\n whiteSpace: 'nowrap',\n fontWeight: isSelected ? 600 : 400,\n opacity: isAvailable ? 1 : 0.4,\n textDecoration: !isAvailable ? 'line-through' : 'none',\n }}\n onMouseEnter={() => isAvailable && onSwatchHover?.(option.name, value)}\n onMouseDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={(e) => {\n e.stopPropagation();\n if (isAvailable) {\n onSwatchClick?.(option.name, value);\n }\n }}\n >\n {value}\n </span>\n );\n })}\n {hasOverflow && (\n <button\n type=\"button\"\n className=\"seekora-variant-swatch--overflow\"\n onClick={(e) => toggleExpanded(option.name, e)}\n style={{\n fontSize: textSwatchFontSize,\n color: 'var(--seekora-primary, #2563eb)',\n background: 'none',\n border: 'none',\n padding: isMobile ? '4px 8px' : 0,\n minHeight: isMobile ? 32 : 'auto', // Touch target on mobile\n cursor: 'pointer',\n textDecoration: 'underline',\n fontWeight: 500,\n }}\n >\n {isExpanded ? 'Show less' : `+${overflow} more`}\n </button>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * ProductCardLayouts – internal layout sub-components for ProductCard\n *\n * Not exported from the package. Each layout renders the same product data\n * with different visual emphasis.\n */\n\nimport React from 'react';\nimport { ImageDisplay } from '../primitives/ImageDisplay';\nimport { PriceDisplay } from '../primitives/PriceDisplay';\nimport { BadgeList } from '../primitives/BadgeList';\nimport { RatingDisplay } from '../primitives/RatingDisplay';\nimport { VariantSwatches } from '../primitives/VariantSwatches';\nimport { ActionButtons } from '../primitives/ActionButtons';\nimport type { ActionButton } from '../primitives/ActionButtons';\nimport type { ProductItem, ProductBadge, PriceRange, ProductOption, ProductVariant } from '@seekora-ai/ui-sdk-types';\nimport type { ProductDisplayConfig } from '../suggestions/types';\nimport { useIsMobile, useResponsiveGap } from '../../utils/responsive';\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\n\nexport interface LayoutProps {\n product: ProductItem;\n images: string[];\n title: string;\n price: number | null;\n comparePrice: number | null;\n brand: string | null;\n badges: ProductBadge[];\n priceRange: PriceRange | null;\n options: ProductOption[];\n variants: ProductVariant[];\n displayConfig: ProductDisplayConfig;\n imageVariant: 'single' | 'carousel' | 'hover' | 'thumbStrip' | 'thumbList';\n onVariantHover?: (optionName: string, value: string) => void;\n onVariantClick?: (optionName: string, value: string) => void;\n selectedVariants?: Record<string, string>;\n actionButtons?: ActionButton[];\n actionButtonsPosition?: 'overlay-top-right' | 'overlay-bottom' | 'inline';\n showActionLabels?: boolean;\n enableImageZoom?: boolean;\n imageZoomMode?: 'hover' | 'lens' | 'click' | 'both';\n imageZoomLevel?: number;\n}\n\nconst imgPlaceholderStyle: React.CSSProperties = {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'cover',\n borderRadius: BORDER_RADIUS.sm,\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.04))',\n};\n\nfunction ImageBlock({ images, title, imageVariant, aspectRatio, objectFit, enableZoom, zoomMode, zoomLevel }: {\n images: string[];\n title: string;\n imageVariant: LayoutProps['imageVariant'];\n aspectRatio?: string;\n objectFit?: 'cover' | 'contain';\n enableZoom?: boolean;\n zoomMode?: 'hover' | 'lens' | 'click' | 'both';\n zoomLevel?: number;\n}) {\n const ar = aspectRatio\n ? (aspectRatio.includes(':') ? aspectRatio.replace(':', '/') : aspectRatio)\n : '1';\n\n if (images.length > 0) {\n return (\n <div className=\"seekora-product-card__image\" style={{ position: 'relative', overflow: 'hidden', borderRadius: BORDER_RADIUS.sm }}>\n <ImageDisplay\n images={images}\n variant={images.length > 1 ? imageVariant : 'single'}\n alt={title}\n className=\"seekora-suggestions-product-card-image\"\n style={{ aspectRatio: ar, ...(objectFit ? { objectFit } : {}) }}\n enableZoom={enableZoom}\n zoomMode={zoomMode}\n zoomLevel={zoomLevel}\n />\n </div>\n );\n }\n return <div className=\"seekora-product-card__image seekora-suggestions-product-card-placeholder\" style={{ ...imgPlaceholderStyle, aspectRatio: ar, ...(objectFit ? { objectFit } : {}) }} aria-hidden />;\n}\n\n/** minimal: image, title, price (current default behavior) */\nexport function MinimalLayout({ images, title, price, product, imageVariant, displayConfig, enableImageZoom, imageZoomMode, imageZoomLevel }: LayoutProps) {\n const isMobile = useIsMobile();\n const titleFontSize = isMobile ? '0.9375rem' : '0.875rem'; // Slightly larger on mobile\n const priceFontSize = isMobile ? '0.9375rem' : '0.875rem';\n\n return (\n <>\n <ImageBlock\n images={images}\n title={title}\n imageVariant={imageVariant}\n aspectRatio={displayConfig.imageAspectRatio}\n objectFit={displayConfig.imageObjectFit}\n enableZoom={enableImageZoom}\n zoomMode={imageZoomMode}\n zoomLevel={imageZoomLevel}\n />\n <span className=\"seekora-product-card__title\" style={{ fontSize: titleFontSize, fontWeight: 500, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis', display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical' }}>\n {title}\n </span>\n {price != null && !Number.isNaN(price) && (\n <span className=\"seekora-product-card__price seekora-suggestions-product-card-price\" style={{ fontSize: priceFontSize, color: 'inherit', opacity: 0.6 }}>\n {product.currency ?? '$'}{price.toFixed(2)}\n </span>\n )}\n </>\n );\n}\n\n/** standard: image, badges, brand, title, price + compare price, color swatches */\nexport function StandardLayout({\n images, title, price, comparePrice, brand, badges, options, variants,\n product, imageVariant, displayConfig, onVariantHover, onVariantClick, selectedVariants,\n actionButtons, actionButtonsPosition, showActionLabels,\n enableImageZoom, imageZoomMode, imageZoomLevel,\n}: LayoutProps) {\n const cfg = displayConfig;\n const isMobile = useIsMobile();\n const bodyGap = isMobile ? 6 : 4; // More gap on mobile\n const titleFontSize = isMobile ? '0.9375rem' : '0.875rem';\n const brandFontSize = isMobile ? '0.8125rem' : '0.75rem';\n const priceFontSize = isMobile ? '0.9375rem' : '0.875rem';\n\n // Normalize position: 'overlay-*' positions render over image, everything else renders inline\n const isOverlayPosition = actionButtonsPosition?.startsWith('overlay');\n\n return (\n <>\n <div style={{ position: 'relative' }}>\n <ImageBlock\n images={images}\n title={title}\n imageVariant={imageVariant}\n aspectRatio={cfg.imageAspectRatio}\n objectFit={cfg.imageObjectFit}\n enableZoom={enableImageZoom}\n zoomMode={imageZoomMode}\n zoomLevel={imageZoomLevel}\n />\n {cfg.showBadges !== false && badges.length > 0 && (\n <BadgeList badges={badges} position=\"top-left\" maxBadges={2} />\n )}\n {actionButtons && actionButtons.length > 0 && isOverlayPosition && (\n <ActionButtons\n buttons={actionButtons}\n position={actionButtonsPosition === 'overlay-top-right' ? 'top-right' : 'bottom-center'}\n showLabels={showActionLabels}\n size=\"small\"\n />\n )}\n </div>\n <div className=\"seekora-product-card__body\" style={{ display: 'flex', flexDirection: 'column', gap: bodyGap }}>\n {cfg.showBrand !== false && brand && (\n <span className=\"seekora-product-card__brand\" style={{ fontSize: brandFontSize, color: 'inherit', opacity: 0.6, textTransform: 'uppercase', letterSpacing: '0.02em' }}>\n {brand}\n </span>\n )}\n <span className=\"seekora-product-card__title\" style={{ fontSize: titleFontSize, fontWeight: 500, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis', display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical' }}>\n {title}\n </span>\n <div className=\"seekora-product-card__price\">\n <PriceDisplay\n price={price ?? undefined}\n comparePrice={comparePrice ?? undefined}\n currency={cfg.currency ?? product.currency}\n currencyPosition={cfg.currencyPosition}\n priceDecimals={cfg.priceDecimals}\n showDiscount={cfg.showDiscount}\n style={{ fontSize: priceFontSize }}\n />\n </div>\n {cfg.showVariants !== false && options.length > 0 && (\n <VariantSwatches\n options={options}\n visibleOptions={cfg.variantOptionsToShow}\n maxValues={cfg.maxVariantValues}\n selectedValues={selectedVariants}\n variants={variants}\n onSwatchHover={onVariantHover}\n onSwatchClick={onVariantClick}\n />\n )}\n {actionButtons && actionButtons.length > 0 && !isOverlayPosition && (\n <ActionButtons\n buttons={actionButtons}\n position=\"inline\"\n showLabels={showActionLabels}\n size=\"small\"\n layout=\"horizontal\"\n />\n )}\n </div>\n </>\n );\n}\n\n/** detailed: image, badges, brand, title, price + compare + discount, rating, all swatches, stock */\nexport function DetailedLayout({\n images, title, price, comparePrice, brand, badges, priceRange, options, variants,\n product, imageVariant, displayConfig, onVariantHover, onVariantClick, selectedVariants,\n actionButtons, actionButtonsPosition, showActionLabels,\n enableImageZoom, imageZoomMode, imageZoomLevel,\n}: LayoutProps) {\n const cfg = displayConfig;\n const available = product.available;\n // Normalize position: 'overlay-*' positions render over image, everything else renders inline\n const isOverlayPosition = actionButtonsPosition?.startsWith('overlay');\n\n return (\n <>\n <div style={{ position: 'relative' }}>\n <ImageBlock\n images={images}\n title={title}\n imageVariant={imageVariant}\n aspectRatio={cfg.imageAspectRatio}\n objectFit={cfg.imageObjectFit}\n enableZoom={enableImageZoom}\n zoomMode={imageZoomMode}\n zoomLevel={imageZoomLevel}\n />\n {cfg.showBadges !== false && badges.length > 0 && (\n <BadgeList badges={badges} position=\"top-left\" />\n )}\n {actionButtons && actionButtons.length > 0 && isOverlayPosition && (\n <ActionButtons\n buttons={actionButtons}\n position={actionButtonsPosition === 'overlay-top-right' ? 'top-right' : 'bottom-center'}\n showLabels={showActionLabels}\n size=\"small\"\n />\n )}\n </div>\n <div className=\"seekora-product-card__body\" style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {cfg.showBrand !== false && brand && (\n <span className=\"seekora-product-card__brand\" style={{ fontSize: '0.75rem', color: 'inherit', opacity: 0.6, textTransform: 'uppercase', letterSpacing: '0.02em' }}>\n {brand}\n </span>\n )}\n <span className=\"seekora-product-card__title\" style={{ fontSize: '0.875rem', fontWeight: 500, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {title}\n </span>\n {cfg.showRating !== false && product.rating != null && (\n <RatingDisplay\n rating={product.rating}\n reviewCount={product.reviewCount}\n variant=\"compact\"\n size=\"small\"\n showNumeric={false}\n showReviewCount={true}\n className=\"seekora-product-card__rating\"\n />\n )}\n <div className=\"seekora-product-card__price\">\n {cfg.showPriceRange && priceRange ? (\n <PriceDisplay\n priceRange={priceRange}\n currency={cfg.currency ?? product.currency}\n currencyPosition={cfg.currencyPosition}\n priceDecimals={cfg.priceDecimals}\n style={{ fontSize: '0.875rem' }}\n />\n ) : (\n <PriceDisplay\n price={price ?? undefined}\n comparePrice={comparePrice ?? undefined}\n currency={cfg.currency ?? product.currency}\n currencyPosition={cfg.currencyPosition}\n priceDecimals={cfg.priceDecimals}\n showDiscount={cfg.showDiscount}\n style={{ fontSize: '0.875rem' }}\n />\n )}\n </div>\n {cfg.showVariants !== false && options.length > 0 && (\n <VariantSwatches\n options={options}\n visibleOptions={cfg.variantOptionsToShow}\n maxValues={cfg.maxVariantValues}\n selectedValues={selectedVariants}\n variants={variants}\n onSwatchHover={onVariantHover}\n onSwatchClick={onVariantClick}\n />\n )}\n {cfg.showStock !== false && available != null && (\n <span\n className=\"seekora-product-card__stock\"\n style={{\n fontSize: '0.75rem',\n color: available ? 'var(--seekora-success, #22c55e)' : 'var(--seekora-error, #ef4444)',\n }}\n >\n {available ? 'In Stock' : 'Out of Stock'}\n </span>\n )}\n {actionButtons && actionButtons.length > 0 && !isOverlayPosition && (\n <ActionButtons\n buttons={actionButtons}\n position=\"inline\"\n showLabels={showActionLabels}\n size=\"small\"\n layout=\"horizontal\"\n />\n )}\n </div>\n </>\n );\n}\n\n/** compact: smaller image, 1-line title, price */\nexport function CompactLayout({ images, title, price, product, imageVariant, displayConfig, enableImageZoom, imageZoomMode, imageZoomLevel }: LayoutProps) {\n return (\n <>\n <ImageBlock\n images={images}\n title={title}\n imageVariant={imageVariant}\n aspectRatio={displayConfig.imageAspectRatio ?? '1:1'}\n enableZoom={enableImageZoom}\n zoomMode={imageZoomMode}\n zoomLevel={imageZoomLevel}\n />\n <span\n className=\"seekora-product-card__title\"\n style={{\n fontSize: '0.8125rem',\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {title}\n </span>\n {price != null && !Number.isNaN(price) && (\n <span className=\"seekora-product-card__price\" style={{ fontSize: '0.8125rem', color: 'inherit', opacity: 0.6 }}>\n {product.currency ?? '$'}{price.toFixed(2)}\n </span>\n )}\n </>\n );\n}\n\n/** horizontal: image left + content right (title, brand, price, swatches) */\nexport function HorizontalLayout({\n images, title, price, comparePrice, brand, badges, options, variants,\n product, imageVariant, displayConfig, onVariantHover, onVariantClick, selectedVariants,\n actionButtons, actionButtonsPosition, showActionLabels,\n enableImageZoom, imageZoomMode, imageZoomLevel,\n}: LayoutProps) {\n const cfg = displayConfig;\n const isMobile = useIsMobile();\n const containerGap = useResponsiveGap(12);\n const bodyGap = isMobile ? 6 : 4;\n\n // Responsive image dimensions\n const imageMinWidth = isMobile ? 60 : 80;\n const imageMaxWidth = isMobile ? 100 : 120;\n const imageFlex = isMobile ? '20%' : '25%';\n\n // Responsive font sizes\n const brandFontSize = isMobile ? '0.6875rem' : '0.75rem';\n const titleFontSize = isMobile ? '0.875rem' : '0.875rem';\n const priceFontSize = isMobile ? '0.875rem' : '0.875rem';\n\n return (\n <div style={{ display: 'flex', gap: containerGap, alignItems: 'flex-start' }}>\n <div style={{ position: 'relative', minWidth: imageMinWidth, flexBasis: imageFlex, maxWidth: imageMaxWidth, flexShrink: 0 }}>\n <ImageBlock\n images={images}\n title={title}\n imageVariant={imageVariant}\n aspectRatio=\"1:1\"\n enableZoom={enableImageZoom}\n zoomMode={imageZoomMode}\n zoomLevel={imageZoomLevel}\n />\n {cfg.showBadges !== false && badges.length > 0 && (\n <BadgeList badges={badges} position=\"top-left\" maxBadges={1} />\n )}\n {actionButtons && actionButtons.length > 0 && actionButtonsPosition?.startsWith('overlay') && (\n <ActionButtons\n buttons={actionButtons}\n position={actionButtonsPosition === 'overlay-top-right' ? 'top-right' : 'bottom-center'}\n showLabels={showActionLabels}\n size=\"small\"\n />\n )}\n </div>\n <div className=\"seekora-product-card__body\" style={{ display: 'flex', flexDirection: 'column', gap: bodyGap, flex: 1, minWidth: 0 }}>\n {cfg.showBrand !== false && brand && (\n <span className=\"seekora-product-card__brand\" style={{ fontSize: brandFontSize, color: 'inherit', opacity: 0.6, textTransform: 'uppercase' }}>\n {brand}\n </span>\n )}\n <span className=\"seekora-product-card__title\" style={{ fontSize: titleFontSize, fontWeight: 500, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis', display: '-webkit-box', WebkitLineClamp: isMobile ? 3 : 2, WebkitBoxOrient: 'vertical' }}>\n {title}\n </span>\n <div className=\"seekora-product-card__price\">\n <PriceDisplay\n price={price ?? undefined}\n comparePrice={comparePrice ?? undefined}\n currency={cfg.currency ?? product.currency}\n currencyPosition={cfg.currencyPosition}\n priceDecimals={cfg.priceDecimals}\n showDiscount={cfg.showDiscount}\n style={{ fontSize: priceFontSize }}\n />\n </div>\n {cfg.showVariants !== false && options.length > 0 && (\n <VariantSwatches\n options={options}\n visibleOptions={cfg.variantOptionsToShow}\n maxValues={cfg.maxVariantValues ?? 3}\n selectedValues={selectedVariants}\n variants={variants}\n onSwatchHover={onVariantHover}\n onSwatchClick={onVariantClick}\n />\n )}\n {actionButtons && actionButtons.length > 0 && actionButtonsPosition === 'inline' && (\n <ActionButtons\n buttons={actionButtons}\n position=\"inline\"\n showLabels={showActionLabels}\n size=\"small\"\n layout=\"horizontal\"\n />\n )}\n </div>\n </div>\n );\n}\n","/**\n * ProductCard – one product tile (primitive)\n *\n * Without displayConfig: renders the original minimal layout (image, title, price).\n * With displayConfig: renders layout variants (minimal, standard, detailed, compact, horizontal).\n */\n\nimport React, { useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { ImageDisplay } from '../primitives/ImageDisplay';\nimport { ActionButtons } from '../primitives/ActionButtons';\nimport type { ActionButton } from '../primitives/ActionButtons';\nimport type { ProductItem, ProductBadge, PriceRange, ProductOption } from '@seekora-ai/ui-sdk-types';\nimport type { ProductDisplayConfig } from '../suggestions/types';\nimport { extractBadges, getPriceRange, findVariantBySelections } from '../suggestions/utils';\n\nconst TRANSITIONS = {\n fast: '150ms ease-in-out',\n normal: '200ms ease-in-out',\n slow: '300ms ease-in-out',\n};\n\nconst BORDER_RADIUS = {\n sm: 4,\n md: 6,\n lg: 8,\n full: 9999,\n};\nimport {\n MinimalLayout,\n StandardLayout,\n DetailedLayout,\n CompactLayout,\n HorizontalLayout,\n} from './ProductCardLayouts';\nimport type { LayoutProps } from './ProductCardLayouts';\n\nexport type ProductCardImageVariant = 'single' | 'carousel' | 'hover' | 'thumbStrip' | 'thumbList';\n\nexport interface ProductCardProps {\n product: ProductItem;\n position: number;\n section?: string;\n tabId?: string;\n onSelect: () => void;\n className?: string;\n style?: React.CSSProperties;\n imageVariant?: ProductCardImageVariant;\n /** Product display configuration for layout variants */\n displayConfig?: ProductDisplayConfig;\n /** Callback when a variant swatch is hovered (e.g., to swap card image) */\n onVariantHover?: (optionName: string, value: string) => void;\n /** Callback when a variant swatch is clicked (e.g., to swap card image permanently) */\n onVariantClick?: (optionName: string, value: string) => void;\n /** Currently selected variant values (e.g., { Color: 'Black', Size: 'M' }) */\n selectedVariants?: Record<string, string>;\n /** Render as link when true and product.url exists */\n asLink?: boolean;\n /** Action buttons (add to cart, wishlist, etc.) */\n actionButtons?: ActionButton[];\n /** Action buttons position */\n actionButtonsPosition?: 'overlay-top-right' | 'overlay-bottom' | 'inline';\n /** Show action button labels */\n showActionLabels?: boolean;\n /** Enable image zoom functionality */\n enableImageZoom?: boolean;\n /** Image zoom mode: 'hover' (Amazon-style), 'lens', 'click' (lightbox), 'both' (hover + click) */\n imageZoomMode?: 'hover' | 'lens' | 'click' | 'both';\n /** Image zoom magnification level (2 = 200%, 3 = 300%) */\n imageZoomLevel?: number;\n}\n\nconst cardStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n padding: 8,\n cursor: 'pointer',\n border: 'none',\n borderRadius: `var(--seekora-border-radius, ${BORDER_RADIUS.md}px)`,\n backgroundColor: 'transparent',\n textAlign: 'left',\n transition: `background-color ${TRANSITIONS.fast}, box-shadow ${TRANSITIONS.fast}`,\n};\nconst imgStyle: React.CSSProperties = {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'cover',\n borderRadius: BORDER_RADIUS.sm,\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.04))',\n};\n\nexport function ProductCard({\n product,\n position,\n section,\n tabId,\n onSelect,\n className,\n style,\n imageVariant = 'single',\n displayConfig,\n onVariantHover,\n onVariantClick,\n selectedVariants,\n asLink,\n actionButtons,\n actionButtonsPosition = 'inline',\n showActionLabels = false,\n enableImageZoom = false,\n imageZoomMode = 'both',\n imageZoomLevel = 2.5,\n}: ProductCardProps) {\n // Find selected variant if selections are provided\n const selectedVariant = useMemo(() => {\n if (!selectedVariants || !product.options || !product.variants) return null;\n return findVariantBySelections(product.options, product.variants, selectedVariants);\n }, [selectedVariants, product.options, product.variants]);\n\n // Compute effective display data (use selected variant if available, otherwise product defaults)\n const effectiveImages = useMemo(() => {\n // Priority: selected variant image > product images > product image\n if (selectedVariant?.image) return [selectedVariant.image];\n if ((product as any).images?.length) return (product as any).images;\n if (product.image ?? (product as any).imageUrl) return [String(product.image ?? (product as any).imageUrl)];\n return [];\n }, [selectedVariant, product]);\n\n const effectiveTitle = useMemo(() => {\n // Show variant title if available (e.g., \"T-Shirt - Black / M\")\n if (selectedVariant?.title && selectedVariant.title !== product.title) {\n return `${product.title ?? product.name ?? ''} - ${selectedVariant.title}`;\n }\n return product.title ?? product.name ?? '';\n }, [selectedVariant, product]);\n\n const effectivePrice = useMemo(() => {\n const variantPrice = selectedVariant?.price;\n if (variantPrice != null) return typeof variantPrice === 'number' ? variantPrice : Number(variantPrice);\n const productPrice = product.price;\n return productPrice != null ? (typeof productPrice === 'number' ? productPrice : Number(productPrice)) : null;\n }, [selectedVariant, product.price]);\n\n const effectiveComparePrice = useMemo(() => {\n const variantCompare = selectedVariant?.comparePrice;\n if (variantCompare != null) return typeof variantCompare === 'number' ? variantCompare : Number(variantCompare);\n const productCompare = product.original_price ?? product.compare_at_price;\n return productCompare != null ? (typeof productCompare === 'number' ? productCompare : Number(productCompare)) : null;\n }, [selectedVariant, product]);\n\n // Legacy vars for backwards compat\n const images = effectiveImages;\n const title = effectiveTitle;\n const price = effectivePrice;\n\n // Hover state for card\n const [isHovered, setIsHovered] = React.useState(false);\n\n const cardHoverStyle = isHovered\n ? {\n backgroundColor: 'var(--seekora-card-hover-bg, var(--seekora-bg-hover, rgba(0,0,0,0.03)))',\n boxShadow: 'var(--seekora-card-hover-shadow, 0 2px 8px rgba(0, 0, 0, 0.08))',\n }\n : {};\n\n // If no displayConfig, render original minimal layout (backwards compat)\n if (!displayConfig) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={clsx('seekora-suggestions-product-card', isHovered && 'seekora-suggestions-product-card--hover', className)}\n style={{ ...cardStyle, ...cardHoverStyle, ...style }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => onSelect()}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n }}\n data-position={position}\n data-section={section}\n data-tab-id={tabId}\n >\n {images.length > 0 ? (\n <ImageDisplay\n images={images}\n variant={imageVariant}\n alt={title}\n className=\"seekora-suggestions-product-card-image\"\n enableZoom={enableImageZoom}\n zoomMode={imageZoomMode}\n zoomLevel={imageZoomLevel}\n />\n ) : (\n <div className=\"seekora-suggestions-product-card-placeholder\" style={imgStyle} aria-hidden />\n )}\n <span className=\"seekora-suggestions-product-card-title\" style={{ fontSize: '0.875rem', fontWeight: 500 }}>\n {title}\n </span>\n {price != null && !Number.isNaN(price) ? (\n <span className=\"seekora-suggestions-product-card-price\" style={{ fontSize: '0.875rem', color: 'inherit', opacity: 0.6 }}>\n {product.currency ?? '$'}{price.toFixed(2)}\n </span>\n ) : null}\n </div>\n );\n }\n\n // Enhanced layout with displayConfig\n const layoutStyle = displayConfig.style ?? 'minimal';\n const comparePrice = effectiveComparePrice;\n const brand = product.brand ?? null;\n const options: ProductOption[] = product.options ?? [];\n const variants = product.variants ?? [];\n\n const badges = useMemo<ProductBadge[]>(() => {\n if (displayConfig.showBadges === false) return [];\n if (displayConfig.badgeExtractor) return displayConfig.badgeExtractor(product.tags, product);\n return extractBadges(product.tags, product);\n }, [displayConfig, product]);\n\n const priceRange = useMemo<PriceRange | null>(() => {\n if (!displayConfig.showPriceRange) return null;\n return getPriceRange(product.variants);\n }, [displayConfig.showPriceRange, product.variants]);\n\n const layoutProps: LayoutProps = {\n product,\n images,\n title,\n price,\n comparePrice,\n brand,\n badges,\n priceRange,\n options,\n variants,\n displayConfig,\n imageVariant,\n onVariantHover,\n onVariantClick,\n selectedVariants,\n actionButtons,\n actionButtonsPosition,\n showActionLabels,\n enableImageZoom,\n imageZoomMode,\n imageZoomLevel,\n };\n\n const layoutMap = {\n minimal: MinimalLayout,\n standard: StandardLayout,\n detailed: DetailedLayout,\n compact: CompactLayout,\n horizontal: HorizontalLayout,\n };\n\n const LayoutComponent = layoutMap[layoutStyle] ?? MinimalLayout;\n\n\n const rootClassName = clsx(\n 'seekora-product-card',\n `seekora-product-card--${layoutStyle}`,\n 'seekora-suggestions-product-card',\n isHovered && 'seekora-product-card--hover',\n className\n );\n\n const rootStyle: React.CSSProperties = {\n ...cardStyle,\n ...(layoutStyle === 'horizontal' ? { flexDirection: 'row' as const } : {}),\n ...cardHoverStyle,\n ...style,\n };\n\n if (asLink && product.url) {\n return (\n <a\n href={product.url}\n className={rootClassName}\n style={{ ...rootStyle, textDecoration: 'none', color: 'inherit' }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={(e) => {\n e.preventDefault();\n onSelect();\n }}\n data-position={position}\n data-section={section}\n data-tab-id={tabId}\n >\n <LayoutComponent {...layoutProps} />\n </a>\n );\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={rootClassName}\n style={rootStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={() => onSelect()}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n }}\n data-position={position}\n data-section={section}\n data-tab-id={tabId}\n >\n <LayoutComponent {...layoutProps} />\n </div>\n );\n}\n","/**\n * ProductGrid – grid of product cards from context (primitive)\n *\n * Uses trendingProducts or active tab products; each click calls context selectProduct.\n */\n\nimport React, { useMemo } from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { ProductCard } from './ProductCard';\nimport { clsx } from 'clsx';\nimport type { ProductItem } from '@seekora-ai/ui-sdk-types';\nimport type { ProductDisplayConfig } from '../suggestions/types';\nimport { useResponsiveColumns, useResponsiveGap, useResponsivePadding } from '../../utils/responsive';\n\nexport interface ProductGridProps {\n maxItems?: number;\n /** 'trending' | tab id for filtered tab products */\n source?: 'trending' | string;\n columns?: number;\n className?: string;\n style?: React.CSSProperties;\n gridClassName?: string;\n /** Product display configuration passed through to each ProductCard */\n displayConfig?: ProductDisplayConfig;\n /** Callback when a variant swatch is hovered on a card */\n onVariantHover?: (optionName: string, value: string) => void;\n}\n\nexport function ProductGrid({\n maxItems = 8,\n source = 'trending',\n columns = 4,\n className,\n style,\n gridClassName,\n displayConfig,\n onVariantHover,\n}: ProductGridProps) {\n const {\n trendingProducts,\n filteredTabs,\n activeTabId,\n selectProduct,\n getAllNavigableItems,\n } = useSuggestionsContext();\n\n // Responsive columns and spacing\n const responsiveColumns = useResponsiveColumns(columns);\n const responsiveGap = useResponsiveGap(12);\n const responsivePadding = useResponsivePadding(12);\n\n const products = useMemo((): ProductItem[] => {\n if (source === 'trending') return trendingProducts;\n const tab = filteredTabs.find((t) => t.id === (source === 'tab' ? activeTabId : source));\n return tab?.products ?? [];\n }, [source, activeTabId, trendingProducts, filteredTabs]);\n\n const items = products.slice(0, maxItems);\n const navigableItems = getAllNavigableItems();\n const productStartIndex = navigableItems.findIndex((n) => n.type === 'product');\n\n if (items.length === 0) return null;\n\n const gridStyle: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: `repeat(${responsiveColumns}, minmax(0, 1fr))`,\n gap: responsiveGap,\n padding: responsivePadding,\n };\n\n return (\n <div className={clsx('seekora-suggestions-product-grid', className)} style={style}>\n <div className={clsx('seekora-suggestions-product-grid-inner', gridClassName)} style={gridStyle}>\n {items.map((product, i) => {\n const globalIndex = productStartIndex >= 0 ? productStartIndex + i : i;\n const section = source === 'trending' ? 'products' : 'filtered_tab';\n const tabId = source !== 'trending' ? (source === 'tab' ? activeTabId : source) : undefined;\n return (\n <ProductCard\n key={product.id ?? product.objectID ?? i}\n product={product}\n position={globalIndex}\n section={section}\n tabId={tabId}\n onSelect={() => selectProduct(product, globalIndex, section, tabId)}\n displayConfig={displayConfig}\n onVariantHover={onVariantHover}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * CategoriesTabs – horizontal tabs (e.g. filtered tabs) (primitive)\n *\n * Active tab from context; on select updates context and tracks analytics.\n */\n\nimport React from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { clsx } from 'clsx';\n\nexport interface CategoriesTabsProps {\n className?: string;\n style?: React.CSSProperties;\n tabClassName?: string;\n}\n\nexport function CategoriesTabs({ className, style, tabClassName }: CategoriesTabsProps) {\n const { filteredTabs, activeTabId, setActiveTab } = useSuggestionsContext();\n\n if (filteredTabs.length === 0) return null;\n\n return (\n <div\n className={clsx('seekora-suggestions-categories-tabs', className)}\n style={{\n display: 'flex',\n gap: 4,\n padding: '8px 12px',\n borderBottom: '1px solid var(--seekora-border-color, #e5e7eb)',\n overflowX: 'auto',\n ...style,\n }}\n role=\"tablist\"\n >\n {filteredTabs.map((tab) => {\n const isActive = activeTabId === tab.id;\n return (\n <button\n key={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={clsx('seekora-suggestions-tab', isActive && 'seekora-suggestions-tab--active', tabClassName)}\n style={{\n padding: '8px 12px',\n border: 'none',\n borderRadius: 'var(--seekora-border-radius, 6px)',\n backgroundColor: isActive ? 'var(--seekora-primary-light, rgba(59, 130, 246, 0.1))' : 'transparent',\n color: isActive ? 'var(--seekora-primary, #3b82f6)' : 'inherit',\n cursor: 'pointer',\n fontSize: '0.875rem',\n fontWeight: isActive ? 600 : 400,\n whiteSpace: 'nowrap',\n transition: 'background-color 120ms ease',\n }}\n onClick={() => setActiveTab(tab)}\n >\n {tab.label}\n </button>\n );\n })}\n </div>\n );\n}\n","/**\n * RecentSearchesList – list of recent queries (primitive)\n *\n * Reads recentSearches from context; each click calls selectRecentSearch. Optional title/render.\n */\n\nimport React from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { clsx } from 'clsx';\nimport type { RecentSearch } from '@seekora-ai/ui-sdk-types';\n\nexport interface RecentSearchesListProps {\n title?: string;\n maxItems?: number;\n className?: string;\n style?: React.CSSProperties;\n listClassName?: string;\n renderItem?: (search: RecentSearch, index: number, onSelect: () => void) => React.ReactNode;\n}\n\nconst itemStyle: React.CSSProperties = {\n padding: '10px 12px',\n cursor: 'pointer',\n border: 'none',\n width: '100%',\n textAlign: 'left',\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n color: 'inherit',\n transition: 'background-color 120ms ease',\n};\n\nfunction RecentSearchItem({ search, onSelect }: { search: RecentSearch; onSelect: () => void }) {\n const [isHovered, setIsHovered] = React.useState(false);\n\n return (\n <li>\n <button\n type=\"button\"\n className={clsx('seekora-suggestions-recent-item', isHovered && 'seekora-suggestions-recent-item--hover')}\n style={{\n ...itemStyle,\n ...(isHovered ? { backgroundColor: 'var(--seekora-bg-hover, rgba(0,0,0,0.05))' } : {}),\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onMouseDown={(e) => {\n e.preventDefault();\n onSelect();\n }}\n >\n {search.query}\n </button>\n </li>\n );\n}\n\nexport function RecentSearchesList({\n title = 'Recent',\n maxItems = 8,\n className,\n style,\n listClassName,\n renderItem,\n}: RecentSearchesListProps) {\n const { recentSearches, query, selectRecentSearch } = useSuggestionsContext();\n const items = recentSearches.slice(0, maxItems);\n\n if (items.length === 0) return null;\n\n return (\n <div className={clsx('seekora-suggestions-recent-list', className)} style={style}>\n {title ? (\n <div\n className=\"seekora-suggestions-recent-title\"\n style={{ padding: '8px 12px', fontSize: '0.75rem', fontWeight: 600, color: 'inherit', opacity: 0.6, textTransform: 'uppercase' }}\n >\n {title}\n </div>\n ) : null}\n <ul className={clsx('seekora-suggestions-recent-ul', listClassName)} style={{ margin: 0, padding: 0, listStyle: 'none' }}>\n {items.map((search, i) => {\n const onSelect = () => selectRecentSearch(search);\n if (renderItem) {\n return <li key={`${search.query}-${search.timestamp}`}>{renderItem(search, i, onSelect)}</li>;\n }\n return (\n <RecentSearchItem\n key={`${search.query}-${search.timestamp}`}\n search={search}\n onSelect={onSelect}\n />\n );\n })}\n </ul>\n </div>\n );\n}\n","/**\n * TrendingList – list of trending searches (primitive)\n *\n * Reads trendingSearches from context; each click calls selectTrendingSearch. Optional title/render.\n */\n\nimport React from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { clsx } from 'clsx';\nimport type { TrendingSearch } from '@seekora-ai/ui-sdk-types';\n\nexport interface TrendingListProps {\n title?: string;\n maxItems?: number;\n className?: string;\n style?: React.CSSProperties;\n listClassName?: string;\n renderItem?: (trending: TrendingSearch, index: number, onSelect: () => void) => React.ReactNode;\n}\n\nconst itemStyle: React.CSSProperties = {\n padding: '10px 12px',\n cursor: 'pointer',\n border: 'none',\n width: '100%',\n textAlign: 'left',\n fontSize: 'inherit',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n color: 'inherit',\n transition: 'background-color 120ms ease',\n};\n\nfunction TrendingItem({ trending, onSelect }: { trending: TrendingSearch; onSelect: () => void }) {\n const [isHovered, setIsHovered] = React.useState(false);\n\n return (\n <li>\n <button\n type=\"button\"\n className={clsx('seekora-suggestions-trending-item', isHovered && 'seekora-suggestions-trending-item--hover')}\n style={{\n ...itemStyle,\n ...(isHovered ? { backgroundColor: 'var(--seekora-bg-hover, rgba(0,0,0,0.05))' } : {}),\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onMouseDown={(e) => {\n e.preventDefault();\n onSelect();\n }}\n >\n {trending.query}\n {trending.count != null ? (\n <span style={{ marginLeft: 8, color: 'inherit', opacity: 0.6, fontSize: '0.875em' }}>{trending.count}</span>\n ) : null}\n </button>\n </li>\n );\n}\n\nexport function TrendingList({\n title = 'Trending',\n maxItems = 8,\n className,\n style,\n listClassName,\n renderItem,\n}: TrendingListProps) {\n const { trendingSearches, selectTrendingSearch } = useSuggestionsContext();\n const items = trendingSearches.slice(0, maxItems);\n\n if (items.length === 0) return null;\n\n return (\n <div className={clsx('seekora-suggestions-trending-list', className)} style={style}>\n {title ? (\n <div\n className=\"seekora-suggestions-trending-title\"\n style={{ padding: '8px 12px', fontSize: '0.75rem', fontWeight: 600, color: 'inherit', opacity: 0.6, textTransform: 'uppercase' }}\n >\n {title}\n </div>\n ) : null}\n <ul className={clsx('seekora-suggestions-trending-ul', listClassName)} style={{ margin: 0, padding: 0, listStyle: 'none' }}>\n {items.map((trending, i) => {\n const onSelect = () => selectTrendingSearch(trending, i);\n if (renderItem) {\n return <li key={`${trending.query}-${i}`}>{renderItem(trending, i, onSelect)}</li>;\n }\n return (\n <TrendingItem\n key={`${trending.query}-${i}`}\n trending={trending}\n onSelect={onSelect}\n />\n );\n })}\n </ul>\n </div>\n );\n}\n","/**\n * SuggestionsError – error message (primitive)\n */\n\nimport React from 'react';\nimport { useSuggestionsContext } from './SuggestionsContext';\nimport { clsx } from 'clsx';\n\nexport interface SuggestionsErrorProps {\n className?: string;\n style?: React.CSSProperties;\n render?: (error: Error) => React.ReactNode;\n}\n\nexport function SuggestionsError({ className, style, render }: SuggestionsErrorProps) {\n const { error } = useSuggestionsContext();\n if (!error) return null;\n\n if (render) return <>{render(error)}</>;\n\n return (\n <div\n className={clsx('seekora-suggestions-error', className)}\n style={{\n padding: 16,\n color: 'var(--seekora-error, #dc2626)',\n fontSize: '0.875rem',\n ...style,\n }}\n >\n {error.message}\n </div>\n );\n}\n","/**\n * SuggestionsDropdownComposition – reference composition\n *\n * Example layout built from primitives: SearchInput + DropdownPanel containing\n * RecentSearchesList (when query empty), SuggestionList, CategoriesTabs, ProductGrid, TrendingList.\n * Wrap with SearchProvider and SuggestionsProvider. Use as reference or replace\n * with your own arrangement of the same primitives.\n */\n\nimport React from 'react';\nimport { SuggestionsProvider } from './SuggestionsProvider';\nimport { SearchInput } from './SearchInput';\nimport { DropdownPanel } from './DropdownPanel';\nimport { RecentSearchesList } from './RecentSearchesList';\nimport { SuggestionList } from './SuggestionList';\nimport { CategoriesTabs } from './CategoriesTabs';\nimport { ProductGrid } from './ProductGrid';\nimport { TrendingList } from './TrendingList';\nimport { SuggestionsError } from './SuggestionsError';\nimport type { SuggestionsProviderProps } from './SuggestionsProvider';\n\nexport interface SuggestionsDropdownCompositionProps extends Omit<SuggestionsProviderProps, 'children'> {\n /** Show recent searches when query is empty */\n showRecentSearches?: boolean;\n /** Show trending list */\n showTrending?: boolean;\n /** Show categories/filtered tabs */\n showTabs?: boolean;\n /** Show product grid */\n showProducts?: boolean;\n /** SearchInput placeholder */\n placeholder?: string;\n}\n\nexport function SuggestionsDropdownComposition({\n showRecentSearches = true,\n showTrending = true,\n showTabs = true,\n showProducts = true,\n placeholder,\n ...providerProps\n}: SuggestionsDropdownCompositionProps) {\n return (\n <SuggestionsProvider {...providerProps}>\n <div className=\"seekora-suggestions-dropdown-composition\" style={{ position: 'relative', width: '100%' }}>\n <SearchInput placeholder={placeholder} />\n <DropdownPanel>\n <SuggestionsError />\n {showRecentSearches ? <RecentSearchesList /> : null}\n <SuggestionList />\n {showTabs ? <CategoriesTabs /> : null}\n {showProducts ? <ProductGrid /> : null}\n {showTrending ? <TrendingList /> : null}\n </DropdownPanel>\n </div>\n </SuggestionsProvider>\n );\n}\n","/**\n * VariantSelector – full variant selector for product detail pages\n *\n * Three render modes per option:\n * - swatch: color circles (auto-detected for \"Color\" option or when colorMap provided)\n * - button: rectangular buttons (default for most options)\n * - dropdown: <select> for options with many values\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport type { ProductOption, ProductVariant } from '@seekora-ai/ui-sdk-types';\nimport { CustomSelect } from './CustomSelect';\n\nexport interface VariantSelectorProps {\n options: ProductOption[];\n variants: ProductVariant[];\n selections: Record<string, string>;\n onSelectionChange: (optionName: string, value: string) => void;\n /** Override render mode per option name */\n optionRenderModes?: Record<string, 'swatch' | 'button' | 'dropdown'>;\n /** Auto-switch to dropdown when values exceed this count (default: 8) */\n dropdownThreshold?: number;\n /** Map value names to CSS colors */\n colorMap?: Record<string, string>;\n /** Show availability cross-out for unavailable combos */\n showAvailability?: boolean;\n /** Currently matched variant (for display) */\n selectedVariant?: ProductVariant | null;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst COLOR_NAMES: Record<string, string> = {\n black: '#000', white: '#fff', red: '#ef4444', blue: '#3b82f6',\n green: '#22c55e', yellow: '#eab308', orange: '#f97316', purple: '#a855f7',\n pink: '#ec4899', brown: '#92400e', grey: '#6b7280', gray: '#6b7280',\n navy: '#1e3a5f', beige: '#d4c5a9', cream: '#fffdd0', ivory: '#fffff0',\n teal: '#0d9488', coral: '#ff7f50', maroon: '#800000', charcoal: '#36454f',\n sage: '#9caf88', lavender: '#e6e6fa', mint: '#98fb98', rust: '#b7410e',\n plum: '#8e4585', slate: '#708090', indigo: '#4b0082', gold: '#ffd700',\n silver: '#c0c0c0', rose: '#ff007f', raven: '#0a0a0a', natural: '#f5f0e1',\n bone: '#e3dac9', sand: '#c2b280', olive: '#808000', khaki: '#c3b091',\n burgundy: '#800020', wine: '#722f37', mauve: '#e0b0ff', tan: '#d2b48c',\n};\n\nconst isColorOption = (name: string): boolean => {\n const lower = name.toLowerCase();\n return lower === 'color' || lower === 'colour' || lower === 'colors' || lower === 'colours';\n};\n\nconst resolveColor = (value: string, colorMap?: Record<string, string>): string | null => {\n if (colorMap?.[value]) return colorMap[value];\n const lower = value.toLowerCase();\n if (colorMap?.[lower]) return colorMap[lower];\n return COLOR_NAMES[lower] ?? null;\n};\n\nconst getAvailability = (\n optionName: string,\n value: string,\n options: ProductOption[],\n variants: ProductVariant[],\n selections: Record<string, string>\n): boolean => {\n const optionIndex = options.findIndex((o) => o.name === optionName);\n if (optionIndex === -1) return true;\n const optionKey = `option${optionIndex + 1}` as 'option1' | 'option2' | 'option3';\n\n return variants.some((variant) => {\n if (variant[optionKey] !== value) return false;\n if (variant.available === false) return false;\n\n for (const [selName, selValue] of Object.entries(selections)) {\n if (selName === optionName) continue;\n const selIdx = options.findIndex((o) => o.name === selName);\n if (selIdx === -1) continue;\n const selKey = `option${selIdx + 1}` as 'option1' | 'option2' | 'option3';\n if (variant[selKey] !== selValue) return false;\n }\n return true;\n });\n};\n\nexport function VariantSelector({\n options,\n variants,\n selections,\n onSelectionChange,\n optionRenderModes,\n dropdownThreshold = 8,\n colorMap,\n showAvailability = true,\n selectedVariant: _selectedVariant,\n className,\n style,\n}: VariantSelectorProps) {\n if (!options || options.length === 0) return null;\n\n const getRenderMode = (option: ProductOption): 'swatch' | 'button' | 'dropdown' => {\n if (optionRenderModes?.[option.name]) return optionRenderModes[option.name];\n if (isColorOption(option.name)) return 'swatch';\n if (option.values.length > dropdownThreshold) return 'dropdown';\n return 'button';\n };\n\n return (\n <div className={clsx('seekora-variant-selector', className)} style={{ display: 'flex', flexDirection: 'column', gap: 16, ...style }}>\n {options.map((option) => {\n const mode = getRenderMode(option);\n const selected = selections[option.name];\n\n return (\n <div key={option.name} className=\"seekora-variant-option-group\">\n <label\n className=\"seekora-variant-option-label\"\n style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 600,\n marginBottom: 8,\n color: 'var(--seekora-text-primary, inherit)',\n }}\n >\n {option.name}\n {selected && (\n <span style={{ fontWeight: 400, marginLeft: 6, color: 'var(--seekora-text-secondary, inherit)' }}>\n {selected}\n </span>\n )}\n </label>\n\n {mode === 'dropdown' ? (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n >\n <CustomSelect\n className=\"seekora-variant-dropdown\"\n value={selected ?? ''}\n onChange={(val) => onSelectionChange(option.name, val)}\n placeholder={`Select ${option.name}`}\n aria-label={`Select ${option.name}`}\n options={option.values.map((val) => {\n const available = showAvailability\n ? getAvailability(option.name, val, options, variants, selections)\n : true;\n return {\n value: val,\n label: available ? val : `${val} (Unavailable)`,\n disabled: !available,\n };\n })}\n style={{\n minWidth: 120,\n '--seekora-select-border': 'var(--seekora-border-color, rgba(128,128,128,0.2))',\n '--seekora-select-bg': 'var(--seekora-bg-surface, transparent)',\n '--seekora-select-color': 'var(--seekora-text-primary, inherit)',\n } as React.CSSProperties}\n />\n </div>\n ) : (\n <div className=\"seekora-variant-buttons\" style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {option.values.map((value) => {\n const isActive = selected === value;\n const available = showAvailability\n ? getAvailability(option.name, value, options, variants, selections)\n : true;\n const color = mode === 'swatch' ? resolveColor(value, colorMap) : null;\n\n if (mode === 'swatch' && color) {\n return (\n <button\n key={value}\n type=\"button\"\n className={clsx(\n 'seekora-variant-color-swatch',\n isActive && 'seekora-variant-button--active',\n !available && 'seekora-variant-button--unavailable'\n )}\n title={value}\n onMouseDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={(e) => {\n e.stopPropagation();\n onSelectionChange(option.name, value);\n }}\n disabled={!available}\n style={{\n width: 32,\n height: 32,\n borderRadius: '50%',\n backgroundColor: color,\n border: isActive\n ? '2px solid var(--seekora-primary, #111827)'\n : '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n outline: isActive ? '2px solid var(--seekora-primary, #111827)' : 'none',\n outlineOffset: 2,\n cursor: available ? 'pointer' : 'not-allowed',\n opacity: available ? 1 : 0.4,\n position: 'relative',\n padding: 0,\n }}\n aria-label={`${option.name}: ${value}`}\n aria-pressed={isActive}\n />\n );\n }\n\n return (\n <button\n key={value}\n type=\"button\"\n className={clsx(\n 'seekora-variant-button',\n isActive && 'seekora-variant-button--active',\n !available && 'seekora-variant-button--unavailable'\n )}\n onMouseDown={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onClick={(e) => {\n e.stopPropagation();\n onSelectionChange(option.name, value);\n }}\n disabled={!available}\n style={{\n padding: '6px 16px',\n fontSize: '0.875rem',\n borderRadius: 6,\n border: isActive\n ? '2px solid var(--seekora-primary, #111827)'\n : '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: isActive\n ? 'var(--seekora-primary, #111827)'\n : 'var(--seekora-bg-surface, transparent)',\n color: isActive\n ? 'transparent'\n : 'var(--seekora-text-primary, inherit)',\n cursor: available ? 'pointer' : 'not-allowed',\n opacity: available ? 1 : 0.5,\n textDecoration: !available ? 'line-through' : 'none',\n fontWeight: isActive ? 600 : 400,\n transition: 'all 120ms ease',\n }}\n aria-label={`${option.name}: ${value}`}\n aria-pressed={isActive}\n >\n {value}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * withAnalytics – HOC that wraps any React component to inject analytics tracking\n */\n\nimport React, { useRef, useEffect, useCallback } from 'react';\nimport type { SeekoraClient, SearchContext } from '@seekora-ai/search-sdk';\nimport type { ProductItem } from '@seekora-ai/ui-sdk-types';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface WithAnalyticsConfig {\n /** Track clicks on the component */\n trackClick?: boolean;\n /** Track impressions (visibility) */\n trackImpression?: boolean;\n /** Custom event name for click */\n clickEventName?: string;\n /** Extract product/item data from props */\n getProductFromProps?: (props: any) => ProductItem | null;\n /** Extract position from props */\n getPositionFromProps?: (props: any) => number;\n}\n\nexport interface WithAnalyticsInjectedProps {\n seekoraClient?: SeekoraClient;\n seekoraContext?: SearchContext | Partial<SearchContext>;\n}\n\nexport function withAnalytics<P extends object>(\n Component: React.ComponentType<P>,\n config: WithAnalyticsConfig = {}\n): React.ComponentType<P & WithAnalyticsInjectedProps> {\n const {\n trackClick = true,\n trackImpression = false,\n clickEventName = 'product.click',\n getProductFromProps = () => null,\n getPositionFromProps = () => 0,\n } = config;\n\n const displayName = Component.displayName || Component.name || 'Component';\n\n const Wrapped = React.forwardRef<any, P & WithAnalyticsInjectedProps>(\n (props, ref) => {\n const { seekoraClient, seekoraContext, ...rest } = props as P & WithAnalyticsInjectedProps;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const impressionTrackedRef = useRef(false);\n\n const product = getProductFromProps(rest);\n const position = getPositionFromProps(rest);\n\n const sendEvent = useCallback(\n async (eventName: string, metadata: Record<string, any>) => {\n if (!seekoraClient) return;\n try {\n await seekoraClient.trackEvent?.({\n event_name: eventName,\n metadata: {\n product_id: product?.id || product?.objectID,\n product_title: product?.title || product?.name,\n product_price: product?.price,\n position,\n timestamp: Date.now(),\n source: 'with_analytics_hoc',\n ...metadata,\n },\n }, seekoraContext);\n } catch (error) {\n log.warn(`withAnalytics: Failed to track ${eventName}`, { error });\n }\n },\n [seekoraClient, seekoraContext, product, position]\n );\n\n const handleClick = useCallback(() => {\n if (!trackClick || !product) return;\n sendEvent(clickEventName, {});\n\n if (seekoraClient?.trackClick && product) {\n Promise.resolve(\n seekoraClient.trackClick(\n product.id || product.objectID || '',\n position + 1,\n seekoraContext as SearchContext\n )\n ).catch(() => {});\n }\n }, [trackClick, product, sendEvent, seekoraClient, seekoraContext, position]);\n\n // Impression tracking\n useEffect(() => {\n if (!trackImpression || !seekoraClient || !containerRef.current || impressionTrackedRef.current) return;\n\n if (typeof IntersectionObserver === 'undefined') return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !impressionTrackedRef.current) {\n impressionTrackedRef.current = true;\n sendEvent('product.impression', {});\n observer.disconnect();\n }\n }\n },\n { threshold: 0.5 }\n );\n\n observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [trackImpression, seekoraClient, sendEvent]);\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<any>).current = node;\n }}\n onClick={handleClick}\n style={{ display: 'contents' }}\n >\n <Component {...(rest as P)} />\n </div>\n );\n }\n );\n\n Wrapped.displayName = `withAnalytics(${displayName})`;\n return Wrapped as any;\n}\n","/**\n * AnalyticsProvider – context + delegated event listener for data-seekora-* attribute-based analytics\n *\n * Installs a delegated click listener on a container. Any descendant with\n * data-seekora-track=\"click\"|\"add-to-cart\" and data-seekora-product-id=\"...\"\n * automatically fires analytics events without React wiring.\n */\n\nimport React, { useRef, useEffect, useCallback, createContext, useContext } from 'react';\nimport type { SeekoraClient, SearchContext } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface AnalyticsProviderProps {\n client: SeekoraClient;\n context?: SearchContext | Partial<SearchContext>;\n children: React.ReactNode;\n}\n\ninterface AnalyticsContextValue {\n client: SeekoraClient;\n context?: SearchContext | Partial<SearchContext>;\n}\n\nconst AnalyticsContext = createContext<AnalyticsContextValue | null>(null);\n\nexport const useAnalyticsProvider = () => useContext(AnalyticsContext);\n\nexport function AnalyticsProvider({ client, context, children }: AnalyticsProviderProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const sendEvent = useCallback(\n async (eventName: string, metadata: Record<string, any>) => {\n try {\n await client.trackEvent?.({\n event_name: eventName,\n metadata: {\n timestamp: Date.now(),\n source: 'analytics_provider_delegation',\n ...metadata,\n },\n }, context);\n log.verbose(`AnalyticsProvider: ${eventName}`, metadata);\n } catch (error) {\n log.warn(`AnalyticsProvider: Failed to track ${eventName}`, { error });\n }\n },\n [client, context]\n );\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n\n // Walk up from target to find element with data-seekora-track\n const tracked = target.closest('[data-seekora-track]') as HTMLElement | null;\n if (!tracked) return;\n\n const trackType = tracked.getAttribute('data-seekora-track');\n const productId = tracked.getAttribute('data-seekora-product-id');\n const position = tracked.getAttribute('data-seekora-position');\n const section = tracked.getAttribute('data-seekora-section');\n const variantSku = tracked.getAttribute('data-seekora-variant-sku');\n const variantOption = tracked.getAttribute('data-seekora-variant-option');\n const variantValue = tracked.getAttribute('data-seekora-variant-value');\n\n const metadata: Record<string, any> = {};\n if (productId) metadata.product_id = productId;\n if (position) metadata.position = parseInt(position, 10);\n if (section) metadata.section = section;\n\n switch (trackType) {\n case 'click':\n sendEvent('product.click', metadata);\n if (client?.trackClick && productId) {\n const pos = position ? parseInt(position, 10) + 1 : 1;\n Promise.resolve(client.trackClick(productId, pos, context as SearchContext)).catch(() => {});\n }\n break;\n\n case 'add-to-cart':\n if (variantSku) metadata.variant_sku = variantSku;\n sendEvent('product.add_to_cart', metadata);\n break;\n\n case 'variant-select':\n if (variantOption) metadata.option_name = variantOption;\n if (variantValue) metadata.option_value = variantValue;\n sendEvent('product.variant_select', metadata);\n break;\n\n default:\n // Custom track type — use it as event name\n if (trackType) {\n sendEvent(trackType, metadata);\n }\n break;\n }\n };\n\n container.addEventListener('click', handleClick);\n return () => container.removeEventListener('click', handleClick);\n }, [client, context, sendEvent]);\n\n return (\n <AnalyticsContext.Provider value={{ client, context }}>\n <div ref={containerRef} style={{ display: 'contents' }}>\n {children}\n </div>\n </AnalyticsContext.Provider>\n );\n}\n","/**\n * SectionSearchContext – preset query/filter section state\n *\n * For menus, sidebar, front-page blocks. Independent of main search state.\n */\n\nimport React, { createContext, useContext } from 'react';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface SectionSearchContextValue {\n items: unknown[];\n loading: boolean;\n error: Error | null;\n totalCount: number;\n sectionId?: string;\n trackClick: (item: unknown, position: number) => void;\n}\n\nexport const SectionSearchContext = createContext<SectionSearchContextValue | null>(null);\n\nexport function useSectionSearchContext(): SectionSearchContextValue {\n const context = useContext(SectionSearchContext);\n if (!context) {\n const error = new Error('useSectionSearchContext must be used within a SectionSearchProvider');\n log.error('SectionSearchContext: not available', { error: error.message });\n throw error;\n }\n return context;\n}\n","/**\n * SectionSearchProvider – preset query + filter section\n *\n * Runs client.search(query, { refinements, hitsPerPage, sortBy }) on mount and when\n * query/filters change. Does not use global SearchStateManager. Use for menus,\n * sidebar, front-page blocks (e.g. \"New arrivals\", \"On sale\").\n */\n\nimport React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useSearchContext } from '../SearchProvider';\nimport { SectionSearchContext } from './SectionSearchContext';\n\nexport interface RefinementInput {\n field: string;\n value: string;\n}\n\nexport interface SectionSearchProviderProps {\n children: React.ReactNode;\n query: string;\n refinements?: RefinementInput[];\n maxItems?: number;\n sortBy?: string;\n enabled?: boolean;\n sectionId?: string;\n /** Additional search options merged into the request (e.g. { widget_mode: false }). */\n searchOptions?: Record<string, unknown>;\n}\n\nfunction extractItems(response: any): unknown[] {\n if (!response) return [];\n if (Array.isArray(response.results)) return response.results;\n if (Array.isArray(response.hits)) return response.hits;\n const data = response.data;\n if (data && Array.isArray(data.results)) return data.results;\n if (data && Array.isArray(data.data)) return data.data;\n return [];\n}\n\nfunction extractTotal(response: any): number {\n if (!response) return 0;\n const n = response.totalResults ?? response.total ?? response.total_results;\n if (typeof n === 'number') return n;\n const data = response.data;\n if (data?.total_results != null) return Number(data.total_results);\n if (data?.data?.total_results != null) return Number(data.data.total_results);\n return 0;\n}\n\nexport function SectionSearchProvider({\n children,\n query,\n refinements = [],\n maxItems = 12,\n sortBy,\n enabled = true,\n sectionId,\n searchOptions,\n}: SectionSearchProviderProps) {\n const { client } = useSearchContext();\n const [items, setItems] = useState<unknown[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [totalCount, setTotalCount] = useState(0);\n\n useEffect(() => {\n if (!enabled || !client?.search) {\n setItems([]);\n setLoading(false);\n setError(null);\n setTotalCount(0);\n return;\n }\n\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const options: Record<string, unknown> = {\n ...searchOptions,\n per_page: maxItems,\n page: 1,\n };\n if (sortBy) options.sort_by = sortBy;\n if (refinements.length > 0) {\n options.filter_by = refinements.map((r) => `${r.field}:${r.value}`).join(',');\n }\n\n client\n .search(query, options as any)\n .then((response) => {\n if (cancelled) return;\n setItems(extractItems(response));\n setTotalCount(extractTotal(response));\n setLoading(false);\n })\n .catch((err) => {\n if (cancelled) return;\n setError(err instanceof Error ? err : new Error(String(err)));\n setItems([]);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [client, enabled, query, maxItems, sortBy, refinements, searchOptions]);\n\n const trackClick = useCallback(\n (item: unknown, position: number) => {\n if (!client?.trackEvent) return;\n const id = (item as any)?.id ?? (item as any)?.objectID;\n client.trackEvent(\n {\n event_name: 'section_result_click',\n clicked_item_id: id,\n position,\n section: sectionId,\n metadata: { section_id: sectionId },\n } as any,\n undefined\n );\n },\n [client, sectionId]\n );\n\n const value = useMemo(\n () => ({\n items,\n loading,\n error,\n totalCount,\n sectionId,\n trackClick,\n }),\n [items, loading, error, totalCount, sectionId, trackClick]\n );\n\n return <SectionSearchContext.Provider value={value}>{children}</SectionSearchContext.Provider>;\n}\n","/**\n * SectionError – error state for section (primitive)\n */\n\nimport React from 'react';\nimport { useSectionSearchContext } from './SectionSearchContext';\n\nexport interface SectionErrorProps {\n className?: string;\n style?: React.CSSProperties;\n render?: (error: Error) => React.ReactNode;\n}\n\nexport function SectionError({ className, style, render }: SectionErrorProps) {\n const { error } = useSectionSearchContext();\n if (!error) return null;\n if (render) return <>{render(error)}</>;\n return (\n <div className={className} style={{ padding: 16, color: 'var(--seekora-error,#dc2626)', fontSize: '0.875rem', ...style }}>\n {error.message}\n </div>\n );\n}\n","/**\n * SectionItemGrid – generic grid of items from SectionSearchProvider (primitive)\n */\n\nimport React from 'react';\nimport { useSectionSearchContext } from './SectionSearchContext';\nimport { ItemGrid } from '../suggestions-primitives/ItemGrid';\nimport { SectionError } from './SectionError';\nimport type { GenericItem } from '../suggestions-primitives/ItemCard';\n\nexport interface SectionItemGridProps {\n columns?: number;\n maxItems?: number;\n className?: string;\n style?: React.CSSProperties;\n getItemId?: (item: unknown) => string;\n getItemTitle?: (item: unknown) => string;\n getItemImage?: (item: unknown) => string | undefined;\n getItemDescription?: (item: unknown) => string | undefined;\n getItemUrl?: (item: unknown) => string | undefined;\n renderItem?: (item: unknown, index: number) => React.ReactNode;\n}\n\nexport function SectionItemGrid({\n columns = 4,\n maxItems = 12,\n className,\n style,\n getItemId = (i) => (i as GenericItem).id ?? String((i as any)?.objectID ?? ''),\n getItemTitle = (i) => (i as GenericItem).title ?? (i as any)?.title ?? '',\n getItemImage = (i) => (i as GenericItem).image ?? (i as any)?.image,\n getItemDescription = (i) => (i as GenericItem).description ?? (i as any)?.description,\n getItemUrl = (i) => (i as GenericItem).url ?? (i as any)?.url,\n renderItem,\n}: SectionItemGridProps) {\n const { items, loading, error, trackClick } = useSectionSearchContext();\n\n if (error) return <SectionError className={className} style={style} />;\n // When loading with previous items, show them (no loading screen)\n\n return (\n <ItemGrid\n items={items}\n maxItems={maxItems}\n columns={columns}\n className={className}\n style={style}\n getItemId={getItemId as any}\n getItemTitle={getItemTitle as any}\n getItemImage={getItemImage as any}\n getItemDescription={getItemDescription as any}\n getItemUrl={getItemUrl as any}\n renderItem={renderItem as any}\n onItemClick={(item, index) => trackClick(item, index)}\n />\n );\n}\n","/**\n * ProductGallery – product detail image gallery (primitive)\n *\n * Uses ImageDisplay with configurable variant (carousel, thumbStrip, etc.).\n * For use on individual product page.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ImageDisplay, type ImageDisplayVariant } from '../primitives/ImageDisplay';\nimport type { ImageZoomMode } from '../primitives/ImageZoom';\n\nexport interface ProductGalleryProps {\n images: string[];\n variant?: ImageDisplayVariant;\n alt?: string;\n className?: string;\n style?: React.CSSProperties;\n carouselAutoplay?: boolean;\n carouselIntervalMs?: number;\n /** Enable zoom functionality on product images */\n enableZoom?: boolean;\n /** Zoom mode: 'hover' (Amazon-style), 'lens', 'click' (lightbox), 'both' */\n zoomMode?: ImageZoomMode;\n /** Zoom magnification level (2 = 200%, 3 = 300%) */\n zoomLevel?: number;\n}\n\nexport function ProductGallery({\n images,\n variant = 'thumbStrip',\n alt = 'Product',\n className,\n style,\n carouselAutoplay,\n carouselIntervalMs,\n enableZoom,\n zoomMode,\n zoomLevel,\n}: ProductGalleryProps) {\n return (\n <div className={clsx('seekora-product-gallery', className)} style={style}>\n <ImageDisplay\n images={images}\n variant={variant}\n alt={alt}\n carouselAutoplay={carouselAutoplay}\n carouselIntervalMs={carouselIntervalMs}\n enableZoom={enableZoom}\n zoomMode={zoomMode}\n zoomLevel={zoomLevel}\n />\n </div>\n );\n}\n","/**\n * ProductInfo – product detail block (primitive)\n *\n * Title, description, price, optional variant selector and CTA. Minimal layout;\n * override with className/style. For use on individual product page.\n *\n * When options/variants/selections/onSelectionChange are provided and\n * renderVariantSelector is NOT provided, renders the built-in VariantSelector.\n * renderVariantSelector still takes priority as an override.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { PriceDisplay } from '../primitives/PriceDisplay';\nimport { BadgeList } from '../primitives/BadgeList';\nimport { VariantSelector } from '../primitives/VariantSelector';\nimport type { ProductBadge, ProductOption, ProductVariant } from '@seekora-ai/ui-sdk-types';\n\nexport interface ProductInfoProps {\n title: string;\n description?: string;\n price?: number | string;\n currency?: string;\n /** Compare/original price for strikethrough display */\n comparePrice?: number | string;\n /** Product brand */\n brand?: string;\n /** Whether product is available */\n available?: boolean;\n /** Badges to display */\n badges?: ProductBadge[];\n /** Product option axes (Color, Size, etc.) */\n options?: ProductOption[];\n /** Product variants */\n variants?: ProductVariant[];\n /** Currently selected variant */\n selectedVariant?: ProductVariant | null;\n /** Current option selections */\n selections?: Record<string, string>;\n /** Called when an option value is selected */\n onSelectionChange?: (optionName: string, value: string) => void;\n /** Optional variant selector override (takes priority over built-in) */\n renderVariantSelector?: () => React.ReactNode;\n /** Optional CTA (e.g. Add to cart) */\n renderCTA?: () => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ProductInfo({\n title,\n description,\n price,\n currency = '$',\n comparePrice,\n brand,\n available,\n badges,\n options,\n variants,\n selectedVariant: _selectedVariant,\n selections,\n onSelectionChange,\n renderVariantSelector,\n renderCTA,\n className,\n style,\n}: ProductInfoProps) {\n const priceNum = price != null ? (typeof price === 'number' ? price : parseFloat(String(price))) : null;\n const comparePriceNum = comparePrice != null ? (typeof comparePrice === 'number' ? comparePrice : parseFloat(String(comparePrice))) : null;\n\n const showBuiltInVariantSelector =\n !renderVariantSelector && options && options.length > 0 && variants && selections && onSelectionChange;\n\n return (\n <div className={clsx('seekora-product-info', className)} style={{ display: 'flex', flexDirection: 'column', gap: 12, ...style }}>\n {badges && badges.length > 0 && (\n <BadgeList badges={badges} position=\"inline\" />\n )}\n {brand && (\n <span className=\"seekora-product-info-brand\" style={{ fontSize: '0.8125rem', color: 'var(--seekora-text-secondary)', textTransform: 'uppercase', letterSpacing: '0.02em' }}>\n {brand}\n </span>\n )}\n <h1 className=\"seekora-product-info-title\" style={{ fontSize: '1.25rem', fontWeight: 600, margin: 0 }}>\n {title}\n </h1>\n {(priceNum != null && !Number.isNaN(priceNum)) && (\n <div className=\"seekora-product-info-price\">\n <PriceDisplay\n price={priceNum}\n comparePrice={comparePriceNum ?? undefined}\n currency={currency}\n style={{ fontSize: '1.125rem' }}\n />\n </div>\n )}\n {available != null && (\n <span\n className=\"seekora-product-info-availability\"\n style={{\n fontSize: '0.875rem',\n color: available ? 'var(--seekora-success, #22c55e)' : 'var(--seekora-error, #ef4444)',\n }}\n >\n {available ? 'In Stock' : 'Out of Stock'}\n </span>\n )}\n {description ? (\n <p className=\"seekora-product-info-description\" style={{ fontSize: '0.875rem', color: 'var(--seekora-text-secondary)', margin: 0, lineHeight: 1.5 }}>\n {description}\n </p>\n ) : null}\n {renderVariantSelector ? renderVariantSelector() : null}\n {showBuiltInVariantSelector && (\n <VariantSelector\n options={options!}\n variants={variants!}\n selections={selections!}\n onSelectionChange={onSelectionChange!}\n showAvailability\n />\n )}\n {renderCTA?.()}\n </div>\n );\n}\n","/**\n * ProductRecommendations – related / frequently bought (primitive)\n *\n * Renders a section of recommended items (generic ItemGrid or product list).\n * Pass items and onItemClick; or wrap SectionSearchProvider with preset query for \"related\".\n * For use on individual product page.\n */\n\nimport React from 'react';\nimport { clsx } from 'clsx';\nimport { ItemGrid } from '../suggestions-primitives/ItemGrid';\nimport type { GenericItem } from '../suggestions-primitives/ItemCard';\n\nexport interface ProductRecommendationsProps {\n title?: string;\n items: GenericItem[] | unknown[];\n onItemClick?: (item: unknown, index: number) => void;\n maxItems?: number;\n columns?: number;\n className?: string;\n style?: React.CSSProperties;\n renderItem?: (item: unknown, index: number) => React.ReactNode;\n}\n\nexport function ProductRecommendations({\n title = 'You may also like',\n items,\n onItemClick,\n maxItems = 6,\n columns = 3,\n className,\n style,\n renderItem,\n}: ProductRecommendationsProps) {\n if (!items?.length) return null;\n\n return (\n <div className={clsx('seekora-product-recommendations', className)} style={style}>\n <h2 className=\"seekora-product-recommendations-title\" style={{ fontSize: '1rem', fontWeight: 600, marginBottom: 12 }}>\n {title}\n </h2>\n <ItemGrid\n items={items}\n maxItems={maxItems}\n columns={columns}\n onItemClick={onItemClick as any}\n renderItem={renderItem as any}\n />\n </div>\n );\n}\n","/**\n * Responsive Utilities and Breakpoints\n * \n * Shared responsive design utilities for all dropdown components\n */\n\nimport { useState, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// Breakpoints\n// ============================================================================\n\nexport const breakpoints = {\n xs: 0,\n sm: 480,\n md: 768,\n lg: 1024,\n xl: 1280,\n} as const;\n\nexport type Breakpoint = keyof typeof breakpoints;\n\n// ============================================================================\n// Media Query Helpers\n// ============================================================================\n\nexport const mediaQueries = {\n xs: `@media (max-width: ${breakpoints.sm - 1}px)`,\n sm: `@media (min-width: ${breakpoints.sm}px) and (max-width: ${breakpoints.md - 1}px)`,\n md: `@media (min-width: ${breakpoints.md}px) and (max-width: ${breakpoints.lg - 1}px)`,\n lg: `@media (min-width: ${breakpoints.lg}px) and (max-width: ${breakpoints.xl - 1}px)`,\n xl: `@media (min-width: ${breakpoints.xl}px)`,\n mobile: `@media (max-width: ${breakpoints.md - 1}px)`,\n tablet: `@media (min-width: ${breakpoints.md}px) and (max-width: ${breakpoints.lg - 1}px)`,\n desktop: `@media (min-width: ${breakpoints.lg}px)`,\n touch: '@media (hover: none) and (pointer: coarse)',\n mouse: '@media (hover: hover) and (pointer: fine)',\n} as const;\n\n// ============================================================================\n// Touch-Friendly Sizing\n// ============================================================================\n\nexport const touchTargets = {\n /** Minimum touch target size per WCAG guidelines */\n minimum: 44,\n /** Comfortable touch target size */\n comfortable: 48,\n /** Large touch target for primary actions */\n large: 56,\n} as const;\n\n// ============================================================================\n// Responsive Spacing\n// ============================================================================\n\nexport const responsiveSpacing = {\n mobile: {\n xs: '4px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '20px',\n },\n desktop: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n} as const;\n\n// ============================================================================\n// Responsive Typography\n// ============================================================================\n\nexport const responsiveTypography = {\n mobile: {\n xs: '11px',\n sm: '13px',\n md: '15px',\n lg: '17px',\n xl: '20px',\n xxl: '24px',\n },\n desktop: {\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '18px',\n xxl: '24px',\n },\n} as const;\n\n// ============================================================================\n// CSS Generation Helpers\n// ============================================================================\n\n/**\n * Generate responsive CSS class string\n */\nexport const generateResponsiveCSS = (componentName: string): string => `\n /* Base responsive styles for ${componentName} */\n .${componentName} {\n --seekora-touch-target: ${touchTargets.minimum}px;\n --seekora-spacing-mobile: ${responsiveSpacing.mobile.md};\n --seekora-spacing-desktop: ${responsiveSpacing.desktop.md};\n }\n\n /* Mobile-first base */\n ${mediaQueries.mobile} {\n .${componentName} {\n width: 100% !important;\n max-width: 100vw !important;\n left: 0 !important;\n right: 0 !important;\n border-radius: 0 !important;\n margin-top: 0 !important;\n }\n \n .${componentName} [data-item],\n .${componentName} [role=\"option\"] {\n min-height: var(--seekora-touch-target);\n padding: 12px 16px;\n }\n \n .${componentName} button {\n min-height: var(--seekora-touch-target);\n min-width: var(--seekora-touch-target);\n }\n }\n\n /* Touch device optimizations */\n ${mediaQueries.touch} {\n .${componentName} [data-item]:active,\n .${componentName} [role=\"option\"]:active {\n background-color: var(--seekora-bg-hover, #f0f0f0) !important;\n }\n \n /* Disable hover states on touch */\n .${componentName} [data-item]:hover,\n .${componentName} [role=\"option\"]:hover {\n background-color: transparent;\n }\n }\n\n /* Tablet adjustments */\n ${mediaQueries.tablet} {\n .${componentName} {\n max-width: 90vw;\n margin: 8px auto;\n }\n }\n\n /* Desktop optimizations */\n ${mediaQueries.desktop} {\n .${componentName} [data-item],\n .${componentName} [role=\"option\"] {\n min-height: 40px;\n }\n }\n`;\n\n/**\n * Inject responsive styles into document\n */\nexport const injectResponsiveStyles = (componentName: string): void => {\n const styleId = `seekora-responsive-${componentName}`;\n \n // Don't inject if already exists\n if (typeof document !== 'undefined' && document.getElementById(styleId)) {\n return;\n }\n \n if (typeof document !== 'undefined') {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = generateResponsiveCSS(componentName);\n document.head.appendChild(style);\n }\n};\n\n// ============================================================================\n// Hook: useResponsive\n// ============================================================================\n\nexport interface ResponsiveState {\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n isTouch: boolean;\n width: number;\n height: number;\n breakpoint: Breakpoint;\n}\n\nexport const useResponsive = (): ResponsiveState => {\n const [state, setState] = useState<ResponsiveState>({\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n isTouch: false,\n width: typeof window !== 'undefined' ? window.innerWidth : 1024,\n height: typeof window !== 'undefined' ? window.innerHeight : 768,\n breakpoint: 'lg',\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const getBreakpoint = (width: number): Breakpoint => {\n if (width < breakpoints.sm) return 'xs';\n if (width < breakpoints.md) return 'sm';\n if (width < breakpoints.lg) return 'md';\n if (width < breakpoints.xl) return 'lg';\n return 'xl';\n };\n\n const updateState = () => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n const breakpoint = getBreakpoint(width);\n const isTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n setState({\n isMobile: width < breakpoints.md,\n isTablet: width >= breakpoints.md && width < breakpoints.lg,\n isDesktop: width >= breakpoints.lg,\n isTouch,\n width,\n height,\n breakpoint,\n });\n };\n\n updateState();\n window.addEventListener('resize', updateState);\n return () => window.removeEventListener('resize', updateState);\n }, []);\n\n return state;\n};\n\n// ============================================================================\n// Responsive Style Merger\n// ============================================================================\n\nexport interface ResponsiveStyles {\n base: CSSProperties;\n mobile?: CSSProperties;\n tablet?: CSSProperties;\n desktop?: CSSProperties;\n}\n\n/**\n * Get styles for current breakpoint\n */\nexport const getResponsiveStyle = (\n styles: ResponsiveStyles,\n responsive: ResponsiveState\n): CSSProperties => {\n const { isMobile, isTablet } = responsive;\n \n return {\n ...styles.base,\n ...(isMobile && styles.mobile),\n ...(isTablet && styles.tablet),\n ...(!isMobile && !isTablet && styles.desktop),\n };\n};\n\n// ============================================================================\n// Safe Area Handling\n// ============================================================================\n\nexport const safeAreaInsets = {\n top: 'env(safe-area-inset-top, 0px)',\n bottom: 'env(safe-area-inset-bottom, 0px)',\n left: 'env(safe-area-inset-left, 0px)',\n right: 'env(safe-area-inset-right, 0px)',\n} as const;\n\n/**\n * Get padding with safe area insets\n */\nexport const getSafeAreaPadding = (\n position: 'top' | 'bottom' | 'left' | 'right',\n additionalPadding: string = '0px'\n): string => {\n return `calc(${safeAreaInsets[position]} + ${additionalPadding})`;\n};\n","/**\n * Shared Styles Index\n */\n\nimport { useEffect } from 'react';\n\nexport * from './responsive';\n\n// ============================================================================\n// Global Responsive CSS for all Dropdown Variants\n// ============================================================================\n\nexport const globalResponsiveCSS = `\n/* ============================================\n SEEKORA DROPDOWN - RESPONSIVE STYLES\n ============================================ */\n\n/* CSS Variables for responsiveness */\n:root {\n --seekora-touch-target-min: 44px;\n --seekora-touch-target-comfortable: 48px;\n --seekora-mobile-padding: 16px;\n --seekora-desktop-padding: 20px;\n}\n\n/* Base responsive rules for all dropdowns */\n[class*=\"seekora-\"][class*=\"-dropdown\"] {\n box-sizing: border-box;\n}\n\n[class*=\"seekora-\"][class*=\"-dropdown\"] * {\n box-sizing: border-box;\n}\n\n/* ============================================\n MOBILE STYLES (< 768px)\n ============================================ */\n@media (max-width: 767px) {\n /* Full-width dropdowns on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"]:not(.seekora-mobile-sheet):not(.seekora-spotlight-dropdown) {\n width: 100% !important;\n max-width: 100vw !important;\n left: 0 !important;\n right: 0 !important;\n border-radius: 0 !important;\n margin: 0 !important;\n }\n\n /* Touch-friendly item sizes */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item],\n [class*=\"seekora-\"][class*=\"-dropdown\"] .suggestion-item,\n [class*=\"seekora-\"][class*=\"-dropdown\"] .product-card {\n min-height: var(--seekora-touch-target-min);\n }\n\n /* Larger padding on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item] {\n padding: 14px var(--seekora-mobile-padding) !important;\n }\n\n /* Larger fonts on mobile for readability */\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n font-size: 16px !important;\n }\n\n /* Stack columns on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .dropdown-content,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"display: flex\"][style*=\"flex-direction\"] {\n flex-direction: column !important;\n }\n\n /* Full-width columns on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 40%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 45%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 50%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 55%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 60%\"] {\n width: 100% !important;\n flex: none !important;\n }\n\n /* Product grid adjustments */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-grid,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"grid-template-columns\"] {\n grid-template-columns: repeat(2, 1fr) !important;\n gap: 12px !important;\n }\n\n /* Horizontal scroll for products on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-scroll {\n display: flex !important;\n overflow-x: auto !important;\n scroll-snap-type: x mandatory !important;\n -webkit-overflow-scrolling: touch !important;\n padding-bottom: 8px !important;\n }\n\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-scroll > * {\n scroll-snap-align: start !important;\n flex-shrink: 0 !important;\n }\n\n /* Hide keyboard hints on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .keyboard-hint,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [class*=\"keyboard\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] kbd,\n [class*=\"seekora-\"][class*=\"-dropdown\"] .kbd {\n display: none !important;\n }\n\n /* Safe area padding for notched devices */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"padding-bottom\"] {\n padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 12px) !important;\n }\n}\n\n/* ============================================\n TOUCH DEVICE STYLES\n ============================================ */\n@media (hover: none) and (pointer: coarse) {\n /* Active state instead of hover for touch */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:active,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item]:active,\n [class*=\"seekora-\"][class*=\"-dropdown\"] button:active {\n background-color: var(--seekora-bg-hover, rgba(0,0,0,0.05)) !important;\n transform: scale(0.98);\n }\n\n /* Disable hover effects on touch */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:hover,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item]:hover {\n background-color: transparent;\n }\n\n /* Larger touch targets */\n [class*=\"seekora-\"][class*=\"-dropdown\"] button,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"button\"] {\n min-height: var(--seekora-touch-target-min);\n min-width: var(--seekora-touch-target-min);\n }\n\n /* No text selection on touch */\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n -webkit-user-select: none;\n user-select: none;\n }\n}\n\n/* ============================================\n TABLET STYLES (768px - 1023px)\n ============================================ */\n@media (min-width: 768px) and (max-width: 1023px) {\n [class*=\"seekora-\"][class*=\"-dropdown\"]:not(.seekora-mobile-sheet) {\n max-width: 90vw !important;\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n /* 3-column product grid on tablet */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-grid {\n grid-template-columns: repeat(3, 1fr) !important;\n }\n}\n\n/* ============================================\n DESKTOP STYLES (>= 1024px)\n ============================================ */\n@media (min-width: 1024px) {\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item] {\n min-height: 40px;\n }\n\n /* Hover effects only on desktop */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:hover,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item]:hover {\n background-color: var(--seekora-bg-hover, rgba(0,0,0,0.04));\n }\n}\n\n/* ============================================\n ANIMATION & TRANSITIONS\n ============================================ */\n@keyframes seekora-dropdown-enter {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes seekora-dropdown-enter-mobile {\n from {\n opacity: 0;\n transform: translateY(100%);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes seekora-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n[class*=\"seekora-\"][class*=\"-dropdown\"].entering {\n animation: seekora-dropdown-enter 200ms ease-out;\n}\n\n@media (max-width: 767px) {\n [class*=\"seekora-\"][class*=\"-dropdown\"].entering {\n animation: seekora-dropdown-enter-mobile 300ms ease-out;\n }\n}\n\n/* ============================================\n ACCESSIBILITY\n ============================================ */\n@media (prefers-reduced-motion: reduce) {\n [class*=\"seekora-\"][class*=\"-dropdown\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n/* Focus visible styles */\n[class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:focus-visible,\n[class*=\"seekora-\"][class*=\"-dropdown\"] button:focus-visible {\n outline: 2px solid var(--seekora-primary, #007aff);\n outline-offset: -2px;\n}\n\n/* High contrast mode */\n@media (prefers-contrast: high) {\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n border: 2px solid currentColor !important;\n }\n\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"][aria-selected=\"true\"] {\n outline: 2px solid currentColor;\n }\n}\n\n/* Dark mode adjustments */\n@media (prefers-color-scheme: dark) {\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n --seekora-bg-surface: #1c1c1e;\n --seekora-bg-secondary: #2c2c2e;\n --seekora-bg-hover: #3a3a3c;\n --seekora-text-primary: #ffffff;\n --seekora-text-secondary: #8e8e93;\n --seekora-border-color: #38383a;\n }\n}\n`;\n\n/**\n * Inject global responsive styles\n */\nlet stylesInjected = false;\n\nexport const injectGlobalResponsiveStyles = (): void => {\n if (stylesInjected) return;\n if (typeof document === 'undefined') return;\n\n const styleId = 'seekora-dropdown-responsive-global';\n if (document.getElementById(styleId)) {\n stylesInjected = true;\n return;\n }\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = globalResponsiveCSS;\n document.head.appendChild(style);\n stylesInjected = true;\n};\n\n/**\n * Hook to auto-inject styles on mount\n */\nexport const useInjectResponsiveStyles = (): void => {\n useEffect(() => {\n injectGlobalResponsiveStyles();\n }, []);\n};\n","/**\n * AmazonDropdown - Amazon-style Search Suggestions\n * \n * Features:\n * - Department/category scoping in search\n * - Suggestions with category context\n * - Product grid with images\n * - \"in Department\" suffix for scoped searches\n * - Clean, functional design\n */\n\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (theme: any = {}, isMobile: boolean = false) => ({\n root: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '8px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #0f1111)',\n borderRadius: isMobile ? '12px' : '16px',\n boxShadow: '0 4px 6px -1px rgba(0,0,0,0.1), 0 10px 40px -5px rgba(0,0,0,0.15)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: '14px',\n zIndex: 1000,\n // Mobile: full width overlay\n ...(isMobile && {\n position: 'fixed' as const,\n top: '60px',\n bottom: 0,\n left: '8px',\n right: '8px',\n margin: 0,\n borderRadius: '16px 16px 0 0',\n }),\n },\n content: {\n display: 'flex',\n flexDirection: isMobile ? 'column' as const : 'row' as const,\n maxHeight: isMobile ? 'calc(100vh - 140px)' : '480px',\n overflowY: 'auto' as const,\n },\n leftColumn: {\n flex: isMobile ? 'none' : '0 0 55%',\n borderRight: isMobile ? 'none' : '1px solid var(--seekora-border-color, #e8e8e8)',\n borderBottom: isMobile ? '1px solid var(--seekora-border-color, #e8e8e8)' : 'none',\n overflowY: 'auto' as const,\n padding: '8px 0',\n },\n rightColumn: {\n flex: isMobile ? 'none' : '0 0 45%',\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n overflowY: 'auto' as const,\n padding: '8px 0',\n },\n section: {\n padding: '4px 0',\n },\n sectionHeader: {\n padding: '8px 16px 6px',\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #6b6b6b)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: isMobile ? '12px 16px' : '10px 16px',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n gap: isMobile ? '12px' : '10px',\n minHeight: isMobile ? `${touchTargets.minimum}px` : '40px',\n borderRadius: '8px',\n margin: '2px 8px',\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n suggestionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #6b6b6b)',\n flexShrink: 0,\n },\n suggestionContent: {\n flex: 1,\n minWidth: 0,\n },\n suggestionQuery: {\n fontSize: '14px',\n color: 'var(--seekora-text-primary, #0f1111)',\n fontWeight: 400,\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n suggestionContext: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #565959)',\n marginTop: '2px',\n },\n suggestionDepartment: {\n color: 'var(--seekora-primary-dark, #c45500)',\n fontStyle: 'italic',\n },\n categoryScoped: {\n backgroundColor: 'var(--seekora-primary-light, #fef8f0)',\n borderRadius: '3px',\n padding: '0 4px',\n marginLeft: '4px',\n fontSize: '11px',\n color: 'var(--seekora-primary-dark, #c45500)',\n },\n productsHeader: {\n padding: '12px 16px 8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n productsTitle: {\n fontSize: '13px',\n fontWeight: 700,\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n viewAll: {\n fontSize: '12px',\n color: 'var(--seekora-link, #007185)',\n textDecoration: 'none',\n cursor: 'pointer',\n '&:hover': {\n color: 'var(--seekora-link-hover, #c45500)',\n textDecoration: 'underline',\n },\n },\n productsGrid: {\n display: 'grid',\n gridTemplateColumns: isMobile ? 'repeat(2, 1fr)' : 'repeat(2, 1fr)',\n gap: '12px',\n padding: '12px 16px 16px',\n },\n productCard: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n borderRadius: '12px',\n padding: '10px',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n boxShadow: '0 1px 3px rgba(0,0,0,0.06)',\n },\n productCardHover: {\n boxShadow: '0 4px 12px rgba(0,0,0,0.12)',\n transform: 'translateY(-2px)',\n },\n productImage: {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'contain' as const,\n backgroundColor: 'var(--seekora-bg-tertiary, #f8f8f8)',\n borderRadius: '8px',\n marginBottom: '10px',\n },\n productTitle: {\n fontSize: '12px',\n color: 'var(--seekora-link, #007185)',\n lineHeight: 1.3,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n marginBottom: '4px',\n },\n productPrice: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n productPriceSymbol: {\n fontSize: '11px',\n verticalAlign: 'top',\n },\n productRating: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '4px',\n },\n stars: {\n color: 'var(--seekora-rating, #de7921)',\n fontSize: '12px',\n },\n reviewCount: {\n fontSize: '11px',\n color: 'var(--seekora-link, #007185)',\n },\n prime: {\n height: '16px',\n marginTop: '4px',\n },\n recentHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px',\n },\n clearRecent: {\n fontSize: '12px',\n color: 'var(--seekora-link, #007185)',\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n },\n highlight: {\n fontWeight: 700,\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n empty: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #565959)',\n },\n footer: {\n padding: '10px 16px',\n borderTop: '1px solid var(--seekora-border-color, #e7e7e7)',\n backgroundColor: 'var(--seekora-bg-secondary, #f7f7f7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #767676)',\n },\n keyboard: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n key: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '18px',\n padding: '0 4px',\n backgroundColor: 'var(--seekora-bg-surface, #fff)',\n border: '1px solid var(--seekora-border-color, #ccc)',\n borderRadius: '3px',\n fontSize: '10px',\n fontFamily: 'monospace',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\" />\n <polyline points=\"17 6 23 6 23 12\" />\n </svg>\n);\n\nconst StarIcon = ({ filled = false }: { filled?: boolean }) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill={filled ? 'currentColor' : 'none'} stroke=\"currentColor\" strokeWidth=\"2\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n);\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nconst RatingStars: React.FC<{ rating: number; count?: number }> = ({ rating, count }) => {\n const fullStars = Math.floor(rating);\n const hasHalf = rating % 1 >= 0.5;\n \n return (\n <div style={createStyles().productRating}>\n <div style={createStyles().stars}>\n {'★'.repeat(fullStars)}\n {hasHalf && '½'}\n {'☆'.repeat(5 - fullStars - (hasHalf ? 1 : 0))}\n </div>\n {count !== undefined && (\n <span style={createStyles().reviewCount}>({count.toLocaleString()})</span>\n )}\n </div>\n );\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface AmazonDropdownProps extends BaseDropdownProps {\n /** Show department scoping in suggestions */\n showDepartments?: boolean;\n /** Current department filter */\n currentDepartment?: string;\n /** Available departments */\n departments?: Array<{ id: string; label: string }>;\n /** Show Prime badge */\n showPrime?: boolean;\n /** Prime icon URL */\n primeIconUrl?: string;\n}\n\nexport const AmazonDropdown = forwardRef<DropdownRef, AmazonDropdownProps>(\n function AmazonDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n categories = [],\n recentSearches = [],\n trendingSearches = [],\n filteredTabs = [],\n activeTab = 'all',\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n categoryFields = { id: 'id', label: 'label' },\n productDisplay = {},\n theme = {},\n showDepartments = true,\n currentDepartment,\n departments = [],\n showPrime = false,\n width = '700px',\n maxHeight = '500px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n onRecentClick,\n onRecentRemove,\n onRecentClearAll,\n onViewAll,\n onClose,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile, isTablet } = responsive;\n \n const styles = useMemo(() => createStyles(theme, isMobile), [theme, isMobile]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n\n // Process data through field mappings\n const processedSuggestions = useMemo(() => \n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n // Get products from active tab or default products\n const currentProducts = useMemo(() => {\n if (activeTab === 'all' || filteredTabs.length === 0) {\n return products;\n }\n const tab = filteredTabs.find(t => t.id === activeTab);\n return tab?.products || products;\n }, [activeTab, filteredTabs, products]);\n\n const processedProducts = useMemo(() => \n currentProducts.map(p => extractProduct(p, productFields)),\n [currentProducts, productFields]\n );\n\n const processedCategories = useMemo(() => \n categories.map(c => extractCategory(c, categoryFields)),\n [categories, categoryFields]\n );\n\n // Recent searches as strings\n const recentQueries = useMemo(() => \n recentSearches.map(r => typeof r === 'string' ? r : r.query),\n [recentSearches]\n );\n\n // All navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any; index: number }> = [];\n let idx = 0;\n\n if (query.length === 0) {\n recentQueries.slice(0, 5).forEach(q => {\n items.push({ type: 'recent', data: q, index: idx++ });\n });\n }\n\n processedSuggestions.forEach(s => {\n items.push({ type: 'suggestion', data: s, index: idx++ });\n });\n\n return items;\n }, [query, recentQueries, processedSuggestions]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n const item = allItems[activeIndex];\n if (item.type === 'recent') {\n onRecentClick?.(item.data);\n } else if (item.type === 'suggestion') {\n onSuggestionSelect?.(item.data._raw, item.index);\n }\n }, [activeIndex, allItems, onRecentClick, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = query.length === 0 && recentQueries.length > 0;\n const showTrending = query.length === 0 && trendingSearches.length > 0;\n const showProducts = processedProducts.length > 0;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-amazon-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { \n width: isMobile ? '100%' : width, \n maxHeight: isMobile ? '100vh' : maxHeight, \n zIndex \n },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n {/* Styles */}\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n .seekora-amazon-dropdown mark {\n background: transparent;\n font-weight: 700;\n color: inherit;\n }\n `}</style>\n\n {header}\n\n <>\n {/* Tabs Navigation */}\n {filteredTabs.length > 0 && (\n <div style={{\n display: 'flex',\n gap: '8px',\n padding: isMobile ? '12px' : '12px 16px',\n overflowX: 'auto',\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'var(--seekora-border-color, #e7e7e7)',\n background: 'var(--seekora-bg-secondary, #f5f5f5)',\n WebkitOverflowScrolling: 'touch',\n }}>\n <button\n onClick={() => onTabChange?.('all')}\n style={{\n padding: '8px 16px',\n borderWidth: 0,\n borderStyle: 'none',\n background: activeTab === 'all' ? 'var(--seekora-text-primary, #232f3e)' : 'var(--seekora-bg-surface, #ffffff)',\n color: activeTab === 'all' ? 'var(--seekora-bg-surface, #ffffff)' : 'var(--seekora-text-primary, #0f1111)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: 600,\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n minHeight: '36px',\n boxShadow: activeTab === 'all' ? 'none' : '0 1px 3px rgba(0,0,0,0.1)',\n transition: 'all 150ms ease',\n }}\n >\n All\n </button>\n {filteredTabs.slice(0, 6).map(tab => (\n <button\n key={tab.id}\n onClick={() => onTabChange?.(tab.id)}\n style={{\n padding: '8px 16px',\n borderWidth: 0,\n borderStyle: 'none',\n background: activeTab === tab.id ? 'var(--seekora-primary, #ff9900)' : 'var(--seekora-bg-surface, #ffffff)',\n color: activeTab === tab.id ? 'var(--seekora-text-on-primary, #0f1111)' : 'var(--seekora-text-primary, #0f1111)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: activeTab === tab.id ? 700 : 500,\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n minHeight: '36px',\n boxShadow: activeTab === tab.id ? '0 2px 4px rgba(255,153,0,0.3)' : '0 1px 3px rgba(0,0,0,0.1)',\n transition: 'all 150ms ease',\n }}\n >\n {tab.label} {tab.nb_hits ? `(${tab.nb_hits})` : ''}\n </button>\n ))}\n </div>\n )}\n\n <div style={styles.content}>\n {/* Left Column - Suggestions */}\n <div style={styles.leftColumn}>\n {/* Recent Searches */}\n {showRecent && (\n <div style={styles.section}>\n <div style={styles.recentHeader}>\n <span style={styles.sectionHeader as any}>Recent Searches</span>\n <button \n style={styles.clearRecent}\n onClick={onRecentClearAll}\n >\n Clear all\n </button>\n </div>\n {recentQueries.slice(0, 5).map((q, idx) => {\n const isActive = activeIndex === idx;\n return (\n <div\n key={`recent-${q}`}\n data-index={idx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onRecentClick?.(q)}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <ClockIcon />\n <div style={styles.suggestionContent}>\n <div style={styles.suggestionQuery}>{q}</div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Trending (when no query) */}\n {showTrending && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>Trending Searches</div>\n {(trendingSearches as string[]).slice(0, 5).map((t, idx) => {\n const trendQuery = typeof t === 'string' ? t : (t as any).query;\n const itemIdx = recentQueries.length + idx;\n const isActive = activeIndex === itemIdx;\n return (\n <div\n key={`trending-${trendQuery}`}\n data-index={itemIdx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.({ query: trendQuery }, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n <TrendingIcon />\n <div style={styles.suggestionContent}>\n <div style={styles.suggestionQuery}>{trendQuery}</div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {processedSuggestions.length > 0 && (\n <div style={styles.section}>\n {query && <div style={styles.sectionHeader}>Suggestions</div>}\n {processedSuggestions.map((suggestion, idx) => {\n const itemIdx = showRecent ? recentQueries.length + idx : idx;\n const isActive = activeIndex === itemIdx;\n const categories = suggestion.categories || [];\n const firstCategory = categories[0];\n \n return (\n <div\n key={suggestion.id || `suggestion-${idx}`}\n data-index={itemIdx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.(suggestion._raw, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n <div style={styles.suggestionIcon}>\n <SearchIcon />\n </div>\n <div style={styles.suggestionContent}>\n <div style={styles.suggestionQuery}>\n {highlightTextReact(suggestion.query, query, { className: 'highlight' })}\n </div>\n {showDepartments && firstCategory && (\n <div style={styles.suggestionContext}>\n <span style={styles.suggestionDepartment}>\n in {typeof firstCategory === 'string' ? firstCategory : firstCategory.value || firstCategory.label}\n </span>\n </div>\n )}\n </div>\n {suggestion.count && (\n <span style={styles.categoryScoped}>\n {suggestion.count.toLocaleString()}\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Empty State */}\n {query && processedSuggestions.length === 0 && !loading && (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n No suggestions found for \"{query}\"\n </div>\n )\n )}\n </div>\n\n {/* Right Column - Products */}\n {showProducts && (\n <div style={styles.rightColumn}>\n <div style={styles.productsHeader}>\n <span style={styles.productsTitle}>Suggested Products</span>\n <a \n style={styles.viewAll as any}\n onClick={() => onViewAll?.('products')}\n >\n View all\n </a>\n </div>\n <div style={styles.productsGrid}>\n {processedProducts.slice(0, 4).map((product, idx) => (\n <div\n key={product.id}\n style={mergeStyles(\n styles.productCard,\n hoveredProduct === product.id ? styles.productCardHover : undefined\n )}\n onClick={() => onProductClick?.(product._raw, idx)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n >\n {product.image ? (\n <img\n src={product.image}\n alt={product.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={{ ...styles.productImage, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <span style={{ color: 'var(--seekora-text-tertiary, #999)', fontSize: '32px' }}>📷</span>\n </div>\n )}\n <div style={styles.productTitle}>{product.title}</div>\n {product.price !== undefined && (\n <div style={styles.productPrice}>\n <span style={styles.productPriceSymbol}>\n {productDisplay.currency || '$'}\n </span>\n {formatPrice(product.price, { \n currency: '', \n priceDecimals: productDisplay.priceDecimals \n })}\n </div>\n )}\n {product.rating && (\n <RatingStars \n rating={parseFloat(String(product.rating))} \n count={product.reviewCount ? parseInt(String(product.reviewCount)) : undefined}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <div style={styles.keyboard}>\n <span style={styles.key}>↑</span>\n <span style={styles.key}>↓</span>\n <span>to navigate</span>\n <span style={styles.key}>↵</span>\n <span>to select</span>\n <span style={styles.key}>esc</span>\n <span>to close</span>\n </div>\n {processedSuggestions.length > 0 && (\n <span>{processedSuggestions.length} suggestions</span>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nexport default AmazonDropdown;\n","/**\n * GoogleDropdown - Google-style Clean Search Suggestions\n * \n * Features:\n * - Ultra-clean, minimal design\n * - Instant suggestions with smooth animations\n * - Trending searches when empty\n * - \"I'm Feeling Lucky\" style quick actions\n * - Voice search integration ready\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (isMobile: boolean = false) => ({\n root: {\n position: isMobile ? 'fixed' as const : 'absolute' as const,\n top: isMobile ? 0 : '100%',\n left: 0,\n right: 0,\n bottom: isMobile ? 0 : 'auto',\n marginTop: isMobile ? 0 : '4px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #202124)',\n borderRadius: isMobile ? '0' : '24px',\n boxShadow: isMobile ? 'none' : '0 4px 20px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: isMobile ? '17px' : '15px',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n list: {\n listStyle: 'none',\n margin: 0,\n padding: '8px',\n flex: 1,\n overflowY: 'auto' as const,\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: isMobile ? '12px 14px' : '10px 14px',\n cursor: 'pointer',\n transition: 'all 100ms ease',\n gap: '12px',\n minHeight: '44px',\n borderRadius: '12px',\n margin: '2px 0',\n color: 'var(--seekora-text-primary, #202124)',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #202124)',\n },\n itemIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #9aa0a6)',\n flexShrink: 0,\n },\n itemContent: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minWidth: 0,\n },\n itemText: {\n fontSize: '16px',\n color: 'var(--seekora-text-primary, #202124)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemTextBold: {\n fontWeight: 400,\n },\n itemMatch: {\n fontWeight: 700,\n },\n itemAction: {\n fontSize: '14px',\n color: 'var(--seekora-link, #1a73e8)',\n marginLeft: '16px',\n opacity: 0,\n transition: 'opacity 100ms',\n whiteSpace: 'nowrap' as const,\n },\n itemActionVisible: {\n opacity: 1,\n },\n removeBtn: {\n padding: '4px 8px',\n background: 'none',\n border: 'none',\n color: 'var(--seekora-link, #1a73e8)',\n cursor: 'pointer',\n fontSize: '13px',\n borderRadius: '4px',\n opacity: 0,\n transition: 'opacity 100ms, background 100ms',\n },\n removeBtnVisible: {\n opacity: 1,\n },\n removeBtnHover: {\n backgroundColor: 'var(--seekora-bg-hover, #e8f0fe)',\n color: 'var(--seekora-text-primary, #202124)',\n },\n divider: {\n height: '1px',\n backgroundColor: 'var(--seekora-border-color, #e8eaed)',\n margin: '8px 0',\n },\n sectionTitle: {\n padding: '12px 16px 8px',\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--seekora-text-secondary, #5f6368)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.8px',\n },\n trending: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: 'var(--seekora-success, #1e8e3e)',\n fontSize: '12px',\n marginLeft: 'auto',\n },\n trendingIcon: {\n width: '12px',\n height: '12px',\n },\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '12px 16px',\n borderTop: '1px solid var(--seekora-border-color, #e8eaed)',\n gap: '24px',\n backgroundColor: 'var(--seekora-bg-secondary, #f8f9fa)',\n },\n footerButton: {\n padding: '8px 16px',\n backgroundColor: 'var(--seekora-bg-tertiary, #f1f3f4)',\n border: '1px solid var(--seekora-border-color, #f1f3f4)',\n borderRadius: '4px',\n fontSize: '14px',\n color: 'var(--seekora-text-secondary, #3c4043)',\n cursor: 'pointer',\n transition: 'border-color 100ms, box-shadow 100ms',\n },\n footerButtonHover: {\n borderColor: 'var(--seekora-border-color-dark, #dadce0)',\n boxShadow: '0 1px 1px rgba(0,0,0,0.1)',\n },\n voiceBtn: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--seekora-primary, #4285f4)',\n transition: 'background 100ms',\n },\n voiceBtnHover: {\n backgroundColor: 'var(--seekora-bg-hover, #f1f3f4)',\n color: 'var(--seekora-text-primary, #202124)',\n },\n empty: {\n padding: '24px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #5f6368)',\n fontSize: '14px',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.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\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M13 3a9 9 0 00-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42A8.954 8.954 0 0013 21a9 9 0 000-18zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst RemoveIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"18\" height=\"18\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst ArrowIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"20\" height=\"20\">\n <path d=\"M9 5l-4 4 4 4\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" transform=\"rotate(-90 12 12)\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface GoogleDropdownProps extends BaseDropdownProps {\n /** Show \"I'm Feeling Lucky\" button */\n showFeelingLucky?: boolean;\n /** Feeling lucky button text */\n feelingLuckyText?: string;\n /** Show remove button on recent searches */\n showRemoveRecent?: boolean;\n /** Show voice search button */\n showVoiceSearch?: boolean;\n /** Voice search handler */\n onVoiceSearch?: () => void;\n /** Feeling lucky handler */\n onFeelingLucky?: (query: string) => void;\n /** Show trending indicator */\n showTrendingIndicator?: boolean;\n}\n\nexport const GoogleDropdown = forwardRef<DropdownRef, GoogleDropdownProps>(\n function GoogleDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n recentSearches = [],\n trendingSearches = [],\n suggestionFields = { query: 'query' },\n theme = {},\n showFeelingLucky = true,\n feelingLuckyText = \"I'm Feeling Lucky\",\n showRemoveRecent = true,\n showVoiceSearch = false,\n showTrendingIndicator = true,\n width = '100%',\n maxHeight = '400px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onRecentClick,\n onRecentRemove,\n onVoiceSearch,\n onFeelingLucky,\n onClose,\n onSearchSubmit,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(isMobile), [isMobile]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredIndex, setHoveredIndex] = useState(-1);\n const [hoveredBtn, setHoveredBtn] = useState<string | null>(null);\n\n // Process suggestions\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 5),\n [recentSearches]\n );\n\n const trendingQueries = useMemo(() =>\n (trendingSearches as any[]).map(t => typeof t === 'string' ? t : t.query).slice(0, 5),\n [trendingSearches]\n );\n\n // All items for navigation\n const allItems = useMemo(() => {\n const items: Array<{ type: string; query: string; data?: any }> = [];\n\n if (query.length === 0) {\n recentQueries.forEach(q => items.push({ type: 'recent', query: q }));\n trendingQueries.forEach(q => items.push({ type: 'trending', query: q }));\n } else {\n processedSuggestions.forEach(s => items.push({ type: 'suggestion', query: s.query, data: s }));\n }\n\n return items;\n }, [query, recentQueries, trendingQueries, processedSuggestions]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0) {\n if (query) onSearchSubmit?.(query);\n return;\n }\n const item = allItems[activeIndex];\n if (item.type === 'recent' || item.type === 'trending') {\n onRecentClick?.(item.query);\n } else {\n onSuggestionSelect?.(item.data?._raw || { query: item.query }, activeIndex);\n }\n }, [activeIndex, allItems, query, onSearchSubmit, onRecentClick, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Reset active index when items change\n useEffect(() => {\n setActiveIndex(-1);\n }, [query]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = query.length === 0 && recentQueries.length > 0;\n const showTrending = query.length === 0 && trendingQueries.length > 0;\n\n const renderItem = (\n item: { type: string; query: string; data?: any },\n index: number,\n globalIndex: number\n ) => {\n const isActive = activeIndex === globalIndex;\n const isHovered = hoveredIndex === globalIndex;\n const showAction = isActive || isHovered;\n\n return (\n <li\n key={`${item.type}-${item.query}-${index}`}\n data-index={globalIndex}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.item,\n isActive || isHovered ? styles.itemActive : undefined\n )}\n onClick={() => {\n if (item.type === 'recent' || item.type === 'trending') {\n onRecentClick?.(item.query);\n } else {\n onSuggestionSelect?.(item.data?._raw || { query: item.query }, index);\n }\n }}\n onMouseEnter={() => {\n setHoveredIndex(globalIndex);\n setActiveIndex(globalIndex);\n }}\n onMouseLeave={() => setHoveredIndex(-1)}\n >\n <div style={styles.itemIcon}>\n {item.type === 'recent' ? <ClockIcon /> :\n item.type === 'trending' ? <TrendingIcon /> :\n <SearchIcon />}\n </div>\n <div style={styles.itemContent}>\n <span style={styles.itemText}>\n {query ? highlightTextReact(item.query, query, { tag: 'b' }) : item.query}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {item.type === 'trending' && showTrendingIndicator && (\n <span style={styles.trending}>\n <TrendingIcon />\n Trending\n </span>\n )}\n {item.type === 'recent' && showRemoveRecent && (\n <button\n style={mergeStyles(\n styles.removeBtn,\n showAction ? styles.removeBtnVisible : undefined\n )}\n onClick={(e) => {\n e.stopPropagation();\n onRecentRemove?.(item.query);\n }}\n aria-label={`Remove ${item.query}`}\n >\n Remove\n </button>\n )}\n <span\n style={mergeStyles(\n styles.itemAction,\n showAction ? styles.itemActionVisible : undefined\n )}\n >\n <ArrowIcon />\n </span>\n </div>\n </div>\n </li>\n );\n };\n\n let globalIndex = 0;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-google-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, maxHeight: 'none', zIndex },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {header}\n\n <>\n <ul style={styles.list}>\n {/* Recent Searches */}\n {showRecent && (\n <>\n {recentQueries.map((q, idx) => {\n const item = { type: 'recent', query: q };\n const el = renderItem(item, idx, globalIndex);\n globalIndex++;\n return el;\n })}\n {showTrending && <div style={styles.divider} />}\n </>\n )}\n\n {/* Trending Searches */}\n {showTrending && (\n <>\n {!showRecent && <div style={styles.sectionTitle}>Trending searches</div>}\n {trendingQueries.map((q, idx) => {\n const item = { type: 'trending', query: q };\n const el = renderItem(item, idx, globalIndex);\n globalIndex++;\n return el;\n })}\n </>\n )}\n\n {/* Query Suggestions */}\n {query && processedSuggestions.length > 0 && (\n processedSuggestions.map((s, idx) => {\n const item = { type: 'suggestion', query: s.query, data: s };\n const el = renderItem(item, idx, globalIndex);\n globalIndex++;\n return el;\n })\n )}\n\n {/* Empty state */}\n {query && processedSuggestions.length === 0 && !loading && (\n renderEmpty ? renderEmpty(query) : (\n <li style={styles.empty}>\n No suggestions for \"{query}\"\n </li>\n )\n )}\n </ul>\n\n {/* Footer with buttons */}\n {(showFeelingLucky || showVoiceSearch) && (\n <div style={styles.footer}>\n {showFeelingLucky && (\n <>\n <button\n style={mergeStyles(\n styles.footerButton,\n hoveredBtn === 'search' ? styles.footerButtonHover : undefined\n )}\n onMouseEnter={() => setHoveredBtn('search')}\n onMouseLeave={() => setHoveredBtn(null)}\n onClick={() => onSearchSubmit?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : ''))}\n >\n Search\n </button>\n <button\n style={mergeStyles(\n styles.footerButton,\n hoveredBtn === 'lucky' ? styles.footerButtonHover : undefined\n )}\n onMouseEnter={() => setHoveredBtn('lucky')}\n onMouseLeave={() => setHoveredBtn(null)}\n onClick={() => onFeelingLucky?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : ''))}\n >\n {feelingLuckyText}\n </button>\n </>\n )}\n </div>\n )}\n </>\n\n {footer}\n </div>\n );\n }\n);\n\nexport default GoogleDropdown;\n","/**\n * PinterestDropdown - Visual Discovery Style Suggestions\n * \n * Features:\n * - Visually-driven masonry/grid product display\n * - Large hero images\n * - Category chips/pills for filtering\n * - Smooth hover effects with quick preview\n * - Color palette extraction ready\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n root: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '8px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #111111)',\n borderRadius: '20px',\n boxShadow: '0 4px 30px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: '15px',\n },\n header: {\n padding: '16px 20px 14px',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e8)',\n },\n searchInfo: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n marginBottom: '14px',\n },\n searchQuery: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#111111',\n },\n searchCount: {\n fontSize: '13px',\n color: '#767676',\n },\n categoriesScroll: {\n display: 'flex',\n gap: '8px',\n overflowX: 'auto' as const,\n paddingBottom: '4px',\n scrollbarWidth: 'none' as const,\n msOverflowStyle: 'none' as const,\n },\n categoryChip: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n backgroundColor: 'var(--seekora-bg-secondary, #f0f0f0)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: 500,\n color: '#111111',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n whiteSpace: 'nowrap' as const,\n borderWidth: 0,\n borderStyle: 'none',\n },\n categoryChipActive: {\n backgroundColor: 'var(--seekora-primary, #e60023)',\n color: 'var(--seekora-bg-surface, #ffffff)',\n },\n categoryChipHover: {\n backgroundColor: 'var(--seekora-bg-hover, #e0e0e0)',\n color: 'var(--seekora-text-primary, #111111)',\n },\n categoryIcon: {\n width: '16px',\n height: '16px',\n borderRadius: '4px',\n objectFit: 'cover' as const,\n },\n content: {\n padding: '16px',\n overflowY: 'auto' as const,\n },\n suggestionsRow: {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n flexWrap: 'wrap' as const,\n },\n suggestionPill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 14px',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: 500,\n color: '#111111',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n borderWidth: 0,\n borderStyle: 'none',\n },\n suggestionPillActive: {\n backgroundColor: 'var(--seekora-text-primary, #111111)',\n color: 'var(--seekora-bg-surface, #ffffff)',\n },\n suggestionPillHover: {\n backgroundColor: 'var(--seekora-bg-hover, #e8e8e8)',\n color: 'var(--seekora-text-primary, #111111)',\n },\n suggestionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#767676',\n flexShrink: 0,\n },\n productsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(180px, 1fr))',\n gap: '16px',\n },\n productCard: {\n position: 'relative' as const,\n borderRadius: '16px',\n overflow: 'hidden',\n cursor: 'pointer',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n transition: 'transform 150ms, box-shadow 150ms',\n },\n productCardHover: {\n transform: 'scale(1.02)',\n boxShadow: '0 4px 20px rgba(0,0,0,0.15)',\n },\n productImageContainer: {\n position: 'relative' as const,\n paddingBottom: '133%', // 3:4 aspect ratio\n overflow: 'hidden',\n },\n productImage: {\n position: 'absolute' as const,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n objectFit: 'cover' as const,\n },\n productImagePlaceholder: {\n position: 'absolute' as const,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--seekora-bg-tertiary, #e9e9e9)',\n color: 'var(--seekora-text-tertiary, #aaa)',\n },\n productOverlay: {\n position: 'absolute' as const,\n bottom: 0,\n left: 0,\n right: 0,\n padding: '40px 12px 12px',\n background: 'linear-gradient(to top, rgba(0,0,0,0.7), transparent)',\n opacity: 0,\n transition: 'opacity 200ms',\n },\n productOverlayVisible: {\n opacity: 1,\n },\n productInfo: {\n padding: '12px',\n },\n productTitle: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #111)',\n lineHeight: 1.3,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n marginBottom: '4px',\n },\n productTitleOverlay: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n marginBottom: '4px',\n },\n productPrice: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #111)',\n },\n productPriceOverlay: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n productSaveBtn: {\n position: 'absolute' as const,\n top: '12px',\n right: '12px',\n width: '36px',\n height: '36px',\n borderRadius: '50%',\n backgroundColor: 'var(--seekora-primary, #e60023)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: 0,\n transform: 'scale(0.8)',\n transition: 'all 150ms',\n },\n productSaveBtnVisible: {\n opacity: 1,\n transform: 'scale(1)',\n },\n sectionTitle: {\n fontSize: '18px',\n fontWeight: 700,\n color: 'var(--seekora-text-primary, #111)',\n marginBottom: '16px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '60px',\n color: 'var(--seekora-text-secondary, #767676)',\n },\n spinner: {\n width: '32px',\n height: '32px',\n border: '3px solid var(--seekora-border-color, #efefef)',\n borderTopColor: 'var(--seekora-primary, #e60023)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '60px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #767676)',\n },\n emptyIcon: {\n width: '64px',\n height: '64px',\n margin: '0 auto 16px',\n color: 'var(--seekora-text-tertiary, #8c8c8c)',\n },\n footer: {\n padding: '16px 20px',\n borderTop: '1px solid var(--seekora-border-color, #efefef)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n viewAllBtn: {\n padding: '12px 20px',\n backgroundColor: 'var(--seekora-primary, #e60023)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n border: 'none',\n borderRadius: '24px',\n fontSize: '15px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 150ms',\n },\n viewAllBtnHover: {\n backgroundColor: 'var(--seekora-primary-dark, #ad081b)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M10 16c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6m13.12 2.88l-4.26-4.26A9.842 9.842 0 0020 10c0-5.52-4.48-10-10-10S0 4.48 0 10s4.48 10 10 10c1.67 0 3.24-.41 4.62-1.14l4.26 4.26a3 3 0 004.24-4.24z\"/>\n </svg>\n);\n\nconst HeartIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"18\" height=\"18\">\n <path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"/>\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"18\" height=\"18\">\n <path d=\"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\"/>\n </svg>\n);\n\nconst ImageIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" width=\"48\" height=\"48\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/>\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/>\n <polyline points=\"21 15 16 10 5 21\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface PinterestDropdownProps extends BaseDropdownProps {\n /** Show save/pin button on products */\n showSaveButton?: boolean;\n /** Save button handler */\n onSaveProduct?: (product: any) => void;\n /** Active category ID */\n activeCategory?: string;\n /** Show price overlay on hover */\n showPriceOverlay?: boolean;\n /** Grid columns */\n gridColumns?: number;\n /** Card aspect ratio */\n cardAspectRatio?: 'square' | 'portrait' | 'landscape';\n}\n\nexport const PinterestDropdown = forwardRef<DropdownRef, PinterestDropdownProps>(\n function PinterestDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n categories = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n categoryFields = { id: 'id', label: 'label' },\n productDisplay = {},\n theme = {},\n showSaveButton = true,\n activeCategory: initialActiveCategory,\n activeTab, // From BaseDropdownProps\n showPriceOverlay = true,\n gridColumns = 4,\n width = '800px',\n maxHeight = '600px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n onSaveProduct,\n onViewAll,\n onClose,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n const [hoveredCategory, setHoveredCategory] = useState<string | null>(null);\n const [hoveredSuggestion, setHoveredSuggestion] = useState<number>(-1);\n const [activeCategory, setActiveCategory] = useState<string | null>(initialActiveCategory || null);\n const [hoveredViewAll, setHoveredViewAll] = useState(false);\n\n // Sync internal activeCategory with parent prop (activeTab or activeCategory)\n useEffect(() => {\n const propValue = activeTab ?? initialActiveCategory;\n if (propValue !== undefined) {\n setActiveCategory(propValue === 'all' ? null : propValue);\n }\n }, [activeTab, initialActiveCategory]);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const processedCategories = useMemo(() =>\n categories.map(c => extractCategory(c, categoryFields)),\n [categories, categoryFields]\n );\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, processedSuggestions.length - 1));\n }, [processedSuggestions.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex >= 0 && processedSuggestions[activeIndex]) {\n onSuggestionSelect?.(processedSuggestions[activeIndex]._raw, activeIndex);\n }\n }, [activeIndex, processedSuggestions, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showCategories = processedCategories.length > 0;\n\n // Products are already filtered by parent based on activeTab\n // No additional filtering needed here\n const displayProducts = processedProducts;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-pinterest-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, zIndex },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n .seekora-pinterest-dropdown .categories-scroll::-webkit-scrollbar {\n display: none;\n }\n `}</style>\n\n {header || (query && (\n <div style={styles.header}>\n <div style={styles.searchInfo}>\n <span style={styles.searchQuery}>\n {query ? `\"${query}\"` : 'Explore'}\n </span>\n {processedProducts.length > 0 && (\n <span style={styles.searchCount}>\n {processedProducts.length}+ ideas\n </span>\n )}\n </div>\n\n {showCategories && (\n <div style={styles.categoriesScroll} className=\"categories-scroll\">\n <button\n style={mergeStyles(\n styles.categoryChip,\n !activeCategory ? styles.categoryChipActive : undefined,\n hoveredCategory === 'all' && activeCategory ? styles.categoryChipHover : undefined\n )}\n onClick={() => {\n setActiveCategory(null);\n onTabChange?.('all');\n }}\n onMouseEnter={() => setHoveredCategory('all')}\n onMouseLeave={() => setHoveredCategory(null)}\n >\n All\n </button>\n {processedCategories.map(cat => (\n <button\n key={cat.id}\n style={mergeStyles(\n styles.categoryChip,\n activeCategory === cat.id ? styles.categoryChipActive : undefined,\n hoveredCategory === cat.id && activeCategory !== cat.id ? styles.categoryChipHover : undefined\n )}\n onClick={() => {\n setActiveCategory(cat.id);\n // Call onTabChange to update products in parent\n onTabChange?.(cat.id);\n }}\n onMouseEnter={() => setHoveredCategory(cat.id)}\n onMouseLeave={() => setHoveredCategory(null)}\n >\n {cat.icon && (\n <img src={cat.icon as string} alt=\"\" style={styles.categoryIcon} />\n )}\n {cat.label}\n {cat.count && <span>({cat.count})</span>}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n\n <div style={{ ...styles.content, maxHeight }}>\n <>\n {/* Suggestions as pills */}\n {processedSuggestions.length > 0 && (\n <div style={styles.suggestionsRow}>\n {processedSuggestions.slice(0, 8).map((s, idx) => (\n <button\n key={s.id || idx}\n data-index={idx}\n style={mergeStyles(\n styles.suggestionPill,\n activeIndex === idx ? styles.suggestionPillActive : undefined,\n hoveredSuggestion === idx && activeIndex !== idx ? styles.suggestionPillHover : undefined\n )}\n onClick={() => onSuggestionSelect?.(s._raw, idx)}\n onMouseEnter={() => {\n setHoveredSuggestion(idx);\n setActiveIndex(idx);\n }}\n onMouseLeave={() => setHoveredSuggestion(-1)}\n >\n <span style={styles.suggestionIcon}>\n {query ? highlightTextReact(s.query, query, { tag: 'strong' }) : s.query}\n </span>\n </button>\n ))}\n </div>\n )}\n\n {/* Products Grid */}\n {displayProducts.length > 0 && (\n <>\n <div style={styles.sectionTitle}>\n <TrendingIcon />\n Ideas for you\n </div>\n <div \n style={{\n ...styles.productsGrid,\n gridTemplateColumns: `repeat(${gridColumns}, 1fr)`,\n }}\n >\n {displayProducts.slice(0, 12).map((product, idx) => (\n <div\n key={product.id}\n style={mergeStyles(\n styles.productCard,\n hoveredProduct === product.id ? styles.productCardHover : undefined\n )}\n onClick={() => onProductClick?.(product._raw, idx)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n >\n <div style={styles.productImageContainer}>\n {product.image ? (\n <img\n src={product.image}\n alt={product.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={styles.productImagePlaceholder}>\n <ImageIcon />\n </div>\n )}\n \n {/* Save button */}\n {showSaveButton && (\n <button\n style={mergeStyles(\n styles.productSaveBtn,\n hoveredProduct === product.id ? styles.productSaveBtnVisible : undefined\n )}\n onClick={(e) => {\n e.stopPropagation();\n onSaveProduct?.(product._raw);\n }}\n aria-label=\"Save\"\n >\n <HeartIcon />\n </button>\n )}\n\n {/* Price overlay */}\n {showPriceOverlay && product.price !== undefined && (\n <div\n style={mergeStyles(\n styles.productOverlay,\n hoveredProduct === product.id ? styles.productOverlayVisible : undefined\n )}\n >\n <div style={styles.productTitleOverlay}>{product.title}</div>\n <div style={styles.productPriceOverlay}>\n {formatPrice(product.price, { \n currency: productDisplay.currency || product.currency || '$' \n })}\n </div>\n </div>\n )}\n </div>\n\n {/* Product info (when not using overlay) */}\n {!showPriceOverlay && (\n <div style={styles.productInfo}>\n <div style={styles.productTitle}>{product.title}</div>\n {product.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(product.price, { \n currency: productDisplay.currency || product.currency || '$' \n })}\n </div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n\n {/* Empty State */}\n {!loading && displayProducts.length === 0 && processedSuggestions.length === 0 && (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n <div style={styles.emptyIcon}>\n <SearchIcon />\n </div>\n <p>No ideas found for \"{query}\"</p>\n <p style={{ fontSize: '14px', marginTop: '8px' }}>\n Try searching for something else\n </p>\n </div>\n )\n )}\n </>\n </div>\n\n {footer !== undefined ? footer : (\n displayProducts.length > 0 && (\n <div style={styles.footer}>\n <span style={{ color: 'var(--seekora-text-secondary, #767676)', fontSize: '14px' }}>\n {displayProducts.length}+ more ideas\n </span>\n <button\n style={mergeStyles(\n styles.viewAllBtn,\n hoveredViewAll ? styles.viewAllBtnHover : undefined\n )}\n onClick={() => onViewAll?.('products')}\n onMouseEnter={() => setHoveredViewAll(true)}\n onMouseLeave={() => setHoveredViewAll(false)}\n >\n Explore all\n </button>\n </div>\n )\n )}\n </div>\n );\n }\n);\n\nexport default PinterestDropdown;\n","/**\n * SpotlightDropdown - macOS Spotlight / Command Palette Style\n * \n * Features:\n * - Clean, centered modal design\n * - Category grouping with keyboard navigation\n * - Instant preview panel\n * - Actions/commands support\n * - Keyboard-first interaction\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n backdropFilter: 'blur(4px)',\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n paddingTop: '15vh',\n zIndex: 9999,\n },\n root: {\n backgroundColor: 'var(--seekora-bg-surface, rgba(255, 255, 255, 0.95))',\n borderRadius: 'var(--seekora-border-radius, 12px)',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255,255,255,0.1)',\n overflow: 'hidden',\n fontFamily: 'var(--seekora-font-family, -apple-system, BlinkMacSystemFont, \"SF Pro Display\", sans-serif)',\n fontSize: 'var(--seekora-font-size, 14px)',\n backdropFilter: 'blur(20px)',\n },\n searchContainer: {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n gap: '12px',\n borderBottom: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n },\n searchIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #86868b)',\n flexShrink: 0,\n },\n searchInput: {\n flex: 1,\n border: 'none',\n background: 'transparent',\n fontSize: '17px',\n fontWeight: 300,\n color: 'var(--seekora-text-primary, #1d1d1f)',\n outline: 'none',\n fontFamily: 'inherit',\n },\n shortcut: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #86868b)',\n },\n kbd: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '20px',\n padding: '0 4px',\n backgroundColor: 'var(--seekora-bg-tertiary, rgba(0,0,0,0.05))',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'SF Mono, Monaco, monospace',\n },\n content: {\n display: 'flex',\n maxHeight: '400px',\n },\n resultsColumn: {\n flex: 1,\n overflowY: 'auto' as const,\n minWidth: '300px',\n },\n previewColumn: {\n width: '280px',\n borderLeft: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.02))',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionTitle: {\n padding: '8px 16px 6px',\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #86868b)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 16px',\n gap: '12px',\n cursor: 'pointer',\n transition: 'background-color 50ms',\n margin: '0 8px',\n borderRadius: '6px',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-primary, #007aff)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n itemIcon: {\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-secondary, #515154)',\n flexShrink: 0,\n },\n itemIconActive: {\n backgroundColor: 'rgba(255,255,255,0.2)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n itemIconImage: {\n width: '100%',\n height: '100%',\n objectFit: 'cover' as const,\n borderRadius: '6px',\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemTitle: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #1d1d1f)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemTitleActive: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n itemSubtitle: {\n fontSize: '11px',\n color: 'var(--seekora-text-secondary, #86868b)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginTop: '2px',\n },\n itemSubtitleActive: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n opacity: 0.9,\n },\n itemAction: {\n fontSize: '11px',\n color: 'var(--seekora-text-tertiary, #86868b)',\n opacity: 0,\n transition: 'opacity 100ms',\n },\n itemActionVisible: {\n opacity: 1,\n },\n itemActionActive: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n opacity: 0.8,\n },\n previewContent: {\n flex: 1,\n padding: '16px',\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n },\n previewImage: {\n width: '160px',\n height: '160px',\n objectFit: 'contain' as const,\n borderRadius: '8px',\n marginBottom: '16px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n },\n previewTitle: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #1d1d1f)',\n textAlign: 'center' as const,\n marginBottom: '4px',\n },\n previewSubtitle: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #86868b)',\n textAlign: 'center' as const,\n marginBottom: '8px',\n },\n previewPrice: {\n fontSize: '18px',\n fontWeight: 700,\n color: 'var(--seekora-primary, #007aff)',\n },\n previewActions: {\n display: 'flex',\n gap: '8px',\n marginTop: '16px',\n },\n previewAction: {\n padding: '6px 12px',\n fontSize: '12px',\n fontWeight: 500,\n borderRadius: '6px',\n border: 'none',\n cursor: 'pointer',\n transition: 'all 100ms',\n },\n previewActionPrimary: {\n backgroundColor: 'var(--seekora-primary, #007aff)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n previewActionSecondary: {\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f7)',\n color: 'var(--seekora-text-primary, #1d1d1f)',\n },\n footer: {\n padding: '8px 16px',\n borderTop: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.02))',\n fontSize: '11px',\n color: 'var(--seekora-text-tertiary, #86868b)',\n },\n footerActions: {\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n },\n footerAction: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '40px',\n color: 'var(--seekora-text-secondary, #86868b)',\n },\n spinner: {\n width: '24px',\n height: '24px',\n border: '2px solid var(--seekora-border-color, #e5e5e5)',\n borderTopColor: 'var(--seekora-primary, #007aff)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #86868b)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\nconst CommandIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path d=\"M3.5 6A1.5 1.5 0 015 4.5h1.5A1.5 1.5 0 018 6v1.5H5A1.5 1.5 0 013.5 6zM8 6v8H5a1.5 1.5 0 110-3h3V8H5a1.5 1.5 0 010-3h3v1z\"/>\n <path d=\"M12 6v8h3a1.5 1.5 0 100-3h-3V8h3a1.5 1.5 0 100-3h-3v1z\"/>\n <path d=\"M16.5 6A1.5 1.5 0 0015 4.5h-1.5A1.5 1.5 0 0012 6v1.5h3A1.5 1.5 0 0016.5 6z\"/>\n </svg>\n);\n\nconst DocumentIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\nconst ShoppingIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path d=\"M10 2a4 4 0 00-4 4v1H5a1 1 0 00-.994.89l-1 9A1 1 0 004 18h12a1 1 0 00.994-1.11l-1-9A1 1 0 0015 7h-1V6a4 4 0 00-4-4zm2 5V6a2 2 0 10-4 0v1h4zm-6 3a1 1 0 112 0 1 1 0 01-2 0zm7-1a1 1 0 100 2 1 1 0 000-2z\"/>\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface SpotlightDropdownProps extends BaseDropdownProps {\n /** Show preview panel */\n showPreview?: boolean;\n /** Show as overlay */\n asOverlay?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Show keyboard shortcuts */\n showShortcuts?: boolean;\n /** Quick actions */\n actions?: Array<{\n id: string;\n label: string;\n icon?: React.ReactNode;\n shortcut?: string;\n onAction: () => void;\n }>;\n}\n\nexport const SpotlightDropdown = forwardRef<DropdownRef, SpotlightDropdownProps>(\n function SpotlightDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n recentSearches = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n productDisplay = {},\n theme = {},\n showPreview = true,\n asOverlay = true,\n placeholder = 'Powered by Seekora',\n showShortcuts = true,\n actions = [],\n width = '680px',\n maxHeight = '500px',\n zIndex = 9999,\n className,\n style,\n classNames = {},\n inputRef,\n onSuggestionSelect,\n onProductClick,\n onRecentClick,\n onClose,\n onSearchSubmit,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 3),\n [recentSearches]\n );\n\n // Build flat list of all items\n const allItems = useMemo(() => {\n const items: Array<{\n type: 'action' | 'recent' | 'suggestion' | 'product';\n id: string;\n title: string;\n subtitle?: string;\n icon?: React.ReactNode;\n image?: string;\n price?: number;\n data: any;\n }> = [];\n\n // Actions first\n actions.forEach(action => {\n items.push({\n type: 'action',\n id: action.id,\n title: action.label,\n icon: action.icon,\n data: action,\n });\n });\n\n // Recent searches\n if (!query && recentQueries.length > 0) {\n recentQueries.forEach((q, idx) => {\n items.push({\n type: 'recent',\n id: `recent-${idx}`,\n title: q,\n icon: <ClockIcon />,\n data: q,\n });\n });\n }\n\n // Suggestions\n processedSuggestions.forEach((s, idx) => {\n items.push({\n type: 'suggestion',\n id: s.id || `suggestion-${idx}`,\n title: s.query,\n icon: <DocumentIcon />,\n data: s,\n });\n });\n\n // Products\n processedProducts.forEach((p, idx) => {\n items.push({\n type: 'product',\n id: p.id,\n title: p.title,\n subtitle: p.brand,\n icon: <ShoppingIcon />,\n image: p.image,\n price: p.price as number,\n data: p,\n });\n });\n\n return items;\n }, [actions, query, recentQueries, processedSuggestions, processedProducts]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0) {\n // No selection, submit current query\n if (query.trim()) onSearchSubmit?.(query.trim());\n return;\n }\n \n const item = allItems[activeIndex];\n if (!item) return;\n\n switch (item.type) {\n case 'action':\n item.data.onAction?.();\n break;\n case 'recent':\n onRecentClick?.(item.data);\n break;\n case 'suggestion':\n onSuggestionSelect?.(item.data._raw, activeIndex);\n break;\n case 'product':\n onProductClick?.(item.data._raw, activeIndex);\n break;\n }\n }, [activeIndex, allItems, query, onSearchSubmit, onRecentClick, onSuggestionSelect, onProductClick]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => inputRef?.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, inputRef, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (listRef.current && activeIndex >= 0) {\n const activeEl = listRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, listRef.current);\n }\n }\n }, [activeIndex]);\n\n // Reset index when query changes\n useEffect(() => {\n setActiveIndex(-1);\n }, [query]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const activeItem = allItems[activeIndex];\n\n const content = (\n <div\n ref={containerRef}\n className={cx('seekora-spotlight-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, zIndex: asOverlay ? undefined : zIndex },\n cssVariables as any,\n style\n )}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {/* Search Input */}\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}>\n <SearchIcon />\n </div>\n <input\n ref={inputRef as any}\n type=\"text\"\n placeholder={placeholder}\n defaultValue={query}\n style={styles.searchInput}\n onChange={(e) => onSearchSubmit?.(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n navigateNext();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n navigatePrevious();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n selectActive();\n } else if (e.key === 'Escape') {\n onClose?.();\n }\n }}\n autoFocus\n />\n {showShortcuts && (\n <div style={styles.shortcut}>\n <span style={styles.kbd}>⌘</span>\n <span style={styles.kbd}>K</span>\n </div>\n )}\n </div>\n\n {header}\n\n {/* Content */}\n <div style={styles.content}>\n {/* Results */}\n <div ref={listRef} style={{ ...styles.resultsColumn, maxHeight }}>\n {allItems.length === 0 ? (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n No results for \"{query}\"\n </div>\n )\n ) : (\n <>\n {/* Actions */}\n {actions.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Actions</div>\n {allItems.filter(i => i.type === 'action').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n selectActive();\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.icon}\n </div>\n <div style={styles.itemContent}>\n <div style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {item.title}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Recent */}\n {recentQueries.length > 0 && !query && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Recent</div>\n {allItems.filter(i => i.type === 'recent').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n onRecentClick?.(item.data);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.icon}\n </div>\n <div style={styles.itemContent}>\n <div style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {item.title}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {processedSuggestions.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Suggestions</div>\n {allItems.filter(i => i.type === 'suggestion').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n onSuggestionSelect?.(item.data._raw, idx);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.icon}\n </div>\n <div style={styles.itemContent}>\n <div\n style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {highlightTextReact(item.title, query, { tag: 'strong' })}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Products */}\n {processedProducts.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Products</div>\n {allItems.filter(i => i.type === 'product').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n onProductClick?.(item.data._raw, idx);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.image ? (\n <img src={item.image} alt=\"\" style={styles.itemIconImage} />\n ) : (\n item.icon\n )}\n </div>\n <div style={styles.itemContent}>\n <div style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {item.title}\n </div>\n {item.subtitle && (\n <div style={mergeStyles(\n styles.itemSubtitle,\n isActive ? styles.itemSubtitleActive : undefined\n )}>\n {item.subtitle}\n </div>\n )}\n </div>\n {item.price !== undefined && (\n <span style={mergeStyles(\n styles.itemAction,\n styles.itemActionVisible,\n isActive ? styles.itemActionActive : undefined\n )}>\n {formatPrice(item.price, { currency: productDisplay.currency })}\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </>\n )}\n </div>\n\n {/* Preview Panel */}\n {showPreview && activeItem && activeItem.type === 'product' && (\n <div style={styles.previewColumn}>\n <div style={styles.previewContent}>\n {activeItem.image && (\n <img src={activeItem.image} alt=\"\" style={styles.previewImage} />\n )}\n <div style={styles.previewTitle}>{activeItem.title}</div>\n {activeItem.subtitle && (\n <div style={styles.previewSubtitle}>{activeItem.subtitle}</div>\n )}\n {activeItem.price !== undefined && (\n <div style={styles.previewPrice}>\n {formatPrice(activeItem.price, { currency: productDisplay.currency })}\n </div>\n )}\n <div style={styles.previewActions}>\n <button\n style={{ ...styles.previewAction, ...styles.previewActionPrimary }}\n onClick={() => onProductClick?.(activeItem.data._raw, activeIndex)}\n >\n View Product\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <div style={styles.footerActions}>\n <span style={styles.footerAction}>\n <span style={styles.kbd}>↑</span>\n <span style={styles.kbd}>↓</span>\n navigate\n </span>\n <span style={styles.footerAction}>\n <span style={styles.kbd}>↵</span>\n select\n </span>\n <span style={styles.footerAction}>\n <span style={styles.kbd}>esc</span>\n close\n </span>\n </div>\n <span>{allItems.length} results</span>\n </div>\n )}\n </div>\n );\n\n if (asOverlay) {\n return (\n <div \n style={{ ...styles.overlay, zIndex }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose?.();\n }}\n >\n {content}\n </div>\n );\n }\n\n return content;\n }\n);\n\nexport default SpotlightDropdown;\n","/**\n * ShopifyDropdown - Modern E-commerce Style Suggestions\n * \n * Features:\n * - Hero product with large image\n * - Horizontal product scroll\n * - Collection/category links\n * - Clean, modern design\n * - Quick add to cart\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n calculateDiscount,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (isMobile: boolean = false) => ({\n root: {\n position: isMobile ? 'fixed' as const : 'absolute' as const,\n top: isMobile ? 0 : '100%',\n left: 0,\n right: 0,\n bottom: isMobile ? 0 : 'auto',\n marginTop: isMobile ? 0 : '8px',\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n color: 'var(--seekora-text-primary, inherit)',\n borderRadius: isMobile ? 0 : '16px',\n boxShadow: isMobile ? 'none' : '0 4px 30px rgba(0, 0, 0, 0.12)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: isMobile ? '16px' : '14px',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n layout: {\n display: isMobile ? 'flex' : 'grid',\n flexDirection: 'column' as const,\n gridTemplateColumns: isMobile ? '1fr' : '1fr 1fr',\n minHeight: isMobile ? 'auto' : '400px',\n flex: 1,\n overflowY: 'auto' as const,\n },\n leftPanel: {\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n borderRight: isMobile ? 'none' : '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderBottom: isMobile ? '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))' : 'none',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n rightPanel: {\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n padding: isMobile ? '16px' : '24px',\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n },\n section: {\n flex: 1,\n overflowY: 'auto' as const,\n },\n sectionHeader: {\n padding: '16px 20px 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #666)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.1em',\n },\n viewAllLink: {\n fontSize: '12px',\n color: 'var(--seekora-text-primary, inherit)',\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: isMobile ? '14px 16px' : '12px 16px',\n gap: '12px',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n minHeight: '48px',\n margin: '4px 8px',\n borderRadius: '10px',\n color: 'var(--seekora-text-primary, inherit)',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, rgba(255, 255, 255, 0.1))',\n color: 'var(--seekora-text-primary, inherit)',\n },\n suggestionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #999999)',\n flexShrink: 0,\n },\n suggestionContent: {\n flex: 1,\n minWidth: 0,\n },\n suggestionQuery: {\n fontSize: '14px',\n color: 'var(--seekora-text-primary, inherit)',\n fontWeight: 400,\n },\n suggestionMeta: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, inherit)',\n marginTop: '2px',\n },\n suggestionArrow: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-tertiary, #ccc)',\n transform: 'rotate(-45deg)',\n opacity: 0,\n transition: 'opacity 150ms',\n },\n suggestionArrowVisible: {\n opacity: 1,\n },\n collectionsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: '1px',\n backgroundColor: 'var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderTop: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n },\n collectionItem: {\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n color: 'var(--seekora-text-primary, inherit)',\n padding: '16px 20px',\n cursor: 'pointer',\n transition: 'background-color 150ms',\n },\n collectionItemHover: {\n backgroundColor: 'var(--seekora-bg-hover, rgba(255, 255, 255, 0.1))',\n color: 'var(--seekora-text-primary, inherit)',\n },\n collectionName: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n marginBottom: '4px',\n },\n collectionCount: {\n fontSize: '11px',\n color: 'var(--seekora-text-secondary, inherit)',\n },\n heroProduct: {\n marginBottom: '24px',\n },\n heroImage: {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'cover' as const,\n borderRadius: '2px',\n marginBottom: '16px',\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f5)',\n },\n heroTitle: {\n fontSize: '16px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n marginBottom: '8px',\n lineHeight: 1.3,\n },\n heroBrand: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, inherit)',\n marginBottom: '12px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n },\n heroPricing: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '16px',\n },\n heroPrice: {\n fontSize: '18px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n },\n heroComparePrice: {\n fontSize: '14px',\n color: 'var(--seekora-text-tertiary, #999)',\n textDecoration: 'line-through',\n },\n heroDiscount: {\n fontSize: '12px',\n fontWeight: 600,\n color: 'var(--seekora-error, #d02e2e)',\n backgroundColor: 'var(--seekora-error-light, #fdf2f2)',\n padding: '2px 8px',\n borderRadius: '2px',\n },\n heroButton: {\n width: '100%',\n padding: '14px 20px',\n backgroundColor: 'var(--seekora-text-primary, inherit)',\n color: 'var(--seekora-bg-surface, transparent)',\n border: 'none',\n borderRadius: '2px',\n fontSize: '13px',\n fontWeight: 500,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.1em',\n cursor: 'pointer',\n transition: 'background-color 150ms',\n },\n heroButtonHover: {\n backgroundColor: 'var(--seekora-text-secondary, inherit)',\n color: 'var(--seekora-bg-surface, transparent)',\n },\n productsScroll: {\n flex: 1,\n overflowX: 'auto' as const,\n overflowY: 'hidden' as const,\n display: 'flex',\n gap: '16px',\n paddingBottom: '8px',\n scrollbarWidth: 'thin' as const,\n },\n productCard: {\n flex: '0 0 140px',\n cursor: 'pointer',\n transition: 'opacity 150ms',\n },\n productCardHover: {\n opacity: 0.7,\n },\n productImage: {\n width: '140px',\n height: '175px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f5)',\n marginBottom: '10px',\n },\n productTitle: {\n fontSize: '12px',\n color: 'var(--seekora-text-primary, inherit)',\n marginBottom: '4px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n productPrice: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, inherit)',\n },\n footer: {\n padding: '12px 20px',\n borderTop: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '11px',\n color: 'var(--seekora-text-secondary, inherit)',\n },\n footerLink: {\n color: 'var(--seekora-text-primary, inherit)',\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '60px',\n color: 'var(--seekora-text-secondary, inherit)',\n },\n spinner: {\n width: '24px',\n height: '24px',\n border: '2px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderTopColor: 'var(--seekora-text-primary, inherit)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '60px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #666)',\n },\n highlight: {\n fontWeight: 600,\n textDecoration: 'underline',\n textDecorationColor: 'var(--seekora-text-primary, #121212)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\"/>\n </svg>\n);\n\nconst ArrowIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface ShopifyDropdownProps extends BaseDropdownProps {\n /** Show hero product */\n showHeroProduct?: boolean;\n /** Show collections/categories */\n showCollections?: boolean;\n /** Show add to cart button */\n showAddToCart?: boolean;\n /** Add to cart text */\n addToCartText?: string;\n /** Show compare price */\n showComparePrice?: boolean;\n}\n\nexport const ShopifyDropdown = forwardRef<DropdownRef, ShopifyDropdownProps>(\n function ShopifyDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n categories = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n categoryFields = { id: 'id', label: 'label' },\n productDisplay = {},\n theme = {},\n showHeroProduct = true,\n showCollections = true,\n showAddToCart = true,\n addToCartText = 'Quick Add',\n showComparePrice = true,\n width = '100%',\n maxHeight = '500px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n onAddToCart,\n onViewAll,\n onClose,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(isMobile), [isMobile]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n const [hoveredCollection, setHoveredCollection] = useState<string | null>(null);\n const [hoveredButton, setHoveredButton] = useState(false);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const processedCategories = useMemo(() =>\n categories.map(c => extractCategory(c, categoryFields)),\n [categories, categoryFields]\n );\n\n // Hero product (first product)\n const heroProduct = processedProducts[0];\n const otherProducts = processedProducts.slice(1, 7);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, processedSuggestions.length - 1));\n }, [processedSuggestions.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex >= 0 && processedSuggestions[activeIndex]) {\n onSuggestionSelect?.(processedSuggestions[activeIndex]._raw, activeIndex);\n }\n }, [activeIndex, processedSuggestions, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const heroDiscount = heroProduct \n ? calculateDiscount(heroProduct.price as number, heroProduct.comparePrice as number)\n : undefined;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-shopify-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { \n width: isMobile ? '100%' : width, \n maxHeight: isMobile ? '100vh' : maxHeight,\n zIndex \n },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n .seekora-shopify-dropdown mark {\n background: transparent;\n text-decoration: underline;\n font-weight: 600;\n }\n `}</style>\n\n {header}\n\n <div style={styles.layout}>\n {/* Left Panel - Suggestions & Collections */}\n <div style={styles.leftPanel}>\n {/* Suggestions */}\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Suggestions</span>\n {processedSuggestions.length > 5 && (\n <span \n style={styles.viewAllLink}\n onClick={() => onViewAll?.('suggestions')}\n >\n View all\n </span>\n )}\n </div>\n {processedSuggestions.slice(0, 5).map((suggestion, idx) => {\n const isActive = activeIndex === idx;\n return (\n <div\n key={suggestion.id || idx}\n data-index={idx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.(suggestion._raw, idx)}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={styles.suggestionIcon}>\n <SearchIcon />\n </div>\n <div style={styles.suggestionContent}>\n <div style={styles.suggestionQuery}>\n {highlightTextReact(suggestion.query, query, { tag: 'mark' })}\n </div>\n {suggestion.count && (\n <div style={styles.suggestionMeta}>\n {suggestion.count} results\n </div>\n )}\n </div>\n <div \n style={mergeStyles(\n styles.suggestionArrow,\n isActive ? styles.suggestionArrowVisible : undefined\n )}\n >\n <ArrowIcon />\n </div>\n </div>\n );\n })}\n\n {/* Empty suggestions */}\n {processedSuggestions.length === 0 && query && (\n renderEmpty ? renderEmpty(query) : (\n <div style={{ padding: '20px', textAlign: 'center', color: '#666' }}>\n No suggestions for \"{query}\"\n </div>\n )\n )}\n </div>\n\n {/* Collections/Categories */}\n {showCollections && processedCategories.length > 0 && (\n <>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Collections</span>\n </div>\n <div style={styles.collectionsGrid}>\n {processedCategories.slice(0, 4).map(cat => (\n <div\n key={cat.id}\n style={mergeStyles(\n styles.collectionItem,\n hoveredCollection === cat.id ? styles.collectionItemHover : undefined\n )}\n onClick={() => onTabChange?.(cat.id)}\n onMouseEnter={() => setHoveredCollection(cat.id)}\n onMouseLeave={() => setHoveredCollection(null)}\n >\n <div style={styles.collectionName}>{cat.label}</div>\n {cat.count && (\n <div style={styles.collectionCount}>\n {cat.count} products\n </div>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n\n {/* Right Panel - Products */}\n <div style={styles.rightPanel}>\n {/* Hero Product */}\n {showHeroProduct && heroProduct && (\n <div style={styles.heroProduct}>\n {heroProduct.image && (\n <img\n src={heroProduct.image}\n alt={heroProduct.title}\n style={styles.heroImage}\n loading=\"lazy\"\n />\n )}\n {heroProduct.brand && (\n <div style={styles.heroBrand}>{heroProduct.brand}</div>\n )}\n <div style={styles.heroTitle}>{heroProduct.title}</div>\n <div style={styles.heroPricing}>\n <span style={styles.heroPrice}>\n {formatPrice(heroProduct.price, { \n currency: productDisplay.currency || heroProduct.currency || '$' \n })}\n </span>\n {showComparePrice && heroProduct.comparePrice && (\n <span style={styles.heroComparePrice}>\n {formatPrice(heroProduct.comparePrice, { \n currency: productDisplay.currency || heroProduct.currency || '$' \n })}\n </span>\n )}\n {heroDiscount && (\n <span style={styles.heroDiscount}>-{heroDiscount}%</span>\n )}\n </div>\n {showAddToCart && (\n <button\n style={mergeStyles(\n styles.heroButton,\n hoveredButton ? styles.heroButtonHover : undefined\n )}\n onClick={() => onAddToCart?.(heroProduct._raw)}\n onMouseEnter={() => setHoveredButton(true)}\n onMouseLeave={() => setHoveredButton(false)}\n >\n {addToCartText}\n </button>\n )}\n </div>\n )}\n\n {/* Other Products - Horizontal Scroll */}\n {otherProducts.length > 0 && (\n <>\n <div style={{ ...styles.sectionTitle, marginBottom: '12px' }}>\n More Products\n </div>\n <div style={styles.productsScroll}>\n {otherProducts.map((product, idx) => (\n <div\n key={product.id}\n style={mergeStyles(\n styles.productCard,\n hoveredProduct === product.id ? styles.productCardHover : undefined\n )}\n onClick={() => onProductClick?.(product._raw, idx + 1)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n >\n {product.image ? (\n <img\n src={product.image}\n alt={product.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={styles.productImage} />\n )}\n <div style={styles.productTitle}>{product.title}</div>\n {product.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(product.price, { \n currency: productDisplay.currency || product.currency || '$' \n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <span>\n Press <strong>Enter</strong> to search, <strong>↑↓</strong> to navigate\n </span>\n <span \n style={styles.footerLink}\n onClick={() => onViewAll?.('products')}\n >\n View all results\n </span>\n </div>\n )}\n </div>\n );\n }\n);\n\nexport default ShopifyDropdown;\n","/**\n * MobileSheetDropdown - Mobile-First Bottom Sheet Style\n * \n * Features:\n * - iOS-style bottom sheet with drag handle\n * - Full-screen overlay with smooth transitions\n * - Touch-friendly large tap targets\n * - Swipe to dismiss\n * - Optimized for small screens\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n formatPrice,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 9998,\n transition: 'opacity 200ms ease',\n },\n root: {\n position: 'fixed' as const,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'var(--seekora-bg-surface, transparent)',\n borderRadius: '16px 16px 0 0',\n boxShadow: '0 -4px 20px rgba(0, 0, 0, 0.15)',\n fontFamily: 'var(--seekora-font-family, -apple-system, BlinkMacSystemFont, \"SF Pro Text\", sans-serif)',\n fontSize: 'var(--seekora-font-size, 16px)',\n zIndex: 9999,\n transform: 'translateY(0)',\n transition: 'transform 300ms cubic-bezier(0.32, 0.72, 0, 1)',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n rootHidden: {\n transform: 'translateY(100%)',\n },\n dragHandle: {\n display: 'flex',\n justifyContent: 'center',\n padding: '12px',\n cursor: 'grab',\n },\n dragBar: {\n width: '36px',\n height: '5px',\n backgroundColor: 'var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderRadius: '3px',\n },\n header: {\n padding: '0 16px 16px',\n borderBottom: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n },\n searchContainer: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n borderRadius: '12px',\n padding: '12px 16px',\n gap: '12px',\n },\n searchIcon: {\n width: '20px',\n height: '20px',\n color: 'var(--seekora-text-tertiary, #8e8e93)',\n flexShrink: 0,\n },\n searchInput: {\n flex: 1,\n border: 'none',\n background: 'transparent',\n fontSize: '17px',\n color: 'var(--seekora-text-primary, inherit)',\n outline: 'none',\n },\n cancelBtn: {\n padding: '8px',\n background: 'none',\n border: 'none',\n color: 'var(--seekora-primary, #007aff)',\n fontSize: '17px',\n cursor: 'pointer',\n },\n content: {\n flex: 1,\n overflowY: 'auto' as const,\n overscrollBehavior: 'contain',\n WebkitOverflowScrolling: 'touch' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionHeader: {\n padding: '16px 16px 8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n sectionTitle: {\n fontSize: '13px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #8e8e93)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n },\n clearBtn: {\n fontSize: '15px',\n color: 'var(--seekora-primary, #007aff)',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: '14px 16px',\n gap: '14px',\n cursor: 'pointer',\n transition: 'background-color 100ms',\n minHeight: '56px', // Touch-friendly\n color: 'var(--seekora-text-primary, inherit)',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, rgba(255, 255, 255, 0.1))',\n color: 'var(--seekora-text-primary, inherit)',\n },\n itemIcon: {\n width: '24px',\n height: '24px',\n color: 'var(--seekora-text-tertiary, #8e8e93)',\n flexShrink: 0,\n },\n itemImage: {\n width: '48px',\n height: '48px',\n borderRadius: '8px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n flexShrink: 0,\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemTitle: {\n fontSize: '17px',\n color: 'var(--seekora-text-primary, inherit)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemSubtitle: {\n fontSize: '15px',\n color: 'var(--seekora-text-secondary, inherit)',\n marginTop: '2px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemAction: {\n color: 'var(--seekora-text-tertiary, #c7c7cc)',\n flexShrink: 0,\n },\n productsScroll: {\n display: 'flex',\n gap: '12px',\n padding: '0 16px 16px',\n overflowX: 'auto' as const,\n scrollSnapType: 'x mandatory',\n WebkitOverflowScrolling: 'touch' as const,\n },\n productCard: {\n flex: '0 0 140px',\n scrollSnapAlign: 'start',\n cursor: 'pointer',\n },\n productImage: {\n width: '140px',\n height: '140px',\n borderRadius: '12px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n marginBottom: '8px',\n },\n productTitle: {\n fontSize: '15px',\n color: 'var(--seekora-text-primary, inherit)',\n marginBottom: '4px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n productPrice: {\n fontSize: '15px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, inherit)',\n },\n footer: {\n padding: '12px 16px',\n paddingBottom: 'calc(12px + env(safe-area-inset-bottom, 0px))',\n borderTop: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(255, 255, 255, 0.1))',\n },\n footerBtn: {\n width: '100%',\n padding: '16px',\n backgroundColor: 'var(--seekora-primary, #007aff)',\n color: 'var(--seekora-text-inverse, transparent)',\n border: 'none',\n borderRadius: '12px',\n fontSize: '17px',\n fontWeight: 600,\n cursor: 'pointer',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '60px',\n color: 'var(--seekora-text-secondary, inherit)',\n },\n spinner: {\n width: '28px',\n height: '28px',\n border: '3px solid var(--seekora-border-color, rgba(128,128,128,0.2))',\n borderTopColor: 'var(--seekora-primary, #007aff)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '60px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, inherit)',\n fontSize: '17px',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 16px',\n color: 'var(--seekora-text-tertiary, #c7c7cc)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n <path d=\"M21 21l-4.35-4.35\"/>\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <polyline points=\"12 6 12 12 16 14\"/>\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"/>\n <polyline points=\"17 6 23 6 23 12\"/>\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" width=\"20\" height=\"20\">\n <polyline points=\"9 18 15 12 9 6\"/>\n </svg>\n);\n\nconst ArrowUpIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" width=\"20\" height=\"20\">\n <path d=\"M7 17l5-5-5-5M13 17l5-5-5-5\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface MobileSheetDropdownProps extends BaseDropdownProps {\n /** Show search input in header */\n showSearchInput?: boolean;\n /** Show cancel button */\n showCancel?: boolean;\n /** Cancel button text */\n cancelText?: string;\n /** Show drag handle */\n showDragHandle?: boolean;\n /** Enable swipe to dismiss */\n swipeToDismiss?: boolean;\n /** Footer button text */\n footerButtonText?: string;\n /** Show footer button */\n showFooterButton?: boolean;\n}\n\nexport const MobileSheetDropdown = forwardRef<DropdownRef, MobileSheetDropdownProps>(\n function MobileSheetDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n recentSearches = [],\n trendingSearches = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n productDisplay = {},\n theme = {},\n showSearchInput = true,\n showCancel = true,\n cancelText = 'Cancel',\n showDragHandle = true,\n swipeToDismiss = true,\n footerButtonText = 'Search',\n showFooterButton = true,\n width = '100%',\n maxHeight = '85vh',\n zIndex = 9999,\n className,\n style,\n classNames = {},\n inputRef,\n onSuggestionSelect,\n onProductClick,\n onRecentClick,\n onRecentClearAll,\n onSearchSubmit,\n onClose,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [inputValue, setInputValue] = useState(query);\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartY = useRef(0);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 5),\n [recentSearches]\n );\n\n const trendingQueries = useMemo(() =>\n (trendingSearches as any[]).map(t => typeof t === 'string' ? t : t.query).slice(0, 5),\n [trendingSearches]\n );\n\n // Navigation\n // Build all navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any }> = [];\n recentQueries.forEach(q => items.push({ type: 'recent', data: q }));\n trendingQueries.forEach(q => items.push({ type: 'trending', data: q }));\n processedSuggestions.forEach(s => items.push({ type: 'suggestion', data: s }));\n return items;\n }, [recentQueries, trendingQueries, processedSuggestions]);\n\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) {\n // No selection, submit current query\n if (inputValue.trim()) onSearchSubmit?.(inputValue.trim());\n return;\n }\n const item = allItems[activeIndex];\n if (item.type === 'recent' || item.type === 'trending') {\n onRecentClick?.(item.data);\n } else if (item.type === 'suggestion') {\n onSuggestionSelect?.(item.data._raw, activeIndex);\n }\n }, [activeIndex, allItems, inputValue, onSearchSubmit, onRecentClick, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => inputRef?.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, inputRef, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n // Drag to dismiss\n const handleDragStart = (e: React.TouchEvent) => {\n if (!swipeToDismiss) return;\n setIsDragging(true);\n dragStartY.current = e.touches[0].clientY;\n };\n\n const handleDrag = (e: React.TouchEvent) => {\n if (!isDragging) return;\n const deltaY = e.touches[0].clientY - dragStartY.current;\n if (deltaY > 0) {\n setDragY(deltaY);\n }\n };\n\n const handleDragEnd = () => {\n if (!isDragging) return;\n setIsDragging(false);\n if (dragY > 150) {\n onClose?.();\n }\n setDragY(0);\n };\n\n // Sync input value\n useEffect(() => {\n setInputValue(query);\n }, [query]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = !inputValue && recentQueries.length > 0;\n const showTrending = !inputValue && trendingQueries.length > 0;\n const showProducts = processedProducts.length > 0;\n\n return (\n <>\n {/* Overlay */}\n <div \n style={{\n ...styles.overlay,\n opacity: isDragging ? 1 - (dragY / 300) : 1,\n }}\n onClick={onClose}\n />\n\n {/* Sheet */}\n <div\n ref={containerRef}\n className={cx('seekora-mobile-sheet', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { \n maxHeight, \n zIndex,\n transform: isDragging ? `translateY(${dragY}px)` : 'translateY(0)',\n },\n cssVariables as any,\n style\n )}\n onTouchStart={handleDragStart}\n onTouchMove={handleDrag}\n onTouchEnd={handleDragEnd}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {/* Drag Handle */}\n {showDragHandle && (\n <div style={styles.dragHandle}>\n <div style={styles.dragBar} />\n </div>\n )}\n\n {/* Header with Search */}\n {(showSearchInput || header) && (\n <div style={styles.header}>\n {header || (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}>\n <SearchIcon />\n </div>\n <input\n ref={inputRef as any}\n type=\"text\"\n placeholder=\"Powered by Seekora\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (activeIndex >= 0) {\n selectActive();\n } else if (inputValue.trim()) {\n onSearchSubmit?.(inputValue.trim());\n }\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n navigateNext();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n navigatePrevious();\n } else if (e.key === 'Escape') {\n onClose?.();\n }\n }}\n style={styles.searchInput}\n autoFocus\n />\n </div>\n {showCancel && (\n <button style={styles.cancelBtn} onClick={onClose}>\n {cancelText}\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Content */}\n <div style={styles.content}>\n <>\n {/* Recent Searches */}\n {showRecent && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Recent</span>\n <button style={styles.clearBtn} onClick={onRecentClearAll}>\n Clear\n </button>\n </div>\n {recentQueries.map((q, idx) => (\n <div\n key={`recent-${q}`}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n activeIndex === idx ? styles.itemActive : undefined\n )}\n onClick={() => {\n onRecentClick?.(q);\n setInputValue(q);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={styles.itemIcon}>\n <ClockIcon />\n </div>\n <div style={styles.itemContent}>\n <div style={styles.itemTitle}>{q}</div>\n </div>\n <div style={styles.itemAction}>\n <ArrowUpIcon />\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Trending */}\n {showTrending && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Trending</span>\n </div>\n {trendingQueries.map((q, idx) => {\n const globalIdx = recentQueries.length + idx;\n return (\n <div\n key={`trending-${q}`}\n data-index={globalIdx}\n style={mergeStyles(\n styles.item,\n activeIndex === globalIdx ? styles.itemActive : undefined\n )}\n onClick={() => {\n onRecentClick?.(q);\n setInputValue(q);\n }}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n >\n <div style={styles.itemIcon}>\n <TrendingIcon />\n </div>\n <div style={styles.itemContent}>\n <div style={styles.itemTitle}>{q}</div>\n </div>\n <div style={styles.itemAction}>\n <ChevronIcon />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {inputValue && processedSuggestions.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Suggestions</span>\n </div>\n {processedSuggestions.map((s, idx) => {\n const globalIdx = recentQueries.length + trendingQueries.length + idx;\n return (\n <div\n key={s.id || idx}\n data-index={globalIdx}\n style={mergeStyles(\n styles.item,\n activeIndex === globalIdx ? styles.itemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.(s._raw, idx)}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n >\n <div style={styles.itemIcon}>\n <SearchIcon />\n </div>\n <div style={styles.itemContent}>\n <div style={styles.itemTitle}>\n {highlightTextReact(s.query, inputValue, { tag: 'strong' })}\n </div>\n {s.count && (\n <div style={styles.itemSubtitle}>\n {s.count} results\n </div>\n )}\n </div>\n <div style={styles.itemAction}>\n <ChevronIcon />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Products - Horizontal Scroll */}\n {showProducts && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Products</span>\n </div>\n <div style={styles.productsScroll}>\n {processedProducts.slice(0, 8).map((p, idx) => (\n <div\n key={p.id}\n style={styles.productCard}\n onClick={() => onProductClick?.(p._raw, idx)}\n >\n {p.image ? (\n <img\n src={p.image}\n alt={p.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={styles.productImage} />\n )}\n <div style={styles.productTitle}>{p.title}</div>\n {p.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(p.price, { \n currency: productDisplay.currency || p.currency || '$' \n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Empty State */}\n {inputValue && processedSuggestions.length === 0 && !loading && (\n renderEmpty ? renderEmpty(inputValue) : (\n <div style={styles.empty}>\n <div style={styles.emptyIcon}>\n <SearchIcon />\n </div>\n <p>No results for \"{inputValue}\"</p>\n </div>\n )\n )}\n </>\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n showFooterButton && inputValue && (\n <div style={styles.footer}>\n <button\n style={styles.footerBtn}\n onClick={() => onSearchSubmit?.(inputValue)}\n >\n {footerButtonText} \"{inputValue}\"\n </button>\n </div>\n )\n )}\n </div>\n </>\n );\n }\n);\n\nexport default MobileSheetDropdown;\n","/**\n * MinimalDropdown - Ultra-Clean Minimalist Style\n * \n * Features:\n * - Stripped-down, distraction-free design\n * - Focus on typography and whitespace\n * - Subtle animations\n * - Perfect for editorial/content sites\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n formatPrice,\n highlightText,\n highlightTextReact,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n root: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e5e5)',\n fontFamily: 'var(--seekora-font-family, \"Inter\", -apple-system, sans-serif)',\n fontSize: 'var(--seekora-font-size, 15px)',\n letterSpacing: '-0.01em',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: '16px 20px',\n cursor: 'pointer',\n transition: 'background-color 150ms ease, padding-left 150ms ease',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e8)',\n gap: '16px',\n color: 'var(--seekora-text-primary, #111)',\n },\n itemLast: {\n borderBottom: 'none',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #111)',\n paddingLeft: '24px',\n },\n itemIndex: {\n fontSize: '11px',\n fontWeight: 500,\n color: 'var(--seekora-text-tertiary, #999)',\n fontFamily: 'monospace',\n minWidth: '20px',\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemQuery: {\n fontSize: '15px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #111)',\n },\n itemMeta: {\n fontSize: '13px',\n color: 'var(--seekora-text-secondary, #666)',\n marginTop: '4px',\n fontWeight: 400,\n },\n itemType: {\n fontSize: '10px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #999)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.1em',\n padding: '4px 8px',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n },\n productRow: {\n display: 'flex',\n alignItems: 'center',\n padding: '16px 20px',\n cursor: 'pointer',\n transition: 'background-color 150ms ease',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e8)',\n gap: '16px',\n color: 'var(--seekora-text-primary, #111)',\n },\n productRowActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #111)',\n },\n productImage: {\n width: '56px',\n height: '56px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n flexShrink: 0,\n },\n productContent: {\n flex: 1,\n minWidth: 0,\n },\n productTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #111)',\n marginBottom: '4px',\n },\n productPrice: {\n fontSize: '14px',\n color: 'var(--seekora-text-secondary, #666)',\n },\n divider: {\n padding: '12px 20px 8px',\n fontSize: '10px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #999)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.15em',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n borderBottom: '1px solid var(--seekora-border-color, #f0f0f0)',\n },\n footer: {\n padding: '12px 20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #999)',\n borderTop: '1px solid var(--seekora-border-color, #e5e5e5)',\n },\n footerHint: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n },\n kbd: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2px 6px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #ddd)',\n fontSize: '10px',\n fontFamily: 'monospace',\n },\n loading: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #666)',\n fontSize: '14px',\n },\n empty: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #666)',\n fontSize: '14px',\n },\n highlight: {\n backgroundColor: 'var(--seekora-highlight-bg, #fff3cd)',\n padding: '0 2px',\n },\n});\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface MinimalDropdownProps extends BaseDropdownProps {\n /** Show item indices */\n showIndices?: boolean;\n /** Show item type labels */\n showTypeLabels?: boolean;\n /** Show dividers between sections */\n showSectionDividers?: boolean;\n /** Monospace indices */\n monoIndices?: boolean;\n}\n\nexport const MinimalDropdown = forwardRef<DropdownRef, MinimalDropdownProps>(\n function MinimalDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n recentSearches = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n productDisplay = {},\n theme = {},\n showIndices = false,\n showTypeLabels = false,\n showSectionDividers = true,\n width = '100%',\n maxHeight = '400px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onRecentClick,\n onClose,\n onSearchSubmit,\n header,\n footer,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 3),\n [recentSearches]\n );\n\n // All items for navigation\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any }> = [];\n \n if (!query && recentQueries.length > 0) {\n recentQueries.forEach(q => items.push({ type: 'recent', data: q }));\n }\n \n processedSuggestions.forEach(s => items.push({ type: 'suggestion', data: s }));\n processedProducts.forEach(p => items.push({ type: 'product', data: p }));\n \n return items;\n }, [query, recentQueries, processedSuggestions, processedProducts]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n const item = allItems[activeIndex];\n if (!item) {\n if (query) onSearchSubmit?.(query);\n return;\n }\n \n switch (item.type) {\n case 'recent':\n onRecentClick?.(item.data);\n break;\n case 'suggestion':\n onSuggestionSelect?.(item.data._raw, activeIndex);\n break;\n case 'product':\n onProductClick?.(item.data._raw, activeIndex);\n break;\n }\n }, [activeIndex, allItems, query, onSearchSubmit, onRecentClick, onSuggestionSelect, onProductClick]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active into view\n useEffect(() => {\n if (listRef.current && activeIndex >= 0) {\n const activeEl = listRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, listRef.current);\n }\n }\n }, [activeIndex]);\n\n // Reset on query change\n useEffect(() => {\n setActiveIndex(-1);\n }, [query]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = !query && recentQueries.length > 0;\n\n let globalIndex = 0;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-minimal-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, zIndex },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n .seekora-minimal-dropdown mark {\n background-color: var(--seekora-highlight-bg, #fff3cd);\n padding: 0 2px;\n }\n `}</style>\n\n {header}\n\n <div ref={listRef} style={{ maxHeight, overflowY: 'auto' }}>\n {allItems.length === 0 ? (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n {query ? `No results for \"${query}\"` : 'Start typing to search'}\n </div>\n )\n ) : (\n <>\n {/* Recent Searches */}\n {showRecent && (\n <>\n {showSectionDividers && (\n <div style={styles.divider}>Recent</div>\n )}\n {recentQueries.map((q, idx) => {\n const itemIdx = globalIndex++;\n const isActive = activeIndex === itemIdx;\n const isLast = idx === recentQueries.length - 1 && !processedSuggestions.length && !processedProducts.length;\n \n return (\n <div\n key={`recent-${q}`}\n data-index={itemIdx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined,\n isLast ? styles.itemLast : undefined\n )}\n onClick={() => onRecentClick?.(q)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n {showIndices && (\n <span style={styles.itemIndex}>{itemIdx + 1}</span>\n )}\n <div style={styles.itemContent}>\n <div style={styles.itemQuery}>{q}</div>\n </div>\n {showTypeLabels && (\n <span style={styles.itemType}>Recent</span>\n )}\n </div>\n );\n })}\n </>\n )}\n\n {/* Suggestions */}\n {processedSuggestions.length > 0 && (\n <>\n {showSectionDividers && (showRecent || false) && (\n <div style={styles.divider}>Suggestions</div>\n )}\n {processedSuggestions.map((s, idx) => {\n const itemIdx = globalIndex++;\n const isActive = activeIndex === itemIdx;\n const isLast = idx === processedSuggestions.length - 1 && !processedProducts.length;\n \n return (\n <div\n key={s.id || `suggestion-${idx}`}\n data-index={itemIdx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined,\n isLast ? styles.itemLast : undefined\n )}\n onClick={() => onSuggestionSelect?.(s._raw, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n {showIndices && (\n <span style={styles.itemIndex}>{itemIdx + 1}</span>\n )}\n <div style={styles.itemContent}>\n <div style={styles.itemQuery}>\n {highlightTextReact(s.query, query, { tag: 'mark' })}\n </div>\n {s.count && (\n <div style={styles.itemMeta}>\n {s.count.toLocaleString()} results\n </div>\n )}\n </div>\n {showTypeLabels && (\n <span style={styles.itemType}>Search</span>\n )}\n </div>\n );\n })}\n </>\n )}\n\n {/* Products */}\n {processedProducts.length > 0 && (\n <>\n {showSectionDividers && (\n <div style={styles.divider}>Products</div>\n )}\n {processedProducts.slice(0, 4).map((p, idx) => {\n const itemIdx = globalIndex++;\n const isActive = activeIndex === itemIdx;\n \n return (\n <div\n key={p.id}\n data-index={itemIdx}\n style={mergeStyles(\n styles.productRow,\n isActive ? styles.productRowActive : undefined\n )}\n onClick={() => onProductClick?.(p._raw, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n {p.image && (\n <img\n src={p.image}\n alt={p.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n )}\n <div style={styles.productContent}>\n <div style={styles.productTitle}>{p.title}</div>\n {p.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(p.price, { \n currency: productDisplay.currency || p.currency || '$' \n })}\n </div>\n )}\n </div>\n {showTypeLabels && (\n <span style={styles.itemType}>Product</span>\n )}\n </div>\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <div style={styles.footerHint}>\n <span><span style={styles.kbd}>↑</span> <span style={styles.kbd}>↓</span> navigate</span>\n <span><span style={styles.kbd}>↵</span> select</span>\n <span><span style={styles.kbd}>esc</span> close</span>\n </div>\n <span>{allItems.length} results</span>\n </div>\n )}\n </div>\n );\n }\n);\n\nexport default MinimalDropdown;\n","/**\n * SuggestionSearchBar - Unified Search Component with Premium Dropdowns\n * \n * A self-contained search component that:\n * - Fetches suggestions from the API automatically\n * - Parses responses internally (no user-side parsing needed)\n * - Renders any of the 7 premium dropdown variants\n * - Handles analytics tracking\n * - Supports recent searches via localStorage\n * - Fully responsive and mobile-ready\n * \n * Usage:\n * ```tsx\n * <SuggestionSearchBar\n * client={seekoraClient}\n * variant=\"amazon\"\n * onSearch={(query) => router.push(`/search?q=${query}`)}\n * />\n * ```\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport type {\n SuggestionDropdownVariant,\n BaseDropdownProps,\n DropdownRef,\n SuggestionFieldMapping,\n ProductFieldMapping,\n DropdownThemeConfig,\n AnalyticsConfig,\n} from './types';\nimport {\n getRecentSearches,\n addRecentSearch,\n removeRecentSearch,\n clearRecentSearches,\n cx,\n mergeStyles,\n getSuggestionsCache,\n type SuggestionsCache,\n} from './utils';\nimport { useResponsive } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\nimport { useSearchContext } from '../SearchProvider';\nimport { useSuggestionsAnalytics } from '../../hooks/useSuggestionsAnalytics';\n\n// Import all variants\nimport { AmazonDropdown } from './AmazonDropdown';\nimport { GoogleDropdown } from './GoogleDropdown';\nimport { PinterestDropdown } from './PinterestDropdown';\nimport { SpotlightDropdown } from './SpotlightDropdown';\nimport { ShopifyDropdown } from './ShopifyDropdown';\nimport { MobileSheetDropdown } from './MobileSheetDropdown';\nimport { MinimalDropdown } from './MinimalDropdown';\n\n// ============================================================================\n// Theme helpers (support both Theme { colors } and DropdownThemeConfig)\n// ============================================================================\n\nfunction getThemeVars(theme: DropdownThemeConfig | { colors?: Record<string, string> | any } | any | undefined): Record<string, string> {\n if (!theme) {\n return {\n '--seekora-bg-surface': '#ffffff',\n '--seekora-bg-secondary': '#f7f7f7',\n '--seekora-bg-tertiary': '#f0f0f0',\n '--seekora-bg-hover': '#f5f5f5',\n '--seekora-text-primary': '#0f1111',\n '--seekora-text-secondary': '#565959',\n '--seekora-text-tertiary': '#767676',\n '--seekora-border-color': '#e7e7e7',\n '--seekora-primary': '#f90',\n '--seekora-text-on-primary': '#0f1111',\n '--seekora-text-inverse': '#ffffff',\n '--seekora-link': '#007185',\n '--seekora-font-family': '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n };\n }\n const t = theme as any;\n const colors = t.colors ?? {};\n return {\n '--seekora-bg-surface': t.backgroundColor ?? colors.background ?? '#ffffff',\n '--seekora-bg-secondary': t.surfaceColor ?? colors.hover ?? '#f7f7f7',\n '--seekora-bg-tertiary': t.hoverColor ?? colors.hover ?? '#f0f0f0',\n '--seekora-bg-hover': t.hoverColor ?? colors.hover ?? '#f5f5f5',\n '--seekora-text-primary': t.textColor ?? colors.text ?? '#0f1111',\n '--seekora-text-secondary': t.textSecondaryColor ?? colors.text ?? '#565959',\n '--seekora-text-tertiary': t.textSecondaryColor ?? '#767676',\n '--seekora-border-color': t.borderColor ?? colors.border ?? '#e7e7e7',\n '--seekora-primary': t.primaryColor ?? colors.primary ?? '#f90',\n '--seekora-text-on-primary': t.textOnPrimaryColor ?? '#0f1111',\n '--seekora-text-inverse': t.textInverseColor ?? '#ffffff',\n '--seekora-link': t.primaryColor ?? colors.primary ?? '#007185',\n '--seekora-font-family': t.fontFamily ?? '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n };\n}\n\nfunction themeToDropdownConfig(theme: DropdownThemeConfig | { colors?: Record<string, string> | any } | any | undefined): DropdownThemeConfig | undefined {\n if (!theme) return undefined;\n const t = theme as any;\n const colors = t.colors ?? {};\n return {\n backgroundColor: t.backgroundColor ?? colors.background,\n textColor: t.textColor ?? colors.text,\n surfaceColor: t.surfaceColor ?? colors.hover,\n borderColor: t.borderColor ?? colors.border,\n hoverColor: t.hoverColor ?? colors.hover,\n primaryColor: t.primaryColor ?? colors.primary,\n textSecondaryColor: t.textSecondaryColor ?? colors.text,\n fontFamily: t.fontFamily,\n };\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SuggestionSearchBarProps {\n /** Seekora client instance - REQUIRED */\n client: SeekoraClient;\n \n /** Dropdown variant to use */\n variant?: SuggestionDropdownVariant;\n \n /** Auto-select mobile variant on small screens */\n autoMobileVariant?: boolean;\n \n // === Search Config ===\n /** Placeholder text */\n placeholder?: string;\n /** Initial/default query */\n defaultQuery?: string;\n /** Controlled query value */\n value?: string;\n /** Min characters before fetching */\n minQueryLength?: number;\n /** Max suggestions to fetch */\n maxSuggestions?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n \n // === API Config ===\n /** Include dropdown recommendations (products, tabs, trending) */\n includeDropdownRecommendations?: boolean;\n /** When false, omit product hits list from dropdown (default true) */\n includeDropdownProductList?: boolean;\n /** When false, omit filtered_tabs from dropdown (default true) */\n includeFilteredTabs?: boolean;\n /** Include categories per suggestion */\n includeCategories?: boolean;\n /** Filtered tabs configuration */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Analytics tags */\n analyticsTags?: string[];\n \n // === Features ===\n /** Enable recent searches */\n enableRecentSearches?: boolean;\n /** Max recent searches to store */\n maxRecentSearches?: number;\n /** Show products in dropdown */\n showProducts?: boolean;\n /** Show trending when empty */\n showTrendingOnEmpty?: boolean;\n /** Enable analytics tracking */\n enableAnalytics?: boolean;\n /** Analytics configuration */\n analyticsConfig?: AnalyticsConfig;\n \n // === Field Mapping (for custom data structures) ===\n /** Map suggestion fields to your data */\n suggestionFields?: SuggestionFieldMapping;\n /** Map product fields to your data */\n productFields?: ProductFieldMapping;\n \n // === Theming ===\n /** Theme configuration */\n theme?: DropdownThemeConfig;\n \n // === Callbacks ===\n /** Called when search is submitted */\n onSearch?: (query: string) => void;\n /** Called when query changes */\n onQueryChange?: (query: string) => void;\n /** Called when a suggestion is selected */\n onSuggestionSelect?: (suggestion: any, index: number) => void;\n /** Called when a product is clicked */\n onProductClick?: (product: any, index: number) => void;\n /** Called when a category/tab is clicked */\n onCategoryClick?: (category: any, index: number) => void;\n /** Called when a tab is changed */\n onTabChange?: (tabId: string) => void;\n \n // === Styling ===\n /** Container class name */\n className?: string;\n /** Container style */\n style?: React.CSSProperties;\n /** Input class name */\n inputClassName?: string;\n /** Dropdown width */\n dropdownWidth?: string | number;\n /** Dropdown max height */\n dropdownMaxHeight?: string | number;\n /** Z-index for dropdown */\n zIndex?: number;\n \n // === Caching ===\n /** Enable caching for suggestions (reduces API calls) */\n enableCache?: boolean;\n /** Cache TTL in milliseconds (default: 30000 = 30 seconds) */\n cacheTtlMs?: number;\n /** Maximum cache entries (default: 100) */\n cacheMaxSize?: number;\n}\n\nexport interface SuggestionSearchBarRef {\n focus: () => void;\n blur: () => void;\n clear: () => void;\n getQuery: () => string;\n setQuery: (query: string) => void;\n openDropdown: () => void;\n closeDropdown: () => void;\n refresh: () => void;\n /** Clear the suggestions cache */\n clearCache: () => void;\n /** Get cache statistics */\n getCacheStats: () => { size: number; maxSize: number } | null;\n}\n\n// ============================================================================\n// Variant Map\n// ============================================================================\n\nconst VariantComponents: Record<SuggestionDropdownVariant, React.ComponentType<BaseDropdownProps>> = {\n amazon: AmazonDropdown,\n google: GoogleDropdown,\n pinterest: PinterestDropdown,\n spotlight: SpotlightDropdown,\n shopify: ShopifyDropdown,\n 'mobile-sheet': MobileSheetDropdown,\n minimal: MinimalDropdown,\n};\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (isMobile: boolean) => ({\n container: {\n position: 'relative' as const,\n width: '100%',\n fontFamily: 'var(--seekora-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)',\n },\n inputWrapper: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #111827)',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: 'var(--seekora-border-color, #d1d5db)',\n borderRadius: isMobile ? '8px' : '24px',\n overflow: 'hidden',\n transition: 'border-color 150ms, box-shadow 150ms',\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n },\n inputWrapperFocused: {\n borderColor: 'var(--seekora-primary, #f90)',\n boxShadow: '0 0 0 3px rgba(255, 153, 0, 0.15), 0 2px 8px rgba(0,0,0,0.1)',\n },\n searchIcon: {\n padding: isMobile ? '0 10px 0 14px' : '0 12px 0 18px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n },\n input: {\n flex: 1,\n padding: isMobile ? '12px 8px 12px 0' : '14px 12px 14px 0',\n fontSize: isMobile ? '16px' : '15px',\n borderWidth: 0,\n borderStyle: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n color: 'var(--seekora-text-primary, #0f1111)',\n fontFamily: 'inherit',\n minWidth: 0,\n WebkitAppearance: 'none' as const,\n },\n clearButton: {\n padding: '8px 14px',\n background: 'none',\n borderWidth: 0,\n borderStyle: 'none',\n cursor: 'pointer',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n fontSize: '18px',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'color 150ms',\n },\n});\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const SuggestionSearchBar = forwardRef<SuggestionSearchBarRef, SuggestionSearchBarProps>(\n function SuggestionSearchBar(props, ref) {\n const {\n client,\n variant = 'amazon',\n autoMobileVariant = true,\n placeholder = 'Powered by Seekora',\n defaultQuery = '',\n value,\n minQueryLength = 1,\n maxSuggestions = 8,\n debounceMs = 200,\n includeDropdownRecommendations = true,\n includeDropdownProductList = true,\n includeFilteredTabs = true,\n includeCategories = true,\n filteredTabs,\n analyticsTags,\n enableRecentSearches = true,\n maxRecentSearches = 10,\n showProducts = true,\n showTrendingOnEmpty = true,\n enableAnalytics = true,\n analyticsConfig,\n suggestionFields,\n productFields,\n theme,\n onSearch,\n onQueryChange,\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n className,\n style,\n inputClassName,\n dropdownWidth,\n dropdownMaxHeight = '500px',\n zIndex = 1000,\n enableCache = true,\n cacheTtlMs = 30000,\n cacheMaxSize = 100,\n } = props;\n\n // Theme: prop overrides context (SearchProvider theme)\n const searchContext = useSearchContext();\n const effectiveTheme = theme ?? searchContext.theme;\n\n // Initialize analytics hook for proper event tracking\n const analytics = useSuggestionsAnalytics({\n client,\n enabled: enableAnalytics,\n analyticsTags: analyticsConfig?.tags ?? analyticsTags,\n trackImpressions: analyticsConfig?.trackImpressions ?? true,\n trackClicks: analyticsConfig?.trackSuggestionClicks ?? true,\n });\n\n // Inject responsive styles\n useInjectResponsiveStyles();\n \n // Inject theme CSS variables so dropdown and page use one consistent theme\n useEffect(() => {\n const root = document.documentElement;\n const themeVars = getThemeVars(effectiveTheme);\n Object.entries(themeVars).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n }, [effectiveTheme]);\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n \n // Determine actual variant (auto-switch to mobile on small screens)\n const actualVariant = useMemo(() => {\n if (autoMobileVariant && isMobile && variant !== 'mobile-sheet' && variant !== 'spotlight') {\n return 'mobile-sheet';\n }\n return variant;\n }, [variant, isMobile, autoMobileVariant]);\n\n // State\n const [query, setQuery] = useState(defaultQuery);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [loading, setLoading] = useState(false);\n const [suggestions, setSuggestions] = useState<any[]>([]);\n const [products, setProducts] = useState<any[]>([]);\n const [categories, setCategories] = useState<any[]>([]);\n const [tabs, setTabs] = useState<any[]>([]);\n const [trendingSearches, setTrendingSearches] = useState<any[]>([]);\n const [recentSearches, setRecentSearches] = useState<any[]>([]);\n const [activeTab, setActiveTab] = useState<string>('all');\n\n // Refs\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<DropdownRef>(null);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Initialize cache\n const cache = useMemo(() => {\n if (!enableCache) return null;\n return getSuggestionsCache({ maxSize: cacheMaxSize, defaultTtlMs: cacheTtlMs });\n }, [enableCache, cacheMaxSize, cacheTtlMs]);\n\n // Controlled vs uncontrolled query\n const currentQuery = value !== undefined ? value : query;\n\n // Styles\n const styles = useMemo(() => createStyles(isMobile), [isMobile]);\n\n // Load recent searches on mount\n useEffect(() => {\n if (enableRecentSearches) {\n const allRecent = getRecentSearches();\n setRecentSearches(allRecent.slice(0, maxRecentSearches));\n }\n }, [enableRecentSearches, maxRecentSearches]);\n\n // ========================================================================\n // API Data Fetching\n // ========================================================================\n \n const fetchSuggestions = useCallback(async (searchQuery: string) => {\n if (!client) return;\n // Allow empty string \"\" for focus-triggered search (API returns trending/default); otherwise enforce min length\n if (searchQuery.length > 0 && searchQuery.length < minQueryLength) {\n setSuggestions([]);\n setProducts([]);\n setTabs([]);\n return;\n }\n\n // Build cache key from query and options\n const cacheOptions = {\n maxSuggestions,\n includeDropdownRecommendations,\n includeDropdownProductList,\n includeFilteredTabs,\n includeCategories,\n filteredTabs: filteredTabs?.map(t => t.filter).join(','),\n };\n const cacheKey = cache?.generateKey(searchQuery, cacheOptions);\n\n // Check cache first\n if (cache && cacheKey) {\n const cachedResponse = cache.get<any>(cacheKey);\n if (cachedResponse) {\n console.log('Seekora: Cache hit for query:', searchQuery);\n parseAndSetData(cachedResponse);\n return;\n }\n }\n\n setLoading(true);\n\n try {\n // Use the SDK client to fetch suggestions (\"\" is valid - API returns something for empty query)\n // IMPORTANT: returnFullResponse: true is required to get filtered_tabs and extensions\n const response = await client.getSuggestions?.(searchQuery, {\n hitsPerPage: maxSuggestions,\n include_dropdown_recommendations: includeDropdownRecommendations,\n include_dropdown_product_list: includeDropdownProductList,\n include_filtered_tabs: includeFilteredTabs,\n include_categories: includeCategories,\n include_facets: true, // Enable facet-based suggestions\n filtered_tabs: filteredTabs,\n analytics_tags: analyticsTags,\n returnFullResponse: true, // Required to get tabs and products\n });\n\n // Cache the response\n if (cache && cacheKey && response) {\n cache.set(cacheKey, response);\n console.log('Seekora: Cached response for query:', searchQuery);\n }\n\n // Parse the response - SDK returns normalized structure\n parseAndSetData(response);\n\n // Track impressions via analytics hook (sends to API)\n if (enableAnalytics && response && !Array.isArray(response)) {\n const resp = response as any;\n analytics.trackImpression({\n suggestions: (resp.suggestions || []).map((s: any) => ({\n query: s.query || s.text || '',\n objectID: s.objectID || s.id,\n popularity: s.popularity,\n })),\n products: resp.extensions?.trending_products || resp.extensions?.item_recommendations || [],\n categories: resp.extensions?.popular_categories || [],\n brands: resp.extensions?.popular_brands || [],\n query: searchQuery,\n timestamp: Date.now(),\n });\n }\n\n } catch (error) {\n console.error('Seekora: Failed to fetch suggestions', error);\n setSuggestions([]);\n setProducts([]);\n setTabs([]);\n } finally {\n setLoading(false);\n }\n }, [client, minQueryLength, maxSuggestions, includeDropdownRecommendations, includeDropdownProductList, includeFilteredTabs, includeCategories, filteredTabs, analyticsTags, enableAnalytics, analytics, cache]);\n\n // Parse API response - handles multiple response formats\n const parseAndSetData = useCallback((response: any) => {\n // Handle different response structures from the API/SDK\n let hits: any[] = [];\n let extensions: any = {};\n \n console.log('Seekora: Raw response structure', {\n hasSuggestions: !!response?.suggestions,\n hasResults: !!response?.results,\n hasExtensions: !!response?.extensions,\n hasData: !!response?.data,\n });\n\n // SDK returnFullResponse format: { suggestions, results, extensions }\n if (response?.suggestions && response?.extensions) {\n hits = response.suggestions || [];\n extensions = response.extensions || {};\n }\n // Multi-index response: { results: [{ hits, extensions }, ...] }\n else if (response?.results && Array.isArray(response.results)) {\n const result0 = response.results[0] || {};\n const result1 = response.results[1] || {};\n hits = result0.hits || result0.suggestions || [];\n // Extensions can be in result0 or result1\n extensions = result0.extensions || result1.extensions || {};\n } \n // Wrapped response: { data: { hits, extensions, ... } }\n else if (response?.data) {\n hits = response.data.hits || [];\n extensions = response.data.extensions || response.data.dropdown_recommendations || {};\n } \n // Direct response: { hits, extensions, ... }\n else if (response?.hits) {\n hits = response.hits || [];\n extensions = response.extensions || response.dropdown_recommendations || {};\n } \n // Array response\n else if (Array.isArray(response)) {\n hits = response;\n }\n\n // Set suggestions\n setSuggestions(hits);\n\n // Set filtered tabs from extensions\n const filteredTabsData = extensions.filtered_tabs || [];\n setTabs(filteredTabsData);\n\n // Set products from first tab or trending\n if (filteredTabsData.length > 0 && filteredTabsData[0].products) {\n setProducts(filteredTabsData[0].products);\n } else {\n setProducts(extensions.trending_products || extensions.item_recommendations || []);\n }\n\n // Set categories\n setCategories(extensions.popular_categories || []);\n\n // Set trending searches\n setTrendingSearches(extensions.trending_searches || extensions.top_searches || []);\n\n console.log('Seekora: Parsed response', {\n suggestions: hits.length,\n tabs: filteredTabsData.length,\n products: filteredTabsData[0]?.products?.length || 0,\n extensionKeys: Object.keys(extensions),\n });\n }, []);\n\n // ========================================================================\n // Event Handlers\n // ========================================================================\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = e.target.value;\n \n if (value === undefined) {\n setQuery(newQuery);\n }\n \n onQueryChange?.(newQuery);\n setActiveTab('all');\n\n // Debounced fetch\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n if (newQuery.length >= minQueryLength) {\n setIsOpen(true);\n debounceRef.current = setTimeout(() => {\n fetchSuggestions(newQuery);\n }, debounceMs);\n } else if (newQuery.length === 0 && (enableRecentSearches || showTrendingOnEmpty)) {\n setIsOpen(true);\n setSuggestions([]);\n } else {\n setIsOpen(false);\n }\n }, [value, onQueryChange, minQueryLength, debounceMs, fetchSuggestions, enableRecentSearches, showTrendingOnEmpty]);\n\n const handleInputFocus = useCallback(() => {\n setIsFocused(true);\n setIsOpen(true);\n \n // Track dropdown open\n if (enableAnalytics) {\n analytics.trackDropdownOpen(currentQuery);\n }\n \n // Trigger empty search \"\" when user clicks/focuses the box so API returns trending/default content\n if (currentQuery.length >= minQueryLength) {\n if (suggestions.length === 0) fetchSuggestions(currentQuery);\n } else {\n fetchSuggestions('');\n }\n }, [currentQuery, minQueryLength, suggestions.length, fetchSuggestions, enableAnalytics, analytics]);\n\n const handleInputBlur = useCallback(() => {\n setIsFocused(false);\n // Delay close to allow click events on dropdown\n setTimeout(() => {\n if (!containerRef.current?.contains(document.activeElement)) {\n setIsOpen(false);\n }\n }, 150);\n }, []);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false);\n inputRef.current?.blur();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n // Check if there's an active selection in the dropdown\n const activeIndex = dropdownRef.current?.getActiveIndex?.() ?? -1;\n if (activeIndex >= 0 && isOpen) {\n // Let the dropdown handle the selection\n dropdownRef.current?.selectActive?.();\n } else if (currentQuery.trim()) {\n // No active selection, submit the current query\n onSearch?.(currentQuery.trim());\n if (enableRecentSearches) {\n addRecentSearch(currentQuery.trim());\n setRecentSearches(getRecentSearches().slice(0, maxRecentSearches));\n }\n // Track search submit analytics\n if (enableAnalytics) {\n analytics.trackSearchSubmit(currentQuery.trim(), false);\n }\n setIsOpen(false);\n }\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n // Open dropdown if not already open\n if (!isOpen && (suggestions.length > 0 || recentSearches.length > 0)) {\n setIsOpen(true);\n }\n if (e.key === 'ArrowDown') {\n dropdownRef.current?.navigateNext?.();\n } else {\n dropdownRef.current?.navigatePrevious?.();\n }\n }\n }, [currentQuery, onSearch, enableRecentSearches, maxRecentSearches, isOpen, suggestions.length, recentSearches.length, enableAnalytics, analytics]);\n\n const handleSuggestionSelect = useCallback((suggestion: any, index: number) => {\n const text = suggestion.query || suggestion.text || suggestion.objectID || '';\n \n if (value === undefined) {\n setQuery(text);\n }\n \n onQueryChange?.(text);\n onSuggestionSelect?.(suggestion, index);\n \n if (enableRecentSearches && text) {\n addRecentSearch(text);\n setRecentSearches(getRecentSearches().slice(0, maxRecentSearches));\n }\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackSuggestionClick({\n suggestion: {\n query: text,\n objectID: suggestion.objectID || suggestion.id,\n popularity: suggestion.popularity,\n },\n position: index,\n section: 'suggestions',\n query: currentQuery,\n totalSuggestions: suggestions.length,\n });\n analytics.trackSearchSubmit(text, true, suggestion);\n }\n \n onSearch?.(text);\n setIsOpen(false);\n }, [value, onQueryChange, onSuggestionSelect, enableRecentSearches, maxRecentSearches, enableAnalytics, onSearch, analytics, currentQuery, suggestions.length]);\n\n const handleProductClick = useCallback((product: any, index: number) => {\n onProductClick?.(product, index);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackProductClick({\n product: {\n id: product.id || product.objectID,\n objectID: product.objectID || product.id,\n title: product.title || product.name,\n image: product.image,\n price: product.price,\n },\n position: index,\n section: activeTab !== 'all' ? 'filtered_tab' : 'products',\n tabId: activeTab !== 'all' ? activeTab : undefined,\n query: currentQuery,\n });\n }\n }, [onProductClick, enableAnalytics, analytics, activeTab, currentQuery]);\n\n const handleCategoryClick = useCallback((category: any, index: number) => {\n onCategoryClick?.(category, index);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackCategoryClick({\n value: category.label || category.value || category.id,\n count: category.count,\n path: category.path,\n }, currentQuery);\n }\n }, [onCategoryClick, enableAnalytics, analytics, currentQuery]);\n\n const handleTabChange = useCallback((tabId: string) => {\n console.log('Seekora: Tab changed to', tabId);\n setActiveTab(tabId);\n onTabChange?.(tabId);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n const tab = tabs.find(t => t.id === tabId);\n if (tab) {\n analytics.trackTabSelect({\n id: tab.id,\n label: tab.label,\n filter: tab.filter,\n products: tab.products,\n nb_hits: tab.nb_hits,\n }, currentQuery);\n }\n }\n }, [onTabChange, enableAnalytics, analytics, tabs, currentQuery]);\n\n const handleRecentClick = useCallback((text: string) => {\n if (value === undefined) {\n setQuery(text);\n }\n onQueryChange?.(text);\n fetchSuggestions(text);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackRecentSearchClick({\n query: text,\n timestamp: Date.now(),\n });\n }\n }, [value, onQueryChange, fetchSuggestions, enableAnalytics, analytics]);\n\n const handleRecentRemove = useCallback((text: string) => {\n removeRecentSearch(text);\n setRecentSearches(getRecentSearches().slice(0, maxRecentSearches));\n }, [maxRecentSearches]);\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setQuery('');\n }\n onQueryChange?.('');\n setSuggestions([]);\n setProducts([]);\n setTabs([]);\n inputRef.current?.focus();\n }, [value, onQueryChange]);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n // Track dropdown close\n if (enableAnalytics) {\n analytics.trackDropdownClose(currentQuery);\n }\n }, [enableAnalytics, analytics, currentQuery]);\n\n // ========================================================================\n // Imperative Handle\n // ========================================================================\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n clear: handleClear,\n getQuery: () => currentQuery,\n setQuery: (q) => {\n if (value === undefined) {\n setQuery(q);\n }\n onQueryChange?.(q);\n },\n openDropdown: () => setIsOpen(true),\n closeDropdown: () => setIsOpen(false),\n refresh: () => fetchSuggestions(currentQuery),\n clearCache: () => cache?.clear(),\n getCacheStats: () => cache?.getStats() ?? null,\n }), [currentQuery, value, onQueryChange, handleClear, fetchSuggestions, cache]);\n\n // ========================================================================\n // Render\n // ========================================================================\n\n const DropdownComponent = VariantComponents[actualVariant] || AmazonDropdown;\n\n // Get products for current tab - always derive from tabs to ensure consistency\n const currentTabProducts = useMemo(() => {\n console.log('Seekora: Computing products for tab', activeTab, 'from', tabs.length, 'tabs');\n \n if (tabs.length === 0) {\n return products; // Fallback to products state if no tabs\n }\n \n if (activeTab === 'all') {\n // For 'all' tab, use first tab's products or combined\n const firstTabProducts = tabs[0]?.products || [];\n return firstTabProducts.length > 0 ? firstTabProducts : products;\n }\n \n // Find the specific tab\n const tab = tabs.find(t => t.id === activeTab);\n if (tab?.products && tab.products.length > 0) {\n console.log('Seekora: Found', tab.products.length, 'products for tab', activeTab);\n return tab.products;\n }\n \n // Fallback\n return products;\n }, [activeTab, tabs, products]);\n\n return (\n <div\n ref={containerRef}\n className={cx('seekora-suggestion-search', className)}\n style={mergeStyles(styles.container, style)}\n >\n {/* Search Input */}\n <div\n style={mergeStyles(\n styles.inputWrapper,\n isFocused ? styles.inputWrapperFocused : undefined\n )}\n >\n <div style={styles.searchIcon}>\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\"/>\n </svg>\n </div>\n \n <input\n ref={inputRef}\n type=\"text\"\n value={currentQuery}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={inputClassName}\n style={styles.input}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label=\"Search\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n />\n\n {currentQuery && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n aria-label=\"Clear search\"\n >\n ×\n </button>\n )}\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <DropdownComponent\n query={currentQuery}\n isOpen={isOpen}\n loading={loading}\n suggestions={suggestions}\n products={currentTabProducts}\n categories={tabs.map(t => ({ id: t.id, label: t.label, count: t.nb_hits }))}\n recentSearches={recentSearches.map(r => typeof r === 'string' ? r : r.query)}\n trendingSearches={trendingSearches}\n filteredTabs={tabs}\n activeTab={activeTab}\n suggestionFields={suggestionFields}\n productFields={productFields}\n theme={themeToDropdownConfig(effectiveTheme) ?? (effectiveTheme as DropdownThemeConfig)}\n width={dropdownWidth || '100%'}\n maxHeight={dropdownMaxHeight}\n zIndex={zIndex}\n analytics={{\n enabled: enableAnalytics,\n trackSuggestionClicks: analyticsConfig?.trackSuggestionClicks ?? true,\n trackProductClicks: analyticsConfig?.trackProductClicks ?? true,\n trackImpressions: analyticsConfig?.trackImpressions ?? true,\n trackCategoryClicks: analyticsConfig?.trackCategoryClicks ?? true,\n trackBrandClicks: analyticsConfig?.trackBrandClicks ?? true,\n trackSearchSubmit: analyticsConfig?.trackSearchSubmit ?? true,\n tags: analyticsConfig?.tags ?? analyticsTags,\n }}\n onSuggestionSelect={handleSuggestionSelect}\n onProductClick={handleProductClick}\n onCategoryClick={handleCategoryClick}\n onTabChange={handleTabChange}\n onRecentClick={handleRecentClick}\n onRecentRemove={handleRecentRemove}\n onClose={handleClose}\n />\n )}\n </div>\n );\n }\n);\n\nexport default SuggestionSearchBar;\n","/**\n * Query Suggestions Components\n * \n * Premium, configurable, data-agnostic dropdown components\n * for search suggestions UI\n */\n\n// ============================================================================\n// Main Component (Easy Integration - Handles Everything)\n// ============================================================================\nexport { SuggestionSearchBar, default as SuggestionSearch } from './SuggestionSearchBar';\nexport type { SuggestionSearchBarProps, SuggestionSearchBarRef } from './SuggestionSearchBar';\n\n// ============================================================================\n// Types\n// ============================================================================\nexport * from './types';\n\n// ============================================================================\n// Utilities\n// ============================================================================\nexport * from './utils';\n\n// ============================================================================\n// Responsive Utilities & Styles\n// ============================================================================\nexport {\n useResponsive,\n breakpoints,\n mediaQueries,\n touchTargets,\n responsiveSpacing,\n responsiveTypography,\n injectResponsiveStyles,\n type ResponsiveState,\n} from './styles/responsive';\n\nexport {\n globalResponsiveCSS,\n injectGlobalResponsiveStyles,\n useInjectResponsiveStyles,\n} from './styles';\n\n// ============================================================================\n// Components\n// ============================================================================\n\n// Amazon-style dropdown with department scoping\nexport { AmazonDropdown } from './AmazonDropdown';\nexport type { AmazonDropdownProps } from './AmazonDropdown';\n\n// Google-style clean search suggestions\nexport { GoogleDropdown } from './GoogleDropdown';\nexport type { GoogleDropdownProps } from './GoogleDropdown';\n\n// Pinterest-style visual discovery\nexport { PinterestDropdown } from './PinterestDropdown';\nexport type { PinterestDropdownProps } from './PinterestDropdown';\n\n// macOS Spotlight / Command palette style\nexport { SpotlightDropdown } from './SpotlightDropdown';\nexport type { SpotlightDropdownProps } from './SpotlightDropdown';\n\n// Shopify-style modern e-commerce\nexport { ShopifyDropdown } from './ShopifyDropdown';\nexport type { ShopifyDropdownProps } from './ShopifyDropdown';\n\n// Mobile-first bottom sheet\nexport { MobileSheetDropdown } from './MobileSheetDropdown';\nexport type { MobileSheetDropdownProps } from './MobileSheetDropdown';\n\n// Minimal/editorial style\nexport { MinimalDropdown } from './MinimalDropdown';\nexport type { MinimalDropdownProps } from './MinimalDropdown';\n\n// ============================================================================\n// Variant Map for easy access\n// ============================================================================\nimport { AmazonDropdown } from './AmazonDropdown';\nimport { GoogleDropdown } from './GoogleDropdown';\nimport { PinterestDropdown } from './PinterestDropdown';\nimport { SpotlightDropdown } from './SpotlightDropdown';\nimport { ShopifyDropdown } from './ShopifyDropdown';\nimport { MobileSheetDropdown } from './MobileSheetDropdown';\nimport { MinimalDropdown } from './MinimalDropdown';\n\nexport const SuggestionDropdownVariants = {\n amazon: AmazonDropdown,\n google: GoogleDropdown,\n pinterest: PinterestDropdown,\n spotlight: SpotlightDropdown,\n shopify: ShopifyDropdown,\n 'mobile-sheet': MobileSheetDropdown,\n minimal: MinimalDropdown,\n} as const;\n\nexport type SuggestionDropdownVariant = keyof typeof SuggestionDropdownVariants;\n","import React, { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Modal({ isOpen, onClose, children, className }: ModalProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n if (isOpen) document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen, onClose]);\n\n useEffect(() => {\n if (isOpen) {\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return;\n const container = containerRef.current;\n const focusableElements = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const handleTabKey = (e: KeyboardEvent) => {\n if (e.key !== \"Tab\") return;\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n };\n container.addEventListener(\"keydown\", handleTabKey);\n return () => container.removeEventListener(\"keydown\", handleTabKey);\n }, [isOpen]);\n\n if (!isOpen || typeof document === \"undefined\") return null;\n\n const modalContent = (\n <div\n ref={overlayRef}\n className={`seekora-docsearch-overlay${className ? ` ${className}` : \"\"}`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Search documentation\"\n >\n <div ref={containerRef} className=\"seekora-docsearch-container\">\n {children}\n </div>\n </div>\n );\n return createPortal(modalContent, document.body);\n}\n","import React, { useEffect, useRef } from 'react';\n\ninterface SearchBoxProps {\n value: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n placeholder?: string;\n onClear?: () => void;\n}\n\nexport function SearchBox({\n value,\n onChange,\n onKeyDown,\n placeholder = 'Search documentation...',\n onClear,\n}: SearchBoxProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => { if (inputRef.current) inputRef.current.focus(); }, []);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => onChange(event.target.value);\n const handleClear = () => { onChange(''); onClear?.(); inputRef.current?.focus(); };\n\n return (\n <div className=\"seekora-docsearch-searchbox\">\n <label className=\"seekora-docsearch-searchbox-icon\" htmlFor=\"seekora-docsearch-input\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" fill=\"currentColor\" />\n </svg>\n </label>\n <input\n ref={inputRef}\n id=\"seekora-docsearch-input\"\n className=\"seekora-docsearch-input\"\n type=\"text\"\n value={value}\n onChange={handleChange}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-autocomplete=\"list\"\n aria-controls=\"seekora-docsearch-results\"\n />\n {value && (\n <button type=\"button\" className=\"seekora-docsearch-clear\" onClick={handleClear} aria-label=\"Clear search\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4.28 3.22a.75.75 0 00-1.06 1.06L6.94 8l-3.72 3.72a.75.75 0 101.06 1.06L8 9.06l3.72 3.72a.75.75 0 101.06-1.06L9.06 8l3.72-3.72a.75.75 0 00-1.06-1.06L8 6.94 4.28 3.22z\" fill=\"currentColor\" />\n </svg>\n </button>\n )}\n </div>\n );\n}\n","import React from 'react';\n\ninterface HighlightProps {\n value: string;\n highlightedValue?: string;\n}\n\nfunction sanitizeHtml(html: string): string {\n const escaped = html\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n return escaped\n .replace(/<mark>/g, '<mark>')\n .replace(/<\\/mark>/g, '</mark>')\n .replace(/<ais-highlight>/g, '<mark>')\n .replace(/<\\/ais-highlight>/g, '</mark>')\n .replace(/<em>/g, '<mark>')\n .replace(/<\\/em>/g, '</mark>');\n}\n\nexport function Highlight({ value, highlightedValue }: HighlightProps) {\n if (!highlightedValue) return <span>{value}</span>;\n return (\n <span className=\"seekora-docsearch-highlight\" dangerouslySetInnerHTML={{ __html: sanitizeHtml(highlightedValue) }} />\n );\n}\n\nexport function truncateAroundMatch(content: string, maxLength: number = 150): string {\n const markIndex = content.indexOf('<mark>');\n if (markIndex === -1 || content.length <= maxLength) {\n if (content.length <= maxLength) return content;\n return content.slice(0, maxLength) + '...';\n }\n const halfLength = Math.floor(maxLength / 2);\n let start = Math.max(0, markIndex - halfLength);\n let end = Math.min(content.length, markIndex + halfLength);\n if (start > 0) {\n const spaceIndex = content.indexOf(' ', start);\n if (spaceIndex !== -1 && spaceIndex < markIndex) start = spaceIndex + 1;\n }\n if (end < content.length) {\n const spaceIndex = content.lastIndexOf(' ', end);\n if (spaceIndex !== -1 && spaceIndex > markIndex) end = spaceIndex;\n }\n let result = content.slice(start, end);\n if (start > 0) result = '...' + result;\n if (end < content.length) result = result + '...';\n return result;\n}\n","import React from 'react';\nimport { Highlight, truncateAroundMatch } from './Highlight';\nimport type { DocSearchHit, DocSearchSuggestion } from '../types';\n\ninterface HitProps {\n hit: DocSearchHit | DocSearchSuggestion;\n isSelected: boolean;\n onClick: () => void;\n onMouseEnter: () => void;\n openInNewTab?: boolean;\n isChild?: boolean;\n isLastChild?: boolean;\n hierarchyType?: string;\n}\n\nexport function Hit({ hit, isSelected, onClick, onMouseEnter, openInNewTab, isChild, isLastChild, hierarchyType }: HitProps) {\n const isFullHit = 'objectID' in hit;\n const suggestion = hit as DocSearchSuggestion;\n const hitType = hierarchyType || suggestion.type;\n const breadcrumb = suggestion.parentTitle\n ? `${suggestion.category || ''} › ${suggestion.parentTitle}`.replace(/^› /, '')\n : suggestion.category || '';\n\n const title = getTitleForType(hit, hitType);\n let highlightedTitle = title;\n let highlightedContent = hit.content || suggestion.description || '';\n\n if (isFullHit) {\n const fullHit = hit as DocSearchHit;\n if (fullHit._highlightResult) {\n highlightedTitle = fullHit._highlightResult.title?.value || title;\n highlightedContent = fullHit._highlightResult.content?.value || hit.content || '';\n }\n } else {\n if (suggestion.highlight) {\n highlightedTitle = suggestion.highlight.title || title;\n highlightedContent = suggestion.highlight.content || hit.content || suggestion.description || '';\n }\n }\n\n const displayContent = highlightedContent ? truncateAroundMatch(highlightedContent, 120) : '';\n const url = hit.url || suggestion.route || '#';\n const classNames = ['seekora-docsearch-hit'];\n if (isSelected) classNames.push('seekora-docsearch-hit--selected');\n if (isChild) classNames.push('seekora-docsearch-hit--child');\n if (isLastChild) classNames.push('seekora-docsearch-hit--last-child');\n\n return (\n <a\n href={url}\n className={classNames.join(' ')}\n onClick={(e) => { e.preventDefault(); onClick(); }}\n onMouseEnter={onMouseEnter}\n role=\"option\"\n aria-selected={isSelected}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n >\n {isChild && (\n <div className=\"seekora-docsearch-hit-tree\">\n <TreeConnector isLast={isLastChild} />\n </div>\n )}\n <div className=\"seekora-docsearch-hit-icon\">\n <HitIcon type={getHitTypeFromLevel(hitType)} />\n </div>\n <div className=\"seekora-docsearch-hit-content\">\n {!isChild && breadcrumb && <span className=\"seekora-docsearch-hit-breadcrumb\">{breadcrumb}</span>}\n <span className=\"seekora-docsearch-hit-title\">\n <Highlight value={title} highlightedValue={highlightedTitle} />\n </span>\n {displayContent && (\n <span className=\"seekora-docsearch-hit-description\">\n <Highlight value={hit.content || ''} highlightedValue={displayContent} />\n </span>\n )}\n </div>\n <div className=\"seekora-docsearch-hit-action\">\n {openInNewTab ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6 3H3v10h10v-3M9 3h4v4M14 2L7 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6.75 3.25L11.5 8L6.75 12.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </div>\n </a>\n );\n}\n\ntype HitType = 'page' | 'section' | 'content';\n\nfunction getTitleForType(hit: DocSearchHit | DocSearchSuggestion, type: string | undefined): string {\n const hierarchy = hit.hierarchy || {};\n if (!type) return hit.title || hierarchy.lvl1 || hierarchy.lvl0 || 'Untitled';\n const match = type.match(/^lvl(\\d+)$/);\n if (match) {\n const level = parseInt(match[1], 10);\n const levelKey = `lvl${level}` as keyof typeof hierarchy;\n const levelTitle = hierarchy[levelKey];\n if (levelTitle) return levelTitle;\n }\n return hit.title || hierarchy.lvl1 || hierarchy.lvl0 || 'Untitled';\n}\n\nfunction getHitTypeFromLevel(type: string | undefined): HitType {\n if (!type) return 'page';\n const match = type.match(/^lvl(\\d+)$/);\n if (match) {\n const level = parseInt(match[1], 10);\n if (level === 1) return 'page';\n if (level <= 3) return 'section';\n return 'content';\n }\n return 'page';\n}\n\nfunction HitIcon({ type }: { type: HitType }) {\n switch (type) {\n case 'page':\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4.5 3.5h11a1 1 0 011 1v11a1 1 0 01-1 1h-11a1 1 0 01-1-1v-11a1 1 0 011-1z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n <path d=\"M7 7h6M7 10h6M7 13h4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case 'section':\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 5.5h12M4 10h12M4 14.5h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case 'content':\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 6h12M4 10h8M4 14h10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n}\n\nfunction TreeConnector({ isLast }: { isLast?: boolean }) {\n return (\n <svg width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\" aria-hidden=\"true\" className=\"seekora-docsearch-hit-tree-icon\">\n {isLast ? (\n <path d=\"M8 0V10H14\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ) : (\n <>\n <path d=\"M8 0V20\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 10H14\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </>\n )}\n </svg>\n );\n}\n","import React, { useEffect, useRef } from 'react';\nimport { Hit } from './Hit';\nimport type { DocSearchHit, DocSearchSuggestion, DocSearchTranslations, SearchSource } from '../types';\n\ninterface GroupedHits {\n source: SearchSource;\n items: DocSearchSuggestion[];\n}\n\ninterface ResultsProps {\n hits: (DocSearchHit | DocSearchSuggestion)[];\n groupedHits?: GroupedHits[];\n selectedIndex: number;\n onSelect: (hit: DocSearchHit | DocSearchSuggestion) => void;\n onHover: (index: number) => void;\n /** When true, scroll the selected item into view (set by keyboard nav only; avoids scroll-on-hover jump) */\n scrollSelectionIntoViewRef?: React.MutableRefObject<boolean>;\n query: string;\n isLoading: boolean;\n error: string | null;\n translations?: DocSearchTranslations;\n sources?: SearchSource[];\n}\n\ninterface ExtendedSuggestion extends DocSearchSuggestion {\n isChild?: boolean;\n isFirstChild?: boolean;\n isLastChild?: boolean;\n}\n\ninterface HitGroup {\n category: string | null;\n hits: (DocSearchHit | DocSearchSuggestion)[];\n}\n\nfunction getTypeLevel(type: string | undefined): number {\n if (!type) return 1;\n const match = type.match(/^lvl(\\d+)$/);\n return match ? parseInt(match[1], 10) : 1;\n}\n\nfunction isChildType(type: string | undefined): boolean {\n return getTypeLevel(type) >= 2;\n}\n\n/** Build a stable grouping key from all hierarchy levels (lvl0 through lvl5). */\nfunction getHierarchyKey(hit: DocSearchHit | DocSearchSuggestion): string {\n const h = hit.hierarchy ?? {};\n const parts = [\n h.lvl0 ?? '',\n h.lvl1 ?? '',\n h.lvl2 ?? '',\n h.lvl3 ?? '',\n h.lvl4 ?? '',\n h.lvl5 ?? '',\n ];\n return parts.join('\\0');\n}\n\n/** Build a display breadcrumb from hierarchy, skipping consecutive duplicates (e.g. lvl0 === lvl1). */\nfunction getHierarchyBreadcrumb(hit: DocSearchHit | DocSearchSuggestion): string {\n const h = hit.hierarchy ?? {};\n const parts = [h.lvl0, h.lvl1, h.lvl2, h.lvl3, h.lvl4, h.lvl5].filter(\n (v): v is string => typeof v === 'string' && v.length > 0\n );\n const deduped: string[] = [];\n for (const p of parts) {\n if (deduped[deduped.length - 1] !== p) deduped.push(p);\n }\n return deduped.join(' › ');\n}\n\nfunction groupHitsByHierarchy(hits: (DocSearchHit | DocSearchSuggestion)[]): HitGroup[] {\n const hitToIndex = new Map<(DocSearchHit | DocSearchSuggestion), number>();\n hits.forEach((h, i) => hitToIndex.set(h, i));\n const groups: Map<string, (DocSearchHit | DocSearchSuggestion)[]> = new Map();\n for (const hit of hits) {\n const key = getHierarchyKey(hit);\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(hit);\n }\n const entries = Array.from(groups.entries());\n entries.sort(([, aHits], [, bHits]) => {\n const aMin = Math.min(...aHits.map(h => hitToIndex.get(h) ?? 0));\n const bMin = Math.min(...bHits.map(h => hitToIndex.get(h) ?? 0));\n return aMin - bMin;\n });\n const result: HitGroup[] = [];\n for (const [, groupHits] of entries) {\n const sortedHits = [...groupHits].sort((a, b) => {\n const aType = (a as DocSearchSuggestion).type;\n const bType = (b as DocSearchSuggestion).type;\n return getTypeLevel(aType) - getTypeLevel(bType);\n });\n const markedHits = sortedHits.map((hit, index) => {\n const suggestion = hit as ExtendedSuggestion;\n const isChild = isChildType(suggestion.type);\n const nextHit = sortedHits[index + 1] as ExtendedSuggestion | undefined;\n const isLastChild = isChild && (!nextHit || !isChildType(nextHit.type));\n return { ...hit, isChild, isLastChild };\n });\n const category = getHierarchyBreadcrumb(groupHits[0]);\n result.push({ category: category || null, hits: markedHits });\n }\n return result;\n}\n\ninterface DisplayGroup {\n category: string | null;\n sourceId: string;\n openInNewTab?: boolean;\n hits: (DocSearchHit | DocSearchSuggestion)[];\n}\n\nfunction getGlobalIndexMulti(groups: DisplayGroup[], groupIndex: number, hitIndex: number): number {\n let index = 0;\n for (let i = 0; i < groupIndex; i++) index += groups[i].hits.length;\n return index + hitIndex;\n}\n\nfunction getHitKey(hit: DocSearchHit | DocSearchSuggestion, index: number): string {\n if ('objectID' in hit) return (hit as DocSearchHit).objectID;\n return `suggestion-${hit.url}-${index}`;\n}\n\nexport function Results({\n hits,\n groupedHits,\n selectedIndex,\n onSelect,\n onHover,\n scrollSelectionIntoViewRef,\n query,\n isLoading,\n error,\n translations = {},\n sources: _sources = [],\n}: ResultsProps) {\n void _sources;\n const listRef = useRef<HTMLUListElement>(null);\n\n useEffect(() => {\n if (!listRef.current || hits.length === 0) return;\n // Only scroll when selection changed via keyboard (avoids scroll-to-selected on hover)\n if (scrollSelectionIntoViewRef && !scrollSelectionIntoViewRef.current) return;\n // listRef's direct children are groups (li.seekora-docsearch-results-group), not hits.\n // Find the actual hit element at flat selectedIndex.\n const groupEls = listRef.current.querySelectorAll('.seekora-docsearch-results-group');\n let idx = 0;\n for (const groupEl of groupEls) {\n const itemList = groupEl.querySelector('.seekora-docsearch-results-group-items');\n if (!itemList) continue;\n const items = itemList.children;\n for (let i = 0; i < items.length; i++) {\n if (idx === selectedIndex) {\n (items[i] as HTMLElement).scrollIntoView({ block: 'nearest' });\n if (scrollSelectionIntoViewRef) scrollSelectionIntoViewRef.current = false;\n return;\n }\n idx++;\n }\n }\n if (scrollSelectionIntoViewRef) scrollSelectionIntoViewRef.current = false;\n }, [selectedIndex, hits.length, scrollSelectionIntoViewRef]);\n\n if (!query) {\n return (\n <div className=\"seekora-docsearch-empty\">\n <p className=\"seekora-docsearch-empty-text\">{translations.searchPlaceholder || 'Type to start searching...'}</p>\n </div>\n );\n }\n\n if (isLoading && hits.length === 0) {\n return <div className=\"seekora-docsearch-empty\" />;\n }\n // When loading with previous hits, fall through and show them (no loading screen)\n\n if (error) {\n return (\n <div className=\"seekora-docsearch-error\">\n <p className=\"seekora-docsearch-error-text\">{translations.errorText || error}</p>\n </div>\n );\n }\n\n if (hits.length === 0 && query) {\n return (\n <div className=\"seekora-docsearch-no-results\">\n <p className=\"seekora-docsearch-no-results-text\">{translations.noResultsText || `No results found for \"${query}\"`}</p>\n </div>\n );\n }\n\n const displayGroups: DisplayGroup[] = groupedHits && groupedHits.length > 0\n ? groupedHits.map(g => ({ category: g.source.name, sourceId: g.source.id, openInNewTab: g.source.openInNewTab, hits: g.items }))\n : groupHitsByHierarchy(hits).map(g => ({ category: g.category, sourceId: 'default', openInNewTab: false, hits: g.hits }));\n\n return (\n <div className=\"seekora-docsearch-results\">\n <ul ref={listRef} id=\"seekora-docsearch-results\" className=\"seekora-docsearch-results-list\" role=\"listbox\">\n {displayGroups.map((group, groupIndex) => (\n <li key={group.sourceId + '-' + groupIndex} className=\"seekora-docsearch-results-group\">\n {group.category && <div className=\"seekora-docsearch-results-group-header\">{group.category}</div>}\n <ul className=\"seekora-docsearch-results-group-items\">\n {group.hits.map((hit, hitIndex) => {\n const globalIndex = getGlobalIndexMulti(displayGroups, groupIndex, hitIndex);\n const extHit = hit as ExtendedSuggestion;\n return (\n <li key={getHitKey(hit, hitIndex)}>\n <Hit\n hit={hit}\n isSelected={globalIndex === selectedIndex}\n onClick={() => onSelect(hit)}\n onMouseEnter={() => onHover(globalIndex)}\n openInNewTab={group.openInNewTab}\n isChild={extHit.isChild}\n isLastChild={extHit.isLastChild}\n hierarchyType={(hit as DocSearchSuggestion).type}\n />\n </li>\n );\n })}\n </ul>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","import React from 'react';\nimport type { DocSearchTranslations } from '../types';\n\ninterface FooterProps {\n translations?: DocSearchTranslations;\n}\n\nfunction SeekoraLogo() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 844.6 192\" height=\"20\" aria-hidden=\"true\" style={{ width: 'auto' }}>\n <path fill=\"#03d1ff\" d=\"M73.06,85.38l-21.36,21.21-2.03,2.03c-3.19,3.19-8.3,2.84-11.07-.32-.52-.59-.95-1.27-1.27-2.04-.01-.03-.03-.07-.04-.1-.33-.79-.63-1.6-.92-2.41-1.59-4.57-2.44-9.48-2.42-14.6h.05c-.01-.13-.01-.27-.02-.4-.02-.46-.02-.92-.02-1.39,0-27.3,22.13-49.43,49.43-49.43,6.64,0,12.98,1.31,18.76,3.69-2.19,2.23-3.28,5.47-2.63,8.76.31,1.52.95,2.89,1.84,4.04.27.36.58.7.9,1.02-.12-.07-.25-.15-.38-.22-5.45-3.15-11.76-4.94-18.49-4.94-20.48,0-37.08,16.6-37.08,37.08,0,.42,0,.83.02,1.25h0c.08,2.58.43,5.09,1.02,7.5l.18-.18,4.98-4.99,10.15-10.15,4.32-4.32c2.43-2.43,5.96-3.35,9.26-2.41.01,0,.03,0,.04.01.05.01.1.02.15.04,2.04.62,3.76,1.88,4.94,3.55.78,1.08,1.32,2.33,1.59,3.67l1.28,6.5.32,1.63.02.14.42-.44,14.99-15.62,3.29-3.43,7.25-7.57,1.18-1.22,2.43-2.54,5.02-5.24.91-.95,1.71-1.78-1.31.25-2.68.53-.47.09-3.52.7h0s-4.01.8-4.01.8c-2.55.5-5.04-1.16-5.55-3.71-.45-2.26.8-4.47,2.87-5.3.27-.11.55-.19.85-.25l9.8-1.94,7.42-1.47,3.23-.63,4.96-.98c.12-.02.25-.05.37-.06.11-.01.22-.02.32-.03.22-.01.43,0,.65.01.96.08,1.89.47,2.65,1.12.81.69,1.35,1.62,1.56,2.64.03.15.05.29.07.44.02.23.03.45.02.68l-.23,6.05-.14,4.01-.05,1.44-.49,13.48v.24c-.09,2.55-2.19,4.55-4.72,4.55-.06,0-.11,0-.17,0-1.1-.04-2.1-.45-2.88-1.11-1.07-.9-1.73-2.27-1.67-3.78l.02-.59.09-2.55.12-3.52.12-3.51-50.81,54.4-5.17-27.42Z\"/>\n <path fill=\"#4d66fe\" d=\"M23.04,158.85c-.27-1.39.15-2.83,1.12-3.85l22.71-23.81,3.29-3.43,7.25-7.57,1.18-1.22,7.46-7.77,1.77-1.85,2.56,12.48.14.31h0c2.32.86,4.75,1.49,7.27,1.88v12.46c-5.94-.67-11.56-2.39-16.67-4.98l-35.87,38.45-2.2-11.08Z\"/>\n <path fill=\"#4d66fe\" d=\"M90.69,106.76v29.36c-2.22.31-4.49.47-6.79.47-.34,0-.67,0-1.01-.02v-21.93l7.8-7.88Z\"/>\n <polygon fill=\"#4d66fe\" points=\"102.78 132.84 102.78 118.68 102.79 93.73 94.96 101.92 94.96 135.35 102.78 132.84\"/>\n <polygon fill=\"#4d66fe\" points=\"114.86 125.64 114.87 104.87 114.88 81.6 107.05 89.78 107.05 130.82 114.86 125.64\"/>\n <path fill=\"#4d66fe\" d=\"M126.98,69.42l-.02,23.28v18.6c-2.13,3.83-4.77,7.35-7.81,10.45v-44.13l7.83-8.19Z\"/>\n <path fill=\"currentColor\" d=\"M455.59,136.31h-14.71l-.11-98.11h14.71l.11,98.11ZM520.86,136.65h-18.17l-27.34-32.14c-2.31-2.88-4.04-5.72-5.19-8.51-1.15-2.79-1.73-5.53-1.73-8.22s.55-5.57,1.66-8.36c1.1-2.79,2.86-5.63,5.26-8.51l27.73-32.54h16.87l-31.05,36.87c-1.92,2.4-3.39,4.57-4.4,6.49-1.01,1.92-1.51,3.8-1.51,5.62s.5,3.65,1.51,5.48c1.01,1.83,2.47,3.94,4.4,6.35l31.96,37.47Z\"/>\n <path fill=\"currentColor\" d=\"M710.73,117.25c-2.6-5.48-5.14-10.12-7.64-13.92-2.5-3.8-5.48-6.68-8.94-8.65-.31-.18-.64-.33-.96-.49,2.69-.58,5.18-1.44,7.45-2.61,4.52-2.31,8.05-5.53,10.6-9.66,2.55-4.13,3.82-8.89,3.82-14.28,0-6.63-1.61-12.11-4.83-16.44-3.22-4.33-7.6-7.55-13.12-9.66-5.53-2.11-11.71-3.17-18.53-3.17h-33.61v98.14h14.42l.13-36.69h11.99c4.52,0,8.2.79,11.03,2.38,2.84,1.59,5.24,3.8,7.21,6.63,1.97,2.84,3.92,6.13,5.84,9.88l8.89,17.8h15.87l-9.61-19.24ZM659.55,86.67l.12-34.76h19.04c3.94,0,7.52.6,10.75,1.8,3.22,1.2,5.77,3.03,7.64,5.48,1.88,2.45,2.81,5.7,2.81,9.74s-.91,7.09-2.74,9.74c-1.83,2.65-4.38,4.64-7.64,5.99-3.27,1.35-6.97,2.02-11.11,2.02h-18.87Z\"/>\n <path fill=\"currentColor\" d=\"M618.36,62.91c-2.26-4.27-5.09-8.11-8.5-11.53-4.5-4.49-9.72-8.01-15.65-10.55-5.94-2.54-12.39-3.8-19.38-3.8s-13.47,1.27-19.45,3.8c-5.98,2.54-11.22,6.06-15.72,10.55-4.5,4.5-8.02,9.74-10.55,15.72-2.54,5.98-3.81,12.47-3.81,19.45s1.27,13.66,3.81,19.74c2.53,6.08,6.05,11.37,10.55,15.86,4.49,4.5,9.74,8.02,15.72,10.55,5.98,2.54,12.46,3.81,19.45,3.81s13.44-1.27,19.38-3.81c5.94-2.53,11.15-6.05,15.65-10.55,4.23-4.23,7.58-9.18,10.03-14.82.15-.35.3-.69.44-1.04.57-1.4,1.08-2.83,1.52-4.28l12.51,4.15-2.67-20.65-2.66-20.65-7.32,6.03-9.78,8.06-3.24,2.67-13.86,11.43,12.73,4.23c-.32,1.16-.71,2.3-1.15,3.42-.26.65-.53,1.28-.82,1.9-1.64,3.58-3.81,6.74-6.5,9.52-3.16,3.25-6.82,5.81-10.98,7.68-4.16,1.87-8.59,2.8-13.28,2.8s-9.28-.93-13.5-2.8c-4.21-1.87-7.87-4.43-10.98-7.68-3.11-3.26-5.55-7.06-7.32-11.42-1.77-4.35-2.66-9.06-2.66-14.14s.89-9.62,2.66-13.93c1.77-4.31,4.21-8.09,7.32-11.34s6.77-5.79,10.98-7.61c4.21-1.82,8.71-2.73,13.5-2.73s9.24.91,13.35,2.73c4.11,1.82,7.75,4.36,10.91,7.61,3.16,3.25,5.6,7.03,7.32,11.34l11.95-9.72Z\"/>\n <circle fill=\"currentColor\" cx=\"575.56\" cy=\"86.71\" r=\"9.38\"/>\n <path fill=\"currentColor\" d=\"M206.51,137.4c-8.17,0-15.43-1.78-21.78-5.34-6.35-3.56-11.01-8.65-13.99-15.29l12.4-6.06c1.83,4.14,4.76,7.31,8.8,9.52,4.04,2.21,8.89,3.32,14.57,3.32,3.75,0,7.11-.55,10.1-1.66,2.98-1.1,5.36-2.79,7.14-5.05,1.78-2.26,2.67-4.98,2.67-8.15,0-3.56-.96-6.27-2.88-8.15-1.92-1.88-4.5-3.27-7.72-4.18-3.22-.91-6.76-1.71-10.6-2.38-3.66-.77-7.38-1.71-11.18-2.81-3.8-1.1-7.33-2.67-10.6-4.69-3.27-2.02-5.89-4.69-7.86-8-1.97-3.32-2.96-7.52-2.96-12.62,0-5.38,1.46-10.19,4.4-14.42,2.93-4.23,6.87-7.57,11.83-10.02,4.95-2.45,10.5-3.68,16.66-3.68,7.4,0,14.13,1.71,20.19,5.12,6.06,3.41,10.53,8.44,13.41,15.07l-12.26,6.35c-1.83-4.04-4.62-7.19-8.37-9.45-3.75-2.26-8.27-3.39-13.56-3.39-3.27,0-6.23.6-8.87,1.8-2.65,1.2-4.78,2.84-6.42,4.9-1.64,2.07-2.45,4.5-2.45,7.28,0,3.46,1.01,6.13,3.03,8.01,2.02,1.87,4.69,3.32,8,4.33,3.32,1.01,6.95,1.9,10.89,2.67,3.65.77,7.36,1.71,11.11,2.81,3.75,1.11,7.19,2.67,10.31,4.69,3.12,2.02,5.67,4.69,7.64,8,1.97,3.32,2.96,7.52,2.96,12.62,0,5.67-1.54,10.65-4.62,14.93-3.08,4.28-7.24,7.67-12.48,10.17-5.24,2.5-11.08,3.75-17.52,3.75Z\"/>\n <path fill=\"currentColor\" d=\"M276.75,123.07v-28.94h49.04v-13.41h-49.04v-28.94h51.92v-13.41h-53.08c-5,0-8.51,1.18-10.53,3.53-2.02,2.36-3.03,5.6-3.03,9.74v71.58c0,4.04,1.01,7.26,3.03,9.66,2.02,2.41,5.53,3.61,10.53,3.61h54.09v-13.41h-52.93Z\"/>\n <path fill=\"currentColor\" d=\"M365.12,123.24v-28.94h49.04v-13.41h-49.04v-28.94h51.92v-13.41h-53.08c-5,0-8.51,1.18-10.53,3.53-2.02,2.36-3.03,5.6-3.03,9.74v71.58c0,4.04,1.01,7.26,3.03,9.66,2.02,2.41,5.53,3.61,10.53,3.61h54.09v-13.41h-52.93Z\"/>\n <path fill=\"currentColor\" d=\"M806.12,136.49h15l-26.59-85.62c-1.44-4.52-3.8-7.88-7.07-10.1-3.27-2.21-6.97-3.32-11.11-3.32s-7.57,1.11-10.89,3.32c-3.32,2.21-5.7,5.58-7.14,10.1l-26.6,85.46h14.86l8.95-29.72,41.68-.11,8.91,29.99ZM759.57,93.2l11.45-38.01c.87-2.98,2.69-4.47,5.48-4.47s4.52,1.49,5.48,4.47l11.29,38.01h-33.7Z\"/>\n </svg>\n );\n}\n\nexport function Footer({ translations = {} }: FooterProps) {\n return (\n <footer className=\"seekora-docsearch-footer\">\n <div className=\"seekora-docsearch-footer-commands\">\n <ul className=\"seekora-docsearch-footer-commands-list\">\n <li>\n <span className=\"seekora-docsearch-footer-command\">\n <kbd className=\"seekora-docsearch-key\">↵</kbd>\n <span>to select</span>\n </span>\n </li>\n <li>\n <span className=\"seekora-docsearch-footer-command\">\n <kbd className=\"seekora-docsearch-key\">↑</kbd>\n <kbd className=\"seekora-docsearch-key\">↓</kbd>\n <span>to navigate</span>\n </span>\n </li>\n <li>\n <span className=\"seekora-docsearch-footer-command\">\n <kbd className=\"seekora-docsearch-key\">esc</kbd>\n <span>{translations.closeText || 'to close'}</span>\n </span>\n </li>\n </ul>\n </div>\n <div className=\"seekora-docsearch-footer-logo\">\n <span className=\"seekora-docsearch-footer-logo-text\">{translations.searchByText || 'Search by'}</span>\n <a href=\"https://seekora.ai\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"seekora-docsearch-footer-logo-link\">\n <SeekoraLogo />\n </a>\n </div>\n </footer>\n );\n}\n","import React, { useCallback, useEffect } from 'react';\n\ninterface UseKeyboardOptions {\n isOpen: boolean;\n onOpen: () => void;\n onClose: () => void;\n onSelectNext: () => void;\n onSelectPrev: () => void;\n onEnter: () => void;\n disableShortcut?: boolean;\n shortcutKey?: string;\n}\n\nexport function useKeyboard(options: UseKeyboardOptions) {\n const {\n isOpen,\n onOpen,\n onClose,\n onSelectNext,\n onSelectPrev,\n onEnter,\n disableShortcut = false,\n shortcutKey = 'k',\n } = options;\n\n const handleGlobalKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!disableShortcut && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === shortcutKey) {\n event.preventDefault();\n if (isOpen) {\n onClose();\n } else {\n onOpen();\n }\n return;\n }\n\n if (!disableShortcut && event.key === '/' && !isOpen) {\n const target = event.target as HTMLElement;\n const isInput =\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable;\n\n if (!isInput) {\n event.preventDefault();\n onOpen();\n }\n }\n },\n [isOpen, onOpen, onClose, disableShortcut, shortcutKey]\n );\n\n const handleModalKeyDown = useCallback(\n (event: KeyboardEvent | React.KeyboardEvent) => {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n onClose();\n break;\n case 'ArrowDown':\n event.preventDefault();\n onSelectNext();\n break;\n case 'ArrowUp':\n event.preventDefault();\n onSelectPrev();\n break;\n case 'Enter':\n event.preventDefault();\n onEnter();\n break;\n case 'Tab':\n if (event.shiftKey) {\n onSelectPrev();\n } else {\n onSelectNext();\n }\n event.preventDefault();\n break;\n }\n },\n [onClose, onSelectNext, onSelectPrev, onEnter]\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleGlobalKeyDown);\n return () => {\n document.removeEventListener('keydown', handleGlobalKeyDown);\n };\n }, [handleGlobalKeyDown]);\n\n return {\n handleModalKeyDown,\n };\n}\n\nexport function getShortcutText(key: string = 'K'): string {\n if (typeof navigator === 'undefined') {\n return `⌘${key}`;\n }\n const isMac = navigator.platform.toLowerCase().includes('mac');\n return isMac ? `⌘${key}` : `Ctrl+${key}`;\n}\n","import React from \"react\";\nimport { getShortcutText } from \"../hooks/useKeyboard\";\nimport type { DocSearchButtonProps } from \"../types\";\n\nexport function DocSearchButton({\n onClick,\n placeholder = \"Search documentation...\",\n className,\n}: DocSearchButtonProps) {\n const shortcutText = getShortcutText(\"K\");\n return (\n <button\n type=\"button\"\n className={`seekora-docsearch-button${className ? ` ${className}` : \"\"}`}\n onClick={onClick}\n aria-label=\"Search documentation\"\n >\n <span className=\"seekora-docsearch-button-icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n <span className=\"seekora-docsearch-button-placeholder\">\n {placeholder}\n </span>\n <span className=\"seekora-docsearch-button-keys\">\n <kbd className=\"seekora-docsearch-button-key\">{shortcutText}</kbd>\n </span>\n </button>\n );\n}\n","import { useCallback, useEffect, useReducer, useRef } from 'react';\nimport type {\n DocSearchState,\n DocSearchAction,\n DocSearchHit,\n DocSearchSuggestion,\n SearchSource,\n} from '../types';\n\ninterface ExtendedDocSearchState extends DocSearchState {\n groupedSuggestions: { source: SearchSource; items: DocSearchSuggestion[] }[];\n}\n\nconst initialState: ExtendedDocSearchState = {\n query: '',\n results: [],\n suggestions: [],\n groupedSuggestions: [],\n isLoading: false,\n error: null,\n selectedIndex: 0,\n mode: 'suggestions',\n};\n\ntype ExtendedAction = DocSearchAction | { type: 'SET_GROUPED_SUGGESTIONS'; payload: { source: SearchSource; items: DocSearchSuggestion[] }[] };\n\nfunction reducer(state: ExtendedDocSearchState, action: ExtendedAction): ExtendedDocSearchState {\n switch (action.type) {\n case 'SET_QUERY':\n return { ...state, query: action.payload, selectedIndex: 0 };\n case 'SET_RESULTS':\n return { ...state, results: action.payload, mode: 'results' };\n case 'SET_SUGGESTIONS':\n return { ...state, suggestions: action.payload, mode: 'suggestions' };\n case 'SET_GROUPED_SUGGESTIONS': {\n const flatSuggestions = action.payload.flatMap(group =>\n group.items.map(item => ({ ...item, _source: group.source.id }))\n );\n return { ...state, groupedSuggestions: action.payload, suggestions: flatSuggestions, mode: 'suggestions' };\n }\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n case 'SET_ERROR':\n return { ...state, error: action.payload };\n case 'SET_SELECTED_INDEX':\n return { ...state, selectedIndex: action.payload };\n case 'SELECT_NEXT': {\n const items = state.mode === 'results' ? state.results : state.suggestions;\n const maxIndex = items.length - 1;\n return { ...state, selectedIndex: state.selectedIndex >= maxIndex ? 0 : state.selectedIndex + 1 };\n }\n case 'SELECT_PREV': {\n const items = state.mode === 'results' ? state.results : state.suggestions;\n const maxIndex = items.length - 1;\n return { ...state, selectedIndex: state.selectedIndex <= 0 ? maxIndex : state.selectedIndex - 1 };\n }\n case 'SET_MODE':\n return { ...state, mode: action.payload, selectedIndex: 0 };\n case 'RESET':\n return initialState;\n default:\n return state;\n }\n}\n\ninterface UseDocSearchOptions {\n apiEndpoint?: string;\n apiKey?: string;\n sources?: SearchSource[];\n maxResults?: number;\n debounceMs?: number;\n processGroupedResults?: (sourceId: string, items: DocSearchSuggestion[]) => DocSearchSuggestion[];\n}\n\nexport function useDocSearch(options: UseDocSearchOptions) {\n const { apiEndpoint, apiKey, sources, maxResults = 10, debounceMs = 200, processGroupedResults } = options;\n\n const searchSources: SearchSource[] = sources || (apiEndpoint ? [{\n id: 'default',\n name: 'Results',\n endpoint: apiEndpoint,\n apiKey,\n maxResults,\n }] : []);\n\n const [state, dispatch] = useReducer(reducer, initialState);\n const abortControllersRef = useRef<Map<string, AbortController>>(new Map());\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const defaultTransform = (data: any, sourceId: string): DocSearchSuggestion[] => {\n const items = data.data?.suggestions || data.data?.results || data.data?.hits || data.suggestions || data.results || data.hits || [];\n return items.map((item: any) => {\n const doc = item.document || item;\n // Build hierarchy from nested object or flat dot-notation keys\n const hierarchy = doc.hierarchy || {\n lvl0: doc['hierarchy.lvl0'],\n lvl1: doc['hierarchy.lvl1'],\n lvl2: doc['hierarchy.lvl2'],\n lvl3: doc['hierarchy.lvl3'],\n lvl4: doc['hierarchy.lvl4'],\n lvl5: doc['hierarchy.lvl5'],\n };\n return {\n url: doc.url || doc.route || item.url || '',\n title: (doc.title || '').replace?.(/<\\/?mark>/g, '') || '',\n content: (doc.content || doc.description || '').replace?.(/<\\/?mark>/g, '')?.substring?.(0, 100) || '',\n description: doc.description || doc.content?.substring?.(0, 100) || '',\n category: doc.category || hierarchy?.lvl0 || '',\n hierarchy,\n route: doc.route,\n parentTitle: doc.parent_title || doc.parentTitle,\n anchor: doc.anchor || item.anchor,\n _source: sourceId,\n };\n });\n };\n\n const transformPublicSearchResults = useCallback((data: any, sourceId: string): DocSearchSuggestion[] => {\n const results = data?.data?.results || [];\n return results.map((item: any) => {\n const doc = item.document || item;\n return {\n url: doc.url || doc.route || '',\n title: (doc.title || doc.name || '').replace?.(/<\\/?mark>/g, '') || '',\n content: (doc.content || doc.description || '').replace?.(/<\\/?mark>/g, '')?.substring?.(0, 100) || '',\n description: doc.description || doc.content?.substring?.(0, 100) || '',\n category: doc.category || doc.hierarchy?.lvl0 || '',\n hierarchy: doc.hierarchy,\n route: doc.route,\n parentTitle: doc.parent_title || doc.parentTitle,\n _source: sourceId,\n };\n });\n }, []);\n\n const fetchFromSource = useCallback(\n async (source: SearchSource, query: string, signal: AbortSignal): Promise<DocSearchSuggestion[]> => {\n const minLength = source.minQueryLength ?? 1;\n if (query.length < minLength) return [];\n\n try {\n if (source.storeId) {\n const baseUrl = source.endpoint.replace(/\\/$/, '');\n const searchUrl = `${baseUrl}/api/v1/search`;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-storeid': source.storeId,\n ...(source.storeSecret && { 'x-storesecret': source.storeSecret }),\n };\n const response = await fetch(searchUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({ q: query.trim() || '*', per_page: source.maxResults || 8 }),\n signal,\n });\n if (!response.ok) return [];\n const data = await response.json();\n if (source.transformResults) {\n return source.transformResults(data).map((item: DocSearchSuggestion) => ({ ...item, _source: source.id }));\n }\n return transformPublicSearchResults(data, source.id);\n }\n\n const url = new URL(source.endpoint);\n url.searchParams.set('query', query);\n url.searchParams.set('limit', String(source.maxResults || 8));\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (source.apiKey) headers['X-Docs-API-Key'] = source.apiKey;\n\n const response = await fetch(url.toString(), { method: 'GET', headers, signal });\n if (!response.ok) return [];\n const data = await response.json();\n if (source.transformResults) {\n return source.transformResults(data).map((item: DocSearchSuggestion) => ({ ...item, _source: source.id }));\n }\n return defaultTransform(data, source.id);\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') throw error;\n return [];\n }\n },\n [transformPublicSearchResults]\n );\n\n const fetchSuggestions = useCallback(\n async (query: string) => {\n if (!query.trim()) {\n dispatch({ type: 'SET_GROUPED_SUGGESTIONS', payload: [] });\n return;\n }\n abortControllersRef.current.forEach(c => c.abort());\n abortControllersRef.current.clear();\n dispatch({ type: 'SET_LOADING', payload: true });\n dispatch({ type: 'SET_ERROR', payload: null });\n\n try {\n const results = await Promise.all(\n searchSources.map(async (source) => {\n const controller = new AbortController();\n abortControllersRef.current.set(source.id, controller);\n let items = await fetchFromSource(source, query, controller.signal);\n if (processGroupedResults) {\n items = processGroupedResults(source.id, items);\n }\n return { source, items };\n })\n );\n const groupedResults = results.filter(r => r.items.length > 0);\n dispatch({ type: 'SET_GROUPED_SUGGESTIONS', payload: groupedResults });\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') return;\n dispatch({ type: 'SET_ERROR', payload: error instanceof Error ? error.message : 'Search failed' });\n } finally {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n },\n [searchSources, fetchFromSource, processGroupedResults]\n );\n\n const search = useCallback((q: string) => fetchSuggestions(q), [fetchSuggestions]);\n\n const setQuery = useCallback(\n (query: string) => {\n dispatch({ type: 'SET_QUERY', payload: query });\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = setTimeout(() => fetchSuggestions(query), debounceMs);\n },\n [fetchSuggestions, debounceMs]\n );\n\n const selectNext = useCallback(() => dispatch({ type: 'SELECT_NEXT' }), []);\n const selectPrev = useCallback(() => dispatch({ type: 'SELECT_PREV' }), []);\n const setSelectedIndex = useCallback((index: number) => dispatch({ type: 'SET_SELECTED_INDEX', payload: index }), []);\n\n const reset = useCallback(() => {\n abortControllersRef.current.forEach(c => c.abort());\n abortControllersRef.current.clear();\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n dispatch({ type: 'RESET' });\n }, []);\n\n const getSelectedItem = useCallback((): DocSearchHit | DocSearchSuggestion | null => {\n const items = state.mode === 'results' ? state.results : state.suggestions;\n return items[state.selectedIndex] || null;\n }, [state.mode, state.results, state.suggestions, state.selectedIndex]);\n\n useEffect(() => {\n return () => {\n abortControllersRef.current.forEach(c => c.abort());\n abortControllersRef.current.clear();\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n };\n }, []);\n\n return {\n ...state,\n sources: searchSources,\n setQuery,\n search,\n fetchSuggestions,\n selectNext,\n selectPrev,\n setSelectedIndex,\n reset,\n getSelectedItem,\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { SeekoraClientConfig, SearchResponse, SearchContext } from '@seekora-ai/search-sdk';\nimport { SeekoraClient } from '@seekora-ai/search-sdk';\nimport type { DocSearchSuggestion } from '../types';\n\nexport interface UseSeekoraSearchOptions {\n storeId: string;\n storeSecret?: string;\n apiEndpoint?: string;\n maxResults?: number;\n debounceMs?: number;\n analyticsTags?: string[];\n groupField?: string;\n groupSize?: number;\n}\n\nexport interface UseSeekoraSearchResult {\n query: string;\n suggestions: DocSearchSuggestion[];\n isLoading: boolean;\n error: string | null;\n selectedIndex: number;\n setQuery: (query: string) => void;\n selectNext: () => void;\n selectPrev: () => void;\n setSelectedIndex: (index: number) => void;\n reset: () => void;\n getSelectedItem: () => DocSearchSuggestion | null;\n trackDocClick: (hit: DocSearchSuggestion, position: number) => void | Promise<void>;\n}\n\n/** Build hierarchy from doc: either nested doc.hierarchy or flat keys like doc['hierarchy.lvl0'] */\nfunction getHierarchy(doc: any): DocSearchSuggestion['hierarchy'] {\n const hierarchy: DocSearchSuggestion['hierarchy'] = {};\n if (doc?.hierarchy && typeof doc.hierarchy === 'object') {\n hierarchy.lvl0 = doc.hierarchy.lvl0;\n hierarchy.lvl1 = doc.hierarchy.lvl1;\n hierarchy.lvl2 = doc.hierarchy.lvl2;\n hierarchy.lvl3 = doc.hierarchy.lvl3;\n hierarchy.lvl4 = doc.hierarchy.lvl4;\n hierarchy.lvl5 = doc.hierarchy.lvl5;\n } else if (doc && typeof doc === 'object') {\n hierarchy.lvl0 = doc['hierarchy.lvl0'];\n hierarchy.lvl1 = doc['hierarchy.lvl1'];\n hierarchy.lvl2 = doc['hierarchy.lvl2'];\n hierarchy.lvl3 = doc['hierarchy.lvl3'];\n hierarchy.lvl4 = doc['hierarchy.lvl4'];\n hierarchy.lvl5 = doc['hierarchy.lvl5'];\n }\n return hierarchy;\n}\n\nfunction transformResults(results: any[]): DocSearchSuggestion[] {\n const stripMark = (s: unknown) =>\n typeof s === 'string' ? s.replace(/<\\/?mark>/g, '') : (s ? String(s) : '');\n\n return results.map((result) => {\n const doc = result?.document ?? result;\n const hierarchy = getHierarchy(doc);\n const url = doc.url || result.url || doc.route || result.route || doc.link || result.link || '';\n const rawTitle = doc.title || result.title || doc.name || result.name || hierarchy?.lvl3 || hierarchy?.lvl2 || hierarchy?.lvl1 || hierarchy?.lvl0 || '';\n const content = doc.content ?? result.content ?? doc.description ?? result.description ?? doc.snippet ?? result.snippet ?? '';\n const description = doc.description ?? result.description ?? (typeof content === 'string' ? content.substring(0, 150) : '');\n\n const plainTitle = stripMark(rawTitle) || stripMark(hierarchy?.lvl3) || stripMark(hierarchy?.lvl2) || stripMark(hierarchy?.lvl1) || stripMark(hierarchy?.lvl0) || 'Untitled';\n const plainContent = stripMark(content)?.substring(0, 200) || content;\n const apiHighlight = result?.highlight ?? doc?.highlight;\n const highlightTitle = typeof apiHighlight?.title === 'string' ? apiHighlight.title : undefined;\n const highlightContent = typeof apiHighlight?.content === 'string' ? apiHighlight.content : undefined;\n\n return {\n url,\n title: plainTitle,\n content: plainContent,\n description: stripMark(description) || description,\n category: doc.category ?? result.category ?? hierarchy?.lvl0 ?? '',\n hierarchy,\n route: doc.route ?? result.route,\n parentTitle: doc.parent_title ?? doc.parentTitle ?? result.parent_title ?? result.parentTitle,\n type: doc.type ?? result.type ?? '',\n anchor: doc.anchor ?? result.anchor ?? '',\n _source: 'seekora',\n highlight: (highlightTitle ?? highlightContent) ? { title: highlightTitle, content: highlightContent } : undefined,\n } satisfies DocSearchSuggestion;\n });\n}\n\nexport function useSeekoraSearch(options: UseSeekoraSearchOptions): UseSeekoraSearchResult {\n const {\n storeId,\n storeSecret,\n apiEndpoint,\n maxResults = 20,\n debounceMs = 200,\n analyticsTags = ['docsearch'],\n groupField = 'hierarchy.lvl3',\n groupSize = 10,\n } = options;\n\n const [query, setQueryState] = useState('');\n const [suggestions, setSuggestions] = useState<DocSearchSuggestion[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n const clientRef = useRef<SeekoraClient | null>(null);\n const lastSearchContextRef = useRef<SearchContext | null>(null);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n useEffect(() => {\n if (!storeId) return;\n\n const config: SeekoraClientConfig = {\n storeId,\n readSecret: storeSecret,\n logLevel: 'warn',\n enableContextCollection: true,\n enableEventQueue: true, // Enable batching for better performance\n eventQueue: {\n batchSize: 10,\n flushInterval: 5000, // 5 seconds\n enablePersistence: true,\n },\n };\n\n if (apiEndpoint) {\n if (['local', 'stage', 'production'].includes(apiEndpoint)) {\n config.environment = apiEndpoint as 'local' | 'stage' | 'production';\n } else {\n // Search SDK path is /v1/search; backend serves at /api/v1/search. baseUrl must include /api.\n const base = apiEndpoint.replace(/\\/$/, '');\n config.baseUrl = base.endsWith('/api') ? base : `${base}/api`;\n }\n }\n\n try {\n clientRef.current = new SeekoraClient(config);\n } catch (err) {\n console.error('Failed to initialize SeekoraClient:', err);\n setError('Failed to initialize search client');\n }\n\n return () => {\n clientRef.current = null;\n };\n }, [storeId, storeSecret, apiEndpoint]);\n\n const performSearch = useCallback(\n async (searchQuery: string) => {\n if (!clientRef.current) {\n setError('Search client not initialized');\n return;\n }\n if (!searchQuery.trim()) {\n setSuggestions([]);\n return;\n }\n if (abortControllerRef.current) abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n setIsLoading(true);\n setError(null);\n\n try {\n const response: SearchResponse = await clientRef.current.search(searchQuery, {\n per_page: maxResults,\n analytics_tags: analyticsTags,\n return_fields: [\n 'hierarchy.lvl0', 'hierarchy.lvl1', 'hierarchy.lvl2', 'hierarchy.lvl3',\n 'hierarchy.lvl4', 'hierarchy.lvl5', 'hierarchy.lvl6',\n 'content', 'type', 'url', 'title', 'anchor'\n ],\n snippet_fields: [\n 'hierarchy.lvl1', 'hierarchy.lvl2', 'hierarchy.lvl3',\n 'hierarchy.lvl4', 'hierarchy.lvl5', 'hierarchy.lvl6', 'content'\n ],\n snippet_prefix: '<mark>',\n snippet_suffix: '</mark>',\n include_snippets: true,\n group_field: groupField,\n group_size: groupSize,\n });\n\n if (abortControllerRef.current?.signal.aborted) return;\n if (response?.context) lastSearchContextRef.current = response.context;\n setSuggestions(transformResults(response.results || []));\n setSelectedIndex(0);\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') return;\n console.error('Search failed:', err);\n setError(err instanceof Error ? err.message : 'Search failed');\n setSuggestions([]);\n } finally {\n setIsLoading(false);\n }\n },\n [maxResults, analyticsTags, groupField, groupSize]\n );\n\n const setQuery = useCallback(\n (newQuery: string) => {\n setQueryState(newQuery);\n setSelectedIndex(0);\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = setTimeout(() => performSearch(newQuery), debounceMs);\n },\n [performSearch, debounceMs]\n );\n\n const selectNext = useCallback(() => {\n setSelectedIndex((prev) => (prev >= suggestions.length - 1 ? 0 : prev + 1));\n }, [suggestions.length]);\n\n const selectPrev = useCallback(() => {\n setSelectedIndex((prev) => (prev <= 0 ? suggestions.length - 1 : prev - 1));\n }, [suggestions.length]);\n\n const reset = useCallback(() => {\n if (abortControllerRef.current) abortControllerRef.current.abort();\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n setQueryState('');\n setSuggestions([]);\n setIsLoading(false);\n setError(null);\n setSelectedIndex(0);\n }, []);\n\n const getSelectedItem = useCallback((): DocSearchSuggestion | null => {\n return suggestions[selectedIndex] || null;\n }, [suggestions, selectedIndex]);\n\n const trackDocClick = useCallback((hit: DocSearchSuggestion, position: number) => {\n const client = clientRef.current;\n if (!client?.trackEvent) return;\n const context = lastSearchContextRef.current ?? undefined;\n const itemId = hit.url || (hit as { id?: string }).id || hit.title || String(position);\n client.trackEvent({\n event_name: 'doc_click',\n clicked_item_id: itemId,\n metadata: { position, result: hit, source: 'docsearch' },\n }, context);\n }, []);\n\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) abortControllerRef.current.abort();\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n };\n }, []);\n\n return {\n query,\n suggestions,\n isLoading,\n error,\n selectedIndex,\n setQuery,\n selectNext,\n selectPrev,\n setSelectedIndex,\n reset,\n getSelectedItem,\n trackDocClick,\n };\n}\n","import React, { useState, useCallback, useRef } from \"react\";\nimport { Modal } from \"./Modal\";\nimport { SearchBox } from \"./SearchBox\";\nimport { Results } from \"./Results\";\nimport { Footer } from \"./Footer\";\nimport { DocSearchButton } from \"./DocSearchButton\";\nimport { useDocSearch } from \"../hooks/useDocSearch\";\nimport { useSeekoraSearch } from \"../hooks/useSeekoraSearch\";\nimport { useKeyboard } from \"../hooks/useKeyboard\";\nimport type {\n DocSearchProps,\n DocSearchHit,\n DocSearchSuggestion,\n SearchSource,\n} from \"../types\";\n\nexport function DocSearch({\n storeId,\n storeSecret,\n seekoraApiEndpoint,\n apiEndpoint,\n apiKey,\n sources,\n placeholder = \"Search documentation...\",\n maxResults = 10,\n debounceMs = 200,\n onSelect,\n onClose,\n translations = {},\n renderButton = true,\n buttonComponent: ButtonComponent = DocSearchButton,\n initialOpen = false,\n disableShortcut = false,\n shortcutKey = \"k\",\n processGroupedResults,\n className,\n}: DocSearchProps) {\n const [isOpen, setIsOpen] = useState(initialOpen);\n const scrollSelectionIntoViewRef = useRef(false);\n const useSeekoraSDK = !!storeId;\n\n const seekoraSearch = useSeekoraSearch({\n storeId: storeId || \"\",\n storeSecret,\n apiEndpoint: seekoraApiEndpoint,\n maxResults,\n debounceMs,\n analyticsTags: [\"docsearch\"],\n });\n\n const legacySearch = useDocSearch({\n apiEndpoint,\n apiKey,\n sources,\n maxResults,\n debounceMs,\n processGroupedResults,\n });\n\n const {\n query,\n suggestions,\n isLoading,\n error,\n selectedIndex,\n setQuery,\n selectNext,\n selectPrev,\n setSelectedIndex,\n reset,\n getSelectedItem,\n } = useSeekoraSDK ? seekoraSearch : legacySearch;\n\n const groupedSuggestions = useSeekoraSDK\n ? undefined\n : legacySearch.groupedSuggestions;\n const results = useSeekoraSDK ? suggestions : legacySearch.results;\n const mode = useSeekoraSDK ? \"suggestions\" : legacySearch.mode;\n const searchSources: SearchSource[] = useSeekoraSDK\n ? [{ id: \"seekora\", name: \"Results\", endpoint: \"\" }]\n : legacySearch.sources;\n\n const handleOpen = useCallback(() => setIsOpen(true), []);\n const handleClose = useCallback(() => {\n setIsOpen(false);\n reset();\n onClose?.();\n }, [reset, onClose]);\n\n const handleSelect = useCallback(\n (hit: DocSearchHit | DocSearchSuggestion) => {\n if (useSeekoraSDK && seekoraSearch.trackDocClick) {\n seekoraSearch.trackDocClick(\n hit as DocSearchSuggestion,\n selectedIndex + 1\n );\n }\n if (onSelect) {\n onSelect(hit);\n } else {\n window.location.href = hit.url;\n }\n handleClose();\n },\n [onSelect, handleClose, useSeekoraSDK, seekoraSearch, selectedIndex]\n );\n\n const handleEnter = useCallback(() => {\n const selectedItem = getSelectedItem();\n if (selectedItem) handleSelect(selectedItem);\n }, [getSelectedItem, handleSelect]);\n\n const handleSelectNext = useCallback(() => {\n scrollSelectionIntoViewRef.current = true;\n selectNext();\n }, [selectNext]);\n const handleSelectPrev = useCallback(() => {\n scrollSelectionIntoViewRef.current = true;\n selectPrev();\n }, [selectPrev]);\n\n const { handleModalKeyDown } = useKeyboard({\n isOpen,\n onOpen: handleOpen,\n onClose: handleClose,\n onSelectNext: handleSelectNext,\n onSelectPrev: handleSelectPrev,\n onEnter: handleEnter,\n disableShortcut,\n shortcutKey,\n });\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => handleModalKeyDown(event),\n [handleModalKeyDown]\n );\n const displayHits = mode === \"results\" ? results : suggestions;\n\n return (\n <>\n {renderButton && (\n <ButtonComponent\n onClick={handleOpen}\n placeholder={translations.buttonText || placeholder}\n className={className}\n />\n )}\n <Modal isOpen={isOpen} onClose={handleClose} className={className}>\n <div className=\"seekora-docsearch-modal\" onKeyDown={handleKeyDown}>\n <header className=\"seekora-docsearch-header\">\n <SearchBox\n value={query}\n onChange={setQuery}\n placeholder={placeholder}\n onClear={reset}\n />\n <button\n type=\"button\"\n className=\"seekora-docsearch-close\"\n onClick={handleClose}\n aria-label=\"Close search\"\n >\n <span className=\"seekora-docsearch-close-text\">esc</span>\n </button>\n </header>\n <div className=\"seekora-docsearch-body\">\n <Results\n hits={displayHits}\n groupedHits={groupedSuggestions}\n selectedIndex={selectedIndex}\n onSelect={handleSelect}\n onHover={setSelectedIndex}\n scrollSelectionIntoViewRef={scrollSelectionIntoViewRef}\n query={query}\n isLoading={isLoading}\n error={error}\n translations={translations}\n sources={searchSources}\n />\n </div>\n <Footer translations={translations} />\n </div>\n </Modal>\n </>\n );\n}\n","/**\n * useSeekoraSearch Hook\n * \n * Hook for performing searches with the Seekora SDK\n */\n\nimport { useState, useCallback } from 'react';\nimport type { SeekoraClient, SearchOptions, SearchResponse, SearchContext } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface UseSeekoraSearchOptions {\n client: SeekoraClient;\n autoTrack?: boolean;\n}\n\nexport interface UseSeekoraSearchReturn {\n search: (options: SearchOptions) => Promise<SearchResponse | null>;\n results: SearchResponse | null;\n loading: boolean;\n error: Error | null;\n context: SearchContext | null;\n clearResults: () => void;\n}\n\nexport const useSeekoraSearch = ({\n client,\n autoTrack = true,\n}: UseSeekoraSearchOptions): UseSeekoraSearchReturn => {\n const [results, setResults] = useState<SearchResponse | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [context, setContext] = useState<SearchContext | null>(null);\n\n const search = useCallback(async (options: SearchOptions) => {\n setLoading(true);\n setError(null);\n\n const query = options.q || '';\n log.verbose('useSeekoraSearch: Starting search', { query, options });\n\n try {\n const { q, ...restOptions } = options;\n const query = typeof q === 'string' ? q : '';\n const response = await client.search(query, restOptions);\n \n log.info('useSeekoraSearch: Search completed', {\n query,\n resultsCount: Array.isArray(response?.results) ? response.results.length : 0,\n hasContext: !!response?.context,\n });\n \n setResults(response);\n \n // Extract context from response\n if (response.context != null) {\n setContext(response.context as SearchContext);\n }\n\n return response;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('useSeekoraSearch: Search failed', {\n query,\n error: error.message,\n stack: error.stack,\n });\n setError(error);\n setResults(null);\n setContext(null);\n return null;\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const clearResults = useCallback(() => {\n setResults(null);\n setError(null);\n setContext(null);\n }, []);\n\n return {\n search,\n results,\n loading,\n error,\n context,\n clearResults,\n };\n};\n\n","/**\n * useAnalytics Hook\n *\n * Hook for tracking analytics events with the Seekora SDK.\n * Supports Analytics V3 payload fields (event_ts, anonymous_id, orgcode, xstoreid);\n * the SDK sends both legacy and v3 fields for backend compatibility.\n */\n\nimport { useCallback } from 'react';\nimport type { SeekoraClient, SearchContext, ExtendedEventPayload, DataTypesEventPayload } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface UseAnalyticsOptions {\n client: SeekoraClient;\n enabled?: boolean;\n}\n\n/** Payload for trackEvent/trackBatch: supports legacy and Analytics V3 field names */\nexport type AnalyticsEventPayload = Partial<DataTypesEventPayload> & Partial<ExtendedEventPayload>;\n\nexport interface UseAnalyticsReturn {\n trackEvent: (eventType: string, payload: AnalyticsEventPayload, context?: SearchContext | Partial<SearchContext>) => Promise<void>;\n trackClick: (resultId: string, result: any, context?: SearchContext | Partial<SearchContext>, position?: number) => Promise<void>;\n trackConversion: (resultId: string, result: any, value?: number, currency?: string, context?: SearchContext | Partial<SearchContext>) => Promise<void>;\n trackBatch: (events: (AnalyticsEventPayload & { event_name?: string })[], context?: SearchContext) => Promise<void>;\n}\n\nexport const useAnalytics = ({\n client,\n enabled = true,\n}: UseAnalyticsOptions): UseAnalyticsReturn => {\n const trackEvent = useCallback(async (\n eventType: string,\n payload: AnalyticsEventPayload,\n context?: SearchContext | Partial<SearchContext>\n ) => {\n if (!enabled) return;\n\n try {\n const eventPayload: AnalyticsEventPayload = {\n event_name: eventType,\n ...payload,\n };\n\n await client.trackEvent?.(eventPayload, context);\n } catch (err) {\n log.error('Failed to track event:', err);\n }\n }, [client, enabled]);\n\n const trackClick = useCallback(async (\n resultId: string,\n result: any,\n context?: SearchContext | Partial<SearchContext>,\n position?: number\n ) => {\n if (!enabled) return;\n\n const pos = position ?? 0;\n if (client.trackClick) {\n await client.trackClick(resultId, pos, context as SearchContext | undefined);\n } else {\n await trackEvent('product_click', {\n clicked_item_id: resultId,\n metadata: { result, ...(position !== undefined && { position: pos }) },\n }, context);\n }\n }, [client, trackEvent, enabled]);\n\n const trackConversion = useCallback(async (\n resultId: string,\n result: any,\n value?: number,\n currency?: string,\n context?: SearchContext | Partial<SearchContext>\n ) => {\n if (!enabled) return;\n\n await trackEvent('conversion', {\n clicked_item_id: resultId,\n value: value,\n currency: currency,\n metadata: {\n result: result,\n },\n }, context);\n }, [trackEvent, enabled]);\n\n const trackBatch = useCallback(async (\n events: (AnalyticsEventPayload & { event_name?: string })[],\n context?: SearchContext\n ) => {\n if (!enabled || events.length === 0) return;\n\n try {\n await client.trackEvents?.(events, context);\n } catch (err) {\n log.error('Failed to track batch events:', err);\n }\n }, [client, enabled]);\n\n return {\n trackEvent,\n trackClick,\n trackConversion,\n trackBatch,\n };\n};\n\n","/**\n * useSmartSuggestions Hook\n * \n * AI-enhanced query suggestions with intent understanding\n * Provides context-aware suggestions based on user behavior and query patterns\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { useSearchContext } from '../components/SearchProvider';\n\nexport interface SmartSuggestion {\n text: string;\n type: 'query' | 'correction' | 'expansion' | 'related' | 'trending';\n confidence: number;\n metadata?: {\n intent?: string;\n category?: string;\n correctedFrom?: string;\n expandedTo?: string[];\n };\n}\n\nexport interface SmartSuggestionsOptions {\n /** Minimum query length */\n minQueryLength?: number;\n /** Maximum suggestions to return */\n maxSuggestions?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Enable spell correction */\n enableSpellCorrection?: boolean;\n /** Enable query expansion */\n enableQueryExpansion?: boolean;\n /** Enable intent detection */\n enableIntentDetection?: boolean;\n /** Include trending queries when query is empty */\n includeTrending?: boolean;\n /** User context for personalization */\n userContext?: {\n recentSearches?: string[];\n preferences?: Record<string, any>;\n };\n}\n\nexport interface UseSmartSuggestionsReturn {\n suggestions: SmartSuggestion[];\n loading: boolean;\n error: Error | null;\n /** Detected intent from the query */\n detectedIntent: string | null;\n /** Suggested corrections if query has typos */\n corrections: string[];\n /** Expanded query terms */\n expansions: string[];\n /** Process a query for smart suggestions */\n getSuggestions: (query: string) => Promise<SmartSuggestion[]>;\n /** Clear current suggestions */\n clear: () => void;\n}\n\n/**\n * Pattern-based intent detection (client-side fallback)\n */\nfunction detectIntent(query: string): { intent: string; confidence: number } | null {\n const patterns: Array<{ pattern: RegExp; intent: string }> = [\n { pattern: /^(buy|purchase|order|get)\\s+/i, intent: 'purchase' },\n { pattern: /^(find|search|looking for|where)\\s+/i, intent: 'search' },\n { pattern: /^(compare|vs|versus)\\s+/i, intent: 'compare' },\n { pattern: /^(how (to|do)|what is|why)\\s+/i, intent: 'informational' },\n { pattern: /under\\s*\\$?\\d+|less than\\s*\\$?\\d+|cheap|affordable/i, intent: 'price_sensitive' },\n { pattern: /best|top|recommended|popular/i, intent: 'recommendation' },\n { pattern: /\\d+\\s*(gb|tb|inch|cm|mm|kg|lb)/i, intent: 'specification' },\n { pattern: /(red|blue|green|black|white|pink|purple|yellow)\\s+/i, intent: 'color_preference' },\n { pattern: /(size|small|medium|large|xl|xxl)\\s+/i, intent: 'size_preference' },\n ];\n\n for (const { pattern, intent } of patterns) {\n if (pattern.test(query)) {\n return { intent, confidence: 0.8 };\n }\n }\n\n return null;\n}\n\n/**\n * Simple Levenshtein distance for spell checking\n */\nfunction levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n}\n\n/**\n * Find potential corrections from a dictionary\n */\nfunction findCorrections(\n query: string,\n dictionary: string[],\n maxDistance: number = 2\n): string[] {\n const words = query.toLowerCase().split(/\\s+/);\n const corrections: string[] = [];\n\n words.forEach(word => {\n if (word.length < 3) return;\n\n dictionary.forEach(dictWord => {\n const distance = levenshteinDistance(word, dictWord.toLowerCase());\n if (distance > 0 && distance <= maxDistance && distance < word.length / 2) {\n const corrected = query.replace(new RegExp(word, 'gi'), dictWord);\n if (!corrections.includes(corrected)) {\n corrections.push(corrected);\n }\n }\n });\n });\n\n return corrections.slice(0, 3);\n}\n\n/**\n * Expand query with synonyms and related terms\n */\nfunction expandQuery(query: string): string[] {\n const expansions: Record<string, string[]> = {\n phone: ['smartphone', 'mobile', 'cellphone'],\n laptop: ['notebook', 'computer', 'pc'],\n tv: ['television', 'smart tv', 'monitor'],\n headphones: ['earbuds', 'earphones', 'headset'],\n shoes: ['footwear', 'sneakers', 'boots'],\n shirt: ['top', 'blouse', 'tee'],\n pants: ['trousers', 'jeans', 'bottoms'],\n cheap: ['affordable', 'budget', 'inexpensive'],\n best: ['top-rated', 'popular', 'recommended'],\n };\n\n const queryLower = query.toLowerCase();\n const expanded: string[] = [];\n\n Object.entries(expansions).forEach(([term, synonyms]) => {\n if (queryLower.includes(term)) {\n synonyms.forEach(syn => {\n const exp = query.replace(new RegExp(term, 'gi'), syn);\n if (!expanded.includes(exp)) {\n expanded.push(exp);\n }\n });\n }\n });\n\n return expanded.slice(0, 3);\n}\n\nexport function useSmartSuggestions(\n query: string,\n options: SmartSuggestionsOptions = {}\n): UseSmartSuggestionsReturn {\n const {\n minQueryLength = 1,\n maxSuggestions = 10,\n debounceMs = 200,\n enableSpellCorrection = true,\n enableQueryExpansion = true,\n enableIntentDetection = true,\n includeTrending = true,\n userContext,\n } = options;\n\n const { stateManager } = useSearchContext();\n const [suggestions, setSuggestions] = useState<SmartSuggestion[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [detectedIntent, setDetectedIntent] = useState<string | null>(null);\n const [corrections, setCorrections] = useState<string[]>([]);\n const [expansions, setExpansions] = useState<string[]>([]);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Sample dictionary for spell checking (in production, this would come from the API)\n const dictionary = useMemo(() => [\n 'phone', 'laptop', 'computer', 'tablet', 'headphones', 'camera',\n 'television', 'speaker', 'watch', 'keyboard', 'mouse', 'monitor',\n 'shirt', 'pants', 'shoes', 'jacket', 'dress', 'skirt', 'sweater',\n 'electronics', 'clothing', 'accessories', 'furniture', 'appliances',\n ], []);\n\n const processQuery = useCallback(async (q: string): Promise<SmartSuggestion[]> => {\n const results: SmartSuggestion[] = [];\n\n // Detect intent\n if (enableIntentDetection) {\n const intent = detectIntent(q);\n if (intent) {\n setDetectedIntent(intent.intent);\n } else {\n setDetectedIntent(null);\n }\n }\n\n // Find spell corrections\n if (enableSpellCorrection && q.length >= 3) {\n const correctionResults = findCorrections(q, dictionary);\n setCorrections(correctionResults);\n \n correctionResults.forEach(correction => {\n results.push({\n text: correction,\n type: 'correction',\n confidence: 0.9,\n metadata: { correctedFrom: q },\n });\n });\n }\n\n // Expand query\n if (enableQueryExpansion) {\n const expansionResults = expandQuery(q);\n setExpansions(expansionResults);\n \n expansionResults.forEach(exp => {\n results.push({\n text: exp,\n type: 'expansion',\n confidence: 0.7,\n metadata: { expandedTo: [exp] },\n });\n });\n }\n\n // Add the original query as a suggestion\n results.unshift({\n text: q,\n type: 'query',\n confidence: 1.0,\n });\n\n // Add related suggestions based on context\n if (userContext?.recentSearches) {\n userContext.recentSearches\n .filter(s => s.toLowerCase().includes(q.toLowerCase()) && s !== q)\n .slice(0, 2)\n .forEach(s => {\n results.push({\n text: s,\n type: 'related',\n confidence: 0.6,\n });\n });\n }\n\n return results.slice(0, maxSuggestions);\n }, [dictionary, enableIntentDetection, enableSpellCorrection, enableQueryExpansion, maxSuggestions, userContext]);\n\n const getSuggestions = useCallback(async (q: string): Promise<SmartSuggestion[]> => {\n if (q.length < minQueryLength) {\n return [];\n }\n return processQuery(q);\n }, [minQueryLength, processQuery]);\n\n // Debounced effect\n useEffect(() => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n\n if (query.length < minQueryLength) {\n setSuggestions([]);\n setCorrections([]);\n setExpansions([]);\n setDetectedIntent(null);\n return;\n }\n\n setLoading(true);\n\n debounceTimer.current = setTimeout(async () => {\n try {\n const results = await processQuery(query);\n setSuggestions(results);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setSuggestions([]);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n };\n }, [query, minQueryLength, debounceMs, processQuery]);\n\n const clear = useCallback(() => {\n setSuggestions([]);\n setCorrections([]);\n setExpansions([]);\n setDetectedIntent(null);\n setError(null);\n }, []);\n\n return {\n suggestions,\n loading,\n error,\n detectedIntent,\n corrections,\n expansions,\n getSuggestions,\n clear,\n };\n}\n","/**\n * useNaturalLanguageFilters Hook\n * \n * Convert natural language queries to structured filters\n * Examples:\n * - \"red shirts under $50\" → color: red, category: shirts, price: <= 50\n * - \"size large blue jeans\" → size: L, color: blue, category: jeans\n */\n\nimport { useMemo, useCallback } from 'react';\nimport { useSearchState } from './useSearchState';\n\nexport interface ParsedFilter {\n field: string;\n value: string;\n operator: '=' | '>' | '<' | '>=' | '<=' | 'contains';\n confidence: number;\n matchedText: string;\n}\n\nexport interface NaturalLanguageResult {\n /** Cleaned query with filter terms removed */\n cleanedQuery: string;\n /** Extracted filters */\n filters: ParsedFilter[];\n /** Original query */\n originalQuery: string;\n /** Whether any filters were detected */\n hasFilters: boolean;\n}\n\nexport interface NaturalLanguageFiltersOptions {\n /** Custom field mappings */\n fieldMappings?: Record<string, string>;\n /** Custom value mappings */\n valueMappings?: Record<string, Record<string, string>>;\n /** Whether to auto-apply filters to search state */\n autoApply?: boolean;\n /** Currency symbol for price parsing */\n currencySymbol?: string;\n}\n\n// Default patterns for parsing natural language\nconst DEFAULT_PATTERNS = {\n // Price patterns\n price: [\n { pattern: /under\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '<=' as const, field: 'price' },\n { pattern: /less than\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '<' as const, field: 'price' },\n { pattern: /over\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '>=' as const, field: 'price' },\n { pattern: /more than\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '>' as const, field: 'price' },\n { pattern: /\\$(\\d+(?:\\.\\d{2})?)\\s*-\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: 'range' as const, field: 'price' },\n { pattern: /between\\s*\\$?(\\d+(?:\\.\\d{2})?)\\s*and\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: 'range' as const, field: 'price' },\n { pattern: /\\$(\\d+(?:\\.\\d{2})?)/i, operator: '<=' as const, field: 'price' },\n ],\n \n // Color patterns\n colors: ['red', 'blue', 'green', 'black', 'white', 'pink', 'purple', 'yellow', 'orange', 'brown', 'gray', 'grey', 'navy', 'beige', 'gold', 'silver'],\n \n // Size patterns\n sizes: {\n 'extra small': 'XS',\n 'xs': 'XS',\n 'small': 'S',\n 's': 'S',\n 'medium': 'M',\n 'm': 'M',\n 'large': 'L',\n 'l': 'L',\n 'extra large': 'XL',\n 'xl': 'XL',\n 'xxl': 'XXL',\n '2xl': 'XXL',\n 'xxxl': 'XXXL',\n '3xl': 'XXXL',\n },\n \n // Brand patterns (common examples)\n brandIndicators: ['by', 'from', 'brand'],\n \n // Rating patterns\n ratings: [\n { pattern: /(\\d+)\\s*\\+?\\s*stars?/i, field: 'rating', operator: '>=' as const },\n { pattern: /rated\\s*(\\d+)/i, field: 'rating', operator: '>=' as const },\n { pattern: /top\\s*rated/i, field: 'rating', value: '4', operator: '>=' as const },\n ],\n \n // Availability patterns\n availability: [\n { pattern: /in\\s*stock/i, field: 'inStock', value: 'true' },\n { pattern: /available/i, field: 'inStock', value: 'true' },\n { pattern: /on\\s*sale/i, field: 'onSale', value: 'true' },\n ],\n};\n\nexport function useNaturalLanguageFilters(\n options: NaturalLanguageFiltersOptions = {}\n): {\n /** Parse a natural language query */\n parse: (query: string) => NaturalLanguageResult;\n /** Apply parsed filters to search state */\n applyFilters: (filters: ParsedFilter[]) => void;\n /** Parse and apply in one step */\n parseAndApply: (query: string) => NaturalLanguageResult;\n} {\n const {\n fieldMappings = {},\n valueMappings = {},\n autoApply = false,\n currencySymbol = '$',\n } = options;\n\n const { addRefinement, removeRefinement, clearRefinements, setQuery } = useSearchState();\n\n // Merge default patterns with custom mappings\n const patterns = useMemo(() => ({\n ...DEFAULT_PATTERNS,\n colors: [...DEFAULT_PATTERNS.colors, ...(valueMappings.color ? Object.keys(valueMappings.color) : [])],\n sizes: { ...DEFAULT_PATTERNS.sizes, ...(valueMappings.size || {}) },\n }), [valueMappings]);\n\n const parse = useCallback((query: string): NaturalLanguageResult => {\n const filters: ParsedFilter[] = [];\n let cleanedQuery = query;\n\n // Parse price filters\n for (const pricePattern of patterns.price) {\n const match = query.match(pricePattern.pattern);\n if (match) {\n if (pricePattern.operator === 'range' && match[2]) {\n // Handle price range\n filters.push({\n field: fieldMappings.price || 'price',\n value: `>=${match[1]}`,\n operator: '>=',\n confidence: 0.95,\n matchedText: match[0],\n });\n filters.push({\n field: fieldMappings.price || 'price',\n value: `<=${match[2]}`,\n operator: '<=',\n confidence: 0.95,\n matchedText: match[0],\n });\n } else if (match[1]) {\n filters.push({\n field: fieldMappings.price || 'price',\n value: `${pricePattern.operator}${match[1]}`,\n operator: pricePattern.operator as any,\n confidence: 0.95,\n matchedText: match[0],\n });\n }\n cleanedQuery = cleanedQuery.replace(match[0], ' ');\n break; // Only match first price pattern\n }\n }\n\n // Parse colors\n const colorRegex = new RegExp(`\\\\b(${patterns.colors.join('|')})\\\\b`, 'gi');\n const colorMatches = query.match(colorRegex);\n if (colorMatches) {\n colorMatches.forEach(color => {\n const normalizedColor = valueMappings.color?.[color.toLowerCase()] || color.toLowerCase();\n filters.push({\n field: fieldMappings.color || 'color',\n value: normalizedColor,\n operator: '=',\n confidence: 0.9,\n matchedText: color,\n });\n cleanedQuery = cleanedQuery.replace(new RegExp(`\\\\b${color}\\\\b`, 'gi'), ' ');\n });\n }\n\n // Parse sizes\n const sizeEntries = Object.entries(patterns.sizes);\n for (const [sizeText, sizeValue] of sizeEntries) {\n const sizeRegex = new RegExp(`\\\\b${sizeText}\\\\b`, 'gi');\n if (sizeRegex.test(query)) {\n filters.push({\n field: fieldMappings.size || 'size',\n value: sizeValue,\n operator: '=',\n confidence: 0.85,\n matchedText: sizeText,\n });\n cleanedQuery = cleanedQuery.replace(sizeRegex, ' ');\n break; // Only match first size\n }\n }\n\n // Parse ratings\n for (const ratingPattern of patterns.ratings) {\n if ('value' in ratingPattern) {\n if (ratingPattern.pattern.test(query)) {\n filters.push({\n field: fieldMappings.rating || ratingPattern.field,\n value: `${ratingPattern.operator}${ratingPattern.value}`,\n operator: ratingPattern.operator,\n confidence: 0.8,\n matchedText: query.match(ratingPattern.pattern)?.[0] || '',\n });\n cleanedQuery = cleanedQuery.replace(ratingPattern.pattern, ' ');\n }\n } else {\n const match = query.match(ratingPattern.pattern);\n if (match && match[1]) {\n filters.push({\n field: fieldMappings.rating || ratingPattern.field,\n value: `${ratingPattern.operator}${match[1]}`,\n operator: ratingPattern.operator,\n confidence: 0.85,\n matchedText: match[0],\n });\n cleanedQuery = cleanedQuery.replace(match[0], ' ');\n }\n }\n }\n\n // Parse availability\n for (const availPattern of patterns.availability) {\n if (availPattern.pattern.test(query)) {\n filters.push({\n field: fieldMappings[availPattern.field] || availPattern.field,\n value: availPattern.value,\n operator: '=',\n confidence: 0.9,\n matchedText: query.match(availPattern.pattern)?.[0] || '',\n });\n cleanedQuery = cleanedQuery.replace(availPattern.pattern, ' ');\n }\n }\n\n // Clean up the query\n cleanedQuery = cleanedQuery\n .replace(/\\s+/g, ' ')\n .trim();\n\n return {\n cleanedQuery,\n filters,\n originalQuery: query,\n hasFilters: filters.length > 0,\n };\n }, [patterns, fieldMappings, valueMappings]);\n\n const applyFilters = useCallback((filters: ParsedFilter[]) => {\n filters.forEach(filter => {\n addRefinement(filter.field, filter.value, false);\n });\n // Trigger search after all filters are added\n if (filters.length > 0) {\n // The last addRefinement with triggerSearch=true would be called\n // But we add them all with false and rely on the query change to trigger\n }\n }, [addRefinement]);\n\n const parseAndApply = useCallback((query: string): NaturalLanguageResult => {\n const result = parse(query);\n \n if (result.hasFilters) {\n applyFilters(result.filters);\n // Update the query to the cleaned version\n if (result.cleanedQuery !== query) {\n setQuery(result.cleanedQuery, true);\n }\n }\n \n return result;\n }, [parse, applyFilters, setQuery]);\n\n return {\n parse,\n applyFilters,\n parseAndApply,\n };\n}\n\n/**\n * Utility to format parsed filters for display\n */\nexport function formatParsedFilters(filters: ParsedFilter[]): string {\n return filters\n .map(f => `${f.field}: ${f.value}`)\n .join(', ');\n}\n","/**\n * useVariantSelection – manages variant selection state\n *\n * Single source of truth for variant interactions on product pages.\n * Cards display variants passively; product pages use this hook.\n */\n\nimport { useState, useMemo, useCallback } from 'react';\nimport type { ProductOption, ProductVariant } from '@seekora-ai/ui-sdk-types';\nimport { findVariantBySelections, getAvailableValuesForOption } from '../components/suggestions/utils';\n\nexport interface UseVariantSelectionOptions {\n options?: ProductOption[];\n variants?: ProductVariant[];\n initialSelections?: Record<string, string>;\n onVariantChange?: (variant: ProductVariant | null, selections: Record<string, string>) => void;\n}\n\nexport interface UseVariantSelectionReturn {\n selections: Record<string, string>;\n setSelection: (optionName: string, value: string) => void;\n resetSelections: () => void;\n selectedVariant: ProductVariant | null;\n availableValues: Record<string, { value: string; available: boolean }[]>;\n isComplete: boolean;\n effectivePrice: number | null;\n effectiveComparePrice: number | null;\n}\n\nexport function useVariantSelection({\n options = [],\n variants = [],\n initialSelections = {},\n onVariantChange,\n}: UseVariantSelectionOptions = {}): UseVariantSelectionReturn {\n const [selections, setSelections] = useState<Record<string, string>>(initialSelections);\n\n const selectedVariant = useMemo(\n () => findVariantBySelections(options, variants, selections),\n [options, variants, selections]\n );\n\n const isComplete = useMemo(\n () => options.length > 0 && options.every((opt) => !!selections[opt.name]),\n [options, selections]\n );\n\n const availableValues = useMemo(() => {\n const result: Record<string, { value: string; available: boolean }[]> = {};\n for (const option of options) {\n result[option.name] = getAvailableValuesForOption(\n option.name,\n options,\n variants,\n selections\n );\n }\n return result;\n }, [options, variants, selections]);\n\n const effectivePrice = selectedVariant?.price ?? null;\n const effectiveComparePrice = selectedVariant?.comparePrice ?? null;\n\n const setSelection = useCallback(\n (optionName: string, value: string) => {\n setSelections((prev) => {\n const next = { ...prev, [optionName]: value };\n const variant = findVariantBySelections(options, variants, next);\n onVariantChange?.(variant, next);\n return next;\n });\n },\n [options, variants, onVariantChange]\n );\n\n const resetSelections = useCallback(() => {\n setSelections({});\n onVariantChange?.(null, {});\n }, [onVariantChange]);\n\n return {\n selections,\n setSelection,\n resetSelections,\n selectedVariant,\n availableValues,\n isComplete,\n effectivePrice,\n effectiveComparePrice,\n };\n}\n","/**\n * useProductAnalytics – analytics event binding hook for custom components\n *\n * Returns event handler props ready to spread onto any element, plus imperative\n * tracking methods. Builds on existing useAnalytics infrastructure.\n */\n\nimport { useCallback, useRef, useEffect } from 'react';\nimport type { SeekoraClient, SearchContext } from '@seekora-ai/search-sdk';\nimport type { ProductItem, ProductVariant } from '@seekora-ai/ui-sdk-types';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface UseProductAnalyticsOptions {\n client: SeekoraClient;\n product: ProductItem;\n position?: number;\n section?: string;\n tabId?: string;\n query?: string;\n context?: SearchContext | Partial<SearchContext>;\n enabled?: boolean;\n}\n\nexport interface UseProductAnalyticsReturn {\n /** Spread onto any clickable element to track product click */\n clickProps: {\n onClick: (e?: React.MouseEvent) => void;\n 'data-seekora-product-id': string;\n 'data-seekora-position': number;\n };\n /** Spread onto any element to track variant selection */\n variantSelectProps: (optionName: string, value: string) => {\n onClick: (e?: React.MouseEvent) => void;\n 'data-seekora-variant-option': string;\n 'data-seekora-variant-value': string;\n };\n /** Spread onto any element to track add-to-cart */\n addToCartProps: (variant?: ProductVariant) => {\n onClick: (e?: React.MouseEvent) => void;\n 'data-seekora-action': 'add-to-cart';\n };\n /** Spread onto any element to track impression (uses IntersectionObserver) */\n impressionRef: React.RefCallback<HTMLElement>;\n /** Imperative: track product click */\n trackClick: () => void;\n /** Imperative: track variant select */\n trackVariantSelect: (optionName: string, value: string) => void;\n /** Imperative: track add to cart */\n trackAddToCart: (variant?: ProductVariant) => void;\n /** Imperative: track custom event with product context */\n trackCustomEvent: (eventName: string, metadata?: Record<string, any>) => void;\n}\n\nexport function useProductAnalytics({\n client,\n product,\n position = 0,\n section,\n tabId,\n query,\n context,\n enabled = true,\n}: UseProductAnalyticsOptions): UseProductAnalyticsReturn {\n const impressionTrackedRef = useRef(false);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const elementRef = useRef<HTMLElement | null>(null);\n\n const productId = product.id || product.objectID || '';\n\n const sendEvent = useCallback(\n async (eventName: string, metadata: Record<string, any>) => {\n if (!enabled || !client) return;\n try {\n await client.trackEvent?.({\n event_name: eventName,\n metadata: {\n product_id: productId,\n product_title: product.title || product.name,\n product_price: product.price,\n position,\n section,\n tab_id: tabId,\n original_query: query,\n timestamp: Date.now(),\n source: 'product_analytics',\n ...metadata,\n },\n }, context);\n log.verbose(`ProductAnalytics: ${eventName}`, metadata);\n } catch (error) {\n log.warn(`Failed to track ${eventName}`, { error });\n }\n },\n [client, enabled, productId, product, position, section, tabId, query, context]\n );\n\n const trackClick = useCallback(() => {\n sendEvent('product.click', {});\n // Also fire via client.trackClick for V3 compat\n if (client?.trackClick) {\n Promise.resolve(client.trackClick(productId, position + 1, context as SearchContext)).catch(() => {});\n }\n }, [sendEvent, client, productId, position, context]);\n\n const trackVariantSelect = useCallback(\n (optionName: string, value: string) => {\n sendEvent('product.variant_select', {\n option_name: optionName,\n option_value: value,\n });\n },\n [sendEvent]\n );\n\n const trackAddToCart = useCallback(\n (variant?: ProductVariant) => {\n sendEvent('product.add_to_cart', {\n variant_id: variant?.id,\n variant_sku: variant?.sku,\n variant_title: variant?.title,\n variant_price: variant?.price,\n });\n },\n [sendEvent]\n );\n\n const trackCustomEvent = useCallback(\n (eventName: string, metadata?: Record<string, any>) => {\n sendEvent(eventName, metadata ?? {});\n },\n [sendEvent]\n );\n\n // Impression tracking via IntersectionObserver\n const impressionRef = useCallback(\n (node: HTMLElement | null) => {\n // Cleanup previous observer\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n elementRef.current = node;\n\n if (!node || !enabled || impressionTrackedRef.current) return;\n\n if (typeof IntersectionObserver === 'undefined') return;\n\n observerRef.current = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !impressionTrackedRef.current) {\n impressionTrackedRef.current = true;\n sendEvent('product.impression', {});\n observerRef.current?.disconnect();\n }\n }\n },\n { threshold: 0.5 }\n );\n observerRef.current.observe(node);\n },\n [enabled, sendEvent]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n observerRef.current?.disconnect();\n };\n }, []);\n\n const clickProps = {\n onClick: () => trackClick(),\n 'data-seekora-product-id': productId,\n 'data-seekora-position': position,\n } as const;\n\n const variantSelectProps = (optionName: string, value: string) => ({\n onClick: () => trackVariantSelect(optionName, value),\n 'data-seekora-variant-option': optionName,\n 'data-seekora-variant-value': value,\n });\n\n const addToCartProps = (variant?: ProductVariant) => ({\n onClick: () => trackAddToCart(variant),\n 'data-seekora-action': 'add-to-cart' as const,\n });\n\n return {\n clickProps,\n variantSelectProps,\n addToCartProps,\n impressionRef,\n trackClick,\n trackVariantSelect,\n trackAddToCart,\n trackCustomEvent,\n };\n}\n","/**\n * Dark Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const darkTheme: Theme = {\n colors: {\n primary: '#0d6efd',\n secondary: '#6c757d',\n background: '#1a1a1a',\n text: '#ffffff',\n border: '#333333',\n hover: '#2a2a2a',\n focus: '#0d6efd',\n error: '#dc3545',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: '0.25rem',\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.7)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.6), 0 3px 6px rgba(0, 0, 0, 0.8)',\n large: '0 10px 20px rgba(0, 0, 0, 0.7), 0 6px 6px rgba(0, 0, 0, 0.9)',\n },\n};\n\n\n","/**\n * Minimal Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const minimalTheme: Theme = {\n colors: {\n primary: '#000000',\n secondary: '#666666',\n background: '#ffffff',\n text: '#000000',\n border: '#e0e0e0',\n hover: '#f5f5f5',\n focus: '#000000',\n error: '#cc0000',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.125rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '0.75rem',\n large: '1rem',\n },\n borderRadius: '0',\n shadows: {\n small: 'none',\n medium: 'none',\n large: 'none',\n },\n};\n\n\n","/**\n * Query Suggestions Theme System\n * \n * Provides comprehensive theming for query suggestions components including:\n * - CSS variables for easy customization\n * - Pre-built theme presets (light, dark, minimal, branded)\n * - Component-specific style generators\n * - Responsive utilities\n */\n\nimport type { Theme, ThemeConfig } from './types';\n\n// ============================================================================\n// CSS Variable Definitions\n// ============================================================================\n\nexport interface SuggestionsThemeVariables {\n // Colors\n '--seekora-bg-surface': string;\n '--seekora-bg-secondary': string;\n '--seekora-bg-tertiary': string;\n '--seekora-bg-hover': string;\n '--seekora-text-primary': string;\n '--seekora-text-secondary': string;\n '--seekora-text-tertiary': string;\n '--seekora-border-color': string;\n '--seekora-primary': string;\n '--seekora-primary-light': string;\n '--seekora-primary-dark': string;\n '--seekora-highlight-bg': string;\n '--seekora-success': string;\n '--seekora-warning': string;\n '--seekora-error': string;\n \n // Typography\n '--seekora-font-family': string;\n '--seekora-font-size-xs': string;\n '--seekora-font-size-sm': string;\n '--seekora-font-size-base': string;\n '--seekora-font-size-lg': string;\n '--seekora-font-weight-normal': string;\n '--seekora-font-weight-medium': string;\n '--seekora-font-weight-semibold': string;\n '--seekora-font-weight-bold': string;\n '--seekora-line-height-tight': string;\n '--seekora-line-height-normal': string;\n '--seekora-line-height-relaxed': string;\n \n // Spacing\n '--seekora-spacing-xs': string;\n '--seekora-spacing-sm': string;\n '--seekora-spacing-md': string;\n '--seekora-spacing-lg': string;\n '--seekora-spacing-xl': string;\n \n // Border radius\n '--seekora-border-radius-sm': string;\n '--seekora-border-radius': string;\n '--seekora-border-radius-lg': string;\n '--seekora-border-radius-xl': string;\n '--seekora-border-radius-full': string;\n \n // Shadows\n '--seekora-shadow-sm': string;\n '--seekora-shadow': string;\n '--seekora-shadow-md': string;\n '--seekora-shadow-lg': string;\n '--seekora-shadow-xl': string;\n \n // Transitions\n '--seekora-transition-fast': string;\n '--seekora-transition-normal': string;\n '--seekora-transition-slow': string;\n \n // Z-index\n '--seekora-z-dropdown': string;\n '--seekora-z-modal': string;\n '--seekora-z-tooltip': string;\n}\n\n// ============================================================================\n// Theme Presets\n// ============================================================================\n\nexport const lightThemeVariables: SuggestionsThemeVariables = {\n // Colors\n '--seekora-bg-surface': '#ffffff',\n '--seekora-bg-secondary': '#f9fafb',\n '--seekora-bg-tertiary': '#f3f4f6',\n '--seekora-bg-hover': '#f3f4f6',\n '--seekora-text-primary': '#111827',\n '--seekora-text-secondary': '#6b7280',\n '--seekora-text-tertiary': '#9ca3af',\n '--seekora-border-color': '#e5e7eb',\n '--seekora-primary': '#3b82f6',\n '--seekora-primary-light': '#eff6ff',\n '--seekora-primary-dark': '#1d4ed8',\n '--seekora-highlight-bg': '#fef3c7',\n '--seekora-success': '#10b981',\n '--seekora-warning': '#f59e0b',\n '--seekora-error': '#ef4444',\n \n // Typography\n '--seekora-font-family': '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n '--seekora-font-size-xs': '11px',\n '--seekora-font-size-sm': '12px',\n '--seekora-font-size-base': '14px',\n '--seekora-font-size-lg': '16px',\n '--seekora-font-weight-normal': '400',\n '--seekora-font-weight-medium': '500',\n '--seekora-font-weight-semibold': '600',\n '--seekora-font-weight-bold': '700',\n '--seekora-line-height-tight': '1.25',\n '--seekora-line-height-normal': '1.5',\n '--seekora-line-height-relaxed': '1.75',\n \n // Spacing\n '--seekora-spacing-xs': '4px',\n '--seekora-spacing-sm': '8px',\n '--seekora-spacing-md': '12px',\n '--seekora-spacing-lg': '16px',\n '--seekora-spacing-xl': '24px',\n \n // Border radius\n '--seekora-border-radius-sm': '4px',\n '--seekora-border-radius': '6px',\n '--seekora-border-radius-lg': '8px',\n '--seekora-border-radius-xl': '12px',\n '--seekora-border-radius-full': '9999px',\n \n // Shadows\n '--seekora-shadow-sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n '--seekora-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n '--seekora-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n '--seekora-shadow-lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n '--seekora-shadow-xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n \n // Transitions\n '--seekora-transition-fast': '100ms ease',\n '--seekora-transition-normal': '150ms ease',\n '--seekora-transition-slow': '300ms ease',\n \n // Z-index\n '--seekora-z-dropdown': '1000',\n '--seekora-z-modal': '1100',\n '--seekora-z-tooltip': '1200',\n};\n\nexport const darkThemeVariables: SuggestionsThemeVariables = {\n ...lightThemeVariables,\n // Override colors for dark mode\n '--seekora-bg-surface': '#1f2937',\n '--seekora-bg-secondary': '#111827',\n '--seekora-bg-tertiary': '#374151',\n '--seekora-bg-hover': '#374151',\n '--seekora-text-primary': '#f9fafb',\n '--seekora-text-secondary': '#d1d5db',\n '--seekora-text-tertiary': '#9ca3af',\n '--seekora-border-color': '#4b5563',\n '--seekora-primary': '#60a5fa',\n '--seekora-primary-light': '#1e3a5f',\n '--seekora-primary-dark': '#93c5fd',\n '--seekora-highlight-bg': '#854d0e',\n // Shadows for dark mode\n '--seekora-shadow-sm': '0 1px 2px 0 rgba(0, 0, 0, 0.3)',\n '--seekora-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.4), 0 1px 2px 0 rgba(0, 0, 0, 0.3)',\n '--seekora-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3)',\n '--seekora-shadow-lg': '0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.3)',\n '--seekora-shadow-xl': '0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4)',\n};\n\nexport const minimalThemeVariables: SuggestionsThemeVariables = {\n ...lightThemeVariables,\n // Minimal styling overrides\n '--seekora-border-color': '#f3f4f6',\n '--seekora-shadow-sm': 'none',\n '--seekora-shadow': '0 1px 2px 0 rgba(0, 0, 0, 0.03)',\n '--seekora-shadow-md': '0 2px 4px 0 rgba(0, 0, 0, 0.05)',\n '--seekora-shadow-lg': '0 4px 8px 0 rgba(0, 0, 0, 0.08)',\n '--seekora-shadow-xl': '0 8px 16px 0 rgba(0, 0, 0, 0.1)',\n '--seekora-border-radius-sm': '2px',\n '--seekora-border-radius': '4px',\n '--seekora-border-radius-lg': '6px',\n '--seekora-border-radius-xl': '8px',\n};\n\n// Brand color presets\nexport const brandPresets = {\n blue: {\n '--seekora-primary': '#3b82f6',\n '--seekora-primary-light': '#eff6ff',\n '--seekora-primary-dark': '#1d4ed8',\n },\n green: {\n '--seekora-primary': '#10b981',\n '--seekora-primary-light': '#ecfdf5',\n '--seekora-primary-dark': '#059669',\n },\n purple: {\n '--seekora-primary': '#8b5cf6',\n '--seekora-primary-light': '#f5f3ff',\n '--seekora-primary-dark': '#7c3aed',\n },\n red: {\n '--seekora-primary': '#ef4444',\n '--seekora-primary-light': '#fef2f2',\n '--seekora-primary-dark': '#dc2626',\n },\n orange: {\n '--seekora-primary': '#f97316',\n '--seekora-primary-light': '#fff7ed',\n '--seekora-primary-dark': '#ea580c',\n },\n teal: {\n '--seekora-primary': '#14b8a6',\n '--seekora-primary-light': '#f0fdfa',\n '--seekora-primary-dark': '#0d9488',\n },\n pink: {\n '--seekora-primary': '#ec4899',\n '--seekora-primary-light': '#fdf2f8',\n '--seekora-primary-dark': '#db2777',\n },\n};\n\n// ============================================================================\n// CSS Generation Utilities\n// ============================================================================\n\n/**\n * Generate CSS variables string from theme variables object\n */\nexport function generateCSSVariables(variables: Partial<SuggestionsThemeVariables>): string {\n return Object.entries(variables)\n .map(([key, value]) => `${key}: ${value};`)\n .join('\\n');\n}\n\n/**\n * Generate a style tag with CSS variables for a specific scope\n */\nexport function generateThemeStyleTag(\n variables: Partial<SuggestionsThemeVariables>,\n scope: string = ':root'\n): string {\n return `\n ${scope} {\n ${generateCSSVariables(variables)}\n }\n `;\n}\n\n/**\n * Create a complete theme object from variables\n */\nexport function createSuggestionsTheme(\n baseTheme: 'light' | 'dark' | 'minimal' = 'light',\n overrides: Partial<SuggestionsThemeVariables> = {},\n brandColor?: keyof typeof brandPresets\n): SuggestionsThemeVariables {\n const baseVariables = {\n light: lightThemeVariables,\n dark: darkThemeVariables,\n minimal: minimalThemeVariables,\n }[baseTheme];\n\n const brandOverrides = brandColor ? brandPresets[brandColor] : {};\n\n return {\n ...baseVariables,\n ...brandOverrides,\n ...overrides,\n };\n}\n\n// ============================================================================\n// Component Style Generators\n// ============================================================================\n\n/**\n * Generate styles for dropdown container\n */\nexport function getDropdownContainerStyles(theme: SuggestionsThemeVariables) {\n return {\n backgroundColor: `var(--seekora-bg-surface, ${theme['--seekora-bg-surface']})`,\n border: `1px solid var(--seekora-border-color, ${theme['--seekora-border-color']})`,\n borderRadius: `var(--seekora-border-radius-lg, ${theme['--seekora-border-radius-lg']})`,\n boxShadow: `var(--seekora-shadow-xl, ${theme['--seekora-shadow-xl']})`,\n fontFamily: `var(--seekora-font-family, ${theme['--seekora-font-family']})`,\n fontSize: `var(--seekora-font-size-base, ${theme['--seekora-font-size-base']})`,\n color: `var(--seekora-text-primary, ${theme['--seekora-text-primary']})`,\n };\n}\n\n/**\n * Generate styles for suggestion item\n */\nexport function getSuggestionItemStyles(\n theme: SuggestionsThemeVariables,\n isActive: boolean = false\n) {\n return {\n padding: `var(--seekora-spacing-md, ${theme['--seekora-spacing-md']}) var(--seekora-spacing-lg, ${theme['--seekora-spacing-lg']})`,\n cursor: 'pointer',\n transition: `background-color var(--seekora-transition-fast, ${theme['--seekora-transition-fast']})`,\n backgroundColor: isActive\n ? `var(--seekora-bg-hover, ${theme['--seekora-bg-hover']})`\n : 'transparent',\n };\n}\n\n/**\n * Generate styles for product card\n */\nexport function getProductCardStyles(\n theme: SuggestionsThemeVariables,\n isHovered: boolean = false\n) {\n return {\n backgroundColor: `var(--seekora-bg-surface, ${theme['--seekora-bg-surface']})`,\n borderRadius: `var(--seekora-border-radius-lg, ${theme['--seekora-border-radius-lg']})`,\n border: `1px solid var(--seekora-border-color, ${theme['--seekora-border-color']})`,\n overflow: 'hidden',\n cursor: 'pointer',\n transition: `transform var(--seekora-transition-normal, ${theme['--seekora-transition-normal']}), box-shadow var(--seekora-transition-normal, ${theme['--seekora-transition-normal']})`,\n transform: isHovered ? 'translateY(-2px)' : 'none',\n boxShadow: isHovered\n ? `var(--seekora-shadow-md, ${theme['--seekora-shadow-md']})`\n : 'none',\n };\n}\n\n/**\n * Generate styles for highlight/mark\n */\nexport function getHighlightStyles(theme: SuggestionsThemeVariables) {\n return {\n backgroundColor: `var(--seekora-highlight-bg, ${theme['--seekora-highlight-bg']})`,\n fontWeight: `var(--seekora-font-weight-semibold, ${theme['--seekora-font-weight-semibold']})`,\n padding: '0 2px',\n borderRadius: '2px',\n };\n}\n\n// ============================================================================\n// CSS Classes Generator\n// ============================================================================\n\n/**\n * Generate complete CSS stylesheet for suggestions components\n */\nexport function generateSuggestionsStylesheet(theme: SuggestionsThemeVariables = lightThemeVariables): string {\n return `\n /* Seekora Query Suggestions Styles */\n .seekora-suggestions {\n ${generateCSSVariables(theme)}\n }\n\n /* Container */\n .seekora-suggestions-container {\n background-color: var(--seekora-bg-surface);\n border: 1px solid var(--seekora-border-color);\n border-radius: var(--seekora-border-radius-lg);\n box-shadow: var(--seekora-shadow-xl);\n font-family: var(--seekora-font-family);\n font-size: var(--seekora-font-size-base);\n color: var(--seekora-text-primary);\n overflow: hidden;\n }\n\n /* Section */\n .seekora-suggestions-section {\n padding: var(--seekora-spacing-sm) 0;\n }\n\n .seekora-suggestions-section-title {\n font-size: var(--seekora-font-size-xs);\n font-weight: var(--seekora-font-weight-bold);\n color: var(--seekora-text-tertiary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: var(--seekora-spacing-sm) var(--seekora-spacing-lg) var(--seekora-spacing-xs);\n margin: 0;\n }\n\n /* Item */\n .seekora-suggestions-item {\n display: flex;\n align-items: center;\n gap: var(--seekora-spacing-md);\n padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);\n cursor: pointer;\n transition: background-color var(--seekora-transition-fast);\n }\n\n .seekora-suggestions-item:hover,\n .seekora-suggestions-item--active {\n background-color: var(--seekora-bg-hover);\n }\n\n .seekora-suggestions-item-icon {\n width: 16px;\n height: 16px;\n color: var(--seekora-text-secondary);\n flex-shrink: 0;\n }\n\n .seekora-suggestions-item-text {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .seekora-suggestions-item-count {\n font-size: var(--seekora-font-size-sm);\n color: var(--seekora-text-tertiary);\n }\n\n /* Highlight */\n .seekora-suggestions mark,\n .seekora-suggestions-highlight {\n background-color: var(--seekora-highlight-bg);\n font-weight: var(--seekora-font-weight-semibold);\n padding: 0 2px;\n border-radius: 2px;\n }\n\n /* Product Card */\n .seekora-product-card {\n background-color: var(--seekora-bg-surface);\n border: 1px solid var(--seekora-border-color);\n border-radius: var(--seekora-border-radius-lg);\n overflow: hidden;\n cursor: pointer;\n transition: transform var(--seekora-transition-normal), box-shadow var(--seekora-transition-normal);\n }\n\n .seekora-product-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--seekora-shadow-md);\n }\n\n .seekora-product-card-image {\n width: 100%;\n aspect-ratio: 1;\n object-fit: cover;\n background-color: var(--seekora-bg-secondary);\n }\n\n .seekora-product-card-info {\n padding: var(--seekora-spacing-md);\n }\n\n .seekora-product-card-title {\n font-size: var(--seekora-font-size-sm);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n\n .seekora-product-card-price {\n font-size: var(--seekora-font-size-base);\n font-weight: var(--seekora-font-weight-bold);\n color: var(--seekora-primary);\n margin-top: var(--seekora-spacing-xs);\n }\n\n /* Tabs */\n .seekora-suggestions-tabs {\n display: flex;\n gap: var(--seekora-spacing-xs);\n padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);\n border-bottom: 1px solid var(--seekora-border-color);\n overflow-x: auto;\n }\n\n .seekora-suggestions-tab {\n display: inline-flex;\n align-items: center;\n gap: var(--seekora-spacing-sm);\n padding: var(--seekora-spacing-sm) var(--seekora-spacing-md);\n font-size: var(--seekora-font-size-sm);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-secondary);\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: var(--seekora-border-radius-full);\n cursor: pointer;\n white-space: nowrap;\n transition: all var(--seekora-transition-fast);\n }\n\n .seekora-suggestions-tab:hover {\n background-color: var(--seekora-bg-hover);\n }\n\n .seekora-suggestions-tab--active {\n color: var(--seekora-primary);\n background-color: var(--seekora-primary-light);\n border-color: var(--seekora-primary);\n }\n\n /* Brand chip */\n .seekora-brand-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--seekora-spacing-sm);\n padding: var(--seekora-spacing-sm) var(--seekora-spacing-md);\n font-size: var(--seekora-font-size-sm);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-primary);\n background-color: var(--seekora-bg-surface);\n border: 1px solid var(--seekora-border-color);\n border-radius: var(--seekora-border-radius-lg);\n cursor: pointer;\n transition: all var(--seekora-transition-fast);\n }\n\n .seekora-brand-chip:hover {\n border-color: var(--seekora-primary);\n background-color: var(--seekora-primary-light);\n }\n\n /* Category pill */\n .seekora-category-pill {\n display: inline-flex;\n align-items: center;\n gap: var(--seekora-spacing-xs);\n padding: 3px var(--seekora-spacing-sm);\n font-size: var(--seekora-font-size-xs);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-secondary);\n background-color: var(--seekora-bg-tertiary);\n border-radius: var(--seekora-border-radius-full);\n cursor: pointer;\n transition: all var(--seekora-transition-fast);\n }\n\n .seekora-category-pill:hover {\n background-color: var(--seekora-primary-light);\n color: var(--seekora-primary);\n }\n\n /* Loading */\n .seekora-suggestions-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--seekora-spacing-xl);\n color: var(--seekora-text-secondary);\n }\n\n /* Empty state */\n .seekora-suggestions-empty {\n padding: var(--seekora-spacing-xl);\n text-align: center;\n color: var(--seekora-text-secondary);\n }\n\n /* Footer */\n .seekora-suggestions-footer {\n padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);\n border-top: 1px solid var(--seekora-border-color);\n background-color: var(--seekora-bg-secondary);\n font-size: var(--seekora-font-size-sm);\n color: var(--seekora-text-secondary);\n }\n\n /* Keyboard hint */\n .seekora-keyboard-key {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 18px;\n padding: 0 4px;\n border-radius: 3px;\n background-color: var(--seekora-bg-secondary);\n border: 1px solid var(--seekora-border-color);\n font-size: 10px;\n font-weight: var(--seekora-font-weight-medium);\n }\n\n /* Animations */\n @keyframes seekora-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n @keyframes seekora-fade-in {\n from { opacity: 0; transform: translateY(-8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n @keyframes seekora-fade-out {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-8px); }\n }\n\n .seekora-suggestions--entering {\n animation: seekora-fade-in var(--seekora-transition-normal) ease-out;\n }\n\n .seekora-suggestions--exiting {\n animation: seekora-fade-out var(--seekora-transition-normal) ease-in;\n }\n `;\n}\n\n// ============================================================================\n// React Style Injection Hook\n// ============================================================================\n\nlet stylesInjected = false;\n\n/**\n * Inject suggestions styles into the document\n */\nexport function injectSuggestionsStyles(\n theme: SuggestionsThemeVariables = lightThemeVariables,\n force: boolean = false\n): void {\n if (typeof document === 'undefined') return;\n if (stylesInjected && !force) return;\n\n const styleId = 'seekora-suggestions-styles';\n let styleElement = document.getElementById(styleId) as HTMLStyleElement | null;\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n styleElement.type = 'text/css';\n document.head.appendChild(styleElement);\n }\n\n styleElement.textContent = generateSuggestionsStylesheet(theme);\n stylesInjected = true;\n}\n\n/**\n * Update injected styles with new theme\n */\nexport function updateSuggestionsStyles(theme: SuggestionsThemeVariables): void {\n injectSuggestionsStyles(theme, true);\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport type { Theme, ThemeConfig };\n\nexport default {\n lightThemeVariables,\n darkThemeVariables,\n minimalThemeVariables,\n brandPresets,\n createSuggestionsTheme,\n generateSuggestionsStylesheet,\n injectSuggestionsStyles,\n updateSuggestionsStyles,\n};\n"],"names":["createTheme","getNestedValue","createThemeCore","createContext","useMemo","useEffect","useContext","useState","useCallback","useRef","Z_INDEX","formatPrice","useId","SHADOWS","ChevronIcon","createPortal","TRANSITIONS","Highlight","BORDER_RADIUS","defaultStyles","SearchIcon","ClockIcon","CloseIcon","forwardRef","useImperativeHandle","styles","TrendingIcon","ClearIcon","SPACING","cardStyle","imgStyle","createElement","generateCSSVariables","COLOR_NAMES","isColorOption","resolveColor","getAvailability","itemStyle","stylesInjected","createStyles","ArrowIcon","useReducer","useSeekoraSearch","SeekoraClient"],"mappings":"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","x_google_ignoreList":[6]}
|