@seekora-ai/ui-sdk-vanilla 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 (71) hide show
  1. package/dist/components/clear-refinements.d.ts +39 -0
  2. package/dist/components/clear-refinements.d.ts.map +1 -0
  3. package/dist/components/clear-refinements.js +133 -0
  4. package/dist/components/current-refinements.d.ts +36 -0
  5. package/dist/components/current-refinements.d.ts.map +1 -0
  6. package/dist/components/current-refinements.js +186 -0
  7. package/dist/components/facets.d.ts +45 -0
  8. package/dist/components/facets.d.ts.map +1 -0
  9. package/dist/components/facets.js +259 -0
  10. package/dist/components/hits-per-page.d.ts +37 -0
  11. package/dist/components/hits-per-page.d.ts.map +1 -0
  12. package/dist/components/hits-per-page.js +132 -0
  13. package/dist/components/infinite-hits.d.ts +61 -0
  14. package/dist/components/infinite-hits.d.ts.map +1 -0
  15. package/dist/components/infinite-hits.js +316 -0
  16. package/dist/components/pagination.d.ts +33 -0
  17. package/dist/components/pagination.d.ts.map +1 -0
  18. package/dist/components/pagination.js +364 -0
  19. package/dist/components/query-suggestions.d.ts +39 -0
  20. package/dist/components/query-suggestions.d.ts.map +1 -0
  21. package/dist/components/query-suggestions.js +217 -0
  22. package/dist/components/range-input.d.ts +42 -0
  23. package/dist/components/range-input.d.ts.map +1 -0
  24. package/dist/components/range-input.js +274 -0
  25. package/dist/components/search-bar.d.ts +140 -0
  26. package/dist/components/search-bar.d.ts.map +1 -0
  27. package/dist/components/search-bar.js +899 -0
  28. package/dist/components/search-layout.d.ts +35 -0
  29. package/dist/components/search-layout.d.ts.map +1 -0
  30. package/dist/components/search-layout.js +144 -0
  31. package/dist/components/search-provider.d.ts +28 -0
  32. package/dist/components/search-provider.d.ts.map +1 -0
  33. package/dist/components/search-provider.js +44 -0
  34. package/dist/components/search-results.d.ts +55 -0
  35. package/dist/components/search-results.d.ts.map +1 -0
  36. package/dist/components/search-results.js +537 -0
  37. package/dist/components/sort-by.d.ts +33 -0
  38. package/dist/components/sort-by.d.ts.map +1 -0
  39. package/dist/components/sort-by.js +122 -0
  40. package/dist/components/stats.d.ts +36 -0
  41. package/dist/components/stats.d.ts.map +1 -0
  42. package/dist/components/stats.js +138 -0
  43. package/dist/index.d.ts +670 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.esm.js +4008 -0
  46. package/dist/index.esm.js.map +1 -0
  47. package/dist/index.js +4055 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/index.umd.js +1 -0
  50. package/dist/themes/createTheme.d.ts +8 -0
  51. package/dist/themes/createTheme.d.ts.map +1 -0
  52. package/dist/themes/createTheme.js +10 -0
  53. package/dist/themes/dark.d.ts +6 -0
  54. package/dist/themes/dark.d.ts.map +1 -0
  55. package/dist/themes/dark.js +34 -0
  56. package/dist/themes/default.d.ts +6 -0
  57. package/dist/themes/default.d.ts.map +1 -0
  58. package/dist/themes/default.js +71 -0
  59. package/dist/themes/mergeThemes.d.ts +7 -0
  60. package/dist/themes/mergeThemes.d.ts.map +1 -0
  61. package/dist/themes/mergeThemes.js +6 -0
  62. package/dist/themes/minimal.d.ts +6 -0
  63. package/dist/themes/minimal.d.ts.map +1 -0
  64. package/dist/themes/minimal.js +34 -0
  65. package/dist/themes/types.d.ts +7 -0
  66. package/dist/themes/types.d.ts.map +1 -0
  67. package/dist/themes/types.js +6 -0
  68. package/dist/utils/search-manager.d.ts +33 -0
  69. package/dist/utils/search-manager.d.ts.map +1 -0
  70. package/dist/utils/search-manager.js +89 -0
  71. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/themes/default.ts","../src/themes/createTheme.ts","../src/components/search-provider.ts","../src/components/search-bar.ts","../src/components/search-results.ts","../src/components/stats.ts","../src/components/pagination.ts","../src/components/sort-by.ts","../src/components/facets.ts","../src/components/current-refinements.ts","../src/components/clear-refinements.ts","../src/components/range-input.ts","../src/components/hits-per-page.ts","../src/components/infinite-hits.ts","../src/components/search-layout.ts","../src/components/query-suggestions.ts","../src/utils/search-manager.ts","../src/themes/dark.ts","../src/themes/minimal.ts"],"sourcesContent":["/**\n * Default Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const defaultTheme: Theme = {\n colors: {\n primary: '#007bff',\n secondary: '#6c757d',\n background: '#ffffff',\n surface: '#f8f9fa',\n text: '#212529',\n textSecondary: '#6c757d',\n border: '#dee2e6',\n hover: '#f8f9fa',\n focus: '#007bff',\n error: '#dc3545',\n success: '#28a745',\n warning: '#ffc107',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: {\n none: '0',\n small: '0.25rem',\n medium: '0.375rem',\n large: '0.5rem',\n full: '9999px',\n },\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23)',\n large: '0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)',\n },\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n breakpoints: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n },\n zIndex: {\n dropdown: 1000,\n modal: 2000,\n tooltip: 3000,\n },\n};\n","/**\n * createTheme utility\n * \n * Creates a complete theme from a partial theme configuration\n */\n\nimport { createTheme as createThemeCore } from '@seekora-ai/ui-sdk-core';\nimport { defaultTheme } from './default';\nimport type { ThemeConfig } from '@seekora-ai/ui-sdk-types';\n\nexport const createTheme = (config: ThemeConfig) => {\n return createThemeCore(config, defaultTheme);\n};\n","/**\n * SearchProvider\n * \n * Provides search context, theme, and state management to child components\n * Centralizes all search state and coordination (similar to InstantSearch.js)\n */\n\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport { log, SearchStateManager, type SearchStateManagerConfig } from '@seekora-ai/ui-sdk-core';\nimport type { Theme, ThemeConfig } from '@seekora-ai/ui-sdk-types';\nimport { defaultTheme } from '../themes/default';\nimport { createTheme } from '../themes/createTheme';\n\nexport interface SearchProviderConfig {\n client: SeekoraClient;\n theme?: ThemeConfig;\n enableAnalytics?: boolean;\n autoTrackSearch?: boolean;\n // State manager configuration\n stateManager?: SearchStateManagerConfig;\n}\n\nexport class SearchProvider {\n public readonly client: SeekoraClient;\n public readonly theme: Theme;\n public readonly enableAnalytics: boolean;\n public readonly autoTrackSearch: boolean;\n public readonly stateManager: SearchStateManager;\n\n private static instance: SearchProvider | null = null;\n\n constructor(config: SearchProviderConfig) {\n log.verbose('SearchProvider: Initializing', {\n hasTheme: !!config.theme,\n enableAnalytics: config.enableAnalytics !== false,\n autoTrackSearch: config.autoTrackSearch !== false,\n });\n \n this.client = config.client;\n this.theme = config.theme ? createTheme(config.theme) : defaultTheme;\n this.enableAnalytics = config.enableAnalytics !== false;\n this.autoTrackSearch = config.autoTrackSearch !== false;\n\n // Initialize state manager with client and config\n this.stateManager = new SearchStateManager({\n client: this.client,\n autoSearch: true, // Automatically trigger searches on state changes\n debounceMs: 300,\n itemsPerPage: 10,\n defaultSearchOptions: { widget_mode: true },\n ...config.stateManager,\n });\n\n // Store as singleton instance\n SearchProvider.instance = this;\n \n log.info('SearchProvider: Initialized successfully', {\n hasStateManager: true,\n autoSearch: this.stateManager.getState(),\n });\n }\n\n static getInstance(): SearchProvider | null {\n return SearchProvider.instance;\n }\n\n static setInstance(provider: SearchProvider): void {\n SearchProvider.instance = provider;\n }\n}\n\n","/**\n * SearchBar Component\n * \n * Creates a search bar with autocomplete suggestions\n */\n\nimport type { SeekoraClient, SearchOptions } from '@seekora-ai/search-sdk';\nimport type { SuggestionItem } from '@seekora-ai/ui-sdk-types';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\n// Rich Query Suggestions Types\nexport interface TrendingSearch {\n query: string;\n category?: string;\n searches: number;\n trend_score?: number;\n metadata?: Record<string, any>;\n}\n\nexport interface TrendingProduct {\n id: string;\n title: string;\n image?: string;\n price?: number | string;\n currency?: string;\n url?: string;\n clicks: number;\n conversions?: number;\n revenue?: number;\n trend_score?: number;\n metadata?: Record<string, any>;\n}\n\nexport interface PopularBrand {\n name: string;\n logo?: string;\n searches: number;\n clicks?: number;\n conversions?: number;\n metadata?: Record<string, any>;\n}\n\nexport interface DropdownRecommendations {\n trending_searches?: TrendingSearch[];\n trending_products?: TrendingProduct[];\n popular_brands?: PopularBrand[];\n processing_time_ms: number;\n cached_at?: string;\n}\n\nexport interface RichQuerySuggestionsResponse {\n status: 'success' | 'error';\n data: {\n hits: Array<{\n objectID: string;\n query: string;\n popularity: number;\n nb_words: number;\n categories?: Array<{ value: string; count: number }>;\n facets?: Record<string, any>;\n last_seen: string;\n }>;\n nbHits: number;\n page: number;\n hitsPerPage: number;\n processingTimeMS: number;\n query: string;\n indexUsed: string;\n parsedQuery: string;\n dropdown_recommendations?: DropdownRecommendations;\n };\n timestamp: string;\n version: string;\n}\n\nexport interface SearchBarOptions {\n container: HTMLElement | string;\n placeholder?: string;\n showSuggestions?: boolean;\n minQueryLength?: number;\n maxSuggestions?: number;\n debounceMs?: number;\n enableRichSuggestions?: boolean; // Enable rich dropdown recommendations\n onSearch?: (query: string, results: any) => void;\n onSuggestionSelect?: (suggestion: string) => void;\n onProductClick?: (productId: string, product: TrendingProduct) => void;\n onBrandClick?: (brandName: string, brand: PopularBrand) => void;\n // Deprecated: searchOptions is no longer needed when using stateManager\n searchOptions?: Partial<SearchOptions> | (() => Partial<SearchOptions>);\n}\n\nexport class SearchBar {\n private container: HTMLElement;\n private inputWrapper!: HTMLDivElement;\n private input!: HTMLInputElement;\n private responseTimeElement!: HTMLSpanElement;\n private suggestionsContainer!: HTMLDivElement;\n private provider: SearchProvider;\n private client: SeekoraClient;\n private options: Required<Omit<SearchBarOptions, 'container' | 'onSearch' | 'onSuggestionSelect' | 'onProductClick' | 'onBrandClick' | 'searchOptions'>> & Pick<SearchBarOptions, 'onSearch' | 'onSuggestionSelect' | 'onProductClick' | 'onBrandClick' | 'searchOptions'>;\n private suggestions: SuggestionItem[] = [];\n private richSuggestionsData: RichQuerySuggestionsResponse | null = null;\n private selectedIndex: number = -1;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private isFocused: boolean = false;\n private unsubscribeStateManager: (() => void) | null = null;\n private cachedStoreId: string | undefined;\n private cachedReadSecret: string | undefined;\n private cachedEnvironment: string | undefined;\n\n constructor(providerOrClient: SearchProvider | SeekoraClient, options: SearchBarOptions) {\n // Support both SearchProvider (new) and SeekoraClient (backwards compatibility)\n if (providerOrClient instanceof SearchProvider) {\n this.provider = providerOrClient;\n this.client = this.provider.client;\n } else {\n // Backwards compatibility: create a provider if client is passed\n this.provider = new SearchProvider({ client: providerOrClient });\n this.client = providerOrClient;\n }\n\n const container = typeof options.container === 'string' \n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n throw new Error('SearchBar: container element not found');\n }\n\n this.container = container;\n this.options = {\n placeholder: options.placeholder || 'Search...',\n showSuggestions: options.showSuggestions !== false,\n minQueryLength: options.minQueryLength || 1,\n maxSuggestions: options.maxSuggestions || 10,\n debounceMs: options.debounceMs || 300,\n enableRichSuggestions: options.enableRichSuggestions !== false, // Default to true\n onSearch: options.onSearch,\n onSuggestionSelect: options.onSuggestionSelect,\n onProductClick: options.onProductClick,\n onBrandClick: options.onBrandClick,\n searchOptions: options.searchOptions,\n };\n\n // Cache credentials and environment from client for rich suggestions\n this.cacheClientCredentials();\n \n this.render();\n this.attachEventListeners();\n \n // Subscribe to state manager to sync input with query state\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n // Only update input if it's different (avoid cursor jumping)\n if (this.input.value !== state.query) {\n this.input.value = state.query;\n }\n \n // Update response time display\n if (state.results) {\n const res = state.results as Record<string, unknown>;\n const processingTime = res.processingTimeMS\n || (res.data as Record<string, unknown> | undefined)?.processingTimeMS\n || ((res.data as Record<string, unknown>)?.data as Record<string, unknown> | undefined)?.processingTimeMS;\n \n if (processingTime !== undefined) {\n this.responseTimeElement.textContent = `${processingTime}ms`;\n this.responseTimeElement.style.display = 'inline';\n } else {\n this.responseTimeElement.style.display = 'none';\n }\n } else {\n this.responseTimeElement.style.display = 'none';\n }\n \n // Call onSearch callback if results are available (for backwards compatibility)\n if (state.results && this.options.onSearch) {\n this.options.onSearch(state.query, state.results);\n }\n });\n }\n\n private render(): void {\n this.container.style.position = 'relative';\n this.container.style.display = 'flex';\n this.container.style.alignItems = 'center';\n\n // Create wrapper for input and response time\n this.inputWrapper = document.createElement('div');\n this.inputWrapper.style.cssText = 'position: relative; flex: 1; display: flex; align-items: center;';\n\n this.input = document.createElement('input');\n this.input.type = 'text';\n this.input.placeholder = this.options.placeholder;\n this.input.style.cssText = this.getInputStyle();\n this.injectPlaceholderStyles();\n this.inputWrapper.appendChild(this.input);\n\n // Response time element\n this.responseTimeElement = document.createElement('span');\n this.responseTimeElement.style.cssText = this.getResponseTimeStyle();\n this.responseTimeElement.style.display = 'none';\n this.inputWrapper.appendChild(this.responseTimeElement);\n\n this.container.appendChild(this.inputWrapper);\n\n this.suggestionsContainer = document.createElement('div');\n this.suggestionsContainer.style.cssText = this.getSuggestionsContainerStyle();\n this.suggestionsContainer.style.display = 'none';\n this.container.appendChild(this.suggestionsContainer);\n }\n\n private injectPlaceholderStyles(): void {\n const theme = this.provider.theme;\n \n // If input doesn't have an ID, add one\n if (!this.input.id) {\n this.input.id = 'seekora-search-input-' + Math.random().toString(36).substr(2, 9);\n }\n \n const styleId = `seekora-searchbar-placeholder-${this.input.id}`;\n \n // Remove existing style if it exists\n const existingStyle = document.getElementById(styleId);\n if (existingStyle) {\n existingStyle.remove();\n }\n\n // Create new style element\n const style = document.createElement('style');\n style.id = styleId;\n const placeholderColor = theme.colors.textSecondary || theme.colors.text;\n style.textContent = `\n #${this.input.id}::placeholder {\n color: ${placeholderColor};\n opacity: 0.6;\n }\n `;\n \n document.head.appendChild(style);\n }\n\n private attachEventListeners(): void {\n this.input.addEventListener('input', (e) => {\n const query = (e.target as HTMLInputElement).value;\n this.handleInputChange(query);\n });\n\n this.input.addEventListener('focus', () => {\n this.isFocused = true;\n \n // Fetch suggestions with empty query when input is focused\n // This will show trending products/brands even when no query is typed\n if (this.options.showSuggestions && this.options.enableRichSuggestions) {\n console.log('🔍 SearchBar: Input focused, fetching empty query suggestions');\n this.handleInputChange(''); // Trigger fetch with empty query\n } else {\n this.updateSuggestionsVisibility();\n }\n });\n\n this.input.addEventListener('blur', (e) => {\n // Check if the blur is caused by clicking on a suggestion\n const relatedTarget = e.relatedTarget as HTMLElement;\n if (relatedTarget && this.suggestionsContainer.contains(relatedTarget)) {\n return; // Don't hide suggestions if clicking on them\n }\n \n setTimeout(() => {\n // Double-check that we're not clicking on suggestions\n if (!this.suggestionsContainer.contains(document.activeElement)) {\n this.isFocused = false;\n this.updateSuggestionsVisibility();\n this.selectedIndex = -1;\n }\n }, 100);\n });\n\n this.input.addEventListener('keydown', (e) => {\n this.handleKeyDown(e);\n });\n }\n\n private handleInputChange(query: string): void {\n this.selectedIndex = -1;\n\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n // For rich suggestions, allow empty query to show trending products/brands\n const isRichSuggestions = this.options.enableRichSuggestions;\n const isEmptyQuery = query.trim().length === 0;\n const hasMinLength = query.length >= this.options.minQueryLength;\n \n if (!this.options.showSuggestions) {\n this.suggestions = [];\n this.renderSuggestions();\n return;\n }\n \n // For basic suggestions, still require minQueryLength\n // For rich suggestions, allow empty query\n if (!isRichSuggestions && !hasMinLength) {\n this.suggestions = [];\n this.renderSuggestions();\n return;\n }\n\n this.debounceTimer = setTimeout(async () => {\n try {\n if (this.options.enableRichSuggestions) {\n // Fetch rich suggestions with dropdown recommendations\n // Empty query will return trending products/brands\n console.log('🚀 SearchBar: enableRichSuggestions is TRUE, calling fetchRichSuggestions for query:', query || '(empty)');\n await this.fetchRichSuggestions(query);\n } else {\n // Fallback to basic suggestions\n console.log('⚠️ SearchBar: enableRichSuggestions is FALSE, using basic suggestions');\n const response = await (this.client as unknown as { getSuggestions: (q: string, n: number) => Promise<Record<string, unknown>[] | unknown> }).getSuggestions(query, this.options.maxSuggestions);\n const rawSuggestions = Array.isArray(response) ? (response as Record<string, unknown>[]) : [];\n \n this.suggestions = rawSuggestions.map((suggestion: Record<string, unknown>) => {\n const suggestionQuery = (suggestion.query ?? suggestion.text ?? suggestion) as string | Record<string, unknown>;\n const count = (suggestion.popularity !== undefined\n ? suggestion.popularity\n : (suggestion.count !== undefined ? suggestion.count : undefined)) as number | undefined;\n\n return {\n query: typeof suggestionQuery === 'string' ? suggestionQuery : String(suggestionQuery),\n count: typeof count === 'number' ? count : undefined,\n metadata: suggestion,\n };\n });\n this.richSuggestionsData = null;\n }\n\n this.renderSuggestions();\n } catch (err) {\n log.error('Error fetching suggestions:', err);\n this.suggestions = [];\n this.richSuggestionsData = null;\n this.renderSuggestions();\n }\n }, this.options.debounceMs);\n }\n\n private handleKeyDown(e: KeyboardEvent): void {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (this.suggestions.length > 0) {\n this.selectedIndex = this.selectedIndex < this.suggestions.length - 1\n ? this.selectedIndex + 1\n : this.selectedIndex;\n this.renderSuggestions();\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (this.suggestions.length > 0) {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : -1;\n this.renderSuggestions();\n }\n break;\n case 'Enter':\n e.preventDefault();\n if (this.suggestions.length > 0 && this.selectedIndex >= 0 && this.selectedIndex < this.suggestions.length) {\n this.selectSuggestion(this.suggestions[this.selectedIndex].query);\n } else {\n // Search with \"*\" if query is empty\n this.performSearch();\n }\n break;\n case 'Escape':\n this.isFocused = false;\n this.selectedIndex = -1;\n this.updateSuggestionsVisibility();\n this.input.blur();\n break;\n }\n }\n\n private selectSuggestion(suggestion: string): void {\n this.input.value = suggestion;\n this.selectedIndex = -1;\n this.isFocused = false;\n this.updateSuggestionsVisibility();\n this.input.blur();\n\n if (this.options.onSuggestionSelect) {\n this.options.onSuggestionSelect(suggestion);\n }\n\n this.performSearch();\n }\n\n private async fetchRichSuggestions(query: string): Promise<void> {\n try {\n // Use cached credentials first, then try to get from client\n let baseUrl = 'https://api.seekora.com';\n let storeId = this.cachedStoreId;\n let readSecret = this.cachedReadSecret;\n const env = this.cachedEnvironment;\n\n // If not cached, try to get from client\n const clientAny = this.client as any;\n if (!storeId || !readSecret) {\n if (clientAny.config) {\n storeId = storeId || clientAny.config.storeId;\n readSecret = readSecret || clientAny.config.readSecret;\n } else if (clientAny.storeId && clientAny.readSecret) {\n storeId = storeId || clientAny.storeId;\n readSecret = readSecret || clientAny.readSecret;\n } else if (clientAny._config) {\n storeId = storeId || clientAny._config.storeId;\n readSecret = readSecret || clientAny._config.readSecret;\n } else if (clientAny._storeId && clientAny._readSecret) {\n storeId = storeId || clientAny._storeId;\n readSecret = readSecret || clientAny._readSecret;\n }\n }\n \n // Determine environment and set baseUrl\n const environment = env || clientAny.environment || clientAny.config?.environment || clientAny._config?.environment;\n const isDevelopment = environment === 'development';\n \n // ALWAYS use localhost:3000 for development - FORCE IT\n baseUrl = 'http://localhost:3000'; // Force localhost for all requests in dev\n \n console.log('🌐 SearchBar: Setting baseUrl', {\n environment,\n isDevelopment,\n forcedBaseUrl: baseUrl,\n });\n\n if (!storeId || !readSecret) {\n log.warn('SearchBar: Missing store credentials, falling back to basic suggestions', {\n hasConfig: !!clientAny.config,\n hasDirectProps: !!(clientAny.storeId && clientAny.readSecret),\n hasPrivateConfig: !!clientAny._config,\n clientKeys: Object.keys(clientAny),\n });\n await this.fallbackToBasicSuggestions(query);\n return;\n }\n \n log.verbose('SearchBar: Fetching rich suggestions', {\n baseUrl,\n storeId: storeId ? storeId.substring(0, 8) + '...' : 'missing',\n query,\n environment,\n isDevelopment,\n credentialsFromCache: !!(this.cachedStoreId && this.cachedReadSecret),\n });\n\n // Build API URL with rich recommendations\n // Use 'query' parameter to match API expectations (also accepts 'q')\n // Empty query is allowed - will return trending products/brands\n const params = new URLSearchParams({\n include_dropdown_recommendations: 'true',\n hitsPerPage: String(this.options.maxSuggestions),\n });\n \n // Only add query parameter if it's not empty\n if (query && query.trim().length > 0) {\n params.append('query', query);\n }\n\n const url = `${baseUrl}/api/v1/suggestions/queries?${params.toString()}`;\n \n log.verbose('SearchBar: Making rich suggestions request', { url: url.replace(/secret=[^&]+/, 'secret=***') });\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'x-storeid': storeId,\n 'x-storesecret': readSecret,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`API request failed: ${response.status} ${response.statusText}`);\n }\n\n const data: RichQuerySuggestionsResponse = await response.json();\n\n if (data.status === 'error') {\n throw new Error('API returned error status');\n }\n\n this.richSuggestionsData = data;\n\n // Transform hits to SuggestionItem format\n this.suggestions = (data.data.hits || []).map((hit) => ({\n query: hit.query,\n count: hit.popularity,\n metadata: hit,\n }));\n\n console.log('✨ SearchBar: Rich suggestions loaded', {\n query,\n suggestionsCount: this.suggestions.length,\n hasTrendingSearches: !!data.data.dropdown_recommendations?.trending_searches?.length,\n hasTrendingProducts: !!data.data.dropdown_recommendations?.trending_products?.length,\n hasPopularBrands: !!data.data.dropdown_recommendations?.popular_brands?.length,\n rawData: data.data.dropdown_recommendations,\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchBar: Failed to fetch rich suggestions, falling back to basic', {\n error: error.message,\n stack: error.stack,\n query,\n });\n await this.fallbackToBasicSuggestions(query);\n }\n }\n\n private async fallbackToBasicSuggestions(query: string): Promise<void> {\n try {\n const response = await (this.client as unknown as { getSuggestions: (q: string, n: number) => Promise<Record<string, unknown>[] | unknown> }).getSuggestions(query, this.options.maxSuggestions);\n const rawSuggestions = Array.isArray(response) ? (response as Record<string, unknown>[]) : [];\n this.suggestions = rawSuggestions.map((suggestion: Record<string, unknown>) => {\n const suggestionQuery = (suggestion.query ?? suggestion.text ?? suggestion) as string | Record<string, unknown>;\n const count = (suggestion.popularity !== undefined\n ? suggestion.popularity\n : (suggestion.count !== undefined ? suggestion.count : undefined)) as number | undefined;\n return {\n query: typeof suggestionQuery === 'string' ? suggestionQuery : String(suggestionQuery),\n count: typeof count === 'number' ? count : undefined,\n metadata: suggestion,\n };\n });\n this.richSuggestionsData = null;\n } catch (fallbackErr) {\n log.error('SearchBar: Fallback suggestions also failed', fallbackErr);\n this.suggestions = [];\n this.richSuggestionsData = null;\n }\n }\n\n private cacheClientCredentials(): void {\n const clientAny = this.client as any;\n \n console.log('🔍 SearchBar: Attempting to cache credentials', {\n hasConfig: !!clientAny.config,\n hasDirectProps: !!(clientAny.storeId && clientAny.readSecret),\n hasPrivateConfig: !!clientAny._config,\n hasPrivateProps: !!(clientAny._storeId && clientAny._readSecret),\n clientKeys: Object.keys(clientAny).slice(0, 10),\n // Try to see actual values\n configStoreId: clientAny.config?.storeId,\n directStoreId: clientAny.storeId,\n });\n \n // Try multiple ways to extract credentials - check ALL properties\n if (clientAny.config && clientAny.config.storeId) {\n this.cachedStoreId = clientAny.config.storeId;\n this.cachedReadSecret = clientAny.config.readSecret;\n this.cachedEnvironment = clientAny.config.environment;\n console.log('📍 Extracted from config');\n }\n if (!this.cachedStoreId && clientAny.storeId) {\n this.cachedStoreId = clientAny.storeId;\n this.cachedReadSecret = clientAny.readSecret;\n this.cachedEnvironment = clientAny.environment;\n console.log('📍 Extracted from direct props');\n }\n if (!this.cachedStoreId && clientAny._config) {\n this.cachedStoreId = clientAny._config.storeId;\n this.cachedReadSecret = clientAny._config.readSecret;\n this.cachedEnvironment = clientAny._config.environment;\n console.log('📍 Extracted from _config');\n }\n if (!this.cachedStoreId && clientAny._storeId) {\n this.cachedStoreId = clientAny._storeId;\n this.cachedReadSecret = clientAny._readSecret;\n this.cachedEnvironment = clientAny._environment || clientAny.environment;\n console.log('📍 Extracted from _private props');\n }\n \n console.log('✅ SearchBar: Cached client credentials', {\n hasStoreId: !!this.cachedStoreId,\n storeIdPreview: this.cachedStoreId ? this.cachedStoreId.substring(0, 8) + '...' : 'MISSING',\n hasReadSecret: !!this.cachedReadSecret,\n environment: this.cachedEnvironment,\n });\n }\n\n private async performSearch(): Promise<void> {\n // Use empty string for empty queries\n const query = this.input.value.trim();\n \n log.verbose('SearchBar: Setting query in state manager', { query });\n \n // Update state manager - this will automatically trigger search\n // State manager handles debouncing and search triggering\n this.provider.stateManager.setQuery(query);\n \n // Note: onSearch callback will be called via state manager subscription\n }\n\n private renderSuggestions(): void {\n this.suggestionsContainer.innerHTML = '';\n\n const hasRichData = this.richSuggestionsData?.data?.dropdown_recommendations;\n const recommendations = hasRichData ? this.richSuggestionsData!.data.dropdown_recommendations! : null;\n \n console.log('🎨 SearchBar: renderSuggestions called', {\n hasRichData,\n recommendationsKeys: recommendations ? Object.keys(recommendations) : [],\n trendingSearchesCount: recommendations?.trending_searches?.length || 0,\n trendingProductsCount: recommendations?.trending_products?.length || 0,\n popularBrandsCount: recommendations?.popular_brands?.length || 0,\n suggestionsCount: this.suggestions.length,\n });\n\n // Render Query Suggestions Section\n const displayedSuggestions = this.suggestions.slice(0, this.options.maxSuggestions);\n if (displayedSuggestions.length > 0) {\n const suggestionsSection = document.createElement('div');\n suggestionsSection.style.cssText = this.getSectionStyle();\n \n const sectionTitle = document.createElement('div');\n sectionTitle.style.cssText = this.getSectionTitleStyle();\n sectionTitle.textContent = 'Suggestions';\n suggestionsSection.appendChild(sectionTitle);\n\n const suggestionsList = document.createElement('div');\n suggestionsList.style.cssText = this.getSuggestionsListStyle();\n\n displayedSuggestions.forEach((suggestion, index) => {\n const item = document.createElement('div');\n item.style.cssText = this.getSuggestionItemStyle(index === this.selectedIndex);\n \n const querySpan = document.createElement('span');\n querySpan.textContent = suggestion.query;\n item.appendChild(querySpan);\n\n if (suggestion.count !== undefined) {\n const countSpan = document.createElement('span');\n countSpan.textContent = ` (${suggestion.count})`;\n countSpan.style.cssText = this.getCountStyle();\n item.appendChild(countSpan);\n }\n\n // Use mousedown instead of click to fire before blur event\n item.addEventListener('mousedown', (e) => {\n e.preventDefault(); // Prevent input blur\n this.selectSuggestion(suggestion.query);\n });\n // Also handle click for accessibility\n item.addEventListener('click', (e) => {\n e.preventDefault();\n this.selectSuggestion(suggestion.query);\n });\n \n suggestionsList.appendChild(item);\n });\n\n suggestionsSection.appendChild(suggestionsList);\n this.suggestionsContainer.appendChild(suggestionsSection);\n }\n\n // Render Trending Searches Section\n if (recommendations?.trending_searches && recommendations.trending_searches.length > 0) {\n const trendingSection = document.createElement('div');\n trendingSection.style.cssText = this.getSectionStyle();\n \n const sectionTitle = document.createElement('div');\n sectionTitle.style.cssText = this.getSectionTitleStyle();\n sectionTitle.textContent = 'Trending Searches';\n trendingSection.appendChild(sectionTitle);\n\n const trendingList = document.createElement('div');\n trendingList.style.cssText = this.getSuggestionsListStyle();\n\n recommendations.trending_searches.forEach((trend) => {\n const item = document.createElement('div');\n item.style.cssText = this.getSuggestionItemStyle(false);\n \n const querySpan = document.createElement('span');\n querySpan.textContent = trend.query;\n item.appendChild(querySpan);\n\n if (trend.searches !== undefined) {\n const countSpan = document.createElement('span');\n countSpan.textContent = ` (${trend.searches})`;\n countSpan.style.cssText = this.getCountStyle();\n item.appendChild(countSpan);\n }\n\n item.addEventListener('mousedown', (e) => {\n e.preventDefault();\n this.selectSuggestion(trend.query);\n });\n item.addEventListener('click', (e) => {\n e.preventDefault();\n this.selectSuggestion(trend.query);\n });\n \n trendingList.appendChild(item);\n });\n\n trendingSection.appendChild(trendingList);\n this.suggestionsContainer.appendChild(trendingSection);\n }\n\n // Render Trending Products Section\n if (recommendations?.trending_products && recommendations.trending_products.length > 0) {\n const productsSection = document.createElement('div');\n productsSection.style.cssText = this.getSectionStyle();\n \n const sectionTitle = document.createElement('div');\n sectionTitle.style.cssText = this.getSectionTitleStyle();\n sectionTitle.textContent = 'Trending Products';\n productsSection.appendChild(sectionTitle);\n\n const productsGrid = document.createElement('div');\n productsGrid.style.cssText = this.getProductsGridStyle();\n\n recommendations.trending_products.forEach((product) => {\n const productCard = document.createElement('div');\n productCard.style.cssText = this.getProductCardStyle();\n \n if (product.image) {\n const img = document.createElement('img');\n img.src = product.image;\n img.alt = product.title;\n img.style.cssText = this.getProductImageStyle();\n img.onerror = () => {\n img.style.display = 'none';\n };\n productCard.appendChild(img);\n }\n\n const productInfo = document.createElement('div');\n productInfo.style.cssText = this.getProductInfoStyle();\n \n const title = document.createElement('div');\n title.style.cssText = this.getProductTitleStyle();\n title.textContent = product.title;\n productInfo.appendChild(title);\n\n if (product.price !== undefined) {\n const price = document.createElement('div');\n price.style.cssText = this.getProductPriceStyle();\n const currency = product.currency || '$';\n price.textContent = `${currency}${product.price}`;\n productInfo.appendChild(price);\n }\n\n productCard.appendChild(productInfo);\n\n productCard.addEventListener('mousedown', (e) => {\n e.preventDefault();\n if (this.options.onProductClick) {\n this.options.onProductClick(product.id, product);\n } else if (product.url) {\n window.location.href = product.url;\n }\n });\n productCard.addEventListener('click', (e) => {\n e.preventDefault();\n if (this.options.onProductClick) {\n this.options.onProductClick(product.id, product);\n } else if (product.url) {\n window.location.href = product.url;\n }\n });\n \n productsGrid.appendChild(productCard);\n });\n\n productsSection.appendChild(productsGrid);\n this.suggestionsContainer.appendChild(productsSection);\n }\n\n // Render Popular Brands Section\n if (recommendations?.popular_brands && recommendations.popular_brands.length > 0) {\n const brandsSection = document.createElement('div');\n brandsSection.style.cssText = this.getSectionStyle();\n \n const sectionTitle = document.createElement('div');\n sectionTitle.style.cssText = this.getSectionTitleStyle();\n sectionTitle.textContent = 'Popular Brands';\n brandsSection.appendChild(sectionTitle);\n\n const brandsList = document.createElement('div');\n brandsList.style.cssText = this.getBrandsListStyle();\n\n recommendations.popular_brands.forEach((brand) => {\n const brandItem = document.createElement('div');\n brandItem.style.cssText = this.getBrandItemStyle();\n \n if (brand.logo) {\n const img = document.createElement('img');\n img.src = brand.logo;\n img.alt = brand.name;\n img.style.cssText = this.getBrandLogoStyle();\n img.onerror = () => {\n // Fallback to text if image fails\n img.style.display = 'none';\n const textSpan = document.createElement('span');\n textSpan.textContent = brand.name;\n textSpan.style.cssText = this.getBrandNameStyle();\n brandItem.appendChild(textSpan);\n };\n brandItem.appendChild(img);\n } else {\n const textSpan = document.createElement('span');\n textSpan.textContent = brand.name;\n textSpan.style.cssText = this.getBrandNameStyle();\n brandItem.appendChild(textSpan);\n }\n\n brandItem.addEventListener('mousedown', (e) => {\n e.preventDefault();\n if (this.options.onBrandClick) {\n this.options.onBrandClick(brand.name, brand);\n } else {\n this.selectSuggestion(brand.name);\n }\n });\n brandItem.addEventListener('click', (e) => {\n e.preventDefault();\n if (this.options.onBrandClick) {\n this.options.onBrandClick(brand.name, brand);\n } else {\n this.selectSuggestion(brand.name);\n }\n });\n \n brandsList.appendChild(brandItem);\n });\n\n brandsSection.appendChild(brandsList);\n this.suggestionsContainer.appendChild(brandsSection);\n }\n\n this.updateSuggestionsVisibility();\n }\n\n private updateSuggestionsVisibility(): void {\n // Show dropdown if there are suggestions OR rich data (trending products/brands)\n const hasRichData = this.richSuggestionsData?.data?.dropdown_recommendations;\n const hasTrendingProducts = (hasRichData?.trending_products?.length ?? 0) > 0;\n const hasTrendingSearches = (hasRichData?.trending_searches?.length ?? 0) > 0;\n const hasPopularBrands = (hasRichData?.popular_brands?.length ?? 0) > 0;\n const hasAnyContent = this.suggestions.length > 0 || hasTrendingProducts || hasTrendingSearches || hasPopularBrands;\n \n // For rich suggestions, allow showing even with empty query if there's rich data\n const queryLength = this.input.value.length;\n const hasMinLength = queryLength >= this.options.minQueryLength;\n const isEmptyWithRichData = queryLength === 0 && (hasTrendingProducts || hasTrendingSearches || hasPopularBrands);\n const canShow = hasMinLength || (this.options.enableRichSuggestions && isEmptyWithRichData);\n \n const shouldShow = this.isFocused && \n this.options.showSuggestions && \n canShow &&\n hasAnyContent;\n \n console.log('👁️ updateSuggestionsVisibility', {\n isFocused: this.isFocused,\n hasAnyContent,\n suggestionsCount: this.suggestions.length,\n hasTrendingProducts,\n hasPopularBrands,\n queryLength,\n isEmptyWithRichData,\n canShow,\n shouldShow,\n });\n \n this.suggestionsContainer.style.display = shouldShow ? 'block' : 'none';\n }\n\n private getInputStyle(): string {\n const theme = this.provider.theme;\n return `\n flex: 1;\n padding: ${theme.spacing.medium};\n font-size: ${theme.typography.fontSize.medium};\n font-family: ${theme.typography.fontFamily};\n background-color: ${theme.colors.background};\n color: ${theme.colors.text};\n border: 1px solid ${theme.colors.border};\n border-radius: ${typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium};\n outline: none;\n `;\n }\n\n private getResponseTimeStyle(): string {\n const theme = this.provider.theme;\n return `\n margin-left: ${theme.spacing.small};\n font-size: ${theme.typography.fontSize.small};\n color: ${theme.colors.text};\n opacity: 0.7;\n white-space: nowrap;\n `;\n }\n\n private getSuggestionsContainerStyle(): string {\n const theme = this.provider.theme;\n return `\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n margin-top: ${theme.spacing.small};\n background-color: ${theme.colors.background};\n border: 1px solid ${theme.colors.border};\n border-radius: ${typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium};\n box-shadow: ${theme.shadows.medium};\n max-height: 600px;\n overflow-y: auto;\n z-index: 1000;\n width: 100%;\n `;\n }\n\n private getSuggestionItemStyle(isSelected: boolean): string {\n const theme = this.provider.theme;\n return `\n padding: ${theme.spacing.medium};\n cursor: pointer;\n background-color: ${isSelected ? theme.colors.hover : 'transparent'};\n color: ${theme.colors.text};\n font-family: ${theme.typography.fontFamily};\n transition: ${theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n\n private getSectionStyle(): string {\n const theme = this.provider.theme;\n return `\n padding: ${theme.spacing.large || '1.5rem'} ${theme.spacing.medium};\n border-bottom: 1px solid ${theme.colors.border};\n `;\n }\n\n private getSectionTitleStyle(): string {\n const theme = this.provider.theme;\n return `\n font-size: ${theme.typography.fontSize.small};\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: ${theme.colors.textSecondary || theme.colors.text};\n opacity: 0.7;\n margin-bottom: ${theme.spacing.medium};\n `;\n }\n\n private getSuggestionsListStyle(): string {\n return `\n display: flex;\n flex-direction: column;\n `;\n }\n\n private getCountStyle(): string {\n const theme = this.provider.theme;\n return `\n opacity: 0.6;\n margin-left: ${theme.spacing.small};\n font-size: ${theme.typography.fontSize.small};\n `;\n }\n\n private getProductsGridStyle(): string {\n return `\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n gap: ${this.provider.theme.spacing.medium};\n max-height: 300px;\n overflow-y: auto;\n `;\n }\n\n private getProductCardStyle(): string {\n const theme = this.provider.theme;\n const borderRadius = typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium;\n return `\n display: flex;\n flex-direction: column;\n cursor: pointer;\n border: 1px solid ${theme.colors.border};\n border-radius: ${borderRadius};\n overflow: hidden;\n transition: ${theme.transitions?.fast || '150ms ease-in-out'};\n background-color: ${theme.colors.background};\n `;\n }\n\n private getProductImageStyle(): string {\n return `\n width: 100%;\n height: 120px;\n object-fit: cover;\n background-color: #f0f0f0;\n `;\n }\n\n private getProductInfoStyle(): string {\n const theme = this.provider.theme;\n return `\n padding: ${theme.spacing.small} ${theme.spacing.medium};\n display: flex;\n flex-direction: column;\n gap: ${(theme.spacing as unknown as Record<string, string>).xsmall ?? theme.spacing.small ?? '0.25rem'};\n `;\n }\n\n private getProductTitleStyle(): string {\n const theme = this.provider.theme;\n return `\n font-size: ${theme.typography.fontSize.small};\n font-weight: 500;\n color: ${theme.colors.text};\n line-height: 1.4;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n `;\n }\n\n private getProductPriceStyle(): string {\n const theme = this.provider.theme;\n return `\n font-size: ${theme.typography.fontSize.medium};\n font-weight: 600;\n color: ${theme.colors.primary || theme.colors.text};\n `;\n }\n\n private getBrandsListStyle(): string {\n return `\n display: flex;\n flex-wrap: wrap;\n gap: ${this.provider.theme.spacing.medium};\n max-height: 200px;\n overflow-y: auto;\n `;\n }\n\n private getBrandItemStyle(): string {\n const theme = this.provider.theme;\n const borderRadius = typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium;\n return `\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: ${theme.spacing.small};\n border: 1px solid ${theme.colors.border};\n border-radius: ${borderRadius};\n transition: ${theme.transitions?.fast || '150ms ease-in-out'};\n background-color: ${theme.colors.background};\n min-width: 80px;\n min-height: 60px;\n `;\n }\n\n private getBrandLogoStyle(): string {\n return `\n max-width: 60px;\n max-height: 40px;\n object-fit: contain;\n `;\n }\n\n private getBrandNameStyle(): string {\n const theme = this.provider.theme;\n return `\n font-size: ${theme.typography.fontSize.small};\n font-weight: 500;\n color: ${theme.colors.text};\n text-align: center;\n `;\n }\n\n /**\n * Trigger a search programmatically\n * @param query - Optional query string. If not provided, uses current input value or \"*\" for all\n */\n async search(query?: string): Promise<void> {\n if (query !== undefined) {\n this.input.value = query;\n }\n await this.performSearch();\n }\n\n destroy(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n this.container.innerHTML = '';\n }\n}\n\n","/**\n * SearchResults Component\n * \n * Displays search results with customizable rendering\n */\n\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport type { ResultItem, FieldMapping, ViewMode } from '@seekora-ai/ui-sdk-types';\nimport { SearchProvider } from './search-provider';\nimport { extractField, formatPrice, log } from '@seekora-ai/ui-sdk-core';\n\nexport interface SearchResultsOptions {\n container: HTMLElement | string;\n results?: SearchResponse | null;\n loading?: boolean;\n error?: Error | null;\n viewMode?: ViewMode;\n fieldMapping?: FieldMapping;\n itemsPerPage?: number;\n onResultClick?: (result: ResultItem, index: number) => void;\n renderResult?: (result: ResultItem, index: number) => HTMLElement;\n renderEmpty?: () => HTMLElement;\n renderLoading?: () => HTMLElement;\n renderError?: (error: Error) => HTMLElement;\n}\n\nexport class SearchResults {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<SearchResultsOptions, 'container' | 'results' | 'loading' | 'error' | 'onResultClick' | 'renderResult' | 'renderEmpty' | 'renderLoading' | 'renderError'>> & Pick<SearchResultsOptions, 'results' | 'loading' | 'error' | 'onResultClick' | 'renderResult' | 'renderEmpty' | 'renderLoading' | 'renderError'>;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: SearchResultsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n throw new Error('SearchResults: container element not found');\n }\n\n this.container = container;\n this.options = {\n viewMode: options.viewMode || 'list',\n fieldMapping: options.fieldMapping || {},\n itemsPerPage: options.itemsPerPage || 10,\n results: options.results,\n loading: options.loading,\n error: options.error,\n onResultClick: options.onResultClick,\n renderResult: options.renderResult,\n renderEmpty: options.renderEmpty,\n renderLoading: options.renderLoading,\n renderError: options.renderError,\n };\n\n // Attach event delegation listener to the persistent container for result clicks\n // This ensures clicks work even when results are recreated during re-renders\n // Note: We attach the listener even if onResultClick is not provided, to support analytics\n this.container.addEventListener('click', async (e: Event) => {\n const target = e.target as HTMLElement;\n \n // Find the result element (could be the target itself or a parent)\n const resultElement = target.hasAttribute('data-result-id')\n ? target\n : target.closest('[data-result-id]') as HTMLElement;\n \n if (resultElement) {\n e.preventDefault();\n e.stopPropagation();\n \n const resultId = resultElement.getAttribute('data-result-id');\n const resultIndexStr = resultElement.getAttribute('data-result-index');\n const resultIndex = resultIndexStr ? parseInt(resultIndexStr, 10) : -1;\n \n console.log('🔵 SearchResults: Result clicked via delegation', {\n resultId,\n resultIndex,\n target: target.tagName,\n resultElement\n });\n \n if (resultId && resultIndex >= 0) {\n // Find the result in the current results\n const results = this.extractResults();\n const result = results[resultIndex];\n \n if (result) {\n const extractedResult = this.extractFields(result);\n \n // Track analytics event if enabled\n if (this.provider.enableAnalytics) {\n try {\n const searchResponse = this.provider.stateManager.getResults();\n const state = this.provider.stateManager.getState();\n \n // Calculate absolute position (1-based) accounting for pagination\n // Position = (currentPage - 1) * itemsPerPage + resultIndex + 1\n const absolutePosition = (state.currentPage - 1) * state.itemsPerPage + resultIndex + 1;\n \n // Build search context from current state and response\n const searchContext = searchResponse?.context || (searchResponse ? {\n query: state.query,\n filters: state.refinements.length > 0 \n ? state.refinements.map(r => `${r.field}:${r.value}`).join(' && ')\n : undefined,\n page: state.currentPage,\n sortBy: state.sortBy,\n } : undefined);\n \n console.log('🔵 SearchResults: Tracking analytics event', {\n resultId,\n resultIndex,\n absolutePosition,\n currentPage: state.currentPage,\n itemsPerPage: state.itemsPerPage,\n hasContext: !!searchContext,\n searchContext\n });\n \n await (this.provider.client as unknown as { trackEvent: (a: Record<string, unknown>, b?: unknown) => void }).trackEvent({\n event_name: 'product_click',\n clicked_item_id: resultId,\n metadata: {\n result: extractedResult,\n position: absolutePosition,\n },\n } as Record<string, unknown>, searchContext);\n \n console.log('🟢 SearchResults: Analytics event tracked successfully', {\n resultId,\n position: absolutePosition,\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchResults: Error tracking analytics event', {\n resultId,\n error: error.message,\n });\n }\n }\n \n // Call user-provided callback\n if (this.options.onResultClick) {\n try {\n console.log('🔵 SearchResults: Calling onResultClick callback', {\n resultId,\n resultIndex,\n extractedResult\n });\n this.options.onResultClick(extractedResult, resultIndex);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchResults: Error in onResultClick callback', {\n resultId,\n resultIndex,\n error: error.message,\n });\n }\n }\n }\n }\n }\n }, { passive: false });\n \n console.log('🔵 SearchResults: Event delegation listener attached to container', { container: this.container });\n\n // Subscribe to state manager for automatic updates\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n this.options.results = state.results;\n this.options.loading = state.loading;\n this.options.error = state.error;\n this.render();\n });\n\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n }\n\n update(options: Partial<Pick<SearchResultsOptions, 'results' | 'loading' | 'error'>>): void {\n // Update options\n if (options.results !== undefined) {\n this.options.results = options.results;\n }\n if (options.loading !== undefined) {\n this.options.loading = options.loading;\n }\n if (options.error !== undefined) {\n this.options.error = options.error;\n }\n \n // Always re-render when update is called (even if values appear the same, object references may differ)\n const resultsCount = this.extractResults().length;\n log.verbose('SearchResults: Updating and re-rendering', {\n hasResults: !!this.options.results,\n loading: this.options.loading,\n hasError: !!this.options.error,\n resultsCount,\n providedResults: options.results !== undefined,\n providedLoading: options.loading !== undefined,\n providedError: options.error !== undefined,\n });\n this.render();\n }\n\n private render(): void {\n // Clear container first\n this.container.innerHTML = '';\n \n log.verbose('SearchResults: Rendering', {\n hasResults: !!this.options.results,\n loading: this.options.loading,\n hasError: !!this.options.error,\n });\n\n if (this.options.loading) {\n const loadingEl = this.options.renderLoading\n ? this.options.renderLoading()\n : this.renderDefaultLoading();\n this.container.appendChild(loadingEl);\n return;\n }\n\n if (this.options.error) {\n const errorEl = this.options.renderError\n ? this.options.renderError(this.options.error)\n : this.renderDefaultError(this.options.error);\n this.container.appendChild(errorEl);\n return;\n }\n\n const displayedResults = this.extractResults();\n if (displayedResults.length === 0) {\n const emptyEl = this.options.renderEmpty\n ? this.options.renderEmpty()\n : this.renderDefaultEmpty();\n this.container.appendChild(emptyEl);\n return;\n }\n\n // Create a wrapper for grid/card layout\n if (this.options.viewMode === 'card' || this.options.viewMode === 'grid') {\n const gridWrapper = document.createElement('div');\n gridWrapper.style.cssText = this.getGridContainerStyle();\n \n displayedResults.forEach((result, index) => {\n const resultEl = this.options.renderResult\n ? this.options.renderResult(this.extractFields(result), index)\n : this.renderDefaultResult(this.extractFields(result), index);\n gridWrapper.appendChild(resultEl);\n });\n \n this.container.appendChild(gridWrapper);\n } else {\n // List view - no wrapper needed\n displayedResults.forEach((result, index) => {\n const resultEl = this.options.renderResult\n ? this.options.renderResult(this.extractFields(result), index)\n : this.renderDefaultResult(this.extractFields(result), index);\n this.container.appendChild(resultEl);\n });\n }\n }\n\n private extractResults(): any[] {\n if (!this.options.results) {\n log.verbose('SearchResults: No results to extract');\n return [];\n }\n\n let extracted: any[] = [];\n\n if (Array.isArray(this.options.results)) {\n extracted = this.options.results;\n } else {\n const res = this.options.results as Record<string, unknown>;\n if (res.results && Array.isArray(res.results)) {\n extracted = res.results;\n } else if (res.data) {\n const data = res.data as Record<string, unknown>;\n if (Array.isArray(data)) {\n extracted = data;\n } else if (data.results && Array.isArray(data.results)) {\n extracted = data.results;\n }\n }\n }\n\n log.verbose('SearchResults: Extracted results', {\n count: extracted.length,\n viewMode: this.options.viewMode,\n });\n\n return extracted;\n }\n\n private extractFields(item: any): ResultItem {\n try {\n const mapping = this.options.fieldMapping;\n\n return {\n id: extractField(item, mapping.id) || String(item.id || ''),\n title: extractField(item, mapping.title) || extractField(item, mapping.primaryText) || 'Untitled',\n description: extractField(item, mapping.description) || extractField(item, mapping.secondaryText),\n image: extractField(item, mapping.image) || extractField(item, mapping.imageUrl),\n price: mapping.price ? formatPrice(extractField(item, mapping.price)) : undefined,\n url: extractField(item, mapping.url),\n metadata: item,\n };\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.warn('SearchResults: Error extracting fields from result', {\n error: error.message,\n itemId: item?.id || 'unknown',\n });\n // Return fallback result\n return {\n id: String(item?.id || ''),\n title: 'Error loading result',\n metadata: item,\n };\n }\n }\n\n private renderDefaultLoading(): HTMLElement {\n const div = document.createElement('div');\n div.style.cssText = this.getLoadingStyle();\n div.textContent = 'Loading results...';\n return div;\n }\n\n private renderDefaultError(error: Error): HTMLElement {\n const div = document.createElement('div');\n div.style.cssText = this.getErrorStyle();\n div.textContent = `Error: ${error.message}`;\n return div;\n }\n\n private renderDefaultEmpty(): HTMLElement {\n const div = document.createElement('div');\n div.style.cssText = this.getEmptyStyle();\n div.textContent = 'No results found';\n return div;\n }\n\n private renderDefaultResult(result: ResultItem, index: number): HTMLElement {\n const div = document.createElement('div');\n div.style.cssText = this.getResultStyle(index);\n \n // Always set data attributes for event delegation (even if no onResultClick)\n div.setAttribute('data-result-id', result.id);\n div.setAttribute('data-result-index', String(index));\n \n if (this.options.onResultClick) {\n div.style.cursor = 'pointer';\n div.setAttribute('role', 'button');\n div.setAttribute('tabindex', '0');\n \n console.log('SearchResults: Result element created', {\n resultId: result.id,\n index,\n element: div,\n hasOnResultClick: !!this.options.onResultClick\n });\n \n // No need to attach individual listeners - we use event delegation on the container\n // This ensures clicks work even when results are recreated during re-renders\n \n // Still handle keyboard accessibility\n div.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n \n // Trigger the click event which will be handled by delegation\n const clickEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n div.dispatchEvent(clickEvent);\n }\n });\n }\n\n if (this.options.viewMode === 'card' || this.options.viewMode === 'grid') {\n this.renderCardResult(div, result);\n } else {\n this.renderListResult(div, result);\n }\n\n return div;\n }\n\n private renderCardResult(container: HTMLElement, result: ResultItem): void {\n if (result.image) {\n const imgContainer = document.createElement('div');\n imgContainer.style.cssText = this.getImageContainerStyle();\n \n const img = document.createElement('img');\n img.src = result.image;\n img.alt = result.title;\n img.style.cssText = this.getImageStyle();\n \n imgContainer.appendChild(img);\n container.appendChild(imgContainer);\n }\n\n const content = document.createElement('div');\n content.style.cssText = this.getCardContentStyle();\n\n if (result.title) {\n const h3 = document.createElement('h3');\n h3.style.cssText = this.getTitleStyle();\n h3.textContent = result.title;\n content.appendChild(h3);\n }\n\n if (result.description) {\n const p = document.createElement('p');\n p.style.cssText = this.getDescriptionStyle();\n p.textContent = result.description;\n content.appendChild(p);\n }\n\n if (result.price) {\n const priceDiv = document.createElement('div');\n priceDiv.style.cssText = this.getPriceStyle();\n priceDiv.textContent = result.price;\n content.appendChild(priceDiv);\n }\n\n container.appendChild(content);\n }\n\n private renderListResult(container: HTMLElement, result: ResultItem): void {\n if (result.image) {\n const img = document.createElement('img');\n img.src = result.image;\n img.alt = result.title;\n img.style.cssText = this.getListImageStyle();\n container.appendChild(img);\n }\n\n const content = document.createElement('div');\n content.style.cssText = 'flex: 1; min-width: 0;';\n\n if (result.title) {\n const h3 = document.createElement('h3');\n h3.style.cssText = this.getTitleStyle();\n h3.textContent = result.title;\n content.appendChild(h3);\n }\n\n if (result.description) {\n const p = document.createElement('p');\n p.style.cssText = this.getDescriptionStyle();\n p.textContent = result.description;\n content.appendChild(p);\n }\n\n if (result.price) {\n const priceDiv = document.createElement('div');\n priceDiv.style.cssText = this.getPriceStyle();\n priceDiv.textContent = result.price;\n content.appendChild(priceDiv);\n }\n\n container.appendChild(content);\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getLoadingStyle(): string {\n return `\n padding: ${this.theme.spacing.large};\n text-align: center;\n color: ${this.theme.colors.text};\n `;\n }\n\n private getErrorStyle(): string {\n return `\n padding: ${this.theme.spacing.large};\n text-align: center;\n color: ${this.theme.colors.error};\n `;\n }\n\n private getEmptyStyle(): string {\n return `\n padding: ${this.theme.spacing.large};\n text-align: center;\n color: ${this.theme.colors.textSecondary || this.theme.colors.text};\n `;\n }\n\n private getGridContainerStyle(): string {\n return `\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: ${this.theme.spacing.medium};\n width: 100%;\n `;\n }\n\n private getResultStyle(index: number): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n const transition = this.theme.transitions?.normal || '250ms ease-in-out';\n\n if (this.options.viewMode === 'list') {\n return `\n padding: ${this.theme.spacing.medium};\n border-bottom: 1px solid ${this.theme.colors.border};\n border-radius: 0;\n margin-bottom: 0;\n transition: ${transition};\n background-color: ${this.theme.colors.background};\n display: flex;\n align-items: flex-start;\n gap: ${this.theme.spacing.medium};\n `;\n } else {\n // Card/Grid view - cards should be contained within grid\n return `\n padding: 0;\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n box-shadow: ${this.theme.shadows.small};\n transition: ${transition};\n background-color: ${this.theme.colors.background};\n display: flex;\n flex-direction: column;\n overflow: hidden;\n height: 100%;\n `;\n }\n }\n\n private getImageContainerStyle(): string {\n return `\n width: 100%;\n aspect-ratio: ${this.options.viewMode === 'grid' ? '1/1' : '16/9'};\n overflow: hidden;\n background-color: ${this.theme.colors.hover};\n flex-shrink: 0;\n `;\n }\n\n private getImageStyle(): string {\n return `\n width: 100%;\n height: 100%;\n object-fit: cover;\n `;\n }\n\n private getCardContentStyle(): string {\n return `\n padding: ${this.theme.spacing.medium};\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n `;\n }\n\n private getListContentStyle(): string {\n return `\n display: flex;\n align-items: flex-start;\n gap: ${this.theme.spacing.medium};\n flex: 1;\n min-width: 0;\n `;\n }\n\n private getListImageStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n width: 100px;\n height: 100px;\n object-fit: cover;\n border-radius: ${borderRadius};\n flex-shrink: 0;\n `;\n }\n\n private getTitleStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.large};\n font-weight: bold;\n margin: 0;\n margin-bottom: ${this.theme.spacing.small};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getDescriptionStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.medium};\n color: ${this.theme.colors.text};\n margin: 0;\n margin-bottom: ${this.theme.spacing.small};\n opacity: 0.8;\n `;\n }\n\n private getPriceStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: bold;\n color: ${this.theme.colors.primary};\n margin-top: auto;\n `;\n }\n}\n\n","/**\n * Stats Component\n * \n * Displays search statistics (total results, processing time, etc.)\n */\n\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface StatsOptions {\n container: HTMLElement | string;\n results?: SearchResponse | null;\n loading?: boolean;\n showProcessingTime?: boolean;\n labels?: {\n resultsFound?: (count: number) => string;\n processingTime?: (time: number) => string;\n };\n}\n\nexport class Stats {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<StatsOptions, 'container' | 'results' | 'loading' | 'labels'>> & Pick<StatsOptions, 'results' | 'loading' | 'labels'>;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: StatsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('Stats: container element not found');\n log.error('Stats: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.options = {\n showProcessingTime: options.showProcessingTime || false,\n results: options.results,\n loading: options.loading,\n labels: options.labels,\n };\n\n // Subscribe to state manager for automatic updates\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n this.options.results = state.results;\n this.options.loading = state.loading;\n this.render();\n });\n\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n }\n\n update(options: Partial<Pick<StatsOptions, 'results' | 'loading'>>): void {\n if (options.results !== undefined) this.options.results = options.results;\n if (options.loading !== undefined) this.options.loading = options.loading;\n this.render();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n if (this.options.loading) {\n return;\n }\n\n const totalResults = this.getTotalResults();\n if (totalResults === null) {\n return;\n }\n\n const statsDiv = document.createElement('div');\n statsDiv.style.cssText = this.getContainerStyle();\n\n const resultsLabel = this.getResultsLabel(totalResults);\n const resultsSpan = document.createElement('span');\n resultsSpan.textContent = resultsLabel;\n resultsSpan.style.cssText = this.getResultsStyle();\n statsDiv.appendChild(resultsSpan);\n\n if (this.options.showProcessingTime) {\n const processingTime = this.getProcessingTime();\n if (processingTime !== null) {\n const timeLabel = this.getProcessingTimeLabel(processingTime);\n const timeSpan = document.createElement('span');\n timeSpan.textContent = timeLabel;\n timeSpan.style.cssText = this.getTimeStyle();\n statsDiv.appendChild(timeSpan);\n }\n }\n\n this.container.appendChild(statsDiv);\n }\n\n private getTotalResults(): number | null {\n if (!this.options.results) return null;\n\n // Check for totalResults (SDK's SearchResponse format)\n if (typeof this.options.results.totalResults === 'number') {\n return this.options.results.totalResults;\n }\n\n // Fallback to total (alternative format)\n if (typeof this.options.results.total === 'number') {\n return this.options.results.total;\n }\n\n // Fallback to results array length only if we can't find total\n // This should be a last resort as it only shows current page results\n if (this.options.results.results && Array.isArray(this.options.results.results)) {\n log.warn('Stats: Using results array length as total (totalResults not found)', {\n resultsLength: this.options.results.results.length,\n responseKeys: Object.keys(this.options.results),\n });\n return this.options.results.results.length;\n }\n\n return null;\n }\n\n private getProcessingTime(): number | null {\n if (!this.options.results) return null;\n const ms = (this.options.results as Record<string, unknown>).processingTimeMs;\n return typeof ms === 'number' ? ms : null;\n }\n\n private getResultsLabel(count: number): string {\n if (this.options.labels?.resultsFound) {\n return this.options.labels.resultsFound(count);\n }\n return `${count} result${count !== 1 ? 's' : ''} found`;\n }\n\n private getProcessingTimeLabel(time: number): string {\n if (this.options.labels?.processingTime) {\n return this.options.labels.processingTime(time);\n }\n return ` (${time}ms)`;\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getContainerStyle(): string {\n return `\n display: flex;\n align-items: center;\n gap: ${this.theme.spacing.small};\n font-size: ${this.theme.typography.fontSize.medium};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getResultsStyle(): string {\n return `\n font-weight: ${this.theme.typography.fontWeight?.medium || 500};\n `;\n }\n\n private getTimeStyle(): string {\n return `\n color: ${this.theme.colors.textSecondary || this.theme.colors.text};\n opacity: 0.7;\n `;\n }\n}\n\n","/**\n * Pagination Component\n * \n * Displays pagination controls for search results\n */\n\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface PaginationOptions {\n container: HTMLElement | string;\n results?: SearchResponse | null;\n currentPage?: number;\n itemsPerPage?: number;\n showFirstLast?: boolean;\n showPrevNext?: boolean;\n onPageChange?: (page: number) => void;\n}\n\nexport class Pagination {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<PaginationOptions, 'container' | 'results' | 'currentPage' | 'onPageChange'>> & Pick<PaginationOptions, 'results' | 'currentPage' | 'onPageChange'>;\n private currentPage: number;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: PaginationOptions) {\n console.log('Pagination: Constructor called', { options });\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('Pagination: container element not found');\n log.error('Pagination: Initialization failed', { error: error.message });\n throw error;\n }\n\n console.log('Pagination: Container found', { container, containerId: container.id, containerTag: container.tagName });\n this.container = container;\n this.currentPage = options.currentPage || 1;\n this.options = {\n itemsPerPage: options.itemsPerPage || 10,\n showFirstLast: options.showFirstLast !== false,\n showPrevNext: options.showPrevNext !== false,\n results: options.results,\n currentPage: options.currentPage || 1,\n onPageChange: options.onPageChange,\n };\n\n // Attach event delegation listener to the persistent container (not recreated on render)\n // This ensures clicks work even when buttons are recreated\n const handleContainerClick = (e: Event) => {\n const target = e.target as HTMLElement;\n \n // Debug: log all clicks on container\n console.log('Pagination: Container clicked', { \n target: target.tagName,\n targetClass: target.className,\n hasDataPage: target.hasAttribute('data-page'),\n closestButton: target.closest('button[data-page]')\n });\n \n // Ignore clicks on non-interactive elements (like ellipsis spans)\n if (target.tagName === 'SPAN' || target.tagName === 'DIV') {\n // Check if it's inside a button\n const button = target.closest('button[data-page]') as HTMLButtonElement;\n if (!button) {\n // Click is on ellipsis or other non-button element, ignore it\n return;\n }\n // If span is inside a button, use the button\n }\n \n // Find the button (could be the target itself or a parent)\n const button = (target.tagName === 'BUTTON' && target.hasAttribute('data-page'))\n ? target as HTMLButtonElement\n : target.closest('button[data-page]') as HTMLButtonElement;\n \n if (button) {\n e.preventDefault();\n e.stopPropagation();\n \n const pageStr = button.getAttribute('data-page');\n const page = pageStr ? parseInt(pageStr, 10) : 0;\n \n console.log('Pagination: Button found', { \n page, \n currentPage: this.currentPage, \n pageStr,\n button,\n isValid: page > 0 && page !== this.currentPage\n });\n \n if (page > 0) {\n // Always update, even if it's the same page (for debugging)\n console.log('Pagination: Processing page change', { \n page, \n currentPage: this.currentPage,\n willUpdate: page !== this.currentPage\n });\n \n if (page !== this.currentPage) {\n // Update state manager (automatically triggers search)\n this.provider.stateManager.setPage(page);\n \n // Call callback for backwards compatibility\n if (this.options.onPageChange) {\n try {\n this.options.onPageChange(page);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('Pagination: Error in onPageChange callback', {\n page,\n error: error.message,\n });\n }\n }\n } else {\n console.log('Pagination: Page is already current, skipping update', { page });\n }\n } else {\n console.warn('Pagination: Invalid page number', { page, pageStr, button });\n }\n } else {\n console.log('Pagination: Click not on a button', { target: target.tagName });\n }\n };\n \n this.container.addEventListener('click', handleContainerClick, { passive: false });\n console.log('Pagination: Event delegation listener attached to container', { container: this.container });\n\n // Subscribe to state manager to get results and current page\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n // Update results from state manager\n if (state.results) {\n this.options.results = state.results;\n }\n // Update current page from state manager\n if (state.currentPage !== this.currentPage) {\n this.currentPage = state.currentPage;\n }\n // Re-render to sync with state\n this.render();\n });\n\n this.render();\n }\n\n update(options: Partial<Pick<PaginationOptions, 'results' | 'currentPage'>>): void {\n if (options.results !== undefined) this.options.results = options.results;\n if (options.currentPage !== undefined) this.currentPage = options.currentPage;\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n }\n\n private render(): void {\n console.log('🔵 Pagination.render() START', {\n container: this.container,\n containerId: this.container.id,\n currentPage: this.currentPage,\n hasResults: !!this.options.results\n });\n \n this.container.innerHTML = '';\n\n const totalPages = this.getTotalPages();\n console.log('🔵 Pagination: Total pages calculated', { totalPages });\n \n if (totalPages <= 1) {\n console.log('🔵 Pagination: NOT RENDERING - totalPages <= 1', { totalPages });\n log.verbose('Pagination: Not rendering, totalPages <= 1', { totalPages });\n return;\n }\n \n console.log('🔵 Pagination: WILL RENDER', { \n currentPage: this.currentPage, \n totalPages,\n hasResults: !!this.options.results \n });\n \n log.verbose('Pagination: Rendering', { \n currentPage: this.currentPage, \n totalPages,\n hasResults: !!this.options.results \n });\n\n const paginationDiv = document.createElement('div');\n paginationDiv.style.cssText = this.getContainerStyle();\n paginationDiv.setAttribute('data-pagination-wrapper', 'true');\n \n console.log('Pagination: Created paginationDiv', { \n paginationDiv,\n style: paginationDiv.style.cssText,\n container: this.container\n });\n \n // Event delegation listener is attached to this.container in constructor\n // No need to attach it here since paginationDiv is recreated on each render\n\n // Always show First button if not on first page\n if (this.options.showFirstLast && this.currentPage > 1) {\n const firstBtn = this.createButton('First', 1);\n paginationDiv.appendChild(firstBtn);\n }\n\n // Always show Previous button if not on first page\n if (this.options.showPrevNext && this.currentPage > 1) {\n const prevBtn = this.createButton('Previous', this.currentPage - 1);\n paginationDiv.appendChild(prevBtn);\n }\n\n // Calculate page range to display (always show consistent number of pages)\n const maxPagesToShow = 5; // Always show 5 page numbers\n let startPage: number;\n let endPage: number;\n\n if (totalPages <= maxPagesToShow) {\n // If total pages is less than max, show all pages\n startPage = 1;\n endPage = totalPages;\n } else {\n // Calculate start and end to always show maxPagesToShow pages\n // Try to center current page, but adjust if near boundaries\n const halfRange = Math.floor(maxPagesToShow / 2);\n \n if (this.currentPage <= halfRange + 1) {\n // Near the beginning: show pages 1 to maxPagesToShow\n startPage = 1;\n endPage = maxPagesToShow;\n } else if (this.currentPage >= totalPages - halfRange) {\n // Near the end: show last maxPagesToShow pages\n startPage = totalPages - maxPagesToShow + 1;\n endPage = totalPages;\n } else {\n // In the middle: center around current page\n startPage = this.currentPage - halfRange;\n endPage = this.currentPage + halfRange;\n }\n }\n\n // Show ellipsis if needed\n if (startPage > 1) {\n const ellipsis = document.createElement('span');\n ellipsis.textContent = '...';\n ellipsis.style.cssText = `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n color: ${this.theme.colors.textSecondary || this.theme.colors.text};\n `;\n paginationDiv.appendChild(ellipsis);\n }\n\n // Render page number buttons\n console.log('🔵 Pagination: Rendering page buttons', { startPage, endPage, currentPage: this.currentPage });\n for (let i = startPage; i <= endPage; i++) {\n console.log('🔵 Pagination: Creating page button', { i, isActive: i === this.currentPage });\n const pageBtn = this.createButton(String(i), i, i === this.currentPage);\n paginationDiv.appendChild(pageBtn);\n console.log('🔵 Pagination: Page button appended', { page: i, button: pageBtn });\n }\n\n // Show ellipsis if needed\n if (endPage < totalPages) {\n const ellipsis = document.createElement('span');\n ellipsis.textContent = '...';\n ellipsis.style.cssText = `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n color: ${this.theme.colors.textSecondary || this.theme.colors.text};\n `;\n paginationDiv.appendChild(ellipsis);\n }\n\n // Always show Next button if not on last page\n if (this.options.showPrevNext && this.currentPage < totalPages) {\n const nextBtn = this.createButton('Next', this.currentPage + 1);\n paginationDiv.appendChild(nextBtn);\n }\n\n // Always show Last button if not on last page\n if (this.options.showFirstLast && this.currentPage < totalPages) {\n const lastBtn = this.createButton('Last', totalPages);\n paginationDiv.appendChild(lastBtn);\n }\n\n console.log('🔵 Pagination: About to append paginationDiv to container', {\n paginationDiv,\n container: this.container,\n containerChildrenBefore: this.container.children.length,\n paginationDivChildren: paginationDiv.children.length\n });\n \n this.container.appendChild(paginationDiv);\n \n console.log('🔵 Pagination: paginationDiv appended to container', {\n containerChildrenAfter: this.container.children.length,\n containerHTML: this.container.innerHTML.substring(0, 300)\n });\n \n // Verify buttons are in DOM\n const buttons = this.container.querySelectorAll('button[data-page]');\n console.log('🔵 Pagination: Render complete - buttons in DOM', { \n buttonCount: buttons.length,\n buttons: Array.from(buttons).map(b => {\n const btn = b as HTMLButtonElement;\n return {\n text: btn.textContent,\n page: btn.getAttribute('data-page'),\n element: btn,\n parent: btn.parentElement?.tagName\n };\n })\n });\n \n // Test click handler directly on first button\n console.log('🔵 Pagination: Testing direct click handler');\n const testButton = this.container.querySelector('button[data-page]') as HTMLButtonElement;\n if (testButton) {\n console.log('🔵 Pagination: Found test button, adding DIRECT listener', { \n testButton,\n page: testButton.getAttribute('data-page'),\n text: testButton.textContent\n });\n testButton.addEventListener('click', (e) => {\n console.log('🟢🟢🟢 DIRECT BUTTON CLICK HANDLER FIRED! 🟢🟢🟢', { \n e,\n button: testButton,\n page: testButton.getAttribute('data-page'),\n target: e.target\n });\n e.preventDefault();\n e.stopPropagation();\n }, { passive: false, capture: true });\n console.log('🔵 Pagination: Direct listener attached to test button');\n } else {\n console.warn('🔴 Pagination: NO TEST BUTTON FOUND for direct listener!');\n }\n \n console.log('🔵 Pagination.render() END');\n }\n\n private getTotalPages(): number {\n if (!this.options.results) return 0;\n\n // Check for totalResults (SDK's SearchResponse format)\n let total: number;\n if (typeof this.options.results.totalResults === 'number') {\n total = this.options.results.totalResults;\n } else if (typeof this.options.results.total === 'number') {\n // Fallback to total (alternative format)\n total = this.options.results.total;\n } else {\n // Last resort: use results array length (but log warning)\n const resultsLength = this.options.results.results?.length || 0;\n log.warn('Pagination: Using results array length as total (totalResults not found)', {\n resultsLength,\n responseKeys: Object.keys(this.options.results),\n });\n total = resultsLength;\n }\n\n const totalPages = Math.ceil(total / this.options.itemsPerPage);\n log.verbose('Pagination: Calculating total pages', {\n total,\n itemsPerPage: this.options.itemsPerPage,\n totalPages,\n currentPage: this.currentPage,\n });\n return totalPages;\n }\n\n private createButton(text: string, page: number, isActive: boolean = false): HTMLElement {\n const button = document.createElement('button');\n button.textContent = text;\n button.style.cssText = this.getButtonStyle(isActive);\n button.type = 'button'; // Prevent form submission\n button.setAttribute('data-page', String(page)); // For event delegation\n \n // No need to attach individual listeners - we use event delegation on the container\n // This ensures clicks always work even when buttons are recreated\n \n return button;\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getContainerStyle(): string {\n return `\n display: flex;\n align-items: center;\n gap: ${this.theme.spacing.small};\n flex-wrap: wrap;\n `;\n }\n\n private getButtonStyle(isActive: boolean): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n const transition = this.theme.transitions?.fast || '150ms ease-in-out';\n\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n background-color: ${isActive ? this.theme.colors.primary : this.theme.colors.background};\n color: ${isActive ? '#ffffff' : this.theme.colors.text};\n cursor: pointer;\n transition: ${transition};\n `;\n }\n}\n\n","/**\n * SortBy Component\n * \n * Displays sort options for search results\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface SortOption {\n value: string;\n label: string;\n}\n\nexport interface SortByOptions {\n container: HTMLElement | string;\n options: SortOption[];\n value?: string;\n label?: string;\n onSortChange?: (value: string) => void;\n}\n\nexport class SortBy {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: {\n options: SortOption[];\n label?: string;\n onSortChange?: (value: string) => void;\n };\n private currentValue: string;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: SortByOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('SortBy: container element not found');\n log.error('SortBy: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.currentValue = options.value || options.options[0]?.value || '';\n this.options = {\n options: options.options,\n label: options.label,\n onSortChange: options.onSortChange,\n };\n\n // Subscribe to state manager to sync sort value\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n if (state.sortBy && state.sortBy !== this.currentValue) {\n this.currentValue = state.sortBy;\n this.render();\n }\n });\n\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n }\n\n update(options: Partial<Pick<SortByOptions, 'value'>>): void {\n if (options.value !== undefined) {\n this.currentValue = options.value;\n this.render();\n }\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n const wrapper = document.createElement('div');\n wrapper.style.cssText = this.getContainerStyle();\n\n if (this.options.label) {\n const label = document.createElement('label');\n label.textContent = this.options.label;\n label.style.cssText = this.getLabelStyle();\n wrapper.appendChild(label);\n }\n\n const select = document.createElement('select');\n select.value = this.currentValue;\n select.style.cssText = this.getSelectStyle();\n select.setAttribute('aria-label', 'Sort results');\n select.addEventListener('change', (e) => {\n const target = e.target as HTMLSelectElement;\n this.currentValue = target.value;\n log.verbose('SortBy: Sort option changed', { value: target.value });\n \n // Update state manager (automatically triggers search)\n this.provider.stateManager.setSortBy(target.value);\n \n // Call callback for backwards compatibility\n if (this.options.onSortChange) {\n try {\n this.options.onSortChange(target.value);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SortBy: Error in onSortChange callback', {\n value: target.value,\n error: error.message,\n });\n }\n }\n });\n\n this.options.options.forEach((option) => {\n const optionEl = document.createElement('option');\n optionEl.value = option.value;\n optionEl.textContent = option.label;\n select.appendChild(optionEl);\n });\n\n wrapper.appendChild(select);\n this.container.appendChild(wrapper);\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getContainerStyle(): string {\n return `\n display: flex;\n align-items: center;\n gap: ${this.theme.spacing.small};\n `;\n }\n\n private getLabelStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.medium};\n color: ${this.theme.colors.text};\n font-weight: ${this.theme.typography.fontWeight?.medium || 500};\n `;\n }\n\n private getSelectStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n background-color: ${this.theme.colors.background};\n color: ${this.theme.colors.text};\n cursor: pointer;\n outline: none;\n `;\n }\n}\n\n","/**\n * Facets Component\n * \n * Displays facet filters for search results\n */\n\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface FacetItem {\n value: string;\n count: number;\n selected?: boolean;\n}\n\nexport interface Facet {\n field: string;\n label?: string;\n items: FacetItem[];\n}\n\nexport interface FacetsOptions {\n container: HTMLElement | string;\n results?: SearchResponse | null;\n facets?: Facet[];\n maxItems?: number;\n showMore?: boolean;\n onFacetChange?: (field: string, value: string, selected: boolean) => void;\n}\n\nexport class Facets {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<FacetsOptions, 'container' | 'results' | 'facets' | 'onFacetChange'>> & Pick<FacetsOptions, 'results' | 'facets' | 'onFacetChange'>;\n private expandedFacets: Record<string, boolean> = {};\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: FacetsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n throw new Error('Facets: container element not found');\n }\n\n this.container = container;\n this.options = {\n maxItems: options.maxItems || 10,\n showMore: options.showMore !== false,\n results: options.results,\n facets: options.facets,\n onFacetChange: options.onFacetChange,\n };\n\n // Subscribe to state manager to get results and refinements\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n // Update results from state manager\n if (state.results) {\n this.options.results = state.results;\n }\n // Re-render to sync checkbox states with refinements\n this.render();\n });\n\n this.render();\n }\n\n update(options: Partial<Pick<FacetsOptions, 'results' | 'facets'>>): void {\n if (options.results !== undefined) this.options.results = options.results;\n if (options.facets !== undefined) this.options.facets = options.facets;\n this.render();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n const facets = this.getFacets();\n if (facets.length === 0) {\n log.verbose('Facets: No facets found in results', {\n hasResults: !!this.options.results,\n hasFacetsOption: !!this.options.facets,\n resultsKeys: this.options.results ? Object.keys(this.options.results) : [],\n });\n return;\n }\n\n log.verbose('Facets: Rendering', facets.length, 'facets', facets);\n\n facets.forEach((facet, facetIndex) => {\n const facetDiv = document.createElement('div');\n facetDiv.style.cssText = this.getFacetStyle();\n\n const header = document.createElement('div');\n header.style.cssText = this.getFacetHeaderStyle();\n header.textContent = facet.label || facet.field;\n facetDiv.appendChild(header);\n\n const list = document.createElement('div');\n list.style.cssText = this.getFacetListStyle();\n\n const isExpanded = this.expandedFacets[facet.field] || false;\n const itemsToShow = isExpanded ? facet.items : facet.items.slice(0, this.options.maxItems);\n\n itemsToShow.forEach((item, itemIndex) => {\n const itemDiv = document.createElement('div');\n itemDiv.style.cssText = this.getFacetItemStyle(item.selected || false);\n \n // Check if this refinement is active in state manager\n const refinements = this.provider.stateManager.getRefinements();\n const isSelected = refinements.some(\n r => r.field === facet.field && r.value === item.value\n ) || item.selected || false;\n \n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked = isSelected;\n checkbox.addEventListener('change', () => {\n const selected = checkbox.checked;\n \n // Update state manager (automatically triggers search)\n if (selected) {\n this.provider.stateManager.addRefinement(facet.field, item.value);\n } else {\n this.provider.stateManager.removeRefinement(facet.field, item.value);\n }\n \n // Call callback for backwards compatibility\n if (this.options.onFacetChange) {\n this.options.onFacetChange(facet.field, item.value, selected);\n }\n });\n itemDiv.appendChild(checkbox);\n\n const label = document.createElement('label');\n label.textContent = item.value;\n label.style.cssText = this.getFacetItemLabelStyle();\n label.setAttribute('for', `facet-${facet.field}-${itemIndex}`); // Accessibility\n checkbox.id = `facet-${facet.field}-${itemIndex}`;\n \n // Use a named function to ensure the listener is properly attached\n const handleLabelClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n checkbox.checked = !checkbox.checked;\n checkbox.dispatchEvent(new Event('change', { bubbles: true }));\n };\n \n label.addEventListener('click', handleLabelClick, { passive: false });\n itemDiv.appendChild(label);\n\n const count = document.createElement('span');\n count.textContent = `(${item.count})`;\n count.style.cssText = this.getFacetItemCountStyle();\n itemDiv.appendChild(count);\n\n list.appendChild(itemDiv);\n });\n\n if (this.options.showMore && facet.items.length > this.options.maxItems) {\n const showMoreBtn = document.createElement('button');\n showMoreBtn.textContent = isExpanded ? 'Show less' : `Show more (${facet.items.length - this.options.maxItems})`;\n showMoreBtn.style.cssText = this.getShowMoreStyle();\n // Use a named function to ensure the listener is properly attached\n const handleShowMoreClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n this.expandedFacets[facet.field] = !isExpanded;\n this.render();\n };\n \n showMoreBtn.addEventListener('click', handleShowMoreClick, { passive: false });\n list.appendChild(showMoreBtn);\n }\n\n facetDiv.appendChild(list);\n this.container.appendChild(facetDiv);\n });\n }\n\n private getFacets(): Facet[] {\n // If facets are explicitly provided, use them\n if (this.options.facets && Array.isArray(this.options.facets)) {\n return this.options.facets;\n }\n\n // Extract facets from results - check nested data structure\n const results = this.options.results;\n if (!results) {\n return [];\n }\n\n // Navigate to facets: results.data.facets (widget mode) or results.facets (regular mode)\n let rawFacets: any = null;\n \n if (results && typeof results === 'object') {\n // Check for widget response structure: { data: { facets: [...] } }\n if ('data' in results && results.data && typeof results.data === 'object') {\n if ('facets' in results.data && Array.isArray(results.data.facets)) {\n rawFacets = results.data.facets;\n }\n }\n // Check for direct facets: { facets: [...] }\n if (!rawFacets && 'facets' in results && Array.isArray(results.facets)) {\n rawFacets = results.facets;\n }\n }\n\n if (!rawFacets || !Array.isArray(rawFacets)) {\n return [];\n }\n\n // Process each facet\n const processedFacets: Facet[] = [];\n \n for (const facet of rawFacets) {\n // Extract field name - prioritize field_name, then field, then name\n const field = facet.field_name || facet.field || facet.name;\n if (!field) {\n continue;\n }\n\n // Extract label - use label if provided, otherwise use field name\n const label = facet.label || field;\n\n // Extract items from counts array\n const items: FacetItem[] = [];\n if (Array.isArray(facet.counts)) {\n for (const count of facet.counts) {\n // Handle count object structure: { value: string, count: number }\n const value = count.value;\n const countValue = count.count;\n \n if (value === undefined || value === null || countValue === undefined || countValue === null) {\n continue;\n }\n\n items.push({\n value: String(value),\n count: Number(countValue),\n selected: Boolean(count.selected),\n });\n }\n }\n\n // Only add facet if it has items\n if (items.length > 0) {\n processedFacets.push({\n field,\n label,\n items,\n });\n }\n }\n\n return processedFacets;\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getFacetStyle(): string {\n return `\n margin-bottom: ${this.theme.spacing.medium};\n `;\n }\n\n private getFacetHeaderStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: ${this.theme.typography.fontWeight?.bold || 700};\n margin-bottom: ${this.theme.spacing.small};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getFacetListStyle(): string {\n return `\n display: flex;\n flex-direction: column;\n gap: ${this.theme.spacing.small};\n `;\n }\n\n private getFacetItemStyle(isSelected: boolean): string {\n return `\n display: flex;\n align-items: center;\n gap: ${this.theme.spacing.small};\n padding: ${this.theme.spacing.small};\n cursor: pointer;\n background-color: ${isSelected ? this.theme.colors.hover : 'transparent'};\n border-radius: ${typeof this.theme.borderRadius === 'string' ? this.theme.borderRadius : this.theme.borderRadius.small};\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n\n private getFacetItemLabelStyle(): string {\n return `\n flex: 1;\n font-size: ${this.theme.typography.fontSize.medium};\n color: ${this.theme.colors.text};\n cursor: pointer;\n `;\n }\n\n private getFacetItemCountStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.small};\n color: ${this.theme.colors.textSecondary || this.theme.colors.text};\n opacity: 0.7;\n `;\n }\n\n private getShowMoreStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.small;\n return `\n padding: ${this.theme.spacing.small};\n font-size: ${this.theme.typography.fontSize.small};\n color: ${this.theme.colors.primary};\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n margin-top: ${this.theme.spacing.small};\n `;\n }\n}\n\n","/**\n * CurrentRefinements Component\n * \n * Displays currently active filters/refinements with ability to clear them\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface Refinement {\n field: string;\n label?: string;\n value: string;\n displayValue?: string;\n}\n\nexport interface CurrentRefinementsOptions {\n container: HTMLElement | string;\n refinements?: Refinement[];\n showClearAll?: boolean;\n onRefinementClear?: (field: string, value: string) => void;\n onClearAll?: () => void;\n}\n\nexport class CurrentRefinements {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<CurrentRefinementsOptions, 'container' | 'refinements' | 'onRefinementClear' | 'onClearAll'>> & Pick<CurrentRefinementsOptions, 'refinements' | 'onRefinementClear' | 'onClearAll'>;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: CurrentRefinementsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('CurrentRefinements: container element not found');\n log.error('CurrentRefinements: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.options = {\n showClearAll: options.showClearAll !== false,\n refinements: options.refinements || [],\n onRefinementClear: options.onRefinementClear,\n onClearAll: options.onClearAll,\n };\n\n // Subscribe to state manager to get refinements automatically\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n // Convert state manager refinements to CurrentRefinements format\n this.options.refinements = state.refinements.map(r => ({\n field: r.field,\n value: r.value,\n label: r.field, // Use field as label if not provided\n }));\n this.render();\n });\n\n this.render();\n }\n\n update(options: Partial<Pick<CurrentRefinementsOptions, 'refinements'>>): void {\n if (options.refinements !== undefined) {\n this.options.refinements = options.refinements;\n this.render();\n }\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n if (!this.options.refinements || this.options.refinements.length === 0) {\n return;\n }\n\n const wrapper = document.createElement('div');\n wrapper.style.cssText = this.getContainerStyle();\n\n this.options.refinements.forEach((refinement, index) => {\n const item = document.createElement('div');\n item.style.cssText = this.getItemStyle();\n\n const label = document.createElement('span');\n label.textContent = `${refinement.label || refinement.field}: `;\n label.style.cssText = this.getLabelStyle();\n item.appendChild(label);\n\n const value = document.createElement('span');\n value.textContent = refinement.displayValue || refinement.value;\n value.style.cssText = this.getValueStyle();\n item.appendChild(value);\n\n const clearBtn = document.createElement('button');\n clearBtn.innerHTML = '×';\n clearBtn.type = 'button'; // Prevent form submission\n clearBtn.style.cssText = this.getClearButtonStyle();\n clearBtn.setAttribute('aria-label', `Clear ${refinement.field} filter`);\n \n // Use a named function to ensure the listener is properly attached\n const handleClearClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n \n // Update state manager (automatically triggers search)\n this.provider.stateManager.removeRefinement(refinement.field, refinement.value);\n \n // Call callback for backwards compatibility\n if (this.options.onRefinementClear) {\n log.verbose('CurrentRefinements: Refinement cleared', { field: refinement.field, value: refinement.value });\n try {\n this.options.onRefinementClear(refinement.field, refinement.value);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('CurrentRefinements: Error in onRefinementClear callback', {\n field: refinement.field,\n value: refinement.value,\n error: error.message,\n });\n }\n }\n };\n \n clearBtn.addEventListener('click', handleClearClick, { passive: false });\n item.appendChild(clearBtn);\n\n wrapper.appendChild(item);\n });\n\n if (this.options.showClearAll && this.options.refinements.length > 1) {\n const clearAllBtn = document.createElement('button');\n clearAllBtn.textContent = 'Clear all';\n clearAllBtn.style.cssText = this.getClearAllButtonStyle();\n // Use a named function to ensure the listener is properly attached\n const handleClearAllClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n \n // Clear all refinements in state manager (automatically triggers search)\n this.provider.stateManager.clearRefinements();\n \n // Call callback for backwards compatibility\n if (this.options.onClearAll) {\n this.options.onClearAll();\n }\n };\n \n clearAllBtn.addEventListener('click', handleClearAllClick, { passive: false });\n wrapper.appendChild(clearAllBtn);\n }\n\n this.container.appendChild(wrapper);\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getContainerStyle(): string {\n return `\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: ${this.theme.spacing.small};\n `;\n }\n\n private getItemStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n display: inline-flex;\n align-items: center;\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n background-color: ${this.theme.colors.hover};\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n font-size: ${this.theme.typography.fontSize.small};\n `;\n }\n\n private getLabelStyle(): string {\n return `\n margin-right: ${this.theme.spacing.small};\n color: ${this.theme.colors.text};\n font-weight: ${this.theme.typography.fontWeight?.medium || 500};\n `;\n }\n\n private getValueStyle(): string {\n return `\n margin-right: ${this.theme.spacing.small};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getClearButtonStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.full || '50%';\n return `\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: ${borderRadius};\n background-color: transparent;\n border: none;\n color: ${this.theme.colors.text};\n cursor: pointer;\n font-size: ${this.theme.typography.fontSize.medium};\n line-height: 1;\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n\n private getClearAllButtonStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.small};\n color: ${this.theme.colors.primary};\n background: transparent;\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n cursor: pointer;\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n}\n\n","/**\n * ClearRefinements Component\n * \n * A standalone button to clear all active refinements/filters\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface ClearRefinementsOptions {\n container: HTMLElement | string;\n /** Whether clicking should also clear the search query */\n clearsQuery?: boolean;\n /** Button text when there are refinements to clear */\n resetLabel?: string;\n /** Button text shown when there are no refinements */\n disabledLabel?: string;\n /** Fields to include (if not specified, all fields are included) */\n includedFields?: string[];\n /** Fields to exclude from clearing */\n excludedFields?: string[];\n /** Callback when refinements are cleared */\n onClear?: () => void;\n /** Whether to hide when there are no refinements */\n hideWhenEmpty?: boolean;\n}\n\nexport class ClearRefinements {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: {\n clearsQuery: boolean;\n resetLabel: string;\n disabledLabel: string;\n includedFields?: string[];\n excludedFields: string[];\n onClear?: () => void;\n hideWhenEmpty: boolean;\n };\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: ClearRefinementsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('ClearRefinements: container element not found');\n log.error('ClearRefinements: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.options = {\n clearsQuery: options.clearsQuery ?? false,\n resetLabel: options.resetLabel ?? 'Clear all filters',\n disabledLabel: options.disabledLabel ?? 'No filters applied',\n includedFields: options.includedFields,\n excludedFields: options.excludedFields ?? [],\n onClear: options.onClear,\n hideWhenEmpty: options.hideWhenEmpty ?? false,\n };\n\n // Subscribe to state manager to update on refinement changes\n this.unsubscribeStateManager = this.provider.stateManager.subscribe(() => {\n this.render();\n });\n\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n this.container.innerHTML = '';\n }\n\n private getRelevantRefinements(): Array<{ field: string; value: string }> {\n const refinements = this.provider.stateManager.getRefinements();\n return refinements.filter(r => {\n if (this.options.excludedFields.includes(r.field)) return false;\n if (this.options.includedFields && !this.options.includedFields.includes(r.field)) return false;\n return true;\n });\n }\n\n private canClear(): boolean {\n const relevantRefinements = this.getRelevantRefinements();\n const query = this.provider.stateManager.getQuery();\n return relevantRefinements.length > 0 || (this.options.clearsQuery && query.length > 0);\n }\n\n private handleClick(): void {\n const canClear = this.canClear();\n if (!canClear) return;\n\n const relevantRefinements = this.getRelevantRefinements();\n \n log.verbose('ClearRefinements: Clearing refinements', {\n count: relevantRefinements.length,\n clearsQuery: this.options.clearsQuery,\n });\n\n // Clear relevant refinements\n if (this.options.includedFields || this.options.excludedFields.length > 0) {\n // Clear only specific refinements\n relevantRefinements.forEach(r => {\n this.provider.stateManager.removeRefinement(r.field, r.value, false);\n });\n } else {\n // Clear all refinements\n this.provider.stateManager.clearRefinements(false);\n }\n\n // Clear query if requested\n if (this.options.clearsQuery) {\n this.provider.stateManager.setQuery('', true);\n } else if (relevantRefinements.length > 0) {\n // Trigger search after clearing\n this.provider.stateManager.search();\n }\n\n // Call the callback\n if (this.options.onClear) {\n try {\n this.options.onClear();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('ClearRefinements: Error in onClear callback', { error: error.message });\n }\n }\n }\n\n private render(): void {\n this.container.innerHTML = '';\n const canClear = this.canClear();\n\n // Hide when empty if requested\n if (this.options.hideWhenEmpty && !canClear) {\n return;\n }\n\n const button = document.createElement('button');\n button.type = 'button';\n button.textContent = canClear ? this.options.resetLabel : this.options.disabledLabel;\n button.disabled = !canClear;\n button.style.cssText = this.getButtonStyle(canClear);\n button.setAttribute('aria-label', canClear ? this.options.resetLabel : this.options.disabledLabel);\n \n button.addEventListener('click', () => this.handleClick());\n\n this.container.appendChild(button);\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getButtonStyle(canClear: boolean): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: ${this.theme.typography.fontWeight?.medium || 500};\n background-color: ${canClear ? this.theme.colors.primary : this.theme.colors.hover};\n color: ${canClear ? '#ffffff' : this.theme.colors.textSecondary};\n border: none;\n border-radius: ${borderRadius};\n cursor: ${canClear ? 'pointer' : 'not-allowed'};\n opacity: ${canClear ? '1' : '0.6'};\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n}\n","/**\n * RangeInput Component\n * \n * Displays a range input for filtering numeric values (e.g., price range)\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface RangeInputOptions {\n container: HTMLElement | string;\n field: string;\n label?: string;\n min?: number;\n max?: number;\n step?: number;\n currentMin?: number;\n currentMax?: number;\n showApplyButton?: boolean;\n placeholder?: {\n min?: string;\n max?: string;\n };\n onRangeChange?: (min: number | undefined, max: number | undefined) => void;\n}\n\nexport class RangeInput {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<RangeInputOptions, 'container' | 'currentMin' | 'currentMax' | 'onRangeChange'>> & Pick<RangeInputOptions, 'currentMin' | 'currentMax' | 'onRangeChange'>;\n private internalMin?: number;\n private internalMax?: number;\n\n constructor(provider: SearchProvider, options: RangeInputOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('RangeInput: container element not found');\n log.error('RangeInput: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.internalMin = options.currentMin;\n this.internalMax = options.currentMax;\n this.options = {\n field: options.field,\n label: options.label ?? '',\n min: options.min ?? 0,\n max: options.max ?? 100,\n step: options.step ?? 1,\n showApplyButton: options.showApplyButton !== false,\n placeholder: options.placeholder ?? { min: 'Min', max: 'Max' },\n currentMin: options.currentMin,\n currentMax: options.currentMax,\n onRangeChange: options.onRangeChange,\n };\n\n this.render();\n }\n\n update(options: Partial<Pick<RangeInputOptions, 'currentMin' | 'currentMax'>>): void {\n if (options.currentMin !== undefined) {\n this.internalMin = options.currentMin;\n this.options.currentMin = options.currentMin;\n }\n if (options.currentMax !== undefined) {\n this.internalMax = options.currentMax;\n this.options.currentMax = options.currentMax;\n }\n this.render();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n if (this.options.label) {\n const label = document.createElement('label');\n label.textContent = this.options.label;\n label.style.cssText = this.getLabelStyle();\n this.container.appendChild(label);\n }\n\n const inputGroup = document.createElement('div');\n inputGroup.style.cssText = this.getInputGroupStyle();\n\n const minInput = document.createElement('input');\n minInput.type = 'number';\n minInput.min = this.options.min?.toString() || '';\n minInput.max = this.options.max?.toString() || '';\n minInput.step = this.options.step.toString();\n minInput.value = this.internalMin !== undefined ? this.internalMin.toString() : '';\n minInput.placeholder = this.options.placeholder?.min ?? 'Min';\n minInput.style.cssText = this.getInputStyle();\n minInput.addEventListener('input', (e) => {\n const target = e.target as HTMLInputElement;\n const value = target.value === '' ? undefined : parseFloat(target.value);\n this.internalMin = value;\n if (!this.options.showApplyButton) {\n // Update state manager (automatically triggers search)\n this.updateStateManager(value, this.internalMax);\n \n // Call callback for backwards compatibility\n if (this.options.onRangeChange) {\n log.verbose('RangeInput: Min value changed', { field: this.options.field, min: value, max: this.internalMax });\n try {\n this.options.onRangeChange(value, this.internalMax);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('RangeInput: Error in onRangeChange callback', {\n field: this.options.field,\n error: error.message,\n });\n }\n }\n }\n });\n inputGroup.appendChild(minInput);\n\n const separator = document.createElement('span');\n separator.textContent = 'to';\n separator.style.cssText = this.getSeparatorStyle();\n inputGroup.appendChild(separator);\n\n const maxInput = document.createElement('input');\n maxInput.type = 'number';\n maxInput.min = this.options.min?.toString() || '';\n maxInput.max = this.options.max?.toString() || '';\n maxInput.step = this.options.step.toString();\n maxInput.value = this.internalMax !== undefined ? this.internalMax.toString() : '';\n maxInput.placeholder = this.options.placeholder?.max ?? 'Max';\n maxInput.style.cssText = this.getInputStyle();\n maxInput.addEventListener('input', (e) => {\n const target = e.target as HTMLInputElement;\n const value = target.value === '' ? undefined : parseFloat(target.value);\n this.internalMax = value;\n if (!this.options.showApplyButton) {\n // Update state manager (automatically triggers search)\n this.updateStateManager(this.internalMin, value);\n \n // Call callback for backwards compatibility\n if (this.options.onRangeChange) {\n log.verbose('RangeInput: Max value changed', { field: this.options.field, min: this.internalMin, max: value });\n try {\n this.options.onRangeChange(this.internalMin, value);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('RangeInput: Error in onRangeChange callback', {\n field: this.options.field,\n error: error.message,\n });\n }\n }\n }\n });\n inputGroup.appendChild(maxInput);\n\n if (this.options.showApplyButton) {\n const applyBtn = document.createElement('button');\n applyBtn.textContent = 'Apply';\n applyBtn.style.cssText = this.getApplyButtonStyle();\n // Use a named function to ensure the listener is properly attached\n const handleApplyClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n \n // Update state manager (automatically triggers search)\n this.updateStateManager(this.internalMin, this.internalMax);\n \n // Call callback for backwards compatibility\n if (this.options.onRangeChange) {\n log.verbose('RangeInput: Apply button clicked', { field: this.options.field, min: this.internalMin, max: this.internalMax });\n try {\n this.options.onRangeChange(this.internalMin, this.internalMax);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('RangeInput: Error in onRangeChange callback', {\n field: this.options.field,\n error: error.message,\n });\n }\n }\n };\n \n applyBtn.addEventListener('click', handleApplyClick, { passive: false });\n inputGroup.appendChild(applyBtn);\n }\n\n if (this.hasValue()) {\n const resetBtn = document.createElement('button');\n resetBtn.textContent = 'Reset';\n resetBtn.style.cssText = this.getResetButtonStyle();\n // Use a named function to ensure the listener is properly attached\n const handleResetClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n \n this.internalMin = undefined;\n this.internalMax = undefined;\n \n // Clear price range refinements from state manager\n const refinements = this.provider.stateManager.getRefinements();\n refinements.forEach(r => {\n if (r.field === this.options.field) {\n this.provider.stateManager.removeRefinement(r.field, r.value);\n }\n });\n \n this.render();\n if (this.options.onRangeChange) {\n this.options.onRangeChange(undefined, undefined);\n }\n };\n \n resetBtn.addEventListener('click', handleResetClick, { passive: false });\n inputGroup.appendChild(resetBtn);\n }\n\n this.container.appendChild(inputGroup);\n }\n\n private hasValue(): boolean {\n return this.internalMin !== undefined || this.internalMax !== undefined;\n }\n\n private updateStateManager(min: number | undefined, max: number | undefined): void {\n // Remove existing price range refinements\n const refinements = this.provider.stateManager.getRefinements();\n refinements.forEach(r => {\n if (r.field === this.options.field) {\n this.provider.stateManager.removeRefinement(r.field, r.value, false); // false = don't trigger search yet\n }\n });\n \n // Add new price range refinements\n if (min !== undefined) {\n this.provider.stateManager.addRefinement(this.options.field, `>=${min}`, false); // false = don't trigger search yet\n }\n if (max !== undefined) {\n this.provider.stateManager.addRefinement(this.options.field, `<=${max}`, false); // false = don't trigger search yet\n }\n \n // Trigger search once after all updates\n if (min !== undefined || max !== undefined) {\n this.provider.stateManager.search();\n }\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getLabelStyle(): string {\n return `\n display: block;\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: ${this.theme.typography.fontWeight?.medium || 500};\n margin-bottom: ${this.theme.spacing.small};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getInputGroupStyle(): string {\n return `\n display: flex;\n align-items: center;\n gap: ${this.theme.spacing.small};\n flex-wrap: wrap;\n `;\n }\n\n private getInputStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n flex: 1;\n min-width: 80px;\n padding: ${this.theme.spacing.small};\n font-size: ${this.theme.typography.fontSize.medium};\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n background-color: ${this.theme.colors.background};\n color: ${this.theme.colors.text};\n outline: none;\n `;\n }\n\n private getSeparatorStyle(): string {\n return `\n color: ${this.theme.colors.textSecondary || this.theme.colors.text};\n font-size: ${this.theme.typography.fontSize.medium};\n `;\n }\n\n private getApplyButtonStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n background-color: ${this.theme.colors.primary};\n color: #ffffff;\n border: none;\n border-radius: ${borderRadius};\n cursor: pointer;\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n\n private getResetButtonStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n background-color: transparent;\n color: ${this.theme.colors.text};\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n cursor: pointer;\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n}\n\n","/**\n * HitsPerPage Component\n * \n * A dropdown to let users change the number of displayed hits per page\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface HitsPerPageItem {\n value: number;\n label: string;\n default?: boolean;\n}\n\nexport interface HitsPerPageOptions {\n container: HTMLElement | string;\n /** Available items per page options */\n items: HitsPerPageItem[];\n /** Label text before the select */\n label?: string;\n /** Callback when hits per page changes */\n onHitsPerPageChange?: (value: number) => void;\n}\n\nexport class HitsPerPage {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: {\n items: HitsPerPageItem[];\n label: string;\n onHitsPerPageChange?: (value: number) => void;\n };\n private currentValue: number;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: HitsPerPageOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('HitsPerPage: container element not found');\n log.error('HitsPerPage: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n \n // Find default item\n const defaultItem = options.items.find(i => i.default) || options.items[0];\n this.currentValue = defaultItem?.value || 10;\n \n this.options = {\n items: options.items,\n label: options.label ?? 'Show',\n onHitsPerPageChange: options.onHitsPerPageChange,\n };\n\n // Initialize StateManager with default value\n this.provider.stateManager.setItemsPerPage(this.currentValue, false);\n\n // Subscribe to state manager to sync value\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n if (state.itemsPerPage !== this.currentValue) {\n this.currentValue = state.itemsPerPage;\n this.render();\n }\n });\n\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n this.container.innerHTML = '';\n }\n\n update(options: Partial<Pick<HitsPerPageOptions, 'items'>>): void {\n if (options.items) {\n this.options.items = options.items;\n this.render();\n }\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n const wrapper = document.createElement('div');\n wrapper.style.cssText = this.getContainerStyle();\n\n if (this.options.label) {\n const label = document.createElement('label');\n label.textContent = this.options.label;\n label.style.cssText = this.getLabelStyle();\n wrapper.appendChild(label);\n }\n\n const select = document.createElement('select');\n select.value = this.currentValue.toString();\n select.style.cssText = this.getSelectStyle();\n select.setAttribute('aria-label', 'Results per page');\n \n select.addEventListener('change', (e) => {\n const target = e.target as HTMLSelectElement;\n const newValue = parseInt(target.value, 10);\n this.currentValue = newValue;\n \n log.verbose('HitsPerPage: Value changed', { value: newValue });\n\n // Update state manager and reset to page 1\n this.provider.stateManager.setItemsPerPage(newValue, false);\n this.provider.stateManager.setPage(1, true);\n\n // Call callback\n if (this.options.onHitsPerPageChange) {\n try {\n this.options.onHitsPerPageChange(newValue);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('HitsPerPage: Error in onHitsPerPageChange callback', {\n value: newValue,\n error: error.message,\n });\n }\n }\n });\n\n this.options.items.forEach((item) => {\n const optionEl = document.createElement('option');\n optionEl.value = item.value.toString();\n optionEl.textContent = item.label;\n if (item.value === this.currentValue) {\n optionEl.selected = true;\n }\n select.appendChild(optionEl);\n });\n\n wrapper.appendChild(select);\n this.container.appendChild(wrapper);\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getContainerStyle(): string {\n return `\n display: flex;\n align-items: center;\n gap: ${this.theme.spacing.small};\n `;\n }\n\n private getLabelStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.medium};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getSelectStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n padding: ${this.theme.spacing.small} ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n border: 1px solid ${this.theme.colors.border};\n border-radius: ${borderRadius};\n background-color: ${this.theme.colors.background};\n color: ${this.theme.colors.text};\n cursor: pointer;\n outline: none;\n `;\n }\n}\n","/**\n * InfiniteHits Component\n * \n * Displays search results with infinite scroll or \"Show More\" button\n * Accumulates results as user loads more pages\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type { FieldMapping, ResultItem } from '@seekora-ai/ui-sdk-types';\nimport { SearchProvider } from './search-provider';\n\nexport interface InfiniteHitsOptions {\n container: HTMLElement | string;\n /** Custom render function for each hit */\n renderHit?: (hit: ResultItem, index: number) => HTMLElement;\n /** Custom render for empty state */\n renderEmpty?: () => HTMLElement;\n /** Custom render for loading state */\n renderLoading?: () => HTMLElement;\n /** Whether to show the \"Show More\" button (default: true) */\n showMoreButton?: boolean;\n /** Whether to use infinite scroll with IntersectionObserver (default: false) */\n useInfiniteScroll?: boolean;\n /** Threshold for IntersectionObserver (default: 0.1) */\n scrollThreshold?: number;\n /** Field mapping for extracting data from hits */\n fieldMapping?: FieldMapping;\n /** Text for \"Show More\" button */\n showMoreLabel?: string;\n /** Text for loading state */\n loadingLabel?: string;\n /** Callback when a hit is clicked */\n onHitClick?: (hit: ResultItem, index: number) => void;\n}\n\nexport class InfiniteHits {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: {\n renderHit?: (hit: ResultItem, index: number) => HTMLElement;\n renderEmpty?: () => HTMLElement;\n renderLoading?: () => HTMLElement;\n showMoreButton: boolean;\n useInfiniteScroll: boolean;\n scrollThreshold: number;\n fieldMapping?: FieldMapping;\n showMoreLabel: string;\n loadingLabel: string;\n onHitClick?: (hit: ResultItem, index: number) => void;\n };\n private accumulatedHits: ResultItem[] = [];\n private isLoadingMore = false;\n private currentPage = 1;\n private observer: IntersectionObserver | null = null;\n private unsubscribeStateManager: (() => void) | null = null;\n\n constructor(provider: SearchProvider, options: InfiniteHitsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('InfiniteHits: container element not found');\n log.error('InfiniteHits: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.options = {\n renderHit: options.renderHit,\n renderEmpty: options.renderEmpty,\n renderLoading: options.renderLoading,\n showMoreButton: options.showMoreButton !== false,\n useInfiniteScroll: options.useInfiniteScroll ?? false,\n scrollThreshold: options.scrollThreshold ?? 0.1,\n fieldMapping: options.fieldMapping,\n showMoreLabel: options.showMoreLabel ?? 'Show more',\n loadingLabel: options.loadingLabel ?? 'Loading...',\n onHitClick: options.onHitClick,\n };\n\n // Subscribe to state manager\n this.unsubscribeStateManager = this.provider.stateManager.subscribe((state) => {\n const page = state.currentPage;\n const hits = this.extractHits(state.results);\n\n if (page === 1) {\n // Reset on new search\n this.accumulatedHits = hits;\n this.currentPage = 1;\n } else if (page > this.currentPage) {\n // Append new hits\n this.accumulatedHits = [...this.accumulatedHits, ...hits];\n this.currentPage = page;\n }\n\n this.isLoadingMore = false;\n this.render();\n });\n\n this.render();\n }\n\n destroy(): void {\n if (this.unsubscribeStateManager) {\n this.unsubscribeStateManager();\n this.unsubscribeStateManager = null;\n }\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n this.container.innerHTML = '';\n }\n\n private extractHits(response: any): ResultItem[] {\n if (!response) return [];\n if (response.results) return response.results;\n if (response.hits) return response.hits;\n if (Array.isArray(response)) return response;\n return [];\n }\n\n private get isLastPage(): boolean {\n const state = this.provider.stateManager.getState();\n const totalResults = state.results?.totalResults || state.results?.found || 0;\n const itemsPerPage = state.itemsPerPage || 10;\n const totalPages = Math.ceil(totalResults / itemsPerPage);\n return state.currentPage >= totalPages;\n }\n\n private handleShowMore(): void {\n if (this.isLastPage || this.isLoadingMore) return;\n\n this.isLoadingMore = true;\n const nextPage = this.provider.stateManager.getCurrentPage() + 1;\n \n log.verbose('InfiniteHits: Loading more', { nextPage });\n this.provider.stateManager.setPage(nextPage);\n this.render();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n const state = this.provider.stateManager.getState();\n\n // Initial loading state\n if (state.loading && this.accumulatedHits.length === 0) {\n const loadingEl = this.options.renderLoading\n ? this.options.renderLoading()\n : this.createDefaultLoading();\n this.container.appendChild(loadingEl);\n return;\n }\n\n // Empty state\n if (!state.loading && this.accumulatedHits.length === 0) {\n const emptyEl = this.options.renderEmpty\n ? this.options.renderEmpty()\n : this.createDefaultEmpty();\n this.container.appendChild(emptyEl);\n return;\n }\n\n // Render hits\n const list = document.createElement('div');\n this.accumulatedHits.forEach((hit, index) => {\n const hitEl = this.options.renderHit\n ? this.options.renderHit(hit, index)\n : this.createDefaultHit(hit, index);\n list.appendChild(hitEl);\n });\n this.container.appendChild(list);\n\n // Show More button\n if (this.options.showMoreButton && !this.options.useInfiniteScroll && !this.isLastPage) {\n const button = this.createShowMoreButton();\n this.container.appendChild(button);\n }\n\n // Loading more indicator\n if (this.isLoadingMore) {\n const loadingEl = this.options.renderLoading\n ? this.options.renderLoading()\n : this.createDefaultLoading();\n this.container.appendChild(loadingEl);\n }\n\n // Infinite scroll sentinel\n if (this.options.useInfiniteScroll && !this.isLastPage) {\n const sentinel = document.createElement('div');\n sentinel.style.cssText = 'height: 1px; visibility: hidden;';\n this.container.appendChild(sentinel);\n this.setupIntersectionObserver(sentinel);\n }\n }\n\n private setupIntersectionObserver(sentinel: HTMLElement): void {\n if (this.observer) {\n this.observer.disconnect();\n }\n\n this.observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !this.isLastPage && !this.isLoadingMore) {\n this.handleShowMore();\n }\n },\n { threshold: this.options.scrollThreshold }\n );\n\n this.observer.observe(sentinel);\n }\n\n private createDefaultHit(hit: ResultItem, index: number): HTMLElement {\n const item = document.createElement('div');\n item.style.cssText = this.getHitStyle();\n\n const mapping = this.options.fieldMapping;\n \n // If fieldMapping is provided, use it to extract and display fields\n if (mapping) {\n const imageField = this.extractField(hit, 'image');\n if (imageField) {\n const img = document.createElement('img');\n img.src = imageField;\n img.alt = this.extractField(hit, 'title') || '';\n img.style.cssText = this.getImageStyle();\n item.appendChild(img);\n }\n\n const content = document.createElement('div');\n content.style.cssText = 'flex: 1;';\n\n const titleField = this.extractField(hit, 'title');\n if (titleField) {\n const titleEl = document.createElement('h3');\n titleEl.textContent = titleField;\n titleEl.style.cssText = this.getTitleStyle();\n content.appendChild(titleEl);\n }\n\n const descField = this.extractField(hit, 'description');\n if (descField) {\n const descEl = document.createElement('p');\n descEl.textContent = descField;\n descEl.style.cssText = this.getDescriptionStyle();\n content.appendChild(descEl);\n }\n\n item.appendChild(content);\n } else {\n // No fieldMapping - render as simple key-value pairs\n const content = document.createElement('div');\n content.style.cssText = 'flex: 1;';\n \n const keys = Object.keys(hit).slice(0, 5); // Show first 5 fields\n keys.forEach(key => {\n const value = (hit as Record<string, any>)[key];\n if (value != null && typeof value !== 'object') {\n const field = document.createElement('div');\n field.innerHTML = `<strong>${key}:</strong> ${String(value)}`;\n field.style.cssText = `margin-bottom: ${this.theme.spacing.small}; font-size: ${this.theme.typography.fontSize.small};`;\n content.appendChild(field);\n }\n });\n \n item.appendChild(content);\n }\n\n if (this.options.onHitClick) {\n item.style.cursor = 'pointer';\n item.addEventListener('click', () => this.options.onHitClick!(hit, index));\n }\n\n return item;\n }\n\n private createDefaultEmpty(): HTMLElement {\n const empty = document.createElement('div');\n empty.textContent = 'No results found';\n empty.style.cssText = `\n padding: ${this.theme.spacing.large};\n text-align: center;\n color: ${this.theme.colors.textSecondary};\n `;\n return empty;\n }\n\n private createDefaultLoading(): HTMLElement {\n const loading = document.createElement('div');\n loading.textContent = this.options.loadingLabel;\n loading.style.cssText = `\n padding: ${this.theme.spacing.medium};\n text-align: center;\n color: ${this.theme.colors.textSecondary};\n `;\n return loading;\n }\n\n private createShowMoreButton(): HTMLElement {\n const button = document.createElement('button');\n button.type = 'button';\n button.textContent = this.isLoadingMore ? this.options.loadingLabel : this.options.showMoreLabel;\n button.disabled = this.isLoadingMore;\n button.style.cssText = this.getShowMoreButtonStyle();\n button.addEventListener('click', () => this.handleShowMore());\n return button;\n }\n\n private extractField(hit: ResultItem, field: string): string {\n const mapping = this.options.fieldMapping as Record<string, string> | undefined;\n if (!mapping || !mapping[field]) {\n return (hit as Record<string, any>)[field] || '';\n }\n const mappedField = mapping[field];\n return (hit as Record<string, any>)[mappedField] || '';\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getHitStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.small;\n return `\n display: flex;\n gap: ${this.theme.spacing.medium};\n padding: ${this.theme.spacing.medium};\n border-bottom: 1px solid ${this.theme.colors.border};\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n\n private getImageStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.small;\n return `\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: ${borderRadius};\n `;\n }\n\n private getTitleStyle(): string {\n return `\n margin: 0;\n margin-bottom: ${this.theme.spacing.small};\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: ${this.theme.typography.fontWeight?.semibold || 600};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getDescriptionStyle(): string {\n return `\n margin: 0;\n font-size: ${this.theme.typography.fontSize.small};\n color: ${this.theme.colors.textSecondary};\n line-height: ${this.theme.typography.lineHeight?.normal || 1.5};\n `;\n }\n\n private getPriceStyle(): string {\n return `\n display: inline-block;\n margin-top: ${this.theme.spacing.small};\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: ${this.theme.typography.fontWeight?.bold || 700};\n color: ${this.theme.colors.primary};\n `;\n }\n\n private getShowMoreButtonStyle(): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n display: block;\n width: 100%;\n padding: ${this.theme.spacing.medium};\n margin-top: ${this.theme.spacing.medium};\n font-size: ${this.theme.typography.fontSize.medium};\n font-weight: ${this.theme.typography.fontWeight?.medium || 500};\n background-color: ${this.isLoadingMore ? this.theme.colors.hover : this.theme.colors.primary};\n color: ${this.isLoadingMore ? this.theme.colors.textSecondary : '#ffffff'};\n border: none;\n border-radius: ${borderRadius};\n cursor: ${this.isLoadingMore ? 'not-allowed' : 'pointer'};\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n `;\n }\n}\n","/**\n * SearchLayout Component\n * \n * Provides a layout structure for search interfaces with sidebar and main content\n */\n\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface SearchLayoutOptions {\n container: HTMLElement | string;\n sidebar?: HTMLElement | string;\n header?: HTMLElement | string;\n footer?: HTMLElement | string;\n sidebarWidth?: string;\n showSidebarOnMobile?: boolean;\n}\n\nexport class SearchLayout {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<SearchLayoutOptions, 'container' | 'sidebar' | 'header' | 'footer'>> & Pick<SearchLayoutOptions, 'sidebar' | 'header' | 'footer'>;\n private headerEl?: HTMLElement;\n private sidebarEl?: HTMLElement;\n private mainEl?: HTMLElement;\n private footerEl?: HTMLElement;\n\n constructor(provider: SearchProvider, options: SearchLayoutOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n const error = new Error('SearchLayout: container element not found');\n log.error('SearchLayout: Initialization failed', { error: error.message });\n throw error;\n }\n\n this.container = container;\n this.options = {\n sidebarWidth: options.sidebarWidth || '300px',\n showSidebarOnMobile: options.showSidebarOnMobile || false,\n sidebar: options.sidebar,\n header: options.header,\n footer: options.footer,\n };\n\n this.render();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n this.container.style.cssText = this.getContainerStyle();\n\n // Header\n if (this.options.header) {\n this.headerEl = typeof this.options.header === 'string'\n ? document.querySelector(this.options.header) as HTMLElement\n : this.options.header;\n \n if (this.headerEl) {\n const headerWrapper = document.createElement('header');\n headerWrapper.style.cssText = this.getHeaderStyle();\n headerWrapper.appendChild(this.headerEl.cloneNode(true));\n this.container.appendChild(headerWrapper);\n }\n }\n\n // Content area\n const contentDiv = document.createElement('div');\n contentDiv.style.cssText = this.getContentStyle();\n\n // Sidebar\n if (this.options.sidebar) {\n this.sidebarEl = typeof this.options.sidebar === 'string'\n ? document.querySelector(this.options.sidebar) as HTMLElement\n : this.options.sidebar;\n \n if (this.sidebarEl) {\n const sidebarWrapper = document.createElement('aside');\n sidebarWrapper.style.cssText = this.getSidebarStyle();\n sidebarWrapper.className = this.getSidebarClass();\n // Clone with deep copy to include all child elements\n const clonedSidebar = this.sidebarEl.cloneNode(true) as HTMLElement;\n sidebarWrapper.appendChild(clonedSidebar);\n contentDiv.appendChild(sidebarWrapper);\n }\n }\n\n // Main content\n this.mainEl = document.createElement('main');\n this.mainEl.style.cssText = this.getMainStyle();\n contentDiv.appendChild(this.mainEl);\n\n this.container.appendChild(contentDiv);\n\n // Footer\n if (this.options.footer) {\n this.footerEl = typeof this.options.footer === 'string'\n ? document.querySelector(this.options.footer) as HTMLElement\n : this.options.footer;\n \n if (this.footerEl) {\n const footerWrapper = document.createElement('footer');\n footerWrapper.style.cssText = this.getFooterStyle();\n footerWrapper.appendChild(this.footerEl.cloneNode(true));\n this.container.appendChild(footerWrapper);\n }\n }\n\n // Add responsive styles\n if (!this.options.showSidebarOnMobile) {\n const style = document.createElement('style');\n style.textContent = `\n @media (max-width: 768px) {\n .search-layout-sidebar-hidden-mobile {\n display: none;\n }\n }\n `;\n document.head.appendChild(style);\n }\n }\n\n getMainElement(): HTMLElement | undefined {\n return this.mainEl;\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getContainerStyle(): string {\n return `\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background-color: ${this.theme.colors.background};\n `;\n }\n\n private getHeaderStyle(): string {\n return `\n padding: ${this.theme.spacing.medium};\n border-bottom: 1px solid ${this.theme.colors.border};\n background-color: ${this.theme.colors.background};\n `;\n }\n\n private getContentStyle(): string {\n return `\n display: flex;\n flex: 1;\n gap: ${this.theme.spacing.large};\n padding: ${this.theme.spacing.medium};\n `;\n }\n\n private getSidebarStyle(): string {\n return `\n width: ${this.options.sidebarWidth};\n min-width: ${this.options.sidebarWidth};\n background-color: ${this.theme.colors.background};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getSidebarClass(): string {\n return this.options.showSidebarOnMobile ? '' : 'search-layout-sidebar-hidden-mobile';\n }\n\n private getMainStyle(): string {\n return `\n flex: 1;\n min-width: 0;\n `;\n }\n\n private getFooterStyle(): string {\n return `\n padding: ${this.theme.spacing.medium};\n border-top: 1px solid ${this.theme.colors.border};\n background-color: ${this.theme.colors.background};\n `;\n }\n}\n\n","/**\n * QuerySuggestions Component\n * \n * Standalone component for displaying query suggestions\n */\n\nimport type { SuggestionItem } from '@seekora-ai/ui-sdk-types';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { SearchProvider } from './search-provider';\n\nexport interface QuerySuggestionsOptions {\n container: HTMLElement | string;\n query?: string;\n maxSuggestions?: number;\n debounceMs?: number;\n minQueryLength?: number;\n showTitle?: boolean;\n title?: string;\n onSuggestionClick?: (suggestion: string) => void;\n}\n\nexport class QuerySuggestions {\n private container: HTMLElement;\n private provider: SearchProvider;\n private options: Required<Omit<QuerySuggestionsOptions, 'container' | 'query' | 'onSuggestionClick'>> & Pick<QuerySuggestionsOptions, 'query' | 'onSuggestionClick'>;\n private suggestions: SuggestionItem[] = [];\n private loading: boolean = false;\n private error: Error | null = null;\n private selectedIndex: number = -1;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(provider: SearchProvider, options: QuerySuggestionsOptions) {\n this.provider = provider;\n\n const container = typeof options.container === 'string'\n ? document.querySelector(options.container) as HTMLElement\n : options.container;\n\n if (!container) {\n throw new Error('QuerySuggestions: container element not found');\n }\n\n this.container = container;\n this.options = {\n query: options.query || '',\n maxSuggestions: options.maxSuggestions || 10,\n debounceMs: options.debounceMs || 300,\n minQueryLength: options.minQueryLength || 2,\n showTitle: options.showTitle || false,\n title: options.title || 'Suggestions',\n onSuggestionClick: options.onSuggestionClick,\n };\n\n const q = this.options.query ?? '';\n if (q.length >= this.options.minQueryLength) {\n this.loadSuggestions(q);\n }\n }\n\n update(options: Partial<Pick<QuerySuggestionsOptions, 'query'>>): void {\n if (options.query !== undefined) {\n this.options.query = options.query;\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n if (this.options.query && this.options.query.length >= this.options.minQueryLength) {\n this.loadSuggestions(this.options.query);\n } else {\n this.suggestions = [];\n this.render();\n }\n }, this.options.debounceMs);\n }\n }\n\n private async loadSuggestions(query: string): Promise<void> {\n this.loading = true;\n this.error = null;\n this.render();\n\n try {\n const response = await (this.provider.client as unknown as { getSuggestions: (q: string, n: number) => Promise<Record<string, unknown>[] | unknown> }).getSuggestions(query, this.options.maxSuggestions);\n const rawSuggestions = Array.isArray(response) ? (response as Record<string, unknown>[]) : [];\n \n this.suggestions = rawSuggestions.map((suggestion: Record<string, unknown>) => {\n const suggestionQuery = suggestion.query ?? suggestion.text ?? suggestion;\n const count = suggestion.popularity !== undefined\n ? suggestion.popularity as number\n : (suggestion.count !== undefined ? (suggestion.count as number) : undefined);\n\n return {\n query: typeof suggestionQuery === 'string' ? suggestionQuery : String(suggestionQuery),\n count: typeof count === 'number' ? count : undefined,\n metadata: suggestion,\n };\n }).slice(0, this.options.maxSuggestions);\n\n this.loading = false;\n this.render();\n log.verbose('QuerySuggestions: Suggestions loaded', {\n query: this.options.query,\n count: this.suggestions.length,\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('QuerySuggestions: Failed to load suggestions', {\n query: this.options.query,\n error: error.message,\n stack: error.stack,\n });\n this.error = error;\n this.loading = false;\n this.render();\n }\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n if (!this.options.query || this.options.query.length < this.options.minQueryLength) {\n return;\n }\n\n if (this.loading) {\n const loadingDiv = document.createElement('div');\n loadingDiv.style.cssText = this.getLoadingStyle();\n loadingDiv.textContent = 'Loading suggestions...';\n this.container.appendChild(loadingDiv);\n return;\n }\n\n if (this.error || this.suggestions.length === 0) {\n const emptyDiv = document.createElement('div');\n emptyDiv.style.cssText = this.getEmptyStyle();\n emptyDiv.textContent = 'No suggestions available';\n this.container.appendChild(emptyDiv);\n return;\n }\n\n if (this.options.showTitle) {\n const titleDiv = document.createElement('div');\n titleDiv.style.cssText = this.getTitleStyle();\n titleDiv.textContent = this.options.title;\n this.container.appendChild(titleDiv);\n }\n\n const listDiv = document.createElement('div');\n listDiv.style.cssText = this.getListStyle();\n\n this.suggestions.forEach((suggestion, index) => {\n const item = document.createElement('div');\n item.style.cssText = this.getSuggestionStyle(index === this.selectedIndex);\n // Use a named function to ensure the listener is properly attached\n const handleClick = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n \n if (this.options.onSuggestionClick) {\n log.verbose('QuerySuggestions: Suggestion clicked', { suggestion: suggestion.query });\n try {\n this.options.onSuggestionClick(suggestion.query);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('QuerySuggestions: Error in onSuggestionClick callback', {\n suggestion: suggestion.query,\n error: error.message,\n });\n }\n }\n };\n \n item.addEventListener('click', handleClick, { passive: false });\n item.addEventListener('mouseenter', () => {\n this.selectedIndex = index;\n this.render();\n });\n item.addEventListener('mouseleave', () => {\n this.selectedIndex = -1;\n this.render();\n });\n\n const querySpan = document.createElement('span');\n querySpan.textContent = suggestion.query;\n item.appendChild(querySpan);\n\n if (suggestion.count !== undefined) {\n const countSpan = document.createElement('span');\n countSpan.textContent = ` (${suggestion.count})`;\n countSpan.style.cssText = this.getCountStyle();\n item.appendChild(countSpan);\n }\n\n listDiv.appendChild(item);\n });\n\n this.container.appendChild(listDiv);\n }\n\n private get theme() {\n return this.provider.theme;\n }\n\n private getTitleStyle(): string {\n return `\n font-size: ${this.theme.typography.fontSize.large};\n font-weight: bold;\n margin-bottom: ${this.theme.spacing.medium};\n color: ${this.theme.colors.text};\n `;\n }\n\n private getLoadingStyle(): string {\n return `\n padding: ${this.theme.spacing.medium};\n text-align: center;\n color: ${this.theme.colors.text};\n `;\n }\n\n private getEmptyStyle(): string {\n return `\n padding: ${this.theme.spacing.medium};\n text-align: center;\n color: ${this.theme.colors.text};\n opacity: 0.6;\n `;\n }\n\n private getListStyle(): string {\n return `\n display: flex;\n flex-direction: column;\n `;\n }\n\n private getSuggestionStyle(isSelected: boolean): string {\n const borderRadius = typeof this.theme.borderRadius === 'string'\n ? this.theme.borderRadius\n : this.theme.borderRadius.medium;\n return `\n padding: ${this.theme.spacing.medium};\n cursor: pointer;\n border-radius: ${borderRadius};\n transition: ${this.theme.transitions?.fast || '150ms ease-in-out'};\n background-color: ${isSelected ? this.theme.colors.hover : 'transparent'};\n margin-bottom: ${this.theme.spacing.small};\n `;\n }\n\n private getCountStyle(): string {\n return `\n opacity: 0.6;\n margin-left: ${this.theme.spacing.small};\n `;\n }\n\n destroy(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.container.innerHTML = '';\n }\n}\n\n","/**\n * SearchManager\n * \n * Manages search state and operations for Vanilla JS\n */\n\nimport type { SeekoraClient, SearchOptions, SearchResponse } from '@seekora-ai/search-sdk';\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport interface SearchManagerConfig {\n client: SeekoraClient;\n theme?: Theme;\n enableAnalytics?: boolean;\n autoTrackSearch?: boolean;\n}\n\nexport interface SearchState {\n results: SearchResponse | null;\n loading: boolean;\n error: Error | null;\n}\n\nexport class SearchManager {\n private client: SeekoraClient;\n private theme: Theme;\n private state: SearchState = {\n results: null,\n loading: false,\n error: null,\n };\n private listeners: Array<(state: SearchState) => void> = [];\n\n constructor(config: SearchManagerConfig) {\n this.client = config.client;\n this.theme = config.theme || this.getDefaultTheme();\n }\n\n async search(options: SearchOptions): Promise<SearchResponse | null> {\n this.setState({ loading: true, error: null });\n\n try {\n const { q, ...restOptions } = options;\n const query = typeof q === 'string' ? q : '';\n const response = await this.client.search(query, restOptions);\n this.setState({ results: response, loading: false, error: null });\n return response;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.setState({ results: null, loading: false, error });\n return null;\n }\n }\n\n clearResults(): void {\n this.setState({ results: null, error: null });\n }\n\n getState(): SearchState {\n return { ...this.state };\n }\n\n subscribe(listener: (state: SearchState) => void): () => void {\n this.listeners.push(listener);\n return () => {\n this.listeners = this.listeners.filter(l => l !== listener);\n };\n }\n\n getTheme(): Theme {\n return this.theme;\n }\n\n private setState(updates: Partial<SearchState>): void {\n this.state = { ...this.state, ...updates };\n this.listeners.forEach(listener => listener(this.state));\n }\n\n private getDefaultTheme(): Theme {\n // Return a basic default theme\n return {\n colors: {\n primary: '#007bff',\n secondary: '#6c757d',\n background: '#ffffff',\n text: '#212529',\n border: '#dee2e6',\n hover: '#f8f9fa',\n focus: '#007bff',\n error: '#dc3545',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: {\n small: '0.25rem',\n medium: '0.375rem',\n large: '0.5rem',\n },\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.12)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.16)',\n large: '0 10px 20px rgba(0, 0, 0, 0.19)',\n },\n };\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Dark Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const darkTheme: Theme = {\n colors: {\n primary: '#0d6efd',\n secondary: '#6c757d',\n background: '#1a1a1a',\n text: '#ffffff',\n border: '#333333',\n hover: '#2a2a2a',\n focus: '#0d6efd',\n error: '#dc3545',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: '0.25rem',\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.7)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.6), 0 3px 6px rgba(0, 0, 0, 0.8)',\n large: '0 10px 20px rgba(0, 0, 0, 0.7), 0 6px 6px rgba(0, 0, 0, 0.9)',\n },\n};\n\n\n","/**\n * Minimal Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const minimalTheme: Theme = {\n colors: {\n primary: '#000000',\n secondary: '#666666',\n background: '#ffffff',\n text: '#000000',\n border: '#e0e0e0',\n hover: '#f5f5f5',\n focus: '#000000',\n error: '#cc0000',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.125rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '0.75rem',\n large: '1rem',\n },\n borderRadius: '0',\n shadows: {\n small: 'none',\n medium: 'none',\n large: 'none',\n },\n};\n\n\n"],"names":["createThemeCore"],"mappings":"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"}