@seekora-ai/ui-sdk-core 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +449 -0
- package/dist/index.esm.js +1949 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +1994 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/fieldMapping/mapper.ts","../src/themes/manager.ts","../src/themes/css-variables.ts","../src/utils/logger.ts","../src/utils/highlight.ts","../src/utils/accessibility.ts","../src/search/state-manager.ts","../src/routing/url-router.ts"],"sourcesContent":["/**\n * Field Mapping Utilities\n * \n * Shared utilities for extracting and mapping fields from API responses\n */\n\n/**\n * Get nested value from object using dot notation path\n */\nexport const getNestedValue = (obj: any, path: string): any => {\n if (!path) return undefined;\n return path.split('.').reduce((current, key) => current?.[key], obj);\n};\n\n/**\n * Format price value with currency\n */\nexport const formatPrice = (value: any, currency: string = '₹'): string | undefined => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === 'number') return `${currency}${value}`;\n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num)) return `${currency}${num}`;\n return value;\n }\n return String(value);\n};\n\n/**\n * Extract field value using dot notation path\n */\nexport const extractField = (item: any, path: string | undefined): any => {\n if (!path) return undefined;\n return getNestedValue(item, path);\n};\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Theme Management Utilities\n * \n * Shared theme utilities for creating and merging themes\n */\n\nimport type { Theme, ThemeConfig, ThemeBorderRadius } from '@seekora-ai/ui-sdk-types';\n\n// Re-export Theme type for other modules in core\nexport type { Theme, ThemeConfig, ThemeBorderRadius } from '@seekora-ai/ui-sdk-types';\n\n/**\n * Create a complete theme from a partial theme configuration\n */\nexport const createTheme = (config: ThemeConfig, baseTheme: Theme): Theme => {\n return {\n colors: {\n ...baseTheme.colors,\n ...config.colors,\n },\n typography: {\n ...baseTheme.typography,\n ...config.typography,\n fontSize: {\n ...baseTheme.typography.fontSize,\n ...config.typography?.fontSize,\n },\n },\n spacing: {\n ...baseTheme.spacing,\n ...config.spacing,\n },\n borderRadius: (config.borderRadius ?? baseTheme.borderRadius) as string | ThemeBorderRadius,\n shadows: {\n ...baseTheme.shadows,\n ...config.shadows,\n },\n transitions: {\n ...baseTheme.transitions,\n ...config.transitions,\n },\n breakpoints: {\n ...baseTheme.breakpoints,\n ...config.breakpoints,\n },\n zIndex: {\n ...baseTheme.zIndex,\n ...config.zIndex,\n },\n };\n};\n\n/**\n * Merge multiple themes together\n */\nexport const mergeThemes = (baseTheme: Theme, ...themes: Partial<Theme>[]): Theme => {\n return themes.reduce<Theme>((acc, theme) => {\n return {\n colors: { ...acc.colors, ...theme.colors },\n typography: {\n ...acc.typography,\n ...theme.typography,\n fontSize: {\n ...acc.typography?.fontSize,\n ...theme.typography?.fontSize,\n },\n },\n spacing: { ...acc.spacing, ...theme.spacing },\n borderRadius: (theme.borderRadius ?? acc.borderRadius) as string | ThemeBorderRadius,\n shadows: { ...acc.shadows, ...theme.shadows },\n transitions: { ...acc.transitions, ...theme.transitions },\n breakpoints: { ...acc.breakpoints, ...theme.breakpoints },\n zIndex: { ...acc.zIndex, ...theme.zIndex },\n };\n }, baseTheme);\n};\n\n","/**\n * CSS Variables Theme System\n * \n * Generates CSS variables from theme configuration\n * Provides utilities for injecting and managing CSS themes\n */\n\nimport type { Theme } from './manager';\n\nexport interface CSSVariablesConfig {\n /** CSS selector for the theme scope (default: ':root') */\n scope?: string;\n /** Prefix for CSS variable names (default: '--seekora') */\n prefix?: string;\n /** Whether to include component classes (default: true) */\n includeClasses?: boolean;\n}\n\n/**\n * Convert a theme object to CSS variables\n */\nexport function themeToCSSVariables(\n theme: Theme,\n config: CSSVariablesConfig = {}\n): string {\n const { scope = ':root', prefix = '--seekora' } = config;\n\n const variables: string[] = [];\n\n // Colors\n Object.entries(theme.colors).forEach(([key, value]) => {\n variables.push(`${prefix}-color-${key}: ${value};`);\n });\n\n // Typography\n variables.push(`${prefix}-font-family: ${theme.typography.fontFamily};`);\n Object.entries(theme.typography.fontSize).forEach(([key, value]) => {\n variables.push(`${prefix}-font-size-${key}: ${value};`);\n });\n if (theme.typography.fontWeight) {\n Object.entries(theme.typography.fontWeight).forEach(([key, value]) => {\n variables.push(`${prefix}-font-weight-${key}: ${value};`);\n });\n }\n if (theme.typography.lineHeight) {\n Object.entries(theme.typography.lineHeight).forEach(([key, value]) => {\n variables.push(`${prefix}-line-height-${key}: ${value};`);\n });\n }\n\n // Spacing\n Object.entries(theme.spacing).forEach(([key, value]) => {\n variables.push(`${prefix}-spacing-${key}: ${value};`);\n });\n\n // Border Radius\n if (typeof theme.borderRadius === 'string') {\n variables.push(`${prefix}-border-radius: ${theme.borderRadius};`);\n } else {\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n variables.push(`${prefix}-border-radius-${key}: ${value};`);\n });\n }\n\n // Shadows\n if (theme.shadows) {\n Object.entries(theme.shadows).forEach(([key, value]) => {\n variables.push(`${prefix}-shadow-${key}: ${value};`);\n });\n }\n\n // Transitions\n if (theme.transitions) {\n Object.entries(theme.transitions).forEach(([key, value]) => {\n variables.push(`${prefix}-transition-${key}: ${value};`);\n });\n }\n\n // Z-Index\n if (theme.zIndex) {\n Object.entries(theme.zIndex).forEach(([key, value]) => {\n variables.push(`${prefix}-z-index-${key}: ${value};`);\n });\n }\n\n return `${scope} {\\n ${variables.join('\\n ')}\\n}`;\n}\n\n/**\n * Generate complete CSS stylesheet with variables and optional component classes\n */\nexport function generateThemeStylesheet(\n theme: Theme,\n config: CSSVariablesConfig = {}\n): string {\n const { prefix = '--seekora', includeClasses = true } = config;\n\n const sections: string[] = [];\n\n // CSS Variables\n sections.push(themeToCSSVariables(theme, config));\n\n // Component classes (BEM naming convention)\n if (includeClasses) {\n sections.push(generateComponentClasses(prefix));\n }\n\n return sections.join('\\n\\n');\n}\n\n/**\n * Generate BEM-style component classes\n */\nfunction generateComponentClasses(prefix: string): string {\n return `\n/* Seekora UI SDK Component Classes */\n\n/* Search Bar */\n.seekora-search-bar {\n position: relative;\n display: flex;\n align-items: center;\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-search-bar--focused {\n border-color: var(${prefix}-color-primary);\n box-shadow: 0 0 0 2px var(${prefix}-color-focus);\n}\n\n.seekora-search-bar__input {\n flex: 1;\n padding: var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n font-family: var(${prefix}-font-family);\n color: var(${prefix}-color-text);\n background: transparent;\n border: none;\n outline: none;\n}\n\n.seekora-search-bar__input::placeholder {\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-search-bar__button {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-search-bar__button:hover {\n background-color: var(${prefix}-color-hover);\n}\n\n/* Search Results */\n.seekora-results {\n background-color: var(${prefix}-color-background);\n}\n\n.seekora-results__list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.seekora-results__item {\n display: flex;\n gap: var(${prefix}-spacing-medium);\n padding: var(${prefix}-spacing-medium);\n border-bottom: 1px solid var(${prefix}-color-border);\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-results__item:hover {\n background-color: var(${prefix}-color-hover);\n}\n\n.seekora-results__item--active {\n background-color: var(${prefix}-color-hover);\n}\n\n.seekora-results__image {\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: var(${prefix}-border-radius-small, var(${prefix}-border-radius));\n}\n\n.seekora-results__content {\n flex: 1;\n}\n\n.seekora-results__title {\n margin: 0 0 var(${prefix}-spacing-small) 0;\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n.seekora-results__description {\n margin: 0;\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n line-height: var(${prefix}-line-height-normal, 1.5);\n}\n\n.seekora-results__price {\n margin-top: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-bold, 700);\n color: var(${prefix}-color-primary);\n}\n\n.seekora-results__empty {\n padding: var(${prefix}-spacing-large);\n text-align: center;\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-results__loading {\n padding: var(${prefix}-spacing-large);\n text-align: center;\n color: var(${prefix}-color-textSecondary);\n}\n\n/* Pagination */\n.seekora-pagination {\n display: flex;\n justify-content: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-medium) 0;\n}\n\n.seekora-pagination__item {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-small, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-pagination__item:hover:not(.seekora-pagination__item--disabled) {\n background-color: var(${prefix}-color-hover);\n border-color: var(${prefix}-color-primary);\n}\n\n.seekora-pagination__item--active {\n background-color: var(${prefix}-color-primary);\n border-color: var(${prefix}-color-primary);\n color: #ffffff;\n}\n\n.seekora-pagination__item--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Facets */\n.seekora-facets {\n font-family: var(${prefix}-font-family);\n}\n\n.seekora-facets__facet {\n margin-bottom: var(${prefix}-spacing-large);\n}\n\n.seekora-facets__title {\n margin: 0 0 var(${prefix}-spacing-small) 0;\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n.seekora-facets__list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.seekora-facets__item {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-small) 0;\n cursor: pointer;\n}\n\n.seekora-facets__checkbox {\n width: 18px;\n height: 18px;\n accent-color: var(${prefix}-color-primary);\n}\n\n.seekora-facets__label {\n flex: 1;\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-text);\n}\n\n.seekora-facets__count {\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-facets__show-more {\n margin-top: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-primary);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/* Stats */\n.seekora-stats {\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-stats__count {\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n/* Sort By */\n.seekora-sort-by {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-sort-by__label {\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n}\n\n.seekora-sort-by__select {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n outline: none;\n}\n\n/* Current Refinements */\n.seekora-refinements {\n display: flex;\n flex-wrap: wrap;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-refinements__item {\n display: inline-flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-small);\n background-color: var(${prefix}-color-hover);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-full, 9999px);\n}\n\n.seekora-refinements__label {\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: var(${prefix}-color-text);\n}\n\n.seekora-refinements__value {\n color: var(${prefix}-color-text);\n}\n\n.seekora-refinements__clear {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n font-size: 14px;\n color: var(${prefix}-color-textSecondary);\n background: none;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-refinements__clear:hover {\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-border);\n}\n\n.seekora-refinements__clear-all {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-primary);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/* Range Input */\n.seekora-range-input {\n font-family: var(${prefix}-font-family);\n}\n\n.seekora-range-input__label {\n display: block;\n margin-bottom: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: var(${prefix}-color-text);\n}\n\n.seekora-range-input__group {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-range-input__input {\n flex: 1;\n padding: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n outline: none;\n}\n\n.seekora-range-input__separator {\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-range-input__button {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n}\n\n/* Highlight */\n.seekora-highlight mark,\n.seekora-highlight__highlighted {\n background-color: var(${prefix}-color-warning, #fff59d);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n padding: 0 2px;\n border-radius: 2px;\n}\n\n/* Infinite Hits */\n.seekora-infinite-hits__show-more {\n display: block;\n width: 100%;\n padding: var(${prefix}-spacing-medium);\n margin-top: var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-infinite-hits__show-more:disabled {\n background-color: var(${prefix}-color-hover);\n color: var(${prefix}-color-textSecondary);\n cursor: not-allowed;\n}\n`;\n}\n\n/**\n * Theme presets\n */\nexport const lightThemeVariables = `\n:root, [data-seekora-theme=\"light\"] {\n --seekora-color-primary: #0066cc;\n --seekora-color-secondary: #6c757d;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #f8f9fa;\n --seekora-color-text: #212529;\n --seekora-color-textSecondary: #6c757d;\n --seekora-color-border: #dee2e6;\n --seekora-color-hover: #f1f3f5;\n --seekora-color-focus: rgba(0, 102, 204, 0.25);\n --seekora-color-error: #dc3545;\n --seekora-color-success: #28a745;\n --seekora-color-warning: #ffc107;\n \n --seekora-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n --seekora-font-size-small: 0.875rem;\n --seekora-font-size-medium: 1rem;\n --seekora-font-size-large: 1.25rem;\n --seekora-font-weight-normal: 400;\n --seekora-font-weight-medium: 500;\n --seekora-font-weight-semibold: 600;\n --seekora-font-weight-bold: 700;\n --seekora-line-height-tight: 1.25;\n --seekora-line-height-normal: 1.5;\n --seekora-line-height-relaxed: 1.75;\n \n --seekora-spacing-small: 0.5rem;\n --seekora-spacing-medium: 1rem;\n --seekora-spacing-large: 1.5rem;\n \n --seekora-border-radius: 4px;\n --seekora-border-radius-none: 0;\n --seekora-border-radius-small: 2px;\n --seekora-border-radius-medium: 4px;\n --seekora-border-radius-large: 8px;\n --seekora-border-radius-full: 9999px;\n \n --seekora-shadow-small: 0 1px 2px rgba(0, 0, 0, 0.05);\n --seekora-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.1);\n --seekora-shadow-large: 0 10px 15px rgba(0, 0, 0, 0.1);\n \n --seekora-transition-fast: 150ms ease-in-out;\n --seekora-transition-normal: 300ms ease-in-out;\n --seekora-transition-slow: 500ms ease-in-out;\n \n --seekora-z-index-dropdown: 1000;\n --seekora-z-index-modal: 1050;\n --seekora-z-index-tooltip: 1100;\n}\n`;\n\nexport const darkThemeVariables = `\n[data-seekora-theme=\"dark\"] {\n --seekora-color-primary: #4da6ff;\n --seekora-color-secondary: #adb5bd;\n --seekora-color-background: #1a1a1a;\n --seekora-color-surface: #2d2d2d;\n --seekora-color-text: #f8f9fa;\n --seekora-color-textSecondary: #adb5bd;\n --seekora-color-border: #495057;\n --seekora-color-hover: #343a40;\n --seekora-color-focus: rgba(77, 166, 255, 0.25);\n --seekora-color-error: #f87171;\n --seekora-color-success: #4ade80;\n --seekora-color-warning: #fbbf24;\n \n --seekora-shadow-small: 0 1px 2px rgba(0, 0, 0, 0.3);\n --seekora-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.4);\n --seekora-shadow-large: 0 10px 15px rgba(0, 0, 0, 0.5);\n}\n`;\n\nexport const minimalThemeVariables = `\n[data-seekora-theme=\"minimal\"] {\n --seekora-color-primary: #000000;\n --seekora-color-secondary: #666666;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #fafafa;\n --seekora-color-text: #000000;\n --seekora-color-textSecondary: #666666;\n --seekora-color-border: #e5e5e5;\n --seekora-color-hover: #f5f5f5;\n --seekora-color-focus: rgba(0, 0, 0, 0.1);\n \n --seekora-border-radius: 0;\n --seekora-border-radius-none: 0;\n --seekora-border-radius-small: 0;\n --seekora-border-radius-medium: 0;\n --seekora-border-radius-large: 0;\n --seekora-border-radius-full: 0;\n \n --seekora-shadow-small: none;\n --seekora-shadow-medium: none;\n --seekora-shadow-large: none;\n}\n`;\n\nexport const highContrastThemeVariables = `\n[data-seekora-theme=\"high-contrast\"] {\n --seekora-color-primary: #0000ff;\n --seekora-color-secondary: #000000;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #ffffff;\n --seekora-color-text: #000000;\n --seekora-color-textSecondary: #000000;\n --seekora-color-border: #000000;\n --seekora-color-hover: #ffff00;\n --seekora-color-focus: #0000ff;\n --seekora-color-error: #ff0000;\n --seekora-color-success: #008000;\n --seekora-color-warning: #ffff00;\n \n --seekora-font-weight-normal: 500;\n --seekora-font-weight-medium: 600;\n --seekora-font-weight-semibold: 700;\n --seekora-font-weight-bold: 900;\n}\n`;\n\n/**\n * Complete stylesheet with all presets and component classes\n */\nexport function generateCompleteStylesheet(): string {\n return `\n/* Seekora UI SDK Styles */\n/* Generated CSS Variables and Component Classes */\n\n${lightThemeVariables}\n\n${darkThemeVariables}\n\n${minimalThemeVariables}\n\n${highContrastThemeVariables}\n\n${generateComponentClasses('--seekora')}\n`;\n}\n\n/**\n * Inject styles into the document head\n */\nexport function injectStyles(css: string, id: string = 'seekora-theme'): void {\n if (typeof document === 'undefined') return;\n\n // Remove existing style if present\n const existing = document.getElementById(id);\n if (existing) {\n existing.remove();\n }\n\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/**\n * Set the active theme\n */\nexport function setTheme(themeName: 'light' | 'dark' | 'minimal' | 'high-contrast'): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute('data-seekora-theme', themeName);\n}\n\n/**\n * Get the current theme\n */\nexport function getTheme(): string {\n if (typeof document === 'undefined') return 'light';\n return document.documentElement.getAttribute('data-seekora-theme') || 'light';\n}\n","/**\n * Logger utility for Seekora UI SDK\n * \n * Provides structured logging with different log levels:\n * - verbose: Detailed debugging information\n * - info: General informational messages\n * - warn: Warning messages for potential issues\n * - error: Error messages for failures\n */\n\nexport enum LogLevel {\n VERBOSE = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4,\n}\n\nexport interface LoggerConfig {\n level?: LogLevel;\n prefix?: string;\n enableTimestamp?: boolean;\n}\n\nclass Logger {\n private level: LogLevel;\n private prefix: string;\n private enableTimestamp: boolean;\n\n constructor(config: LoggerConfig = {}) {\n this.level = config.level ?? this.getDefaultLevel();\n this.prefix = config.prefix ?? '[Seekora UI SDK]';\n this.enableTimestamp = config.enableTimestamp ?? false;\n }\n\n private getDefaultLevel(): LogLevel {\n // Check for environment variable or default to INFO\n if (typeof process !== 'undefined' && process.env) {\n const envLevel = process.env.SEEKORA_LOG_LEVEL?.toUpperCase();\n switch (envLevel) {\n case 'VERBOSE':\n return LogLevel.VERBOSE;\n case 'INFO':\n return LogLevel.INFO;\n case 'WARN':\n return LogLevel.WARN;\n case 'ERROR':\n return LogLevel.ERROR;\n case 'SILENT':\n return LogLevel.SILENT;\n }\n }\n // Default to INFO in production, VERBOSE in development\n if (typeof window !== 'undefined' && (window as any).__SEEKORA_DEBUG__) {\n return LogLevel.VERBOSE;\n }\n return LogLevel.INFO;\n }\n\n private formatMessage(level: string, ...args: any[]): any[] {\n const parts: any[] = [];\n \n if (this.enableTimestamp) {\n parts.push(`[${new Date().toISOString()}]`);\n }\n \n parts.push(this.prefix, `[${level}]`);\n \n return [...parts, ...args];\n }\n\n verbose(...args: any[]): void {\n if (this.level <= LogLevel.VERBOSE) {\n console.log(...this.formatMessage('VERBOSE', ...args));\n }\n }\n\n info(...args: any[]): void {\n if (this.level <= LogLevel.INFO) {\n console.info(...this.formatMessage('INFO', ...args));\n }\n }\n\n warn(...args: any[]): void {\n if (this.level <= LogLevel.WARN) {\n console.warn(...this.formatMessage('WARN', ...args));\n }\n }\n\n error(...args: any[]): void {\n if (this.level <= LogLevel.ERROR) {\n console.error(...this.formatMessage('ERROR', ...args));\n }\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n getLevel(): LogLevel {\n return this.level;\n }\n\n setPrefix(prefix: string): void {\n this.prefix = prefix;\n }\n\n setTimestamp(enabled: boolean): void {\n this.enableTimestamp = enabled;\n }\n}\n\n// Create default logger instance\nlet defaultLogger: Logger | null = null;\n\nexport function createLogger(config: LoggerConfig = {}): Logger {\n return new Logger(config);\n}\n\nexport function getLogger(): Logger {\n if (!defaultLogger) {\n defaultLogger = createLogger();\n }\n return defaultLogger;\n}\n\nexport function setDefaultLogger(logger: Logger): void {\n defaultLogger = logger;\n}\n\nexport function setLogLevel(level: LogLevel): void {\n getLogger().setLevel(level);\n}\n\nexport function setLogPrefix(prefix: string): void {\n getLogger().setPrefix(prefix);\n}\n\nexport function setLogTimestamp(enabled: boolean): void {\n getLogger().setTimestamp(enabled);\n}\n\n// Convenience functions that use the default logger\nexport const log = {\n verbose: (...args: any[]) => getLogger().verbose(...args),\n info: (...args: any[]) => getLogger().info(...args),\n warn: (...args: any[]) => getLogger().warn(...args),\n error: (...args: any[]) => getLogger().error(...args),\n};\n\n// Export default logger instance\nexport default getLogger();\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Highlight Utilities\n * \n * Core utilities for highlighting matching terms in search results\n * Framework-agnostic functions shared across all packages\n */\n\nexport interface HighlightOptions {\n /** The attribute to highlight */\n attribute: string;\n /** The search hit containing highlight data */\n hit: Record<string, any>;\n /** Pre-tag for highlighted text (default: '<mark>') */\n preTag?: string;\n /** Post-tag for highlighted text (default: '</mark>') */\n postTag?: string;\n /** Fallback value if no highlight exists */\n fallback?: string;\n}\n\nexport interface SnippetOptions extends HighlightOptions {\n /** Maximum length of snippet (default: 100) */\n maxLength?: number;\n /** Ellipsis to use when truncating (default: '...') */\n ellipsis?: string;\n}\n\nexport interface HighlightPart {\n value: string;\n isHighlighted: boolean;\n}\n\n/**\n * Get highlighted value from a hit\n * Looks for _highlightResult or highlight_result field\n */\nexport function getHighlightedValue(options: HighlightOptions): string {\n const {\n attribute,\n hit,\n preTag = '<mark>',\n postTag = '</mark>',\n fallback,\n } = options;\n\n // Check for various highlight result formats\n const highlightResult = \n hit._highlightResult?.[attribute]?.value ||\n hit.highlight_result?.[attribute]?.value ||\n hit._highlight?.[attribute] ||\n hit.highlight?.[attribute];\n\n if (highlightResult) {\n // Replace highlight markers with custom tags\n return highlightResult\n .replace(/<em>/g, preTag)\n .replace(/<\\/em>/g, postTag)\n .replace(/<mark>/g, preTag)\n .replace(/<\\/mark>/g, postTag);\n }\n\n // Fall back to plain attribute value\n const plainValue = getNestedValue(hit, attribute);\n return plainValue !== undefined ? String(plainValue) : (fallback || '');\n}\n\n/**\n * Get snippet (truncated highlighted value) from a hit\n */\nexport function getSnippetedValue(options: SnippetOptions): string {\n const {\n attribute,\n hit,\n preTag = '<mark>',\n postTag = '</mark>',\n fallback,\n maxLength = 100,\n ellipsis = '...',\n } = options;\n\n // Check for snippet result\n const snippetResult =\n hit._snippetResult?.[attribute]?.value ||\n hit.snippet_result?.[attribute]?.value ||\n hit._snippet?.[attribute] ||\n hit.snippet?.[attribute];\n\n let text = '';\n\n if (snippetResult) {\n text = snippetResult\n .replace(/<em>/g, preTag)\n .replace(/<\\/em>/g, postTag)\n .replace(/<mark>/g, preTag)\n .replace(/<\\/mark>/g, postTag);\n } else {\n // Fall back to highlighted or plain value\n text = getHighlightedValue(options);\n }\n\n // Truncate if needed\n if (text.length > maxLength) {\n // Try to truncate at word boundary\n const truncated = text.substring(0, maxLength);\n const lastSpace = truncated.lastIndexOf(' ');\n \n if (lastSpace > maxLength * 0.7) {\n return truncated.substring(0, lastSpace) + ellipsis;\n }\n return truncated + ellipsis;\n }\n\n return text;\n}\n\n/**\n * Parse highlighted value into parts for custom rendering\n */\nexport function parseHighlightedParts(\n highlightedValue: string,\n preTag: string = '<mark>',\n postTag: string = '</mark>'\n): HighlightPart[] {\n const parts: HighlightPart[] = [];\n let remaining = highlightedValue;\n \n while (remaining.length > 0) {\n const startIdx = remaining.indexOf(preTag);\n \n if (startIdx === -1) {\n // No more highlights, add remaining as non-highlighted\n if (remaining.length > 0) {\n parts.push({ value: remaining, isHighlighted: false });\n }\n break;\n }\n \n // Add text before highlight\n if (startIdx > 0) {\n parts.push({ value: remaining.substring(0, startIdx), isHighlighted: false });\n }\n \n // Find end of highlight\n const afterPreTag = remaining.substring(startIdx + preTag.length);\n const endIdx = afterPreTag.indexOf(postTag);\n \n if (endIdx === -1) {\n // Malformed, add rest as non-highlighted\n parts.push({ value: remaining.substring(startIdx), isHighlighted: false });\n break;\n }\n \n // Add highlighted part\n parts.push({ value: afterPreTag.substring(0, endIdx), isHighlighted: true });\n \n // Continue with rest\n remaining = afterPreTag.substring(endIdx + postTag.length);\n }\n \n return parts;\n}\n\n/**\n * Highlight a query in text (client-side highlighting)\n * Useful when server doesn't provide highlight data\n */\nexport function highlightQuery(\n text: string,\n query: string,\n options: {\n preTag?: string;\n postTag?: string;\n caseSensitive?: boolean;\n } = {}\n): string {\n const { preTag = '<mark>', postTag = '</mark>', caseSensitive = false } = options;\n \n if (!query || !text) return text;\n\n const flags = caseSensitive ? 'g' : 'gi';\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, flags);\n \n return text.replace(regex, `${preTag}$1${postTag}`);\n}\n\n/**\n * Parse query-highlighted text into parts\n */\nexport function parseQueryHighlightParts(\n text: string,\n query: string,\n caseSensitive: boolean = false\n): HighlightPart[] {\n if (!query || !text) {\n return [{ value: text, isHighlighted: false }];\n }\n\n const parts: HighlightPart[] = [];\n const flags = caseSensitive ? 'g' : 'gi';\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedQuery, flags);\n \n let lastIndex = 0;\n let match: RegExpExecArray | null;\n \n while ((match = regex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n parts.push({ value: text.substring(lastIndex, match.index), isHighlighted: false });\n }\n \n // Add highlighted match\n parts.push({ value: match[0], isHighlighted: true });\n \n lastIndex = regex.lastIndex;\n }\n \n // Add remaining text\n if (lastIndex < text.length) {\n parts.push({ value: text.substring(lastIndex), isHighlighted: false });\n }\n \n return parts.length > 0 ? parts : [{ value: text, isHighlighted: false }];\n}\n\n/**\n * Get nested value from object using dot notation\n */\nfunction getNestedValue(obj: Record<string, any>, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n}\n\n/**\n * Strip HTML tags from highlighted text\n */\nexport function stripHighlightTags(text: string): string {\n return text\n .replace(/<mark>/g, '')\n .replace(/<\\/mark>/g, '')\n .replace(/<em>/g, '')\n .replace(/<\\/em>/g, '');\n}\n","/**\n * Accessibility Utilities\n * \n * Shared accessibility helpers for keyboard navigation, focus management,\n * screen reader announcements, and ARIA attributes.\n */\n\n// ============================================================================\n// Screen Reader Announcements (Live Regions)\n// ============================================================================\n\nlet announcer: HTMLElement | null = null;\n\n/**\n * Create or get the screen reader announcer element\n */\nfunction getAnnouncer(): HTMLElement {\n if (announcer) return announcer;\n \n if (typeof document === 'undefined') {\n throw new Error('Cannot create announcer: document is undefined');\n }\n\n announcer = document.createElement('div');\n announcer.id = 'seekora-announcer';\n announcer.setAttribute('role', 'status');\n announcer.setAttribute('aria-live', 'polite');\n announcer.setAttribute('aria-atomic', 'true');\n announcer.style.cssText = `\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n `;\n document.body.appendChild(announcer);\n \n return announcer;\n}\n\n/**\n * Announce a message to screen readers\n */\nexport function announce(\n message: string,\n priority: 'polite' | 'assertive' = 'polite'\n): void {\n if (typeof document === 'undefined') return;\n\n try {\n const el = getAnnouncer();\n el.setAttribute('aria-live', priority);\n \n // Clear and set message (needs a brief delay to trigger announcement)\n el.textContent = '';\n setTimeout(() => {\n el.textContent = message;\n }, 50);\n } catch (e) {\n // Ignore errors in SSR\n }\n}\n\n/**\n * Announce search results count\n */\nexport function announceResults(count: number, query?: string): void {\n let message = '';\n \n if (count === 0) {\n message = query \n ? `No results found for \"${query}\"`\n : 'No results found';\n } else if (count === 1) {\n message = query\n ? `1 result found for \"${query}\"`\n : '1 result found';\n } else {\n message = query\n ? `${count} results found for \"${query}\"`\n : `${count} results found`;\n }\n \n announce(message);\n}\n\n/**\n * Announce filter changes\n */\nexport function announceFilterChange(\n action: 'added' | 'removed' | 'cleared',\n filterName?: string,\n filterValue?: string\n): void {\n let message = '';\n \n switch (action) {\n case 'added':\n message = `Filter ${filterName}: ${filterValue} applied`;\n break;\n case 'removed':\n message = `Filter ${filterName}: ${filterValue} removed`;\n break;\n case 'cleared':\n message = 'All filters cleared';\n break;\n }\n \n announce(message);\n}\n\n// ============================================================================\n// Keyboard Navigation\n// ============================================================================\n\nexport interface KeyboardNavigationOptions {\n /** List of navigable items */\n items: HTMLElement[];\n /** Current active index (-1 for none) */\n activeIndex: number;\n /** Callback when active index changes */\n onActiveChange: (index: number) => void;\n /** Callback when item is selected */\n onSelect?: (index: number) => void;\n /** Callback when navigation is cancelled (Escape) */\n onCancel?: () => void;\n /** Whether navigation wraps around */\n wrap?: boolean;\n /** Orientation */\n orientation?: 'vertical' | 'horizontal' | 'both';\n}\n\n/**\n * Handle keyboard navigation for a list of items\n */\nexport function handleKeyboardNavigation(\n event: KeyboardEvent,\n options: KeyboardNavigationOptions\n): boolean {\n const {\n items,\n activeIndex,\n onActiveChange,\n onSelect,\n onCancel,\n wrap = true,\n orientation = 'vertical',\n } = options;\n\n const itemCount = items.length;\n if (itemCount === 0) return false;\n\n let handled = false;\n let newIndex = activeIndex;\n\n switch (event.key) {\n case 'ArrowDown':\n if (orientation === 'vertical' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex < itemCount - 1) {\n newIndex = activeIndex + 1;\n } else if (wrap) {\n newIndex = 0;\n }\n handled = true;\n }\n break;\n\n case 'ArrowUp':\n if (orientation === 'vertical' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex > 0) {\n newIndex = activeIndex - 1;\n } else if (wrap) {\n newIndex = itemCount - 1;\n }\n handled = true;\n }\n break;\n\n case 'ArrowRight':\n if (orientation === 'horizontal' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex < itemCount - 1) {\n newIndex = activeIndex + 1;\n } else if (wrap) {\n newIndex = 0;\n }\n handled = true;\n }\n break;\n\n case 'ArrowLeft':\n if (orientation === 'horizontal' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex > 0) {\n newIndex = activeIndex - 1;\n } else if (wrap) {\n newIndex = itemCount - 1;\n }\n handled = true;\n }\n break;\n\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n handled = true;\n break;\n\n case 'End':\n event.preventDefault();\n newIndex = itemCount - 1;\n handled = true;\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (activeIndex >= 0 && onSelect) {\n onSelect(activeIndex);\n }\n handled = true;\n break;\n\n case 'Escape':\n if (onCancel) {\n event.preventDefault();\n onCancel();\n handled = true;\n }\n break;\n }\n\n if (newIndex !== activeIndex && newIndex >= 0 && newIndex < itemCount) {\n onActiveChange(newIndex);\n \n // Focus the new item\n const item = items[newIndex];\n if (item) {\n item.focus();\n }\n }\n\n return handled;\n}\n\n/**\n * Create a roving tabindex manager for accessible list navigation\n */\nexport function createRovingTabIndex(container: HTMLElement, selector: string): {\n update: (activeIndex: number) => void;\n destroy: () => void;\n} {\n const items = Array.from(container.querySelectorAll(selector)) as HTMLElement[];\n \n // Initialize: first item gets tabindex 0, others get -1\n items.forEach((item, index) => {\n item.setAttribute('tabindex', index === 0 ? '0' : '-1');\n });\n\n return {\n update: (activeIndex: number) => {\n items.forEach((item, index) => {\n item.setAttribute('tabindex', index === activeIndex ? '0' : '-1');\n });\n },\n destroy: () => {\n items.forEach(item => {\n item.removeAttribute('tabindex');\n });\n },\n };\n}\n\n// ============================================================================\n// Focus Management\n// ============================================================================\n\n/**\n * Get all focusable elements within a container\n */\nexport function getFocusableElements(container: HTMLElement): HTMLElement[] {\n const selector = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n return Array.from(container.querySelectorAll(selector)) as HTMLElement[];\n}\n\n/**\n * Create a focus trap within a container (for modals/dialogs)\n */\nexport function createFocusTrap(container: HTMLElement): {\n activate: () => void;\n deactivate: () => void;\n} {\n let previouslyFocused: HTMLElement | null = null;\n let handleKeyDown: ((e: KeyboardEvent) => void) | null = null;\n\n return {\n activate: () => {\n previouslyFocused = document.activeElement as HTMLElement;\n \n const focusable = getFocusableElements(container);\n if (focusable.length === 0) return;\n\n const firstFocusable = focusable[0];\n const lastFocusable = focusable[focusable.length - 1];\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n }\n } else {\n if (document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n firstFocusable.focus();\n },\n deactivate: () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n handleKeyDown = null;\n }\n if (previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n },\n };\n}\n\n/**\n * Focus first error or first input in a form\n */\nexport function focusFirstError(container: HTMLElement): boolean {\n const error = container.querySelector('[aria-invalid=\"true\"]') as HTMLElement;\n if (error) {\n error.focus();\n return true;\n }\n return false;\n}\n\n// ============================================================================\n// ARIA Helpers\n// ============================================================================\n\n/**\n * Generate a unique ID for ARIA relationships\n */\nlet idCounter = 0;\nexport function generateId(prefix: string = 'seekora'): string {\n return `${prefix}-${++idCounter}`;\n}\n\n/**\n * Set up ARIA describedby relationship\n */\nexport function setAriaDescribedBy(\n element: HTMLElement,\n describer: HTMLElement\n): () => void {\n const id = describer.id || generateId('description');\n describer.id = id;\n \n const existing = element.getAttribute('aria-describedby');\n const newValue = existing ? `${existing} ${id}` : id;\n element.setAttribute('aria-describedby', newValue);\n\n return () => {\n const current = element.getAttribute('aria-describedby');\n if (current) {\n const ids = current.split(' ').filter(i => i !== id);\n if (ids.length > 0) {\n element.setAttribute('aria-describedby', ids.join(' '));\n } else {\n element.removeAttribute('aria-describedby');\n }\n }\n };\n}\n\n/**\n * Check if user prefers reduced motion\n */\nexport function prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Check if user prefers high contrast\n */\nexport function prefersHighContrast(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-contrast: more)').matches;\n}\n\n// ============================================================================\n// Keyboard Shortcuts\n// ============================================================================\n\nexport interface KeyboardShortcut {\n key: string;\n ctrl?: boolean;\n alt?: boolean;\n shift?: boolean;\n meta?: boolean;\n handler: (e: KeyboardEvent) => void;\n description?: string;\n}\n\n/**\n * Create a keyboard shortcuts manager\n */\nexport function createKeyboardShortcuts(shortcuts: KeyboardShortcut[]): {\n attach: () => void;\n detach: () => void;\n getShortcuts: () => KeyboardShortcut[];\n} {\n const handleKeyDown = (e: KeyboardEvent) => {\n for (const shortcut of shortcuts) {\n const keyMatches = e.key.toLowerCase() === shortcut.key.toLowerCase();\n const ctrlMatches = !shortcut.ctrl || e.ctrlKey;\n const altMatches = !shortcut.alt || e.altKey;\n const shiftMatches = !shortcut.shift || e.shiftKey;\n const metaMatches = !shortcut.meta || e.metaKey;\n\n if (keyMatches && ctrlMatches && altMatches && shiftMatches && metaMatches) {\n e.preventDefault();\n shortcut.handler(e);\n break;\n }\n }\n };\n\n return {\n attach: () => {\n document.addEventListener('keydown', handleKeyDown);\n },\n detach: () => {\n document.removeEventListener('keydown', handleKeyDown);\n },\n getShortcuts: () => [...shortcuts],\n };\n}\n","/**\n * SearchStateManager\n * \n * Centralized state management for search operations\n * Framework-agnostic core logic shared across all packages\n * Handles query, refinements, pagination, sorting, and automatic search triggering\n * Similar to InstantSearch.js architecture\n */\n\nimport type { SeekoraClient, SearchOptions, SearchResponse } from '@seekora-ai/search-sdk';\nimport { log } from '../utils/logger';\n\nexport interface Refinement {\n field: string;\n value: string;\n}\n\nexport interface SearchState {\n query: string;\n refinements: Refinement[];\n currentPage: number;\n itemsPerPage: number;\n sortBy?: string;\n results: SearchResponse | null;\n loading: boolean;\n error: Error | null;\n}\n\nexport interface SearchStateManagerConfig {\n client: SeekoraClient;\n initialQuery?: string;\n itemsPerPage?: number;\n autoSearch?: boolean; // Automatically trigger search on state changes\n debounceMs?: number; // Debounce search triggers\n defaultSearchOptions?: Partial<SearchOptions>;\n}\n\nexport class SearchStateManager {\n private client: SeekoraClient;\n private state: SearchState;\n private listeners: Array<(state: SearchState) => void> = [];\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private autoSearch: boolean;\n private debounceMs: number;\n private defaultSearchOptions: Partial<SearchOptions>;\n\n constructor(config: SearchStateManagerConfig) {\n this.client = config.client;\n this.autoSearch = config.autoSearch !== false;\n this.debounceMs = config.debounceMs || 300;\n this.defaultSearchOptions = config.defaultSearchOptions || { widget_mode: true };\n\n this.state = {\n query: config.initialQuery || '',\n refinements: [],\n currentPage: 1,\n itemsPerPage: config.itemsPerPage || 10,\n sortBy: undefined,\n results: null,\n loading: false,\n error: null,\n };\n\n log.info('SearchStateManager: Initialized', {\n autoSearch: this.autoSearch,\n debounceMs: this.debounceMs,\n });\n }\n\n // State getters\n getState(): SearchState {\n return { ...this.state };\n }\n\n getQuery(): string {\n return this.state.query;\n }\n\n getRefinements(): Refinement[] {\n return [...this.state.refinements];\n }\n\n getCurrentPage(): number {\n return this.state.currentPage;\n }\n\n getResults(): SearchResponse | null {\n return this.state.results;\n }\n\n getLoading(): boolean {\n return this.state.loading;\n }\n\n getError(): Error | null {\n return this.state.error;\n }\n\n // State setters (automatically trigger search if autoSearch is enabled)\n setQuery(query: string, triggerSearch: boolean = true): void {\n if (this.state.query === query) {\n log.verbose('SearchStateManager: Query unchanged, skipping update', { query });\n // Even if query is the same, trigger search if explicitly requested\n if (triggerSearch && this.autoSearch) {\n log.verbose('SearchStateManager: Query unchanged but triggerSearch=true, triggering search');\n this.debouncedSearch();\n }\n return;\n }\n \n this.state.query = query;\n this.state.currentPage = 1; // Reset to first page on new query\n \n log.verbose('SearchStateManager: Query updated', { query, triggerSearch, autoSearch: this.autoSearch });\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n log.verbose('SearchStateManager: Triggering debounced search');\n this.debouncedSearch();\n } else {\n log.verbose('SearchStateManager: Search not triggered', { autoSearch: this.autoSearch, triggerSearch });\n }\n }\n\n addRefinement(field: string, value: string, triggerSearch: boolean = true): void {\n // Check if refinement already exists\n const exists = this.state.refinements.some(\n r => r.field === field && r.value === value\n );\n \n if (exists) return;\n\n this.state.refinements.push({ field, value });\n this.state.currentPage = 1; // Reset to first page on filter change\n \n log.verbose('SearchStateManager: Refinement added', { field, value });\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n\n removeRefinement(field: string, value: string, triggerSearch: boolean = true): void {\n const index = this.state.refinements.findIndex(\n r => r.field === field && r.value === value\n );\n \n if (index === -1) return;\n\n this.state.refinements.splice(index, 1);\n this.state.currentPage = 1; // Reset to first page on filter change\n \n log.verbose('SearchStateManager: Refinement removed', { field, value });\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n\n clearRefinements(triggerSearch: boolean = true): void {\n if (this.state.refinements.length === 0) return;\n\n this.state.refinements = [];\n this.state.currentPage = 1;\n \n log.verbose('SearchStateManager: Refinements cleared');\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n\n setPage(page: number, triggerSearch: boolean = true): void {\n if (this.state.currentPage === page) return;\n\n this.state.currentPage = page;\n \n log.verbose('SearchStateManager: Page updated', { page });\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n\n setSortBy(sortBy: string, triggerSearch: boolean = true): void {\n if (this.state.sortBy === sortBy) return;\n\n this.state.sortBy = sortBy;\n this.state.currentPage = 1; // Reset to first page on sort change\n \n log.verbose('SearchStateManager: Sort updated', { sortBy });\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n\n setItemsPerPage(itemsPerPage: number, triggerSearch: boolean = true): void {\n if (this.state.itemsPerPage === itemsPerPage) return;\n\n this.state.itemsPerPage = itemsPerPage;\n this.state.currentPage = 1; // Reset to first page when changing items per page\n \n log.verbose('SearchStateManager: Items per page updated', { itemsPerPage });\n this.notifyListeners();\n \n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n\n // Manual search trigger\n async search(additionalOptions?: Partial<SearchOptions>): Promise<SearchResponse | null> {\n // Clear debounce timer if exists\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n this.setState({ loading: true, error: null });\n\n try {\n const searchOptions = this.buildSearchOptions(additionalOptions);\n \n log.verbose('SearchStateManager: Performing search', {\n query: this.state.query,\n refinementsCount: this.state.refinements.length,\n currentPage: this.state.currentPage,\n sortBy: this.state.sortBy,\n filter_by: searchOptions.filter_by,\n });\n\n const response = await this.client.search(this.state.query, searchOptions);\n \n this.setState({\n results: response,\n loading: false,\n error: null,\n });\n\n log.info('SearchStateManager: Search completed', {\n query: this.state.query,\n resultsCount: response?.results?.length || 0,\n totalResults: response?.totalResults || 0,\n });\n\n return response;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.setState({\n results: null,\n loading: false,\n error,\n });\n\n log.error('SearchStateManager: Search failed', {\n query: this.state.query,\n error: error.message,\n });\n\n return null;\n }\n }\n\n // Build search options from current state\n private buildSearchOptions(additionalOptions?: Partial<SearchOptions>): Partial<SearchOptions> {\n const options: Partial<SearchOptions> = {\n ...this.defaultSearchOptions,\n page: this.state.currentPage,\n per_page: this.state.itemsPerPage,\n ...additionalOptions,\n };\n\n // Add sort_by if set and not \"relevance\" (relevance is the default, no sort field needed)\n if (this.state.sortBy && this.state.sortBy !== 'relevance') {\n options.sort_by = this.state.sortBy;\n }\n\n // Build filter_by from refinements\n if (this.state.refinements.length > 0) {\n const filtersByField: Record<string, string[]> = {};\n this.state.refinements.forEach((refinement) => {\n if (!filtersByField[refinement.field]) {\n filtersByField[refinement.field] = [];\n }\n filtersByField[refinement.field].push(refinement.value);\n });\n\n const filterParts: string[] = [];\n Object.entries(filtersByField).forEach(([field, values]) => {\n values.forEach((value) => {\n filterParts.push(`${field}:${value}`);\n });\n });\n\n if (filterParts.length > 0) {\n options.filter_by = filterParts.join(' && ');\n }\n }\n\n return options;\n }\n\n // Debounced search trigger\n private debouncedSearch(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n log.verbose('SearchStateManager: Scheduling debounced search', { debounceMs: this.debounceMs });\n this.debounceTimer = setTimeout(() => {\n log.verbose('SearchStateManager: Debounce timer fired, calling search()');\n this.search();\n }, this.debounceMs);\n }\n\n // Subscribe to state changes\n subscribe(listener: (state: SearchState) => void): () => void {\n this.listeners.push(listener);\n \n // Immediately call listener with current state\n listener(this.getState());\n \n // Return unsubscribe function\n return () => {\n this.listeners = this.listeners.filter(l => l !== listener);\n };\n }\n\n // Update state and notify listeners\n private setState(updates: Partial<SearchState>): void {\n this.state = { ...this.state, ...updates };\n this.notifyListeners();\n }\n\n // Notify all listeners of state changes\n private notifyListeners(): void {\n const state = this.getState();\n this.listeners.forEach(listener => {\n try {\n listener(state);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Error in listener', {\n error: error.message,\n });\n }\n });\n }\n\n // Clear all state\n clear(): void {\n this.state = {\n query: '',\n refinements: [],\n currentPage: 1,\n itemsPerPage: this.state.itemsPerPage,\n sortBy: undefined,\n results: null,\n loading: false,\n error: null,\n };\n this.notifyListeners();\n }\n}\n\n","/**\n * URL Router\n * \n * Syncs search state with browser URL for shareable links and back/forward navigation\n * Framework-agnostic core logic shared across all packages\n */\n\nimport type { SearchStateManager, SearchState, Refinement } from '../search/state-manager';\nimport { log } from '../utils/logger';\n\nexport interface URLStateMapping {\n /** Query parameter name for search query (default: 'q') */\n query?: string;\n /** Query parameter name for page (default: 'page') */\n page?: string;\n /** Query parameter name for items per page (default: 'hitsPerPage') */\n hitsPerPage?: string;\n /** Query parameter name for sort (default: 'sortBy') */\n sortBy?: string;\n /** Prefix for refinement parameters (default: '') */\n refinementPrefix?: string;\n /** Custom serialization for refinements */\n refinementSerializer?: (refinements: Refinement[]) => Record<string, string>;\n /** Custom deserialization for refinements */\n refinementDeserializer?: (params: URLSearchParams) => Refinement[];\n}\n\nexport interface URLRouterConfig {\n /** SearchStateManager instance to sync with */\n stateManager: SearchStateManager;\n /** State mapping configuration */\n mapping?: URLStateMapping;\n /** Whether to write state to URL (default: true) */\n writeToUrl?: boolean;\n /** Whether to read initial state from URL (default: true) */\n readFromUrl?: boolean;\n /** Whether to use history.pushState or replaceState (default: 'push') */\n historyMode?: 'push' | 'replace';\n /** Debounce delay for URL updates in ms (default: 400) */\n debounceMs?: number;\n /** Base URL path (default: current path) */\n basePath?: string;\n /** Whether to trigger search on URL change (default: true) */\n triggerSearchOnChange?: boolean;\n}\n\nexport class URLRouter {\n private stateManager: SearchStateManager;\n private mapping: Required<Omit<URLStateMapping, 'refinementSerializer' | 'refinementDeserializer'>> & \n Pick<URLStateMapping, 'refinementSerializer' | 'refinementDeserializer'>;\n private writeToUrl: boolean;\n private readFromUrl: boolean;\n private historyMode: 'push' | 'replace';\n private debounceMs: number;\n private basePath: string;\n private triggerSearchOnChange: boolean;\n private unsubscribe: (() => void) | null = null;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private isUpdatingFromUrl = false;\n\n constructor(config: URLRouterConfig) {\n this.stateManager = config.stateManager;\n this.writeToUrl = config.writeToUrl !== false;\n this.readFromUrl = config.readFromUrl !== false;\n this.historyMode = config.historyMode || 'push';\n this.debounceMs = config.debounceMs ?? 400;\n this.basePath = config.basePath || (typeof window !== 'undefined' ? window.location.pathname : '/');\n this.triggerSearchOnChange = config.triggerSearchOnChange !== false;\n\n this.mapping = {\n query: config.mapping?.query || 'q',\n page: config.mapping?.page || 'page',\n hitsPerPage: config.mapping?.hitsPerPage || 'hitsPerPage',\n sortBy: config.mapping?.sortBy || 'sortBy',\n refinementPrefix: config.mapping?.refinementPrefix || '',\n refinementSerializer: config.mapping?.refinementSerializer,\n refinementDeserializer: config.mapping?.refinementDeserializer,\n };\n\n // Initialize\n this.init();\n }\n\n private init(): void {\n if (typeof window === 'undefined') {\n log.warn('URLRouter: Not in browser environment, skipping initialization');\n return;\n }\n\n // Read initial state from URL\n if (this.readFromUrl) {\n this.readStateFromUrl();\n }\n\n // Subscribe to state changes\n if (this.writeToUrl) {\n this.unsubscribe = this.stateManager.subscribe((state) => {\n if (!this.isUpdatingFromUrl) {\n this.debouncedWriteToUrl(state);\n }\n });\n }\n\n // Listen for popstate (back/forward navigation)\n window.addEventListener('popstate', this.handlePopState);\n\n log.info('URLRouter: Initialized', {\n writeToUrl: this.writeToUrl,\n readFromUrl: this.readFromUrl,\n historyMode: this.historyMode,\n });\n }\n\n /**\n * Read state from current URL and update StateManager\n */\n private readStateFromUrl(): void {\n const params = new URLSearchParams(window.location.search);\n \n this.isUpdatingFromUrl = true;\n\n try {\n // Query\n const query = params.get(this.mapping.query);\n if (query !== null) {\n this.stateManager.setQuery(query, false);\n }\n\n // Page\n const page = params.get(this.mapping.page);\n if (page !== null) {\n const pageNum = parseInt(page, 10);\n if (!isNaN(pageNum) && pageNum > 0) {\n this.stateManager.setPage(pageNum, false);\n }\n }\n\n // Hits per page\n const hitsPerPage = params.get(this.mapping.hitsPerPage);\n if (hitsPerPage !== null) {\n const hpp = parseInt(hitsPerPage, 10);\n if (!isNaN(hpp) && hpp > 0) {\n this.stateManager.setItemsPerPage(hpp, false);\n }\n }\n\n // Sort by\n const sortBy = params.get(this.mapping.sortBy);\n if (sortBy !== null) {\n this.stateManager.setSortBy(sortBy, false);\n }\n\n // Refinements\n const refinements = this.deserializeRefinements(params);\n refinements.forEach(r => {\n this.stateManager.addRefinement(r.field, r.value, false);\n });\n\n // Trigger search if there's any state\n if (this.triggerSearchOnChange && (query || refinements.length > 0)) {\n this.stateManager.search();\n }\n\n log.verbose('URLRouter: Read state from URL', {\n query,\n page,\n refinements: refinements.length,\n });\n } finally {\n this.isUpdatingFromUrl = false;\n }\n }\n\n /**\n * Write state to URL\n */\n private writeStateToUrl(state: SearchState): void {\n const params = new URLSearchParams();\n\n // Query\n if (state.query) {\n params.set(this.mapping.query, state.query);\n }\n\n // Page (only if not 1)\n if (state.currentPage > 1) {\n params.set(this.mapping.page, state.currentPage.toString());\n }\n\n // Hits per page (only if not default)\n if (state.itemsPerPage !== 10) {\n params.set(this.mapping.hitsPerPage, state.itemsPerPage.toString());\n }\n\n // Sort by\n if (state.sortBy && state.sortBy !== 'relevance') {\n params.set(this.mapping.sortBy, state.sortBy);\n }\n\n // Refinements\n this.serializeRefinements(state.refinements, params);\n\n // Build URL\n const queryString = params.toString();\n const url = queryString ? `${this.basePath}?${queryString}` : this.basePath;\n\n // Update URL\n if (this.historyMode === 'push') {\n window.history.pushState({}, '', url);\n } else {\n window.history.replaceState({}, '', url);\n }\n\n log.verbose('URLRouter: Wrote state to URL', { url });\n }\n\n /**\n * Debounced write to URL\n */\n private debouncedWriteToUrl(state: SearchState): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n this.debounceTimer = setTimeout(() => {\n this.writeStateToUrl(state);\n }, this.debounceMs);\n }\n\n /**\n * Handle browser back/forward navigation\n */\n private handlePopState = (): void => {\n if (this.readFromUrl) {\n // Clear current refinements first\n this.stateManager.clear();\n this.readStateFromUrl();\n }\n };\n\n /**\n * Serialize refinements to URL params\n */\n private serializeRefinements(refinements: Refinement[], params: URLSearchParams): void {\n if (this.mapping.refinementSerializer) {\n const serialized = this.mapping.refinementSerializer(refinements);\n Object.entries(serialized).forEach(([key, value]) => {\n params.set(key, value);\n });\n return;\n }\n\n // Default serialization: field[]=value\n const byField: Record<string, string[]> = {};\n refinements.forEach(r => {\n const key = this.mapping.refinementPrefix + r.field;\n if (!byField[key]) {\n byField[key] = [];\n }\n byField[key].push(r.value);\n });\n\n Object.entries(byField).forEach(([field, values]) => {\n values.forEach(value => {\n params.append(field, value);\n });\n });\n }\n\n /**\n * Deserialize refinements from URL params\n */\n private deserializeRefinements(params: URLSearchParams): Refinement[] {\n if (this.mapping.refinementDeserializer) {\n return this.mapping.refinementDeserializer(params);\n }\n\n // Default deserialization\n const refinements: Refinement[] = [];\n const knownParams = [\n this.mapping.query,\n this.mapping.page,\n this.mapping.hitsPerPage,\n this.mapping.sortBy,\n ];\n\n params.forEach((value, key) => {\n // Skip known params\n if (knownParams.includes(key)) return;\n\n // Remove prefix if present\n const field = this.mapping.refinementPrefix \n ? key.replace(new RegExp(`^${this.mapping.refinementPrefix}`), '')\n : key;\n\n refinements.push({ field, value });\n });\n\n return refinements;\n }\n\n /**\n * Manually update URL from current state\n */\n refresh(): void {\n if (this.writeToUrl) {\n this.writeStateToUrl(this.stateManager.getState());\n }\n }\n\n /**\n * Get current URL\n */\n getUrl(): string {\n if (typeof window === 'undefined') return '';\n return window.location.href;\n }\n\n /**\n * Generate shareable URL from state\n */\n createUrl(state?: Partial<SearchState>): string {\n const currentState = this.stateManager.getState();\n const mergedState = state ? { ...currentState, ...state } : currentState;\n \n const params = new URLSearchParams();\n\n if (mergedState.query) {\n params.set(this.mapping.query, mergedState.query);\n }\n if (mergedState.currentPage > 1) {\n params.set(this.mapping.page, mergedState.currentPage.toString());\n }\n if (mergedState.itemsPerPage !== 10) {\n params.set(this.mapping.hitsPerPage, mergedState.itemsPerPage.toString());\n }\n if (mergedState.sortBy && mergedState.sortBy !== 'relevance') {\n params.set(this.mapping.sortBy, mergedState.sortBy);\n }\n this.serializeRefinements(mergedState.refinements, params);\n\n const queryString = params.toString();\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n return queryString ? `${origin}${this.basePath}?${queryString}` : `${origin}${this.basePath}`;\n }\n\n /**\n * Destroy the router and cleanup\n */\n destroy(): void {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', this.handlePopState);\n }\n log.info('URLRouter: Destroyed');\n }\n}\n\n/**\n * Create a URL router instance\n */\nexport function createURLRouter(config: URLRouterConfig): URLRouter {\n return new URLRouter(config);\n}\n"],"names":["getNestedValue","LogLevel"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@seekora-ai/ui-sdk-core",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Shared core logic for Seekora UI SDK",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.esm.js",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "rollup -c",
|
|
20
|
+
"dev": "rollup -c -w",
|
|
21
|
+
"clean": "rm -rf dist"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@seekora-ai/search-sdk": "^1.0.2"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@seekora-ai/search-sdk": "^1.0.2",
|
|
28
|
+
"@types/node": "^20.0.0",
|
|
29
|
+
"@rollup/plugin-replace": "^5.0.5",
|
|
30
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
31
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
32
|
+
"@rollup/plugin-typescript": "^11.1.5",
|
|
33
|
+
"rollup": "^4.9.0",
|
|
34
|
+
"rollup-plugin-dts": "^6.1.0",
|
|
35
|
+
"tslib": "^2.8.1",
|
|
36
|
+
"typescript": "^5.0.0"
|
|
37
|
+
}
|
|
38
|
+
}
|