@seekora-ai/ui-sdk-react 1.0.0

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.
Files changed (169) hide show
  1. package/dist/components/Breadcrumb.d.ts +43 -0
  2. package/dist/components/Breadcrumb.d.ts.map +1 -0
  3. package/dist/components/Breadcrumb.js +119 -0
  4. package/dist/components/ClearRefinements.d.ts +42 -0
  5. package/dist/components/ClearRefinements.d.ts.map +1 -0
  6. package/dist/components/ClearRefinements.js +80 -0
  7. package/dist/components/CurrentRefinements.d.ts +41 -0
  8. package/dist/components/CurrentRefinements.d.ts.map +1 -0
  9. package/dist/components/CurrentRefinements.js +83 -0
  10. package/dist/components/Facets.d.ts +53 -0
  11. package/dist/components/Facets.d.ts.map +1 -0
  12. package/dist/components/Facets.js +195 -0
  13. package/dist/components/FederatedDropdown.d.ts +92 -0
  14. package/dist/components/FederatedDropdown.d.ts.map +1 -0
  15. package/dist/components/FederatedDropdown.js +510 -0
  16. package/dist/components/HierarchicalMenu.d.ts +55 -0
  17. package/dist/components/HierarchicalMenu.d.ts.map +1 -0
  18. package/dist/components/HierarchicalMenu.js +168 -0
  19. package/dist/components/Highlight.d.ts +51 -0
  20. package/dist/components/Highlight.d.ts.map +1 -0
  21. package/dist/components/Highlight.js +155 -0
  22. package/dist/components/HitsPerPage.d.ts +41 -0
  23. package/dist/components/HitsPerPage.d.ts.map +1 -0
  24. package/dist/components/HitsPerPage.js +72 -0
  25. package/dist/components/InfiniteHits.d.ts +56 -0
  26. package/dist/components/InfiniteHits.d.ts.map +1 -0
  27. package/dist/components/InfiniteHits.js +181 -0
  28. package/dist/components/MobileFilters.d.ts +71 -0
  29. package/dist/components/MobileFilters.d.ts.map +1 -0
  30. package/dist/components/MobileFilters.js +242 -0
  31. package/dist/components/Pagination.d.ts +44 -0
  32. package/dist/components/Pagination.d.ts.map +1 -0
  33. package/dist/components/Pagination.js +142 -0
  34. package/dist/components/QuerySuggestions.d.ts +38 -0
  35. package/dist/components/QuerySuggestions.d.ts.map +1 -0
  36. package/dist/components/QuerySuggestions.js +86 -0
  37. package/dist/components/QuerySuggestionsDropdown.d.ts +86 -0
  38. package/dist/components/QuerySuggestionsDropdown.d.ts.map +1 -0
  39. package/dist/components/QuerySuggestionsDropdown.js +395 -0
  40. package/dist/components/RangeInput.d.ts +58 -0
  41. package/dist/components/RangeInput.d.ts.map +1 -0
  42. package/dist/components/RangeInput.js +203 -0
  43. package/dist/components/RangeSlider.d.ts +51 -0
  44. package/dist/components/RangeSlider.d.ts.map +1 -0
  45. package/dist/components/RangeSlider.js +193 -0
  46. package/dist/components/Recommendations.d.ts +90 -0
  47. package/dist/components/Recommendations.d.ts.map +1 -0
  48. package/dist/components/Recommendations.js +270 -0
  49. package/dist/components/RichQuerySuggestions.d.ts +77 -0
  50. package/dist/components/RichQuerySuggestions.d.ts.map +1 -0
  51. package/dist/components/RichQuerySuggestions.js +492 -0
  52. package/dist/components/SearchBar.d.ts +40 -0
  53. package/dist/components/SearchBar.d.ts.map +1 -0
  54. package/dist/components/SearchBar.js +217 -0
  55. package/dist/components/SearchBarWithSuggestions.d.ts +99 -0
  56. package/dist/components/SearchBarWithSuggestions.d.ts.map +1 -0
  57. package/dist/components/SearchBarWithSuggestions.js +275 -0
  58. package/dist/components/SearchLayout.d.ts +35 -0
  59. package/dist/components/SearchLayout.d.ts.map +1 -0
  60. package/dist/components/SearchLayout.js +56 -0
  61. package/dist/components/SearchProvider.d.ts +28 -0
  62. package/dist/components/SearchProvider.d.ts.map +1 -0
  63. package/dist/components/SearchProvider.js +43 -0
  64. package/dist/components/SearchResults.d.ts +51 -0
  65. package/dist/components/SearchResults.d.ts.map +1 -0
  66. package/dist/components/SearchResults.js +485 -0
  67. package/dist/components/SortBy.d.ts +44 -0
  68. package/dist/components/SortBy.d.ts.map +1 -0
  69. package/dist/components/SortBy.js +61 -0
  70. package/dist/components/Stats.d.ts +37 -0
  71. package/dist/components/Stats.d.ts.map +1 -0
  72. package/dist/components/Stats.js +52 -0
  73. package/dist/components/suggestions/AmazonDropdown.d.ts +30 -0
  74. package/dist/components/suggestions/AmazonDropdown.d.ts.map +1 -0
  75. package/dist/components/suggestions/AmazonDropdown.js +529 -0
  76. package/dist/components/suggestions/GoogleDropdown.d.ts +31 -0
  77. package/dist/components/suggestions/GoogleDropdown.d.ts.map +1 -0
  78. package/dist/components/suggestions/GoogleDropdown.js +370 -0
  79. package/dist/components/suggestions/MinimalDropdown.d.ts +24 -0
  80. package/dist/components/suggestions/MinimalDropdown.d.ts.map +1 -0
  81. package/dist/components/suggestions/MinimalDropdown.js +314 -0
  82. package/dist/components/suggestions/MobileSheetDropdown.d.ts +31 -0
  83. package/dist/components/suggestions/MobileSheetDropdown.d.ts.map +1 -0
  84. package/dist/components/suggestions/MobileSheetDropdown.js +485 -0
  85. package/dist/components/suggestions/PinterestDropdown.d.ts +29 -0
  86. package/dist/components/suggestions/PinterestDropdown.d.ts.map +1 -0
  87. package/dist/components/suggestions/PinterestDropdown.js +450 -0
  88. package/dist/components/suggestions/ShopifyDropdown.d.ts +27 -0
  89. package/dist/components/suggestions/ShopifyDropdown.d.ts.map +1 -0
  90. package/dist/components/suggestions/ShopifyDropdown.js +451 -0
  91. package/dist/components/suggestions/SpotlightDropdown.d.ts +33 -0
  92. package/dist/components/suggestions/SpotlightDropdown.d.ts.map +1 -0
  93. package/dist/components/suggestions/SpotlightDropdown.js +547 -0
  94. package/dist/components/suggestions/SuggestionSearchBar.d.ts +123 -0
  95. package/dist/components/suggestions/SuggestionSearchBar.d.ts.map +1 -0
  96. package/dist/components/suggestions/SuggestionSearchBar.js +652 -0
  97. package/dist/components/suggestions/index.d.ts +37 -0
  98. package/dist/components/suggestions/index.d.ts.map +1 -0
  99. package/dist/components/suggestions/index.js +59 -0
  100. package/dist/components/suggestions/styles/index.d.ts +11 -0
  101. package/dist/components/suggestions/styles/index.d.ts.map +1 -0
  102. package/dist/components/suggestions/styles/index.js +289 -0
  103. package/dist/components/suggestions/styles/responsive.d.ts +107 -0
  104. package/dist/components/suggestions/styles/responsive.d.ts.map +1 -0
  105. package/dist/components/suggestions/styles/responsive.js +237 -0
  106. package/dist/components/suggestions/types.d.ts +489 -0
  107. package/dist/components/suggestions/types.d.ts.map +1 -0
  108. package/dist/components/suggestions/types.js +6 -0
  109. package/dist/components/suggestions/utils.d.ts +213 -0
  110. package/dist/components/suggestions/utils.d.ts.map +1 -0
  111. package/dist/components/suggestions/utils.js +514 -0
  112. package/dist/hooks/useAnalytics.d.ts +20 -0
  113. package/dist/hooks/useAnalytics.d.ts.map +1 -0
  114. package/dist/hooks/useAnalytics.js +62 -0
  115. package/dist/hooks/useNaturalLanguageFilters.d.ts +48 -0
  116. package/dist/hooks/useNaturalLanguageFilters.d.ts.map +1 -0
  117. package/dist/hooks/useNaturalLanguageFilters.js +221 -0
  118. package/dist/hooks/useQuerySuggestions.d.ts +21 -0
  119. package/dist/hooks/useQuerySuggestions.d.ts.map +1 -0
  120. package/dist/hooks/useQuerySuggestions.js +68 -0
  121. package/dist/hooks/useQuerySuggestionsEnhanced.d.ts +114 -0
  122. package/dist/hooks/useQuerySuggestionsEnhanced.d.ts.map +1 -0
  123. package/dist/hooks/useQuerySuggestionsEnhanced.js +376 -0
  124. package/dist/hooks/useSearchState.d.ts +35 -0
  125. package/dist/hooks/useSearchState.d.ts.map +1 -0
  126. package/dist/hooks/useSearchState.js +68 -0
  127. package/dist/hooks/useSeekoraSearch.d.ts +20 -0
  128. package/dist/hooks/useSeekoraSearch.d.ts.map +1 -0
  129. package/dist/hooks/useSeekoraSearch.js +63 -0
  130. package/dist/hooks/useSmartSuggestions.d.ts +55 -0
  131. package/dist/hooks/useSmartSuggestions.d.ts.map +1 -0
  132. package/dist/hooks/useSmartSuggestions.js +236 -0
  133. package/dist/hooks/useSuggestionsAnalytics.d.ts +91 -0
  134. package/dist/hooks/useSuggestionsAnalytics.d.ts.map +1 -0
  135. package/dist/hooks/useSuggestionsAnalytics.js +226 -0
  136. package/dist/index.d.ts +80 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +86 -0
  139. package/dist/index.umd.js +1 -0
  140. package/dist/src/index.d.ts +2849 -0
  141. package/dist/src/index.esm.js +11679 -0
  142. package/dist/src/index.esm.js.map +1 -0
  143. package/dist/src/index.js +11761 -0
  144. package/dist/src/index.js.map +1 -0
  145. package/dist/themes/createTheme.d.ts +8 -0
  146. package/dist/themes/createTheme.d.ts.map +1 -0
  147. package/dist/themes/createTheme.js +10 -0
  148. package/dist/themes/dark.d.ts +6 -0
  149. package/dist/themes/dark.d.ts.map +1 -0
  150. package/dist/themes/dark.js +34 -0
  151. package/dist/themes/default.d.ts +6 -0
  152. package/dist/themes/default.d.ts.map +1 -0
  153. package/dist/themes/default.js +71 -0
  154. package/dist/themes/mergeThemes.d.ts +7 -0
  155. package/dist/themes/mergeThemes.d.ts.map +1 -0
  156. package/dist/themes/mergeThemes.js +6 -0
  157. package/dist/themes/minimal.d.ts +6 -0
  158. package/dist/themes/minimal.d.ts.map +1 -0
  159. package/dist/themes/minimal.js +34 -0
  160. package/dist/themes/suggestions.d.ts +216 -0
  161. package/dist/themes/suggestions.d.ts.map +1 -0
  162. package/dist/themes/suggestions.js +546 -0
  163. package/dist/themes/types.d.ts +7 -0
  164. package/dist/themes/types.d.ts.map +1 -0
  165. package/dist/themes/types.js +6 -0
  166. package/dist/types/index.d.ts +33 -0
  167. package/dist/types/index.d.ts.map +1 -0
  168. package/dist/types/index.js +4 -0
  169. package/package.json +65 -0
@@ -0,0 +1,546 @@
1
+ /**
2
+ * Query Suggestions Theme System
3
+ *
4
+ * Provides comprehensive theming for query suggestions components including:
5
+ * - CSS variables for easy customization
6
+ * - Pre-built theme presets (light, dark, minimal, branded)
7
+ * - Component-specific style generators
8
+ * - Responsive utilities
9
+ */
10
+ // ============================================================================
11
+ // Theme Presets
12
+ // ============================================================================
13
+ export const lightThemeVariables = {
14
+ // Colors
15
+ '--seekora-bg-surface': '#ffffff',
16
+ '--seekora-bg-secondary': '#f9fafb',
17
+ '--seekora-bg-tertiary': '#f3f4f6',
18
+ '--seekora-bg-hover': '#f3f4f6',
19
+ '--seekora-text-primary': '#111827',
20
+ '--seekora-text-secondary': '#6b7280',
21
+ '--seekora-text-tertiary': '#9ca3af',
22
+ '--seekora-border-color': '#e5e7eb',
23
+ '--seekora-primary': '#3b82f6',
24
+ '--seekora-primary-light': '#eff6ff',
25
+ '--seekora-primary-dark': '#1d4ed8',
26
+ '--seekora-highlight-bg': '#fef3c7',
27
+ '--seekora-success': '#10b981',
28
+ '--seekora-warning': '#f59e0b',
29
+ '--seekora-error': '#ef4444',
30
+ // Typography
31
+ '--seekora-font-family': '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
32
+ '--seekora-font-size-xs': '11px',
33
+ '--seekora-font-size-sm': '12px',
34
+ '--seekora-font-size-base': '14px',
35
+ '--seekora-font-size-lg': '16px',
36
+ '--seekora-font-weight-normal': '400',
37
+ '--seekora-font-weight-medium': '500',
38
+ '--seekora-font-weight-semibold': '600',
39
+ '--seekora-font-weight-bold': '700',
40
+ '--seekora-line-height-tight': '1.25',
41
+ '--seekora-line-height-normal': '1.5',
42
+ '--seekora-line-height-relaxed': '1.75',
43
+ // Spacing
44
+ '--seekora-spacing-xs': '4px',
45
+ '--seekora-spacing-sm': '8px',
46
+ '--seekora-spacing-md': '12px',
47
+ '--seekora-spacing-lg': '16px',
48
+ '--seekora-spacing-xl': '24px',
49
+ // Border radius
50
+ '--seekora-border-radius-sm': '4px',
51
+ '--seekora-border-radius': '6px',
52
+ '--seekora-border-radius-lg': '8px',
53
+ '--seekora-border-radius-xl': '12px',
54
+ '--seekora-border-radius-full': '9999px',
55
+ // Shadows
56
+ '--seekora-shadow-sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
57
+ '--seekora-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
58
+ '--seekora-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
59
+ '--seekora-shadow-lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
60
+ '--seekora-shadow-xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
61
+ // Transitions
62
+ '--seekora-transition-fast': '100ms ease',
63
+ '--seekora-transition-normal': '150ms ease',
64
+ '--seekora-transition-slow': '300ms ease',
65
+ // Z-index
66
+ '--seekora-z-dropdown': '1000',
67
+ '--seekora-z-modal': '1100',
68
+ '--seekora-z-tooltip': '1200',
69
+ };
70
+ export const darkThemeVariables = {
71
+ ...lightThemeVariables,
72
+ // Override colors for dark mode
73
+ '--seekora-bg-surface': '#1f2937',
74
+ '--seekora-bg-secondary': '#111827',
75
+ '--seekora-bg-tertiary': '#374151',
76
+ '--seekora-bg-hover': '#374151',
77
+ '--seekora-text-primary': '#f9fafb',
78
+ '--seekora-text-secondary': '#d1d5db',
79
+ '--seekora-text-tertiary': '#9ca3af',
80
+ '--seekora-border-color': '#4b5563',
81
+ '--seekora-primary': '#60a5fa',
82
+ '--seekora-primary-light': '#1e3a5f',
83
+ '--seekora-primary-dark': '#93c5fd',
84
+ '--seekora-highlight-bg': '#854d0e',
85
+ // Shadows for dark mode
86
+ '--seekora-shadow-sm': '0 1px 2px 0 rgba(0, 0, 0, 0.3)',
87
+ '--seekora-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.4), 0 1px 2px 0 rgba(0, 0, 0, 0.3)',
88
+ '--seekora-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3)',
89
+ '--seekora-shadow-lg': '0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.3)',
90
+ '--seekora-shadow-xl': '0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4)',
91
+ };
92
+ export const minimalThemeVariables = {
93
+ ...lightThemeVariables,
94
+ // Minimal styling overrides
95
+ '--seekora-border-color': '#f3f4f6',
96
+ '--seekora-shadow-sm': 'none',
97
+ '--seekora-shadow': '0 1px 2px 0 rgba(0, 0, 0, 0.03)',
98
+ '--seekora-shadow-md': '0 2px 4px 0 rgba(0, 0, 0, 0.05)',
99
+ '--seekora-shadow-lg': '0 4px 8px 0 rgba(0, 0, 0, 0.08)',
100
+ '--seekora-shadow-xl': '0 8px 16px 0 rgba(0, 0, 0, 0.1)',
101
+ '--seekora-border-radius-sm': '2px',
102
+ '--seekora-border-radius': '4px',
103
+ '--seekora-border-radius-lg': '6px',
104
+ '--seekora-border-radius-xl': '8px',
105
+ };
106
+ // Brand color presets
107
+ export const brandPresets = {
108
+ blue: {
109
+ '--seekora-primary': '#3b82f6',
110
+ '--seekora-primary-light': '#eff6ff',
111
+ '--seekora-primary-dark': '#1d4ed8',
112
+ },
113
+ green: {
114
+ '--seekora-primary': '#10b981',
115
+ '--seekora-primary-light': '#ecfdf5',
116
+ '--seekora-primary-dark': '#059669',
117
+ },
118
+ purple: {
119
+ '--seekora-primary': '#8b5cf6',
120
+ '--seekora-primary-light': '#f5f3ff',
121
+ '--seekora-primary-dark': '#7c3aed',
122
+ },
123
+ red: {
124
+ '--seekora-primary': '#ef4444',
125
+ '--seekora-primary-light': '#fef2f2',
126
+ '--seekora-primary-dark': '#dc2626',
127
+ },
128
+ orange: {
129
+ '--seekora-primary': '#f97316',
130
+ '--seekora-primary-light': '#fff7ed',
131
+ '--seekora-primary-dark': '#ea580c',
132
+ },
133
+ teal: {
134
+ '--seekora-primary': '#14b8a6',
135
+ '--seekora-primary-light': '#f0fdfa',
136
+ '--seekora-primary-dark': '#0d9488',
137
+ },
138
+ pink: {
139
+ '--seekora-primary': '#ec4899',
140
+ '--seekora-primary-light': '#fdf2f8',
141
+ '--seekora-primary-dark': '#db2777',
142
+ },
143
+ };
144
+ // ============================================================================
145
+ // CSS Generation Utilities
146
+ // ============================================================================
147
+ /**
148
+ * Generate CSS variables string from theme variables object
149
+ */
150
+ export function generateCSSVariables(variables) {
151
+ return Object.entries(variables)
152
+ .map(([key, value]) => `${key}: ${value};`)
153
+ .join('\n');
154
+ }
155
+ /**
156
+ * Generate a style tag with CSS variables for a specific scope
157
+ */
158
+ export function generateThemeStyleTag(variables, scope = ':root') {
159
+ return `
160
+ ${scope} {
161
+ ${generateCSSVariables(variables)}
162
+ }
163
+ `;
164
+ }
165
+ /**
166
+ * Create a complete theme object from variables
167
+ */
168
+ export function createSuggestionsTheme(baseTheme = 'light', overrides = {}, brandColor) {
169
+ const baseVariables = {
170
+ light: lightThemeVariables,
171
+ dark: darkThemeVariables,
172
+ minimal: minimalThemeVariables,
173
+ }[baseTheme];
174
+ const brandOverrides = brandColor ? brandPresets[brandColor] : {};
175
+ return {
176
+ ...baseVariables,
177
+ ...brandOverrides,
178
+ ...overrides,
179
+ };
180
+ }
181
+ // ============================================================================
182
+ // Component Style Generators
183
+ // ============================================================================
184
+ /**
185
+ * Generate styles for dropdown container
186
+ */
187
+ export function getDropdownContainerStyles(theme) {
188
+ return {
189
+ backgroundColor: `var(--seekora-bg-surface, ${theme['--seekora-bg-surface']})`,
190
+ border: `1px solid var(--seekora-border-color, ${theme['--seekora-border-color']})`,
191
+ borderRadius: `var(--seekora-border-radius-lg, ${theme['--seekora-border-radius-lg']})`,
192
+ boxShadow: `var(--seekora-shadow-xl, ${theme['--seekora-shadow-xl']})`,
193
+ fontFamily: `var(--seekora-font-family, ${theme['--seekora-font-family']})`,
194
+ fontSize: `var(--seekora-font-size-base, ${theme['--seekora-font-size-base']})`,
195
+ color: `var(--seekora-text-primary, ${theme['--seekora-text-primary']})`,
196
+ };
197
+ }
198
+ /**
199
+ * Generate styles for suggestion item
200
+ */
201
+ export function getSuggestionItemStyles(theme, isActive = false) {
202
+ return {
203
+ padding: `var(--seekora-spacing-md, ${theme['--seekora-spacing-md']}) var(--seekora-spacing-lg, ${theme['--seekora-spacing-lg']})`,
204
+ cursor: 'pointer',
205
+ transition: `background-color var(--seekora-transition-fast, ${theme['--seekora-transition-fast']})`,
206
+ backgroundColor: isActive
207
+ ? `var(--seekora-bg-hover, ${theme['--seekora-bg-hover']})`
208
+ : 'transparent',
209
+ };
210
+ }
211
+ /**
212
+ * Generate styles for product card
213
+ */
214
+ export function getProductCardStyles(theme, isHovered = false) {
215
+ return {
216
+ backgroundColor: `var(--seekora-bg-surface, ${theme['--seekora-bg-surface']})`,
217
+ borderRadius: `var(--seekora-border-radius-lg, ${theme['--seekora-border-radius-lg']})`,
218
+ border: `1px solid var(--seekora-border-color, ${theme['--seekora-border-color']})`,
219
+ overflow: 'hidden',
220
+ cursor: 'pointer',
221
+ transition: `transform var(--seekora-transition-normal, ${theme['--seekora-transition-normal']}), box-shadow var(--seekora-transition-normal, ${theme['--seekora-transition-normal']})`,
222
+ transform: isHovered ? 'translateY(-2px)' : 'none',
223
+ boxShadow: isHovered
224
+ ? `var(--seekora-shadow-md, ${theme['--seekora-shadow-md']})`
225
+ : 'none',
226
+ };
227
+ }
228
+ /**
229
+ * Generate styles for highlight/mark
230
+ */
231
+ export function getHighlightStyles(theme) {
232
+ return {
233
+ backgroundColor: `var(--seekora-highlight-bg, ${theme['--seekora-highlight-bg']})`,
234
+ fontWeight: `var(--seekora-font-weight-semibold, ${theme['--seekora-font-weight-semibold']})`,
235
+ padding: '0 2px',
236
+ borderRadius: '2px',
237
+ };
238
+ }
239
+ // ============================================================================
240
+ // CSS Classes Generator
241
+ // ============================================================================
242
+ /**
243
+ * Generate complete CSS stylesheet for suggestions components
244
+ */
245
+ export function generateSuggestionsStylesheet(theme = lightThemeVariables) {
246
+ return `
247
+ /* Seekora Query Suggestions Styles */
248
+ .seekora-suggestions {
249
+ ${generateCSSVariables(theme)}
250
+ }
251
+
252
+ /* Container */
253
+ .seekora-suggestions-container {
254
+ background-color: var(--seekora-bg-surface);
255
+ border: 1px solid var(--seekora-border-color);
256
+ border-radius: var(--seekora-border-radius-lg);
257
+ box-shadow: var(--seekora-shadow-xl);
258
+ font-family: var(--seekora-font-family);
259
+ font-size: var(--seekora-font-size-base);
260
+ color: var(--seekora-text-primary);
261
+ overflow: hidden;
262
+ }
263
+
264
+ /* Section */
265
+ .seekora-suggestions-section {
266
+ padding: var(--seekora-spacing-sm) 0;
267
+ }
268
+
269
+ .seekora-suggestions-section-title {
270
+ font-size: var(--seekora-font-size-xs);
271
+ font-weight: var(--seekora-font-weight-bold);
272
+ color: var(--seekora-text-tertiary);
273
+ text-transform: uppercase;
274
+ letter-spacing: 0.05em;
275
+ padding: var(--seekora-spacing-sm) var(--seekora-spacing-lg) var(--seekora-spacing-xs);
276
+ margin: 0;
277
+ }
278
+
279
+ /* Item */
280
+ .seekora-suggestions-item {
281
+ display: flex;
282
+ align-items: center;
283
+ gap: var(--seekora-spacing-md);
284
+ padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);
285
+ cursor: pointer;
286
+ transition: background-color var(--seekora-transition-fast);
287
+ }
288
+
289
+ .seekora-suggestions-item:hover,
290
+ .seekora-suggestions-item--active {
291
+ background-color: var(--seekora-bg-hover);
292
+ }
293
+
294
+ .seekora-suggestions-item-icon {
295
+ width: 16px;
296
+ height: 16px;
297
+ color: var(--seekora-text-secondary);
298
+ flex-shrink: 0;
299
+ }
300
+
301
+ .seekora-suggestions-item-text {
302
+ flex: 1;
303
+ overflow: hidden;
304
+ text-overflow: ellipsis;
305
+ white-space: nowrap;
306
+ }
307
+
308
+ .seekora-suggestions-item-count {
309
+ font-size: var(--seekora-font-size-sm);
310
+ color: var(--seekora-text-tertiary);
311
+ }
312
+
313
+ /* Highlight */
314
+ .seekora-suggestions mark,
315
+ .seekora-suggestions-highlight {
316
+ background-color: var(--seekora-highlight-bg);
317
+ font-weight: var(--seekora-font-weight-semibold);
318
+ padding: 0 2px;
319
+ border-radius: 2px;
320
+ }
321
+
322
+ /* Product Card */
323
+ .seekora-product-card {
324
+ background-color: var(--seekora-bg-surface);
325
+ border: 1px solid var(--seekora-border-color);
326
+ border-radius: var(--seekora-border-radius-lg);
327
+ overflow: hidden;
328
+ cursor: pointer;
329
+ transition: transform var(--seekora-transition-normal), box-shadow var(--seekora-transition-normal);
330
+ }
331
+
332
+ .seekora-product-card:hover {
333
+ transform: translateY(-2px);
334
+ box-shadow: var(--seekora-shadow-md);
335
+ }
336
+
337
+ .seekora-product-card-image {
338
+ width: 100%;
339
+ aspect-ratio: 1;
340
+ object-fit: cover;
341
+ background-color: var(--seekora-bg-secondary);
342
+ }
343
+
344
+ .seekora-product-card-info {
345
+ padding: var(--seekora-spacing-md);
346
+ }
347
+
348
+ .seekora-product-card-title {
349
+ font-size: var(--seekora-font-size-sm);
350
+ font-weight: var(--seekora-font-weight-medium);
351
+ color: var(--seekora-text-primary);
352
+ margin: 0;
353
+ overflow: hidden;
354
+ text-overflow: ellipsis;
355
+ display: -webkit-box;
356
+ -webkit-line-clamp: 2;
357
+ -webkit-box-orient: vertical;
358
+ }
359
+
360
+ .seekora-product-card-price {
361
+ font-size: var(--seekora-font-size-base);
362
+ font-weight: var(--seekora-font-weight-bold);
363
+ color: var(--seekora-primary);
364
+ margin-top: var(--seekora-spacing-xs);
365
+ }
366
+
367
+ /* Tabs */
368
+ .seekora-suggestions-tabs {
369
+ display: flex;
370
+ gap: var(--seekora-spacing-xs);
371
+ padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);
372
+ border-bottom: 1px solid var(--seekora-border-color);
373
+ overflow-x: auto;
374
+ }
375
+
376
+ .seekora-suggestions-tab {
377
+ display: inline-flex;
378
+ align-items: center;
379
+ gap: var(--seekora-spacing-sm);
380
+ padding: var(--seekora-spacing-sm) var(--seekora-spacing-md);
381
+ font-size: var(--seekora-font-size-sm);
382
+ font-weight: var(--seekora-font-weight-medium);
383
+ color: var(--seekora-text-secondary);
384
+ background-color: transparent;
385
+ border: 1px solid transparent;
386
+ border-radius: var(--seekora-border-radius-full);
387
+ cursor: pointer;
388
+ white-space: nowrap;
389
+ transition: all var(--seekora-transition-fast);
390
+ }
391
+
392
+ .seekora-suggestions-tab:hover {
393
+ background-color: var(--seekora-bg-hover);
394
+ }
395
+
396
+ .seekora-suggestions-tab--active {
397
+ color: var(--seekora-primary);
398
+ background-color: var(--seekora-primary-light);
399
+ border-color: var(--seekora-primary);
400
+ }
401
+
402
+ /* Brand chip */
403
+ .seekora-brand-chip {
404
+ display: inline-flex;
405
+ align-items: center;
406
+ gap: var(--seekora-spacing-sm);
407
+ padding: var(--seekora-spacing-sm) var(--seekora-spacing-md);
408
+ font-size: var(--seekora-font-size-sm);
409
+ font-weight: var(--seekora-font-weight-medium);
410
+ color: var(--seekora-text-primary);
411
+ background-color: var(--seekora-bg-surface);
412
+ border: 1px solid var(--seekora-border-color);
413
+ border-radius: var(--seekora-border-radius-lg);
414
+ cursor: pointer;
415
+ transition: all var(--seekora-transition-fast);
416
+ }
417
+
418
+ .seekora-brand-chip:hover {
419
+ border-color: var(--seekora-primary);
420
+ background-color: var(--seekora-primary-light);
421
+ }
422
+
423
+ /* Category pill */
424
+ .seekora-category-pill {
425
+ display: inline-flex;
426
+ align-items: center;
427
+ gap: var(--seekora-spacing-xs);
428
+ padding: 3px var(--seekora-spacing-sm);
429
+ font-size: var(--seekora-font-size-xs);
430
+ font-weight: var(--seekora-font-weight-medium);
431
+ color: var(--seekora-text-secondary);
432
+ background-color: var(--seekora-bg-tertiary);
433
+ border-radius: var(--seekora-border-radius-full);
434
+ cursor: pointer;
435
+ transition: all var(--seekora-transition-fast);
436
+ }
437
+
438
+ .seekora-category-pill:hover {
439
+ background-color: var(--seekora-primary-light);
440
+ color: var(--seekora-primary);
441
+ }
442
+
443
+ /* Loading */
444
+ .seekora-suggestions-loading {
445
+ display: flex;
446
+ align-items: center;
447
+ justify-content: center;
448
+ padding: var(--seekora-spacing-xl);
449
+ color: var(--seekora-text-secondary);
450
+ }
451
+
452
+ /* Empty state */
453
+ .seekora-suggestions-empty {
454
+ padding: var(--seekora-spacing-xl);
455
+ text-align: center;
456
+ color: var(--seekora-text-secondary);
457
+ }
458
+
459
+ /* Footer */
460
+ .seekora-suggestions-footer {
461
+ padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);
462
+ border-top: 1px solid var(--seekora-border-color);
463
+ background-color: var(--seekora-bg-secondary);
464
+ font-size: var(--seekora-font-size-sm);
465
+ color: var(--seekora-text-secondary);
466
+ }
467
+
468
+ /* Keyboard hint */
469
+ .seekora-keyboard-key {
470
+ display: inline-flex;
471
+ align-items: center;
472
+ justify-content: center;
473
+ min-width: 20px;
474
+ height: 18px;
475
+ padding: 0 4px;
476
+ border-radius: 3px;
477
+ background-color: var(--seekora-bg-secondary);
478
+ border: 1px solid var(--seekora-border-color);
479
+ font-size: 10px;
480
+ font-weight: var(--seekora-font-weight-medium);
481
+ }
482
+
483
+ /* Animations */
484
+ @keyframes seekora-spin {
485
+ from { transform: rotate(0deg); }
486
+ to { transform: rotate(360deg); }
487
+ }
488
+
489
+ @keyframes seekora-fade-in {
490
+ from { opacity: 0; transform: translateY(-8px); }
491
+ to { opacity: 1; transform: translateY(0); }
492
+ }
493
+
494
+ @keyframes seekora-fade-out {
495
+ from { opacity: 1; transform: translateY(0); }
496
+ to { opacity: 0; transform: translateY(-8px); }
497
+ }
498
+
499
+ .seekora-suggestions--entering {
500
+ animation: seekora-fade-in var(--seekora-transition-normal) ease-out;
501
+ }
502
+
503
+ .seekora-suggestions--exiting {
504
+ animation: seekora-fade-out var(--seekora-transition-normal) ease-in;
505
+ }
506
+ `;
507
+ }
508
+ // ============================================================================
509
+ // React Style Injection Hook
510
+ // ============================================================================
511
+ let stylesInjected = false;
512
+ /**
513
+ * Inject suggestions styles into the document
514
+ */
515
+ export function injectSuggestionsStyles(theme = lightThemeVariables, force = false) {
516
+ if (typeof document === 'undefined')
517
+ return;
518
+ if (stylesInjected && !force)
519
+ return;
520
+ const styleId = 'seekora-suggestions-styles';
521
+ let styleElement = document.getElementById(styleId);
522
+ if (!styleElement) {
523
+ styleElement = document.createElement('style');
524
+ styleElement.id = styleId;
525
+ styleElement.type = 'text/css';
526
+ document.head.appendChild(styleElement);
527
+ }
528
+ styleElement.textContent = generateSuggestionsStylesheet(theme);
529
+ stylesInjected = true;
530
+ }
531
+ /**
532
+ * Update injected styles with new theme
533
+ */
534
+ export function updateSuggestionsStyles(theme) {
535
+ injectSuggestionsStyles(theme, true);
536
+ }
537
+ export default {
538
+ lightThemeVariables,
539
+ darkThemeVariables,
540
+ minimalThemeVariables,
541
+ brandPresets,
542
+ createSuggestionsTheme,
543
+ generateSuggestionsStylesheet,
544
+ injectSuggestionsStyles,
545
+ updateSuggestionsStyles,
546
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Theme Type Definitions
3
+ *
4
+ * Re-exports from shared types package
5
+ */
6
+ export type { Theme, ThemeConfig, ThemeColors, ThemeTypography, ThemeSpacing, ThemeShadows, } from '@seekora-ai/ui-sdk-types';
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/themes/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Theme Type Definitions
3
+ *
4
+ * Re-exports from shared types package
5
+ */
6
+ export {};
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Common types for Seekora UI SDK
3
+ */
4
+ import type { SeekoraClient, SearchContext, SearchResponse } from '@seekora-ai/search-sdk';
5
+ import type { ThemeConfig } from '../themes/types';
6
+ export interface ComponentBaseProps {
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ }
10
+ export interface SeekoraUIConfig {
11
+ client: SeekoraClient;
12
+ theme?: ThemeConfig;
13
+ enableAnalytics?: boolean;
14
+ autoTrackSearch?: boolean;
15
+ }
16
+ export interface SearchState {
17
+ query: string;
18
+ results: SearchResponse | null;
19
+ loading: boolean;
20
+ error: Error | null;
21
+ context: SearchContext | null;
22
+ }
23
+ export interface SuggestionsState {
24
+ suggestions: SuggestionItem[];
25
+ loading: boolean;
26
+ error: Error | null;
27
+ }
28
+ export interface SuggestionItem {
29
+ query: string;
30
+ count?: number;
31
+ metadata?: Record<string, any>;
32
+ }
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Common types for Seekora UI SDK
3
+ */
4
+ export {};
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@seekora-ai/ui-sdk-react",
3
+ "version": "1.0.0",
4
+ "description": "Seekora UI Components SDK for React - Interactive UI components for search and query suggestions",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "module": "dist/index.esm.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.esm.js",
11
+ "require": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "npm run build:ts && npm run build:bundle",
22
+ "build:ts": "tsc",
23
+ "build:bundle": "rollup -c",
24
+ "dev": "rollup -c -w",
25
+ "clean": "rm -rf dist",
26
+ "test": "echo \"Error: no test specified\" && exit 1"
27
+ },
28
+ "keywords": [
29
+ "seekora",
30
+ "search",
31
+ "ui",
32
+ "components",
33
+ "react",
34
+ "sdk",
35
+ "autocomplete",
36
+ "suggestions"
37
+ ],
38
+ "author": "Seekora",
39
+ "license": "MIT",
40
+ "peerDependencies": {
41
+ "@seekora-ai/search-sdk": "^0.1.0",
42
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
43
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
44
+ },
45
+ "dependencies": {
46
+ "@seekora-ai/ui-sdk-core": "^1.0.0",
47
+ "@seekora-ai/ui-sdk-types": "^1.0.0",
48
+ "clsx": "^2.1.0"
49
+ },
50
+ "devDependencies": {
51
+ "@rollup/plugin-commonjs": "^25.0.7",
52
+ "@rollup/plugin-node-resolve": "^15.2.3",
53
+ "@rollup/plugin-replace": "^5.0.5",
54
+ "@rollup/plugin-terser": "^0.4.4",
55
+ "@rollup/plugin-typescript": "^11.1.5",
56
+ "@seekora-ai/search-sdk": "^1.0.0",
57
+ "@types/node": "^20.0.0",
58
+ "@types/react": "^18.2.0",
59
+ "@types/react-dom": "^18.2.0",
60
+ "rollup": "^4.9.0",
61
+ "rollup-plugin-dts": "^6.1.0",
62
+ "tslib": "^2.8.1",
63
+ "typescript": "^5.0.0"
64
+ }
65
+ }