@seekora-ai/ui-sdk-react 0.2.15 → 0.2.16
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/FacetDropdown.d.ts +2 -0
- package/dist/components/FacetDropdown.d.ts.map +1 -1
- package/dist/components/FacetDropdown.js +47 -25
- package/dist/components/Facets.d.ts +4 -0
- package/dist/components/Facets.d.ts.map +1 -1
- package/dist/components/Facets.js +21 -2
- package/dist/components/InfiniteHits.d.ts +0 -7
- package/dist/components/InfiniteHits.d.ts.map +1 -1
- package/dist/components/InfiniteHits.js +2 -13
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination.js +27 -9
- package/dist/components/QuerySuggestions.d.ts +0 -4
- package/dist/components/QuerySuggestions.d.ts.map +1 -1
- package/dist/components/QuerySuggestions.js +1 -17
- package/dist/components/QuerySuggestionsDropdown.d.ts +0 -4
- package/dist/components/QuerySuggestionsDropdown.d.ts.map +1 -1
- package/dist/components/QuerySuggestionsDropdown.js +1 -16
- package/dist/components/Recommendations.d.ts +0 -7
- package/dist/components/Recommendations.d.ts.map +1 -1
- package/dist/components/Recommendations.js +3 -23
- package/dist/components/RichQuerySuggestions.d.ts +0 -4
- package/dist/components/RichQuerySuggestions.d.ts.map +1 -1
- package/dist/components/RichQuerySuggestions.js +1 -10
- package/dist/components/SearchBar.d.ts +0 -4
- package/dist/components/SearchBar.d.ts.map +1 -1
- package/dist/components/SearchBar.js +2 -4
- package/dist/components/SearchBarWithSuggestions.js +1 -1
- package/dist/components/SearchLayout.d.ts.map +1 -1
- package/dist/components/SearchLayout.js +13 -17
- package/dist/components/SearchProvider.d.ts.map +1 -1
- package/dist/components/SearchProvider.js +1 -3
- package/dist/components/SearchResults.d.ts +0 -6
- package/dist/components/SearchResults.d.ts.map +1 -1
- package/dist/components/SearchResults.js +1 -14
- package/dist/components/primitives/ImageDisplay.d.ts.map +1 -1
- package/dist/components/primitives/ImageDisplay.js +24 -14
- package/dist/components/primitives/ImageZoom.d.ts.map +1 -1
- package/dist/components/primitives/ImageZoom.js +59 -4
- package/dist/components/primitives/VariantSwatches.d.ts.map +1 -1
- package/dist/components/primitives/VariantSwatches.js +25 -10
- package/dist/components/section-primitives/SectionItemGrid.d.ts +1 -3
- package/dist/components/section-primitives/SectionItemGrid.d.ts.map +1 -1
- package/dist/components/section-primitives/SectionItemGrid.js +1 -4
- package/dist/components/section-primitives/index.d.ts +0 -1
- package/dist/components/section-primitives/index.d.ts.map +1 -1
- package/dist/components/section-primitives/index.js +0 -1
- package/dist/components/suggestions/AmazonDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/AmazonDropdown.js +3 -21
- package/dist/components/suggestions/GoogleDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/GoogleDropdown.js +3 -20
- package/dist/components/suggestions/MinimalDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/MinimalDropdown.js +2 -2
- package/dist/components/suggestions/MobileSheetDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/MobileSheetDropdown.js +60 -60
- package/dist/components/suggestions/PinterestDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/PinterestDropdown.js +41 -41
- package/dist/components/suggestions/ShopifyDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/ShopifyDropdown.js +3 -4
- package/dist/components/suggestions/SpotlightDropdown.d.ts.map +1 -1
- package/dist/components/suggestions/SpotlightDropdown.js +2 -3
- package/dist/components/suggestions/SuggestionSearchBar.d.ts.map +1 -1
- package/dist/components/suggestions/SuggestionSearchBar.js +2 -15
- package/dist/components/suggestions/types.d.ts +0 -6
- package/dist/components/suggestions/types.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ItemCard.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ItemCard.js +32 -8
- package/dist/components/suggestions-primitives/ItemGrid.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ItemGrid.js +9 -2
- package/dist/components/suggestions-primitives/ProductCard.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ProductCard.js +14 -5
- package/dist/components/suggestions-primitives/ProductCardLayouts.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ProductCardLayouts.js +32 -12
- package/dist/components/suggestions-primitives/ProductGrid.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ProductGrid.js +8 -3
- package/dist/components/suggestions-primitives/RecentSearchesList.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/RecentSearchesList.js +12 -5
- package/dist/components/suggestions-primitives/SearchInput.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/SearchInput.js +1 -1
- package/dist/components/suggestions-primitives/SuggestionItem.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/SuggestionItem.js +5 -3
- package/dist/components/suggestions-primitives/SuggestionList.d.ts +1 -8
- package/dist/components/suggestions-primitives/SuggestionList.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/SuggestionList.js +1 -7
- package/dist/components/suggestions-primitives/TrendingList.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/TrendingList.js +14 -7
- package/dist/components/suggestions-primitives/index.d.ts +1 -3
- package/dist/components/suggestions-primitives/index.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/index.js +1 -2
- package/dist/docsearch/components/DocSearch.d.ts.map +1 -1
- package/dist/docsearch/components/DocSearch.js +1 -1
- package/dist/docsearch/components/Results.d.ts +1 -3
- package/dist/docsearch/components/Results.d.ts.map +1 -1
- package/dist/docsearch/components/Results.js +1 -9
- package/dist/docsearch/components/SearchBox.d.ts +1 -2
- package/dist/docsearch/components/SearchBox.d.ts.map +1 -1
- package/dist/docsearch/components/SearchBox.js +4 -6
- package/dist/docsearch/hooks/useSeekoraSearch.d.ts.map +1 -1
- package/dist/docsearch/hooks/useSeekoraSearch.js +6 -0
- package/dist/docsearch/types.d.ts +0 -1
- package/dist/docsearch/types.d.ts.map +1 -1
- package/dist/docsearch.css +2 -5
- package/dist/hooks/useClickTracking.d.ts.map +1 -1
- package/dist/hooks/useClickTracking.js +4 -11
- package/dist/hooks/useExperiment.d.ts.map +1 -1
- package/dist/hooks/useExperiment.js +10 -33
- package/dist/hooks/useFilters.d.ts +27 -0
- package/dist/hooks/useFilters.d.ts.map +1 -0
- package/dist/hooks/useFilters.js +66 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.umd.js +1 -1
- package/dist/src/index.d.ts +39 -79
- package/dist/src/index.esm.js +800 -452
- package/dist/src/index.esm.js.map +1 -1
- package/dist/src/index.js +800 -453
- package/dist/src/index.js.map +1 -1
- package/dist/utils/responsive.d.ts +130 -0
- package/dist/utils/responsive.d.ts.map +1 -0
- package/dist/utils/responsive.js +231 -0
- package/package.json +5 -5
- package/src/docsearch/docsearch.css +2 -5
|
@@ -87,6 +87,8 @@ export interface FacetDropdownProps {
|
|
|
87
87
|
navigateOnSelect?: boolean;
|
|
88
88
|
/** Base URL for navigation (e.g., "/search") */
|
|
89
89
|
searchPageUrl?: string;
|
|
90
|
+
/** Use dedicated Filters API instead of search API for fetching facet values */
|
|
91
|
+
useFiltersApi?: boolean;
|
|
90
92
|
}
|
|
91
93
|
export declare const FacetDropdown: React.FC<FacetDropdownProps>;
|
|
92
94
|
//# sourceMappingURL=FacetDropdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FacetDropdown.d.ts","sourceRoot":"","sources":["../../src/components/FacetDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAe5D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,sDAAsD;IACtD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FacetDropdown.d.ts","sourceRoot":"","sources":["../../src/components/FacetDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAe5D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,sDAAsD;IACtD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAmctD,CAAC"}
|
|
@@ -60,8 +60,8 @@ const Z_INDEX = {
|
|
|
60
60
|
// ---------------------------------------------------------------------------
|
|
61
61
|
// Component
|
|
62
62
|
// ---------------------------------------------------------------------------
|
|
63
|
-
export const FacetDropdown = ({ field, placeholder = 'All Categories', className, theme: customTheme = {}, onChange, value: controlledValue, maxOptions = 10, showCounts = true, options: providedOptions, client: providedClient, applyFilter = true, navigateOnSelect = false, searchPageUrl = '/search', }) => {
|
|
64
|
-
const { client: contextClient, theme } = useSearchContext();
|
|
63
|
+
export const FacetDropdown = ({ field, placeholder = 'All Categories', className, theme: customTheme = {}, onChange, value: controlledValue, maxOptions = 10, showCounts = true, options: providedOptions, client: providedClient, applyFilter = true, navigateOnSelect = false, searchPageUrl = '/search', useFiltersApi = false, }) => {
|
|
64
|
+
const { client: contextClient, theme, stateManager } = useSearchContext();
|
|
65
65
|
const { addRefinement, removeRefinement, refinements, search } = useSearchState();
|
|
66
66
|
const client = providedClient || contextClient;
|
|
67
67
|
const [open, setOpen] = useState(false);
|
|
@@ -79,30 +79,52 @@ export const FacetDropdown = ({ field, placeholder = 'All Categories', className
|
|
|
79
79
|
if (providedOptions || !client)
|
|
80
80
|
return;
|
|
81
81
|
try {
|
|
82
|
-
log.verbose('FacetDropdown: Fetching facet values', { field });
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
count:
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
82
|
+
log.verbose('FacetDropdown: Fetching facet values', { field, useFiltersApi });
|
|
83
|
+
if (useFiltersApi) {
|
|
84
|
+
// Use dedicated Filters API via state manager
|
|
85
|
+
const response = await stateManager.fetchFilters({
|
|
86
|
+
facetBy: field,
|
|
87
|
+
maxFacetValues: 100,
|
|
88
|
+
});
|
|
89
|
+
const targetFilter = (response?.filters || []).find((f) => f.field === field);
|
|
90
|
+
if (targetFilter && targetFilter.values) {
|
|
91
|
+
const options = targetFilter.values.map((v) => ({
|
|
92
|
+
value: v.value || '',
|
|
93
|
+
count: v.count || 0,
|
|
94
|
+
label: v.value || '',
|
|
95
|
+
}));
|
|
96
|
+
setFacetOptions(options);
|
|
97
|
+
log.verbose('FacetDropdown: Facet options loaded via Filters API', { field, count: options.length });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
log.verbose('FacetDropdown: No filter data found', { field });
|
|
101
|
+
setFacetOptions([]);
|
|
102
|
+
}
|
|
102
103
|
}
|
|
103
104
|
else {
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
// Fallback: use search API with per_page=0
|
|
106
|
+
const response = await client.search('*', {
|
|
107
|
+
facet_by: field,
|
|
108
|
+
max_facet_values: 100,
|
|
109
|
+
per_page: 0,
|
|
110
|
+
});
|
|
111
|
+
log.verbose('FacetDropdown: Search response', { response });
|
|
112
|
+
const facetsData = response?.data?.facets || response?.facets;
|
|
113
|
+
const facets = Array.isArray(facetsData) ? facetsData : [];
|
|
114
|
+
const targetFacet = facets.find((f) => f.field_name === field || f.field === field);
|
|
115
|
+
if (targetFacet && targetFacet.counts) {
|
|
116
|
+
const options = targetFacet.counts.map((count) => ({
|
|
117
|
+
value: count.value,
|
|
118
|
+
count: count.count,
|
|
119
|
+
label: count.value,
|
|
120
|
+
}));
|
|
121
|
+
setFacetOptions(options);
|
|
122
|
+
log.verbose('FacetDropdown: Facet options loaded', { field, count: options.length });
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
log.verbose('FacetDropdown: No facet data found', { field, facets });
|
|
126
|
+
setFacetOptions([]);
|
|
127
|
+
}
|
|
106
128
|
}
|
|
107
129
|
}
|
|
108
130
|
catch (error) {
|
|
@@ -113,7 +135,7 @@ export const FacetDropdown = ({ field, placeholder = 'All Categories', className
|
|
|
113
135
|
});
|
|
114
136
|
setFacetOptions([]);
|
|
115
137
|
}
|
|
116
|
-
}, [field, client, providedOptions]);
|
|
138
|
+
}, [field, client, providedOptions, useFiltersApi]);
|
|
117
139
|
useEffect(() => {
|
|
118
140
|
if (!providedOptions && client) {
|
|
119
141
|
fetchFacetValues();
|
|
@@ -103,6 +103,10 @@ export interface FacetsProps {
|
|
|
103
103
|
size?: FacetSize;
|
|
104
104
|
/** Pre-configured range button definitions for numeric facets */
|
|
105
105
|
facetRanges?: FacetRangeConfig[];
|
|
106
|
+
/** Use dedicated Filters API instead of extracting facets from search results */
|
|
107
|
+
useFiltersApi?: boolean;
|
|
108
|
+
/** Fields that should use disjunctive (OR) faceting (only with useFiltersApi) */
|
|
109
|
+
disjunctiveFacets?: string[];
|
|
106
110
|
}
|
|
107
111
|
export declare const Facets: React.FC<FacetsProps>;
|
|
108
112
|
//# sourceMappingURL=Facets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Facets.d.ts","sourceRoot":"","sources":["../../src/components/Facets.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAA4B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Facets.d.ts","sourceRoot":"","sources":["../../src/components/Facets.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import React, { useState, useMemo } from 'react';
|
|
8
8
|
import { useSearchContext } from './SearchProvider';
|
|
9
9
|
import { useSearchState } from '../hooks/useSearchState';
|
|
10
|
+
import { useFilters } from '../hooks/useFilters';
|
|
10
11
|
import { log } from '@seekora-ai/ui-sdk-core';
|
|
11
12
|
import { clsx } from 'clsx';
|
|
12
13
|
import { RangeSlider } from './RangeSlider';
|
|
@@ -65,10 +66,12 @@ const CSS_VAR_DEFAULTS = {
|
|
|
65
66
|
// ---------------------------------------------------------------------------
|
|
66
67
|
// Component
|
|
67
68
|
// ---------------------------------------------------------------------------
|
|
68
|
-
export const Facets = ({ results: resultsProp, facets: facetsProp, onFacetChange, renderFacet, renderFacetItem, maxItems = 10, showMore = true, className, style, theme: customTheme, variant = 'checkbox', searchable = false, showCounts = true, colorMap, defaultCollapsed = false, size = 'medium', facetRanges, }) => {
|
|
69
|
+
export const Facets = ({ results: resultsProp, facets: facetsProp, onFacetChange, renderFacet, renderFacetItem, maxItems = 10, showMore = true, className, style, theme: customTheme, variant = 'checkbox', searchable = false, showCounts = true, colorMap, defaultCollapsed = false, size = 'medium', facetRanges, useFiltersApi = false, disjunctiveFacets, }) => {
|
|
69
70
|
const { theme } = useSearchContext();
|
|
70
71
|
const { results: stateResults, refinements, addRefinement, removeRefinement } = useSearchState();
|
|
71
72
|
const facetsTheme = customTheme || {};
|
|
73
|
+
// Use dedicated Filters API when useFiltersApi is enabled
|
|
74
|
+
const { filters: filtersApiData, searchFacetValues } = useFilters(useFiltersApi ? { disjunctiveFacets } : { autoFetch: false });
|
|
72
75
|
// expandedFacets is used for "Show more/less" in checkbox/color-swatch variants
|
|
73
76
|
// AND for collapse/expand in collapsible variant.
|
|
74
77
|
const [expandedFacets, setExpandedFacets] = useState({});
|
|
@@ -76,11 +79,27 @@ export const Facets = ({ results: resultsProp, facets: facetsProp, onFacetChange
|
|
|
76
79
|
// Use results from prop if provided, otherwise from state manager
|
|
77
80
|
const results = resultsProp || stateResults;
|
|
78
81
|
// -------------------------------------------------------------------
|
|
79
|
-
// Extract facets from results
|
|
82
|
+
// Extract facets from results (or Filters API)
|
|
80
83
|
// -------------------------------------------------------------------
|
|
81
84
|
const extractFacets = () => {
|
|
82
85
|
if (facetsProp)
|
|
83
86
|
return facetsProp;
|
|
87
|
+
// When using Filters API, convert FilterField[] to Facet[]
|
|
88
|
+
if (useFiltersApi && filtersApiData.length > 0) {
|
|
89
|
+
log.verbose('Facets: Using Filters API data', { filterCount: filtersApiData.length });
|
|
90
|
+
return filtersApiData.map((filter) => ({
|
|
91
|
+
field: filter.field || '',
|
|
92
|
+
label: filter.field || '',
|
|
93
|
+
items: (filter.values || []).map((v) => ({
|
|
94
|
+
value: v.value || '',
|
|
95
|
+
count: v.count || 0,
|
|
96
|
+
selected: refinements.some(r => r.field === filter.field && r.value === v.value),
|
|
97
|
+
})),
|
|
98
|
+
stats: filter.stats?.min != null && filter.stats?.max != null
|
|
99
|
+
? { min: filter.stats.min, max: filter.stats.max, avg: filter.stats.avg, sum: filter.stats.sum }
|
|
100
|
+
: undefined,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
84
103
|
// Try to get facets from various locations in the response
|
|
85
104
|
// Primary location: data.facets (widget_mode response structure)
|
|
86
105
|
const rawFacets = results?.data?.facets
|
|
@@ -12,7 +12,6 @@ export interface InfiniteHitsTheme {
|
|
|
12
12
|
item?: string;
|
|
13
13
|
loadMore?: string;
|
|
14
14
|
loadMoreDisabled?: string;
|
|
15
|
-
loading?: string;
|
|
16
15
|
empty?: string;
|
|
17
16
|
sentinel?: string;
|
|
18
17
|
}
|
|
@@ -21,10 +20,6 @@ export interface InfiniteHitsProps {
|
|
|
21
20
|
renderHit?: (hit: ResultItem, index: number) => React.ReactNode;
|
|
22
21
|
/** Custom render for empty state */
|
|
23
22
|
renderEmpty?: () => React.ReactNode;
|
|
24
|
-
/** Show initial loading when fetching and no hits yet (default false: no loading screen) */
|
|
25
|
-
showInitialLoading?: boolean;
|
|
26
|
-
/** Custom render for loading state */
|
|
27
|
-
renderLoading?: () => React.ReactNode;
|
|
28
23
|
/** Custom render for "Show More" button */
|
|
29
24
|
renderShowMore?: (props: {
|
|
30
25
|
isLoading: boolean;
|
|
@@ -41,8 +36,6 @@ export interface InfiniteHitsProps {
|
|
|
41
36
|
fieldMapping?: FieldMapping;
|
|
42
37
|
/** Text for "Show More" button */
|
|
43
38
|
showMoreLabel?: string;
|
|
44
|
-
/** Text for loading state */
|
|
45
|
-
loadingLabel?: string;
|
|
46
39
|
/** Callback when a hit is clicked */
|
|
47
40
|
onHitClick?: (hit: ResultItem, index: number) => void;
|
|
48
41
|
/** Custom className */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfiniteHits.d.ts","sourceRoot":"","sources":["../../src/components/InfiniteHits.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAIjF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"InfiniteHits.d.ts","sourceRoot":"","sources":["../../src/components/InfiniteHits.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAIjF,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAChE,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACpC,2CAA2C;IAC3C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mBAAmB;IACnB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,8DAA8D;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4QpD,CAAC"}
|
|
@@ -8,7 +8,7 @@ import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'
|
|
|
8
8
|
import { useSearchContext } from './SearchProvider';
|
|
9
9
|
import { useSearchState } from '../hooks/useSearchState';
|
|
10
10
|
import { clsx } from 'clsx';
|
|
11
|
-
export const InfiniteHits = ({ renderHit, renderEmpty,
|
|
11
|
+
export const InfiniteHits = ({ renderHit, renderEmpty, renderShowMore, showMoreButton = true, useInfiniteScroll = false, scrollThreshold = 0.1, fieldMapping, showMoreLabel = 'Show more', onHitClick, className, style, theme: customTheme, syncWithState = true, }) => {
|
|
12
12
|
const { theme, stateManager } = useSearchContext();
|
|
13
13
|
const { results, loading, currentPage, setPage } = useSearchState();
|
|
14
14
|
const infiniteHitsTheme = customTheme || {};
|
|
@@ -140,12 +140,6 @@ export const InfiniteHits = ({ renderHit, renderEmpty, showInitialLoading = fals
|
|
|
140
140
|
textAlign: 'center',
|
|
141
141
|
color: theme.colors.textSecondary,
|
|
142
142
|
} }, "No results found"));
|
|
143
|
-
// Default loading state
|
|
144
|
-
const defaultRenderLoading = () => (React.createElement("div", { className: infiniteHitsTheme.loading, style: {
|
|
145
|
-
padding: theme.spacing.medium,
|
|
146
|
-
textAlign: 'center',
|
|
147
|
-
color: theme.colors.textSecondary,
|
|
148
|
-
} }, loadingLabel));
|
|
149
143
|
// Default "Show More" button
|
|
150
144
|
const defaultRenderShowMore = () => (React.createElement("button", { type: "button", onClick: handleShowMore, disabled: isLastPage || isLoadingMore, className: clsx(infiniteHitsTheme.loadMore, (isLastPage || isLoadingMore) && infiniteHitsTheme.loadMoreDisabled), style: {
|
|
151
145
|
display: 'block',
|
|
@@ -162,11 +156,7 @@ export const InfiniteHits = ({ renderHit, renderEmpty, showInitialLoading = fals
|
|
|
162
156
|
: theme.borderRadius.medium,
|
|
163
157
|
cursor: isLastPage || isLoadingMore ? 'not-allowed' : 'pointer',
|
|
164
158
|
transition: theme.transitions?.fast || '150ms ease-in-out',
|
|
165
|
-
} },
|
|
166
|
-
// Initial loading state (only when showInitialLoading: default no loading screen)
|
|
167
|
-
if (loading && accumulatedHits.length === 0 && showInitialLoading) {
|
|
168
|
-
return (React.createElement("div", { className: clsx(infiniteHitsTheme.root, className), style: style }, renderLoading ? renderLoading() : defaultRenderLoading()));
|
|
169
|
-
}
|
|
159
|
+
} }, isLastPage ? 'No more results' : showMoreLabel));
|
|
170
160
|
if (loading && accumulatedHits.length === 0) {
|
|
171
161
|
return React.createElement("div", { className: clsx(infiniteHitsTheme.root, className), style: style });
|
|
172
162
|
}
|
|
@@ -179,6 +169,5 @@ export const InfiniteHits = ({ renderHit, renderEmpty, showInitialLoading = fals
|
|
|
179
169
|
showMoreButton && !useInfiniteScroll && !isLastPage && (renderShowMore
|
|
180
170
|
? renderShowMore({ isLoading: isLoadingMore, isLastPage, onClick: handleShowMore })
|
|
181
171
|
: defaultRenderShowMore()),
|
|
182
|
-
isLoadingMore && (renderLoading ? renderLoading() : defaultRenderLoading()),
|
|
183
172
|
useInfiniteScroll && !isLastPage && (React.createElement("div", { ref: sentinelRef, className: infiniteHitsTheme.sentinel, style: { height: '1px', visibility: 'hidden' }, "aria-hidden": "true" }))));
|
|
184
173
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/components/Pagination.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/components/Pagination.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC;IAC7F,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,mBAAmB;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC9C,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0bhD,CAAC"}
|
|
@@ -16,16 +16,30 @@ import React from 'react';
|
|
|
16
16
|
import { useSearchContext } from './SearchProvider';
|
|
17
17
|
import { useSearchState } from '../hooks/useSearchState';
|
|
18
18
|
import { clsx } from 'clsx';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
import { useIsMobile } from '../utils/responsive';
|
|
20
|
+
/** Size-specific style tokens (responsive) */
|
|
21
|
+
const getSizeTokens = (size, isMobile) => {
|
|
22
|
+
if (isMobile) {
|
|
23
|
+
// Larger touch targets on mobile
|
|
24
|
+
return {
|
|
25
|
+
small: { paddingKey: 'small', fontSizeKey: 'small', minWidth: '40px', minHeight: '40px' },
|
|
26
|
+
medium: { paddingKey: 'small', fontSizeKey: 'medium', minWidth: '44px', minHeight: '44px' },
|
|
27
|
+
large: { paddingKey: 'medium', fontSizeKey: 'large', minWidth: '48px', minHeight: '48px' },
|
|
28
|
+
}[size];
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
small: { paddingKey: 'small', fontSizeKey: 'small', minWidth: '32px', minHeight: '32px' },
|
|
32
|
+
medium: { paddingKey: 'small', fontSizeKey: 'medium', minWidth: '40px', minHeight: '40px' },
|
|
33
|
+
large: { paddingKey: 'medium', fontSizeKey: 'large', minWidth: '48px', minHeight: '48px' },
|
|
34
|
+
}[size];
|
|
24
35
|
};
|
|
25
|
-
export const Pagination = ({ results: resultsProp, currentPage: currentPageProp, itemsPerPage: itemsPerPageProp, totalPages: totalPagesProp, onPageChange, maxPages = 7, showFirstLast = true, showPrevNext = true, renderPageButton, className, style, theme: customTheme, variant = 'numbered', loadMoreText = 'Load More', size = 'medium', showPageInfo, previousLabel = 'Previous', nextLabel = 'Next', }) => {
|
|
36
|
+
export const Pagination = ({ results: resultsProp, currentPage: currentPageProp, itemsPerPage: itemsPerPageProp, totalPages: totalPagesProp, onPageChange, maxPages: maxPagesProp = 7, showFirstLast = true, showPrevNext = true, renderPageButton, className, style, theme: customTheme, variant = 'numbered', loadMoreText = 'Load More', size = 'medium', showPageInfo, previousLabel = 'Previous', nextLabel = 'Next', }) => {
|
|
26
37
|
const { theme } = useSearchContext();
|
|
27
38
|
const { results: stateResults, currentPage: stateCurrentPage, setPage } = useSearchState();
|
|
28
39
|
const paginationTheme = customTheme || {};
|
|
40
|
+
const isMobile = useIsMobile();
|
|
41
|
+
// Responsive maxPages - show fewer pages on mobile
|
|
42
|
+
const maxPages = isMobile ? Math.min(maxPagesProp, 5) : maxPagesProp;
|
|
29
43
|
// Use results from prop if provided, otherwise from state manager
|
|
30
44
|
const results = resultsProp || stateResults;
|
|
31
45
|
// Use currentPage from prop if provided, otherwise from state manager
|
|
@@ -49,8 +63,8 @@ export const Pagination = ({ results: resultsProp, currentPage: currentPageProp,
|
|
|
49
63
|
const resolvedShowPageInfo = showPageInfo !== undefined
|
|
50
64
|
? showPageInfo
|
|
51
65
|
: variant === 'simple';
|
|
52
|
-
// Size tokens
|
|
53
|
-
const sizeTokens =
|
|
66
|
+
// Size tokens (responsive)
|
|
67
|
+
const sizeTokens = getSizeTokens(size, isMobile);
|
|
54
68
|
// CSS variable aware helpers — allow overrides via custom properties
|
|
55
69
|
const cssVarBg = 'var(--seekora-pagination-bg, ' + theme.colors.background + ')';
|
|
56
70
|
const cssVarColor = 'var(--seekora-pagination-color, ' + theme.colors.text + ')';
|
|
@@ -70,7 +84,7 @@ export const Pagination = ({ results: resultsProp, currentPage: currentPageProp,
|
|
|
70
84
|
};
|
|
71
85
|
const defaultRenderPageButton = (page, isActive, isDisabled) => (React.createElement("button", { type: "button", disabled: isDisabled, onClick: () => !isDisabled && handlePageChange(page), "aria-current": isActive ? 'page' : undefined, "aria-label": `Page ${page}`, className: clsx(paginationTheme.item, isActive && paginationTheme.itemActive, isDisabled && paginationTheme.itemDisabled), style: {
|
|
72
86
|
padding: theme.spacing[sizeTokens.paddingKey],
|
|
73
|
-
margin: `0 ${theme.spacing.small}`,
|
|
87
|
+
margin: isMobile ? `0 4px` : `0 ${theme.spacing.small}`,
|
|
74
88
|
border: `1px solid ${cssVarBorder}`,
|
|
75
89
|
borderRadius: cssVarRadius,
|
|
76
90
|
backgroundColor: isActive ? cssVarActiveBg : cssVarBg,
|
|
@@ -79,6 +93,10 @@ export const Pagination = ({ results: resultsProp, currentPage: currentPageProp,
|
|
|
79
93
|
opacity: isDisabled ? 0.5 : 1,
|
|
80
94
|
fontSize: theme.typography.fontSize[sizeTokens.fontSizeKey],
|
|
81
95
|
minWidth: sizeTokens.minWidth,
|
|
96
|
+
minHeight: sizeTokens.minHeight,
|
|
97
|
+
display: 'inline-flex',
|
|
98
|
+
alignItems: 'center',
|
|
99
|
+
justifyContent: 'center',
|
|
82
100
|
...(isActive && {
|
|
83
101
|
fontWeight: 'bold',
|
|
84
102
|
}),
|
|
@@ -16,7 +16,6 @@ export interface QuerySuggestionsTheme {
|
|
|
16
16
|
suggestionItem?: string;
|
|
17
17
|
suggestionItemHover?: string;
|
|
18
18
|
suggestionItemActive?: string;
|
|
19
|
-
loadingState?: string;
|
|
20
19
|
emptyState?: string;
|
|
21
20
|
}
|
|
22
21
|
export interface QuerySuggestionsProps {
|
|
@@ -26,9 +25,6 @@ export interface QuerySuggestionsProps {
|
|
|
26
25
|
minQueryLength?: number;
|
|
27
26
|
onSuggestionClick?: (suggestion: string) => void;
|
|
28
27
|
renderSuggestion?: (suggestion: SuggestionItem, index: number) => React.ReactNode;
|
|
29
|
-
/** Show loading state when fetching and no previous suggestions (default false: show previous results until new render) */
|
|
30
|
-
showLoadingState?: boolean;
|
|
31
|
-
renderLoading?: () => React.ReactNode;
|
|
32
28
|
renderEmpty?: () => React.ReactNode;
|
|
33
29
|
showTitle?: boolean;
|
|
34
30
|
title?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuerySuggestions.d.ts","sourceRoot":"","sources":["../../src/components/QuerySuggestions.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAMxC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,
|
|
1
|
+
{"version":3,"file":"QuerySuggestions.d.ts","sourceRoot":"","sources":["../../src/components/QuerySuggestions.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAMxC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAClF,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAsI5D,CAAC"}
|
|
@@ -7,7 +7,7 @@ import React, { useState } from 'react';
|
|
|
7
7
|
import { useSearchContext } from './SearchProvider';
|
|
8
8
|
import { useQuerySuggestions } from '../hooks/useQuerySuggestions';
|
|
9
9
|
import { clsx } from 'clsx';
|
|
10
|
-
export const QuerySuggestions = ({ query = '', maxSuggestions = 10, debounceMs = 300, minQueryLength = 2, onSuggestionClick, renderSuggestion,
|
|
10
|
+
export const QuerySuggestions = ({ query = '', maxSuggestions = 10, debounceMs = 300, minQueryLength = 2, onSuggestionClick, renderSuggestion, renderEmpty, showTitle = false, title = 'Suggestions', className, style, theme: customTheme, }) => {
|
|
11
11
|
const { client, theme } = useSearchContext();
|
|
12
12
|
const [selectedIndex, setSelectedIndex] = useState(-1);
|
|
13
13
|
const { suggestions, loading, error } = useQuerySuggestions({
|
|
@@ -25,11 +25,6 @@ export const QuerySuggestions = ({ query = '', maxSuggestions = 10, debounceMs =
|
|
|
25
25
|
"(",
|
|
26
26
|
suggestion.count,
|
|
27
27
|
")"))));
|
|
28
|
-
const defaultRenderLoading = () => (React.createElement("div", { style: {
|
|
29
|
-
padding: theme.spacing.medium,
|
|
30
|
-
textAlign: 'center',
|
|
31
|
-
color: theme.colors.text,
|
|
32
|
-
} }, "Loading suggestions..."));
|
|
33
28
|
const defaultRenderEmpty = () => (React.createElement("div", { style: {
|
|
34
29
|
padding: theme.spacing.medium,
|
|
35
30
|
textAlign: 'center',
|
|
@@ -44,17 +39,6 @@ export const QuerySuggestions = ({ query = '', maxSuggestions = 10, debounceMs =
|
|
|
44
39
|
if (query.length < minQueryLength) {
|
|
45
40
|
return null;
|
|
46
41
|
}
|
|
47
|
-
// When loading with no previous results, show loading only if showLoadingState (default: show previous results, no loading screen)
|
|
48
|
-
if (loading && displayedSuggestions.length === 0 && showLoadingState) {
|
|
49
|
-
return (React.createElement("div", { className: clsx(suggestionsTheme.container, className), style: style },
|
|
50
|
-
showTitle && (React.createElement("div", { className: suggestionsTheme.title, style: {
|
|
51
|
-
fontSize: theme.typography.fontSize.large,
|
|
52
|
-
fontWeight: 'bold',
|
|
53
|
-
marginBottom: theme.spacing.medium,
|
|
54
|
-
color: theme.colors.text,
|
|
55
|
-
} }, title)),
|
|
56
|
-
renderLoading ? renderLoading() : defaultRenderLoading()));
|
|
57
|
-
}
|
|
58
42
|
if (error || (!loading && displayedSuggestions.length === 0)) {
|
|
59
43
|
return (React.createElement("div", { className: clsx(suggestionsTheme.container, className), style: style },
|
|
60
44
|
showTitle && (React.createElement("div", { className: suggestionsTheme.title, style: {
|
|
@@ -28,8 +28,6 @@ export interface QuerySuggestionsDropdownProps extends QuerySuggestionsEventHand
|
|
|
28
28
|
maxRecentSearches?: number;
|
|
29
29
|
/** Show suggestion counts */
|
|
30
30
|
showCounts?: boolean;
|
|
31
|
-
/** Show loading state (default false: show previous results until new results render) */
|
|
32
|
-
showLoading?: boolean;
|
|
33
31
|
/** Show empty state when no results */
|
|
34
32
|
showEmptyState?: boolean;
|
|
35
33
|
/** Highlight configuration */
|
|
@@ -46,8 +44,6 @@ export interface QuerySuggestionsDropdownProps extends QuerySuggestionsEventHand
|
|
|
46
44
|
renderSuggestion?: (suggestion: SuggestionItem, index: number, isActive: boolean, highlight: (text: string) => React.ReactNode) => React.ReactNode;
|
|
47
45
|
/** Custom render for recent search item */
|
|
48
46
|
renderRecentSearch?: (search: RecentSearch, index: number, isActive: boolean) => React.ReactNode;
|
|
49
|
-
/** Custom render for loading state */
|
|
50
|
-
renderLoading?: () => React.ReactNode;
|
|
51
47
|
/** Custom render for empty state */
|
|
52
48
|
renderEmpty?: () => React.ReactNode;
|
|
53
49
|
/** Custom footer content */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuerySuggestionsDropdown.d.ts","sourceRoot":"","sources":["../../src/components/QuerySuggestionsDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAuBlC,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B;IAClF,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"QuerySuggestionsDropdown.d.ts","sourceRoot":"","sources":["../../src/components/QuerySuggestionsDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAuBlC,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B;IAClF,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,wCAAwC;IACxC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,yBAAyB;IACzB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,wBAAwB;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,CACjB,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,KACzC,KAAK,CAAC,SAAS,CAAC;IACrB,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,CACnB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,KACd,KAAK,CAAC,SAAS,CAAC;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACpC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAChC,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7C,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,uCAAuC;IACvC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,sBAAsB;IACtB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,uBAAuB;IACvB,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,4BAA4B;IAC5B,aAAa,EAAE,MAAM,MAAM,CAAC;CAC7B;AAsJD,eAAO,MAAM,wBAAwB,mHAqZnC,CAAC;AAEH,eAAe,wBAAwB,CAAC"}
|
|
@@ -103,15 +103,6 @@ const defaultStyles = {
|
|
|
103
103
|
removeButtonVisible: {
|
|
104
104
|
opacity: 1,
|
|
105
105
|
},
|
|
106
|
-
loadingState: {
|
|
107
|
-
display: 'flex',
|
|
108
|
-
alignItems: 'center',
|
|
109
|
-
justifyContent: 'center',
|
|
110
|
-
padding: '24px 16px',
|
|
111
|
-
color: 'var(--seekora-text-secondary, inherit)',
|
|
112
|
-
fontSize: '14px',
|
|
113
|
-
gap: '8px',
|
|
114
|
-
},
|
|
115
106
|
emptyState: {
|
|
116
107
|
display: 'flex',
|
|
117
108
|
flexDirection: 'column',
|
|
@@ -165,14 +156,11 @@ const ClockIcon = ({ className, style }) => (React.createElement("svg", { classN
|
|
|
165
156
|
React.createElement("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" })));
|
|
166
157
|
const CloseIcon = ({ className, style }) => (React.createElement("svg", { className: className, style: style, viewBox: "0 0 20 20", fill: "currentColor", width: "16", height: "16" },
|
|
167
158
|
React.createElement("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" })));
|
|
168
|
-
const LoadingSpinner = ({ style }) => (React.createElement("svg", { style: { animation: 'spin 1s linear infinite', ...style }, viewBox: "0 0 24 24", width: "20", height: "20" },
|
|
169
|
-
React.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3", fill: "none", opacity: "0.25" }),
|
|
170
|
-
React.createElement("path", { fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })));
|
|
171
159
|
// ============================================================================
|
|
172
160
|
// Component
|
|
173
161
|
// ============================================================================
|
|
174
162
|
export const QuerySuggestionsDropdown = forwardRef(function QuerySuggestionsDropdown(props, ref) {
|
|
175
|
-
const { query, isOpen = true, maxSuggestions = 8, minQueryLength = 1, debounceMs = 200, showRecentSearches = true, maxRecentSearches = 5, showCounts = true,
|
|
163
|
+
const { query, isOpen = true, maxSuggestions = 8, minQueryLength = 1, debounceMs = 200, showRecentSearches = true, maxRecentSearches = 5, showCounts = true, showEmptyState = true, highlight = { enabled: true, preTag: '<mark>', postTag: '</mark>' }, keyboardNav = { enabled: true }, animation = { enabled: true, duration: 150, entrance: 'fade' }, classNames = {}, style, renderSuggestion, renderRecentSearch, renderEmpty, footer, position = 'absolute', width = '100%', zIndex = 1000, closeOnClickOutside = true, closeOnEscape = true, ariaLabel = 'Search suggestions', onSuggestionSelect, onRecentSearchClick, onRecentSearchRemove, onOpen, onClose, onNavigate, } = props;
|
|
176
164
|
const { client, theme } = useSearchContext();
|
|
177
165
|
const containerRef = useRef(null);
|
|
178
166
|
const [activeIndex, setActiveIndex] = useState(-1);
|
|
@@ -354,9 +342,6 @@ export const QuerySuggestionsDropdown = forwardRef(function QuerySuggestionsDrop
|
|
|
354
342
|
...animationStyle,
|
|
355
343
|
...style,
|
|
356
344
|
} },
|
|
357
|
-
loading && showLoading && (React.createElement("div", { className: classNames.loadingState, style: defaultStyles.loadingState }, renderLoading ? renderLoading() : (React.createElement(React.Fragment, null,
|
|
358
|
-
React.createElement(LoadingSpinner, null),
|
|
359
|
-
React.createElement("span", null, "Searching..."))))),
|
|
360
345
|
showRecent && (React.createElement("div", { className: clsx('seekora-suggestions-section', classNames.section, classNames.recentSearches) },
|
|
361
346
|
React.createElement("div", { className: classNames.sectionTitle, style: defaultStyles.sectionTitle }, "Recent Searches"),
|
|
362
347
|
recentSearches.slice(0, maxRecentSearches).map((search, index) => {
|
|
@@ -21,7 +21,6 @@ export interface RecommendationTheme {
|
|
|
21
21
|
content?: string;
|
|
22
22
|
name?: string;
|
|
23
23
|
price?: string;
|
|
24
|
-
loading?: string;
|
|
25
24
|
empty?: string;
|
|
26
25
|
}
|
|
27
26
|
interface BaseRecommendationProps {
|
|
@@ -51,8 +50,6 @@ export interface RelatedProductsProps extends BaseRecommendationProps {
|
|
|
51
50
|
items?: RecommendationItem[];
|
|
52
51
|
/** Loading state */
|
|
53
52
|
loading?: boolean;
|
|
54
|
-
/** Show loading state when fetching and no previous items (default false: show previous results until new render) */
|
|
55
|
-
showLoadingState?: boolean;
|
|
56
53
|
}
|
|
57
54
|
export declare const RelatedProducts: React.FC<RelatedProductsProps>;
|
|
58
55
|
export interface TrendingItemsProps extends BaseRecommendationProps {
|
|
@@ -60,8 +57,6 @@ export interface TrendingItemsProps extends BaseRecommendationProps {
|
|
|
60
57
|
items?: RecommendationItem[];
|
|
61
58
|
/** Loading state */
|
|
62
59
|
loading?: boolean;
|
|
63
|
-
/** Show loading state when fetching and no previous items (default false: show previous results until new render) */
|
|
64
|
-
showLoadingState?: boolean;
|
|
65
60
|
/** Facet name for trending (if using facet data) */
|
|
66
61
|
facetName?: string;
|
|
67
62
|
}
|
|
@@ -73,8 +68,6 @@ export interface FrequentlyBoughtTogetherProps extends BaseRecommendationProps {
|
|
|
73
68
|
items?: RecommendationItem[];
|
|
74
69
|
/** Loading state */
|
|
75
70
|
loading?: boolean;
|
|
76
|
-
/** Show loading state when fetching and no previous items (default false: show previous results until new render) */
|
|
77
|
-
showLoadingState?: boolean;
|
|
78
71
|
/** Show "Add all to cart" button */
|
|
79
72
|
showAddAllButton?: boolean;
|
|
80
73
|
/** Callback when "Add all" is clicked */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Recommendations.d.ts","sourceRoot":"","sources":["../../src/components/Recommendations.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"Recommendations.d.ts","sourceRoot":"","sources":["../../src/components/Recommendations.tsx"],"names":[],"mappings":"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"}
|