@seekora-ai/ui-sdk-react 0.2.14 → 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/CurrentRefinements.d.ts.map +1 -1
- package/dist/components/CurrentRefinements.js +69 -9
- 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 +30 -0
- package/dist/components/Facets.d.ts.map +1 -1
- package/dist/components/Facets.js +215 -7
- package/dist/components/FederatedDropdown.d.ts.map +1 -1
- package/dist/components/FederatedDropdown.js +45 -31
- 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 +32 -33
- package/dist/components/RangeInput.d.ts.map +1 -1
- package/dist/components/RangeInput.js +6 -6
- package/dist/components/RangeSlider.d.ts.map +1 -1
- package/dist/components/RangeSlider.js +54 -32
- 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 +40 -35
- package/dist/components/SearchBar.d.ts +0 -4
- package/dist/components/SearchBar.d.ts.map +1 -1
- package/dist/components/SearchBar.js +17 -11
- package/dist/components/SearchBarWithSuggestions.js +4 -4
- package/dist/components/SearchLayout.d.ts.map +1 -1
- package/dist/components/SearchLayout.js +22 -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 +38 -39
- package/dist/components/primitives/ActionButtons.d.ts.map +1 -1
- package/dist/components/primitives/ActionButtons.js +34 -10
- package/dist/components/primitives/BadgeList.d.ts.map +1 -1
- package/dist/components/primitives/BadgeList.js +33 -13
- package/dist/components/primitives/ImageDisplay.d.ts.map +1 -1
- package/dist/components/primitives/ImageDisplay.js +32 -19
- package/dist/components/primitives/ImageZoom.d.ts.map +1 -1
- package/dist/components/primitives/ImageZoom.js +85 -30
- package/dist/components/primitives/VariantSelector.js +10 -10
- package/dist/components/primitives/VariantSwatches.d.ts.map +1 -1
- package/dist/components/primitives/VariantSwatches.js +28 -13
- package/dist/components/product-page/ProductGallery.d.ts +8 -1
- package/dist/components/product-page/ProductGallery.d.ts.map +1 -1
- package/dist/components/product-page/ProductGallery.js +2 -2
- 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/SectionSearchProvider.d.ts +3 -1
- package/dist/components/section-primitives/SectionSearchProvider.d.ts.map +1 -1
- package/dist/components/section-primitives/SectionSearchProvider.js +3 -2
- 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 +78 -78
- 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 +40 -41
- 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/DropdownPanel.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/DropdownPanel.js +15 -2
- package/dist/components/suggestions-primitives/ItemCard.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ItemCard.js +48 -11
- package/dist/components/suggestions-primitives/ItemGrid.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ItemGrid.js +18 -5
- package/dist/components/suggestions-primitives/ProductCard.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ProductCard.js +36 -12
- package/dist/components/suggestions-primitives/ProductCardLayouts.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/ProductCardLayouts.js +52 -20
- 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 +29 -10
- package/dist/components/suggestions-primitives/SuggestionItem.d.ts.map +1 -1
- package/dist/components/suggestions-primitives/SuggestionItem.js +8 -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 +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.umd.js +1 -1
- package/dist/src/index.d.ts +166 -81
- package/dist/src/index.esm.js +2141 -1048
- package/dist/src/index.esm.js.map +1 -1
- package/dist/src/index.js +2142 -1049
- 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 +7 -7
- package/src/docsearch/docsearch.css +2 -5
|
@@ -76,10 +76,10 @@ export function VariantSelector({ options, variants, selections, onSelectionChan
|
|
|
76
76
|
fontSize: '0.875rem',
|
|
77
77
|
fontWeight: 600,
|
|
78
78
|
marginBottom: 8,
|
|
79
|
-
color: 'var(--seekora-text-primary,
|
|
79
|
+
color: 'var(--seekora-text-primary, inherit)',
|
|
80
80
|
} },
|
|
81
81
|
option.name,
|
|
82
|
-
selected && (React.createElement("span", { style: { fontWeight: 400, marginLeft: 6, color: 'var(--seekora-text-secondary,
|
|
82
|
+
selected && (React.createElement("span", { style: { fontWeight: 400, marginLeft: 6, color: 'var(--seekora-text-secondary, inherit)' } }, selected))),
|
|
83
83
|
mode === 'dropdown' ? (React.createElement("select", { className: "seekora-variant-dropdown", value: selected ?? '', onChange: (e) => {
|
|
84
84
|
e.stopPropagation();
|
|
85
85
|
onSelectionChange(option.name, e.target.value);
|
|
@@ -87,9 +87,9 @@ export function VariantSelector({ options, variants, selections, onSelectionChan
|
|
|
87
87
|
padding: '8px 12px',
|
|
88
88
|
fontSize: '0.875rem',
|
|
89
89
|
borderRadius: 6,
|
|
90
|
-
border: '1px solid var(--seekora-border-color,
|
|
91
|
-
backgroundColor: 'var(--seekora-bg-surface,
|
|
92
|
-
color: 'var(--seekora-text-primary,
|
|
90
|
+
border: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',
|
|
91
|
+
backgroundColor: 'var(--seekora-bg-surface, transparent)',
|
|
92
|
+
color: 'var(--seekora-text-primary, inherit)',
|
|
93
93
|
cursor: 'pointer',
|
|
94
94
|
minWidth: 120,
|
|
95
95
|
} },
|
|
@@ -123,7 +123,7 @@ export function VariantSelector({ options, variants, selections, onSelectionChan
|
|
|
123
123
|
backgroundColor: color,
|
|
124
124
|
border: isActive
|
|
125
125
|
? '2px solid var(--seekora-primary, #111827)'
|
|
126
|
-
: '1px solid var(--seekora-border-color,
|
|
126
|
+
: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',
|
|
127
127
|
outline: isActive ? '2px solid var(--seekora-primary, #111827)' : 'none',
|
|
128
128
|
outlineOffset: 2,
|
|
129
129
|
cursor: available ? 'pointer' : 'not-allowed',
|
|
@@ -144,13 +144,13 @@ export function VariantSelector({ options, variants, selections, onSelectionChan
|
|
|
144
144
|
borderRadius: 6,
|
|
145
145
|
border: isActive
|
|
146
146
|
? '2px solid var(--seekora-primary, #111827)'
|
|
147
|
-
: '1px solid var(--seekora-border-color,
|
|
147
|
+
: '1px solid var(--seekora-border-color, rgba(128,128,128,0.2))',
|
|
148
148
|
backgroundColor: isActive
|
|
149
149
|
? 'var(--seekora-primary, #111827)'
|
|
150
|
-
: 'var(--seekora-bg-surface,
|
|
150
|
+
: 'var(--seekora-bg-surface, transparent)',
|
|
151
151
|
color: isActive
|
|
152
|
-
? '
|
|
153
|
-
: 'var(--seekora-text-primary,
|
|
152
|
+
? 'transparent'
|
|
153
|
+
: 'var(--seekora-text-primary, inherit)',
|
|
154
154
|
cursor: available ? 'pointer' : 'not-allowed',
|
|
155
155
|
opacity: available ? 1 : 0.5,
|
|
156
156
|
textDecoration: !available ? 'line-through' : 'none',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariantSwatches.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/VariantSwatches.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"VariantSwatches.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/VariantSwatches.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG9E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AA4DD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,cAAc,EACd,SAAa,EACb,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,gBAAuB,EACvB,aAAa,EACb,aAAa,EACb,SAAS,EACT,KAAK,GACN,EAAE,oBAAoB,4BAwLtB"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import React, { useState } from 'react';
|
|
7
7
|
import { clsx } from 'clsx';
|
|
8
|
+
import { useIsMobile } from '../../utils/responsive';
|
|
8
9
|
const COLOR_NAMES = {
|
|
9
10
|
black: '#000', white: '#fff', red: '#ef4444', blue: '#3b82f6',
|
|
10
11
|
green: '#22c55e', yellow: '#eab308', orange: '#f97316', purple: '#a855f7',
|
|
@@ -61,6 +62,12 @@ const getAvailability = (optionName, value, options, variants, selectedValues) =
|
|
|
61
62
|
};
|
|
62
63
|
export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorMap, selectedValues, variants, showAvailability = true, onSwatchHover, onSwatchClick, className, style, }) {
|
|
63
64
|
const [expandedOptions, setExpandedOptions] = useState(new Set());
|
|
65
|
+
const isMobile = useIsMobile();
|
|
66
|
+
// Responsive sizing
|
|
67
|
+
const colorSwatchSize = isMobile ? 20 : 14; // Larger on mobile for touch
|
|
68
|
+
const textSwatchPadding = isMobile ? '4px 10px' : '1px 6px';
|
|
69
|
+
const textSwatchFontSize = isMobile ? '0.75rem' : '0.6875rem';
|
|
70
|
+
const gap = isMobile ? 6 : 4;
|
|
64
71
|
if (!options || options.length === 0)
|
|
65
72
|
return null;
|
|
66
73
|
const filtered = visibleOptions
|
|
@@ -81,14 +88,14 @@ export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorM
|
|
|
81
88
|
return next;
|
|
82
89
|
});
|
|
83
90
|
};
|
|
84
|
-
return (React.createElement("div", { className: clsx('seekora-variant-swatches', className), style: { display: 'flex', flexDirection: 'column', gap
|
|
91
|
+
return (React.createElement("div", { className: clsx('seekora-variant-swatches', className), style: { display: 'flex', flexDirection: 'column', gap, ...style } }, filtered.map((option) => {
|
|
85
92
|
const isColor = isColorOption(option.name);
|
|
86
93
|
const isExpanded = expandedOptions.has(option.name);
|
|
87
94
|
const visible = isExpanded ? option.values : option.values.slice(0, maxValues);
|
|
88
95
|
const overflow = option.values.length - maxValues;
|
|
89
96
|
const hasOverflow = overflow > 0;
|
|
90
97
|
const selectedValue = selectedValues?.[option.name];
|
|
91
|
-
return (React.createElement("div", { key: option.name, className: "seekora-variant-swatch-group", style: { display: 'flex', alignItems: 'center', gap
|
|
98
|
+
return (React.createElement("div", { key: option.name, className: "seekora-variant-swatch-group", style: { display: 'flex', alignItems: 'center', gap, flexWrap: 'wrap' } },
|
|
92
99
|
visible.map((value) => {
|
|
93
100
|
const color = isColor ? resolveColor(value, colorMap) : null;
|
|
94
101
|
const isSelected = selectedValue === value;
|
|
@@ -97,9 +104,13 @@ export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorM
|
|
|
97
104
|
: true;
|
|
98
105
|
if (color) {
|
|
99
106
|
return (React.createElement("span", { key: value, className: clsx('seekora-variant-swatch', 'seekora-variant-swatch--color', isSelected && 'seekora-variant-swatch--selected', !isAvailable && 'seekora-variant-swatch--unavailable'), title: `${value}${!isAvailable ? ' (Unavailable)' : ''}`, style: {
|
|
100
|
-
display: 'inline-
|
|
101
|
-
|
|
102
|
-
|
|
107
|
+
display: 'inline-flex',
|
|
108
|
+
alignItems: 'center',
|
|
109
|
+
justifyContent: 'center',
|
|
110
|
+
width: colorSwatchSize,
|
|
111
|
+
height: colorSwatchSize,
|
|
112
|
+
minWidth: colorSwatchSize,
|
|
113
|
+
minHeight: colorSwatchSize,
|
|
103
114
|
borderRadius: '50%',
|
|
104
115
|
backgroundColor: color,
|
|
105
116
|
border: isSelected
|
|
@@ -109,7 +120,7 @@ export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorM
|
|
|
109
120
|
outlineOffset: 2,
|
|
110
121
|
cursor: onSwatchClick && isAvailable ? 'pointer' : 'not-allowed',
|
|
111
122
|
flexShrink: 0,
|
|
112
|
-
boxShadow: isSelected ? '0 0 0 1px #fff' : 'none',
|
|
123
|
+
boxShadow: isSelected ? 'var(--seekora-swatch-ring, 0 0 0 1px #fff)' : 'none',
|
|
113
124
|
opacity: isAvailable ? 1 : 0.3,
|
|
114
125
|
position: 'relative',
|
|
115
126
|
}, onMouseEnter: () => isAvailable && onSwatchHover?.(option.name, value), onMouseDown: (e) => {
|
|
@@ -126,14 +137,17 @@ export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorM
|
|
|
126
137
|
left: '-2px',
|
|
127
138
|
right: '-2px',
|
|
128
139
|
height: 1,
|
|
129
|
-
backgroundColor: '#ef4444',
|
|
140
|
+
backgroundColor: 'var(--seekora-unavailable-line, #ef4444)',
|
|
130
141
|
transform: 'translateY(-50%) rotate(-45deg)',
|
|
131
142
|
} }))));
|
|
132
143
|
}
|
|
133
144
|
return (React.createElement("span", { key: value, className: clsx('seekora-variant-swatch', 'seekora-variant-swatch--text', isSelected && 'seekora-variant-swatch--selected', !isAvailable && 'seekora-variant-swatch--unavailable'), style: {
|
|
134
|
-
display: 'inline-
|
|
135
|
-
|
|
136
|
-
|
|
145
|
+
display: 'inline-flex',
|
|
146
|
+
alignItems: 'center',
|
|
147
|
+
justifyContent: 'center',
|
|
148
|
+
padding: textSwatchPadding,
|
|
149
|
+
minHeight: isMobile ? 32 : 24, // Minimum touch target on mobile
|
|
150
|
+
fontSize: textSwatchFontSize,
|
|
137
151
|
borderRadius: 3,
|
|
138
152
|
border: isSelected
|
|
139
153
|
? '1px solid var(--seekora-primary, #111827)'
|
|
@@ -142,7 +156,7 @@ export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorM
|
|
|
142
156
|
? 'var(--seekora-primary, #111827)'
|
|
143
157
|
: 'transparent',
|
|
144
158
|
color: isSelected
|
|
145
|
-
? '#fff'
|
|
159
|
+
? 'var(--seekora-primary-text, #fff)'
|
|
146
160
|
: 'var(--seekora-text-secondary, #6b7280)',
|
|
147
161
|
cursor: onSwatchClick && isAvailable ? 'pointer' : 'not-allowed',
|
|
148
162
|
whiteSpace: 'nowrap',
|
|
@@ -160,11 +174,12 @@ export function VariantSwatches({ options, visibleOptions, maxValues = 5, colorM
|
|
|
160
174
|
} }, value));
|
|
161
175
|
}),
|
|
162
176
|
hasOverflow && (React.createElement("button", { type: "button", className: "seekora-variant-swatch--overflow", onClick: (e) => toggleExpanded(option.name, e), style: {
|
|
163
|
-
fontSize:
|
|
177
|
+
fontSize: textSwatchFontSize,
|
|
164
178
|
color: 'var(--seekora-primary, #2563eb)',
|
|
165
179
|
background: 'none',
|
|
166
180
|
border: 'none',
|
|
167
|
-
padding: 0,
|
|
181
|
+
padding: isMobile ? '4px 8px' : 0,
|
|
182
|
+
minHeight: isMobile ? 32 : 'auto', // Touch target on mobile
|
|
168
183
|
cursor: 'pointer',
|
|
169
184
|
textDecoration: 'underline',
|
|
170
185
|
fontWeight: 500,
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { type ImageDisplayVariant } from '../primitives/ImageDisplay';
|
|
9
|
+
import type { ImageZoomMode } from '../primitives/ImageZoom';
|
|
9
10
|
export interface ProductGalleryProps {
|
|
10
11
|
images: string[];
|
|
11
12
|
variant?: ImageDisplayVariant;
|
|
@@ -14,6 +15,12 @@ export interface ProductGalleryProps {
|
|
|
14
15
|
style?: React.CSSProperties;
|
|
15
16
|
carouselAutoplay?: boolean;
|
|
16
17
|
carouselIntervalMs?: number;
|
|
18
|
+
/** Enable zoom functionality on product images */
|
|
19
|
+
enableZoom?: boolean;
|
|
20
|
+
/** Zoom mode: 'hover' (Amazon-style), 'lens', 'click' (lightbox), 'both' */
|
|
21
|
+
zoomMode?: ImageZoomMode;
|
|
22
|
+
/** Zoom magnification level (2 = 200%, 3 = 300%) */
|
|
23
|
+
zoomLevel?: number;
|
|
17
24
|
}
|
|
18
|
-
export declare function ProductGallery({ images, variant, alt, className, style, carouselAutoplay, carouselIntervalMs, }: ProductGalleryProps): React.JSX.Element;
|
|
25
|
+
export declare function ProductGallery({ images, variant, alt, className, style, carouselAutoplay, carouselIntervalMs, enableZoom, zoomMode, zoomLevel, }: ProductGalleryProps): React.JSX.Element;
|
|
19
26
|
//# sourceMappingURL=ProductGallery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductGallery.d.ts","sourceRoot":"","sources":["../../../src/components/product-page/ProductGallery.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ProductGallery.d.ts","sourceRoot":"","sources":["../../../src/components/product-page/ProductGallery.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,OAAsB,EACtB,GAAe,EACf,SAAS,EACT,KAAK,EACL,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,qBAerB"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { clsx } from 'clsx';
|
|
9
9
|
import { ImageDisplay } from '../primitives/ImageDisplay';
|
|
10
|
-
export function ProductGallery({ images, variant = 'thumbStrip', alt = 'Product', className, style, carouselAutoplay, carouselIntervalMs, }) {
|
|
10
|
+
export function ProductGallery({ images, variant = 'thumbStrip', alt = 'Product', className, style, carouselAutoplay, carouselIntervalMs, enableZoom, zoomMode, zoomLevel, }) {
|
|
11
11
|
return (React.createElement("div", { className: clsx('seekora-product-gallery', className), style: style },
|
|
12
|
-
React.createElement(ImageDisplay, { images: images, variant: variant, alt: alt, carouselAutoplay: carouselAutoplay, carouselIntervalMs: carouselIntervalMs })));
|
|
12
|
+
React.createElement(ImageDisplay, { images: images, variant: variant, alt: alt, carouselAutoplay: carouselAutoplay, carouselIntervalMs: carouselIntervalMs, enableZoom: enableZoom, zoomMode: zoomMode, zoomLevel: zoomLevel })));
|
|
13
13
|
}
|
|
@@ -7,8 +7,6 @@ export interface SectionItemGridProps {
|
|
|
7
7
|
maxItems?: number;
|
|
8
8
|
className?: string;
|
|
9
9
|
style?: React.CSSProperties;
|
|
10
|
-
/** Show loading state when fetching and no previous items (default false: show previous results until new render) */
|
|
11
|
-
showLoadingState?: boolean;
|
|
12
10
|
getItemId?: (item: unknown) => string;
|
|
13
11
|
getItemTitle?: (item: unknown) => string;
|
|
14
12
|
getItemImage?: (item: unknown) => string | undefined;
|
|
@@ -16,5 +14,5 @@ export interface SectionItemGridProps {
|
|
|
16
14
|
getItemUrl?: (item: unknown) => string | undefined;
|
|
17
15
|
renderItem?: (item: unknown, index: number) => React.ReactNode;
|
|
18
16
|
}
|
|
19
|
-
export declare function SectionItemGrid({ columns, maxItems, className, style,
|
|
17
|
+
export declare function SectionItemGrid({ columns, maxItems, className, style, getItemId, getItemTitle, getItemImage, getItemDescription, getItemUrl, renderItem, }: SectionItemGridProps): React.JSX.Element;
|
|
20
18
|
//# sourceMappingURL=SectionItemGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionItemGrid.d.ts","sourceRoot":"","sources":["../../../src/components/section-primitives/SectionItemGrid.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SectionItemGrid.d.ts","sourceRoot":"","sources":["../../../src/components/section-primitives/SectionItemGrid.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACrD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IAC3D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAChE;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAW,EACX,QAAa,EACb,SAAS,EACT,KAAK,EACL,SAA8E,EAC9E,YAAyE,EACzE,YAAmE,EACnE,kBAAqF,EACrF,UAA6D,EAC7D,UAAU,GACX,EAAE,oBAAoB,qBAsBtB"}
|
|
@@ -4,12 +4,9 @@
|
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { useSectionSearchContext } from './SectionSearchContext';
|
|
6
6
|
import { ItemGrid } from '../suggestions-primitives/ItemGrid';
|
|
7
|
-
import { SectionLoading } from './SectionLoading';
|
|
8
7
|
import { SectionError } from './SectionError';
|
|
9
|
-
export function SectionItemGrid({ columns = 4, maxItems = 12, className, style,
|
|
8
|
+
export function SectionItemGrid({ columns = 4, maxItems = 12, className, style, getItemId = (i) => i.id ?? String(i?.objectID ?? ''), getItemTitle = (i) => i.title ?? i?.title ?? '', getItemImage = (i) => i.image ?? i?.image, getItemDescription = (i) => i.description ?? i?.description, getItemUrl = (i) => i.url ?? i?.url, renderItem, }) {
|
|
10
9
|
const { items, loading, error, trackClick } = useSectionSearchContext();
|
|
11
|
-
if (loading && items.length === 0 && showLoadingState)
|
|
12
|
-
return React.createElement(SectionLoading, { className: className, style: style });
|
|
13
10
|
if (error)
|
|
14
11
|
return React.createElement(SectionError, { className: className, style: style });
|
|
15
12
|
// When loading with previous items, show them (no loading screen)
|
|
@@ -18,6 +18,8 @@ export interface SectionSearchProviderProps {
|
|
|
18
18
|
sortBy?: string;
|
|
19
19
|
enabled?: boolean;
|
|
20
20
|
sectionId?: string;
|
|
21
|
+
/** Additional search options merged into the request (e.g. { widget_mode: false }). */
|
|
22
|
+
searchOptions?: Record<string, unknown>;
|
|
21
23
|
}
|
|
22
|
-
export declare function SectionSearchProvider({ children, query, refinements, maxItems, sortBy, enabled, sectionId, }: SectionSearchProviderProps): React.JSX.Element;
|
|
24
|
+
export declare function SectionSearchProvider({ children, query, refinements, maxItems, sortBy, enabled, sectionId, searchOptions, }: SectionSearchProviderProps): React.JSX.Element;
|
|
23
25
|
//# sourceMappingURL=SectionSearchProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionSearchProvider.d.ts","sourceRoot":"","sources":["../../../src/components/section-primitives/SectionSearchProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAC;AAIzE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"SectionSearchProvider.d.ts","sourceRoot":"","sources":["../../../src/components/section-primitives/SectionSearchProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAC;AAIzE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAsBD,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,KAAK,EACL,WAAgB,EAChB,QAAa,EACb,MAAM,EACN,OAAc,EACd,SAAS,EACT,aAAa,GACd,EAAE,0BAA0B,qBAiF5B"}
|
|
@@ -35,7 +35,7 @@ function extractTotal(response) {
|
|
|
35
35
|
return Number(data.data.total_results);
|
|
36
36
|
return 0;
|
|
37
37
|
}
|
|
38
|
-
export function SectionSearchProvider({ children, query, refinements = [], maxItems = 12, sortBy, enabled = true, sectionId, }) {
|
|
38
|
+
export function SectionSearchProvider({ children, query, refinements = [], maxItems = 12, sortBy, enabled = true, sectionId, searchOptions, }) {
|
|
39
39
|
const { client } = useSearchContext();
|
|
40
40
|
const [items, setItems] = useState([]);
|
|
41
41
|
const [loading, setLoading] = useState(true);
|
|
@@ -53,6 +53,7 @@ export function SectionSearchProvider({ children, query, refinements = [], maxIt
|
|
|
53
53
|
setLoading(true);
|
|
54
54
|
setError(null);
|
|
55
55
|
const options = {
|
|
56
|
+
...searchOptions,
|
|
56
57
|
per_page: maxItems,
|
|
57
58
|
page: 1,
|
|
58
59
|
};
|
|
@@ -80,7 +81,7 @@ export function SectionSearchProvider({ children, query, refinements = [], maxIt
|
|
|
80
81
|
return () => {
|
|
81
82
|
cancelled = true;
|
|
82
83
|
};
|
|
83
|
-
}, [client, enabled, query, maxItems, sortBy, refinements]);
|
|
84
|
+
}, [client, enabled, query, maxItems, sortBy, refinements, searchOptions]);
|
|
84
85
|
const trackClick = useCallback((item, position) => {
|
|
85
86
|
if (!client?.trackEvent)
|
|
86
87
|
return;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { SectionSearchProvider, type RefinementInput, type SectionSearchProviderProps } from './SectionSearchProvider';
|
|
2
2
|
export { SectionSearchContext, useSectionSearchContext, type SectionSearchContextValue } from './SectionSearchContext';
|
|
3
3
|
export { SectionItemGrid, type SectionItemGridProps } from './SectionItemGrid';
|
|
4
|
-
export { SectionLoading, type SectionLoadingProps } from './SectionLoading';
|
|
5
4
|
export { SectionError, type SectionErrorProps } from './SectionError';
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/section-primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,KAAK,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACvH,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACvH,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/section-primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,KAAK,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACvH,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACvH,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { SectionSearchProvider } from './SectionSearchProvider';
|
|
2
2
|
export { SectionSearchContext, useSectionSearchContext } from './SectionSearchContext';
|
|
3
3
|
export { SectionItemGrid } from './SectionItemGrid';
|
|
4
|
-
export { SectionLoading } from './SectionLoading';
|
|
5
4
|
export { SectionError } from './SectionError';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AmazonDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/AmazonDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"AmazonDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/AmazonDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkU9D,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,uBAAuB;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,yFAsc1B,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -225,22 +225,6 @@ const createStyles = (theme = {}, isMobile = false) => ({
|
|
|
225
225
|
fontWeight: 700,
|
|
226
226
|
color: 'var(--seekora-text-primary, #0f1111)',
|
|
227
227
|
},
|
|
228
|
-
loading: {
|
|
229
|
-
display: 'flex',
|
|
230
|
-
alignItems: 'center',
|
|
231
|
-
justifyContent: 'center',
|
|
232
|
-
padding: '40px',
|
|
233
|
-
color: 'var(--seekora-text-secondary, #565959)',
|
|
234
|
-
gap: '10px',
|
|
235
|
-
},
|
|
236
|
-
spinner: {
|
|
237
|
-
width: '20px',
|
|
238
|
-
height: '20px',
|
|
239
|
-
border: '2px solid var(--seekora-border-color, #ddd)',
|
|
240
|
-
borderTopColor: 'var(--seekora-primary, #f90)',
|
|
241
|
-
borderRadius: '50%',
|
|
242
|
-
animation: 'seekora-spin 0.8s linear infinite',
|
|
243
|
-
},
|
|
244
228
|
empty: {
|
|
245
229
|
padding: '40px 20px',
|
|
246
230
|
textAlign: 'center',
|
|
@@ -306,7 +290,7 @@ const RatingStars = ({ rating, count }) => {
|
|
|
306
290
|
")"))));
|
|
307
291
|
};
|
|
308
292
|
export const AmazonDropdown = forwardRef(function AmazonDropdown(props, ref) {
|
|
309
|
-
const { query, isOpen = true, loading = false, suggestions = [], products = [], categories = [], recentSearches = [], trendingSearches = [], filteredTabs = [], activeTab = 'all', suggestionFields = { query: 'query' }, productFields = { id: 'id', title: 'title' }, categoryFields = { id: 'id', label: 'label' }, productDisplay = {}, theme = {}, showDepartments = true, currentDepartment, departments = [], showPrime = false, width = '700px', maxHeight = '500px', zIndex = 1000, className, style, classNames = {}, onSuggestionSelect, onProductClick, onCategoryClick, onTabChange, onRecentClick, onRecentRemove, onRecentClearAll, onViewAll, onClose, header, footer,
|
|
293
|
+
const { query, isOpen = true, loading = false, suggestions = [], products = [], categories = [], recentSearches = [], trendingSearches = [], filteredTabs = [], activeTab = 'all', suggestionFields = { query: 'query' }, productFields = { id: 'id', title: 'title' }, categoryFields = { id: 'id', label: 'label' }, productDisplay = {}, theme = {}, showDepartments = true, currentDepartment, departments = [], showPrime = false, width = '700px', maxHeight = '500px', zIndex = 1000, className, style, classNames = {}, onSuggestionSelect, onProductClick, onCategoryClick, onTabChange, onRecentClick, onRecentRemove, onRecentClearAll, onViewAll, onClose, header, footer, renderEmpty, } = props;
|
|
310
294
|
// Inject global responsive styles
|
|
311
295
|
useInjectResponsiveStyles();
|
|
312
296
|
// Responsive state
|
|
@@ -403,9 +387,7 @@ export const AmazonDropdown = forwardRef(function AmazonDropdown(props, ref) {
|
|
|
403
387
|
}
|
|
404
388
|
`),
|
|
405
389
|
header,
|
|
406
|
-
|
|
407
|
-
React.createElement("div", { style: styles.spinner }),
|
|
408
|
-
React.createElement("span", null, "Searching...")))) : (React.createElement(React.Fragment, null,
|
|
390
|
+
React.createElement(React.Fragment, null,
|
|
409
391
|
filteredTabs.length > 0 && (React.createElement("div", { style: {
|
|
410
392
|
display: 'flex',
|
|
411
393
|
gap: '8px',
|
|
@@ -510,7 +492,7 @@ export const AmazonDropdown = forwardRef(function AmazonDropdown(props, ref) {
|
|
|
510
492
|
currency: '',
|
|
511
493
|
priceDecimals: productDisplay.priceDecimals
|
|
512
494
|
}))),
|
|
513
|
-
product.rating && (React.createElement(RatingStars, { rating: parseFloat(String(product.rating)), count: product.reviewCount ? parseInt(String(product.reviewCount)) : undefined }))))))))))
|
|
495
|
+
product.rating && (React.createElement(RatingStars, { rating: parseFloat(String(product.rating)), count: product.reviewCount ? parseInt(String(product.reviewCount)) : undefined })))))))))),
|
|
514
496
|
footer !== undefined ? footer : (React.createElement("div", { style: styles.footer },
|
|
515
497
|
React.createElement("div", { style: styles.keyboard },
|
|
516
498
|
React.createElement("span", { style: styles.key }, "\u2191"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/GoogleDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"GoogleDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/GoogleDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAiO9D,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,4BAA4B;IAC5B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,8BAA8B;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,eAAO,MAAM,cAAc,yFA6T1B,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -177,22 +177,6 @@ const createStyles = (isMobile = false) => ({
|
|
|
177
177
|
backgroundColor: 'var(--seekora-bg-hover, #f1f3f4)',
|
|
178
178
|
color: 'var(--seekora-text-primary, #202124)',
|
|
179
179
|
},
|
|
180
|
-
loading: {
|
|
181
|
-
display: 'flex',
|
|
182
|
-
alignItems: 'center',
|
|
183
|
-
justifyContent: 'center',
|
|
184
|
-
padding: '24px',
|
|
185
|
-
color: 'var(--seekora-text-secondary, #5f6368)',
|
|
186
|
-
gap: '12px',
|
|
187
|
-
},
|
|
188
|
-
spinner: {
|
|
189
|
-
width: '24px',
|
|
190
|
-
height: '24px',
|
|
191
|
-
border: '3px solid var(--seekora-border-color, #e8eaed)',
|
|
192
|
-
borderTopColor: 'var(--seekora-primary, #4285f4)',
|
|
193
|
-
borderRadius: '50%',
|
|
194
|
-
animation: 'seekora-spin 0.8s linear infinite',
|
|
195
|
-
},
|
|
196
180
|
empty: {
|
|
197
181
|
padding: '24px',
|
|
198
182
|
textAlign: 'center',
|
|
@@ -214,7 +198,7 @@ const RemoveIcon = () => (React.createElement("svg", { viewBox: "0 0 24 24", fil
|
|
|
214
198
|
const ArrowIcon = () => (React.createElement("svg", { viewBox: "0 0 24 24", fill: "none", width: "20", height: "20" },
|
|
215
199
|
React.createElement("path", { d: "M9 5l-4 4 4 4", stroke: "currentColor", strokeWidth: "2", fill: "none", transform: "rotate(-90 12 12)" })));
|
|
216
200
|
export const GoogleDropdown = forwardRef(function GoogleDropdown(props, ref) {
|
|
217
|
-
const { query, isOpen = true, loading = false, suggestions = [], recentSearches = [], trendingSearches = [], suggestionFields = { query: 'query' }, theme = {}, showFeelingLucky = true, feelingLuckyText = "I'm Feeling Lucky", showRemoveRecent = true, showVoiceSearch = false, showTrendingIndicator = true, width = '100%', maxHeight = '400px', zIndex = 1000, className, style, classNames = {}, onSuggestionSelect, onRecentClick, onRecentRemove, onVoiceSearch, onFeelingLucky, onClose, onSearchSubmit, header, footer,
|
|
201
|
+
const { query, isOpen = true, loading = false, suggestions = [], recentSearches = [], trendingSearches = [], suggestionFields = { query: 'query' }, theme = {}, showFeelingLucky = true, feelingLuckyText = "I'm Feeling Lucky", showRemoveRecent = true, showVoiceSearch = false, showTrendingIndicator = true, width = '100%', maxHeight = '400px', zIndex = 1000, className, style, classNames = {}, onSuggestionSelect, onRecentClick, onRecentRemove, onVoiceSearch, onFeelingLucky, onClose, onSearchSubmit, header, footer, renderEmpty, } = props;
|
|
218
202
|
// Inject global responsive styles
|
|
219
203
|
useInjectResponsiveStyles();
|
|
220
204
|
// Responsive state
|
|
@@ -329,8 +313,7 @@ export const GoogleDropdown = forwardRef(function GoogleDropdown(props, ref) {
|
|
|
329
313
|
}
|
|
330
314
|
`),
|
|
331
315
|
header,
|
|
332
|
-
|
|
333
|
-
React.createElement("div", { style: styles.spinner })))) : (React.createElement(React.Fragment, null,
|
|
316
|
+
React.createElement(React.Fragment, null,
|
|
334
317
|
React.createElement("ul", { style: styles.list },
|
|
335
318
|
showRecent && (React.createElement(React.Fragment, null,
|
|
336
319
|
recentQueries.map((q, idx) => {
|
|
@@ -360,7 +343,7 @@ export const GoogleDropdown = forwardRef(function GoogleDropdown(props, ref) {
|
|
|
360
343
|
"\"")))),
|
|
361
344
|
(showFeelingLucky || showVoiceSearch) && (React.createElement("div", { style: styles.footer }, showFeelingLucky && (React.createElement(React.Fragment, null,
|
|
362
345
|
React.createElement("button", { style: mergeStyles(styles.footerButton, hoveredBtn === 'search' ? styles.footerButtonHover : undefined), onMouseEnter: () => setHoveredBtn('search'), onMouseLeave: () => setHoveredBtn(null), onClick: () => onSearchSubmit?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : '')) }, "Search"),
|
|
363
|
-
React.createElement("button", { style: mergeStyles(styles.footerButton, hoveredBtn === 'lucky' ? styles.footerButtonHover : undefined), onMouseEnter: () => setHoveredBtn('lucky'), onMouseLeave: () => setHoveredBtn(null), onClick: () => onFeelingLucky?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : '')) }, feelingLuckyText))))))
|
|
346
|
+
React.createElement("button", { style: mergeStyles(styles.footerButton, hoveredBtn === 'lucky' ? styles.footerButtonHover : undefined), onMouseEnter: () => setHoveredBtn('lucky'), onMouseLeave: () => setHoveredBtn(null), onClick: () => onFeelingLucky?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : '')) }, feelingLuckyText)))))),
|
|
364
347
|
footer));
|
|
365
348
|
});
|
|
366
349
|
export default GoogleDropdown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MinimalDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/MinimalDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA6K9D,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"MinimalDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/MinimalDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA6K9D,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,eAAe,0FA4T3B,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -164,7 +164,7 @@ const createStyles = () => ({
|
|
|
164
164
|
},
|
|
165
165
|
});
|
|
166
166
|
export const MinimalDropdown = forwardRef(function MinimalDropdown(props, ref) {
|
|
167
|
-
const { query, isOpen = true, loading = false, suggestions = [], products = [], recentSearches = [], suggestionFields = { query: 'query' }, productFields = { id: 'id', title: 'title' }, productDisplay = {}, theme = {}, showIndices = false, showTypeLabels = false, showSectionDividers = true, width = '100%', maxHeight = '400px', zIndex = 1000, className, style, classNames = {}, onSuggestionSelect, onProductClick, onRecentClick, onClose, onSearchSubmit, header, footer,
|
|
167
|
+
const { query, isOpen = true, loading = false, suggestions = [], products = [], recentSearches = [], suggestionFields = { query: 'query' }, productFields = { id: 'id', title: 'title' }, productDisplay = {}, theme = {}, showIndices = false, showTypeLabels = false, showSectionDividers = true, width = '100%', maxHeight = '400px', zIndex = 1000, className, style, classNames = {}, onSuggestionSelect, onProductClick, onRecentClick, onClose, onSearchSubmit, header, footer, renderEmpty, } = props;
|
|
168
168
|
// Inject global responsive styles
|
|
169
169
|
useInjectResponsiveStyles();
|
|
170
170
|
// Responsive state
|
|
@@ -250,7 +250,7 @@ export const MinimalDropdown = forwardRef(function MinimalDropdown(props, ref) {
|
|
|
250
250
|
}
|
|
251
251
|
`),
|
|
252
252
|
header,
|
|
253
|
-
React.createElement("div", { ref: listRef, style: { maxHeight, overflowY: 'auto' } },
|
|
253
|
+
React.createElement("div", { ref: listRef, style: { maxHeight, overflowY: 'auto' } }, allItems.length === 0 ? (renderEmpty ? renderEmpty(query) : (React.createElement("div", { style: styles.empty }, query ? `No results for "${query}"` : 'Start typing to search'))) : (React.createElement(React.Fragment, null,
|
|
254
254
|
showRecent && (React.createElement(React.Fragment, null,
|
|
255
255
|
showSectionDividers && (React.createElement("div", { style: styles.divider }, "Recent")),
|
|
256
256
|
recentQueries.map((q, idx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileSheetDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/MobileSheetDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwS9D,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,kCAAkC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"MobileSheetDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/suggestions/MobileSheetDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwS9D,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,kCAAkC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,mBAAmB,8FAmb/B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|