@smilodon/core 1.3.2 → 1.3.3
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.cjs +0 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +0 -82
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.umd.js +0 -82
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/renderers/contracts.ts","../../../src/utils/fenwick-tree.ts","../../../src/utils/dom-pool.ts","../../../src/utils/virtualizer.ts","../../../src/utils/custom-option-pool.ts","../../../src/utils/option-renderer.ts","../../../src/components/native-select.ts","../../../src/config/global-config.ts","../../../src/components/enhanced-select.ts","../../../src/components/select-option.ts","../../../src/utils/worker-manager.ts","../../../src/utils/telemetry.ts","../../../src/utils/security.ts","../../../src/utils/csp-styles.ts"],"sourcesContent":["import type { RendererHelpers } from '../types';\n\nexport type OptionTemplate = (item: unknown, index: number) => string;\nexport type OptionRenderer = (item: unknown, index: number, helpers: RendererHelpers) => HTMLElement;\n\nexport const createRendererHelpers = (onSelect: (item: unknown, index: number) => void): RendererHelpers => ({\n onSelect,\n getIndex: (node: Element | null) => {\n const el = node?.closest?.('[data-selectable]') as HTMLElement | null;\n if (!el) return null;\n const idx = Number(el.dataset.index);\n return Number.isFinite(idx) ? idx : null;\n },\n keyboardFocus: (index: number) => {\n const el = document.querySelector(`[data-selectable][data-index=\"${index}\"]`) as HTMLElement | null;\n el?.focus?.();\n }\n});\n\n// Fast template render path: string -> DOM via DocumentFragment, with delegation markers\nexport function renderTemplate(container: HTMLElement, items: unknown[], optionTemplate: OptionTemplate) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const wrapper = document.createElement('div');\n wrapper.innerHTML = optionTemplate(item, i);\n let el = wrapper.firstElementChild as HTMLElement | null;\n if (!el) {\n // Edge case: template produced multiple or zero root nodes; wrap children\n const wrap = document.createElement('div');\n wrap.setAttribute('data-selectable', '');\n wrap.setAttribute('data-index', String(i));\n while (wrapper.firstChild) wrap.appendChild(wrapper.firstChild);\n frag.appendChild(wrap);\n continue;\n }\n // Allow override if developer sets data-smilodon-handled=\"true\"\n if (!el.hasAttribute('data-smilodon-handled')) {\n el.setAttribute('data-selectable', '');\n el.setAttribute('data-index', String(i));\n }\n frag.appendChild(el);\n }\n container.replaceChildren(frag);\n}\n","/**\n * Fenwick Tree (Binary Indexed Tree) for O(log n) prefix sum queries and updates.\n * Used for cumulative height calculations in variable-height virtualization.\n * \n * Space: O(n)\n * Time: O(log n) for both query and update\n * \n * @see https://en.wikipedia.org/wiki/Fenwick_tree\n */\nexport class FenwickTree {\n private tree: Float64Array;\n private size: number;\n\n constructor(size: number) {\n this.size = size;\n // 1-indexed for cleaner bit manipulation\n this.tree = new Float64Array(size + 1);\n }\n\n /**\n * Add delta to index i (0-indexed input)\n * Complexity: O(log n)\n */\n add(index: number, delta: number): void {\n // Convert to 1-indexed\n let i = index + 1;\n while (i <= this.size) {\n this.tree[i] += delta;\n // Move to next relevant index: i + LSB(i)\n i += i & -i;\n }\n }\n\n /**\n * Get prefix sum from 0 to index (inclusive, 0-indexed input)\n * Complexity: O(log n)\n */\n sum(index: number): number {\n if (index < 0) return 0;\n // Convert to 1-indexed\n let i = index + 1;\n let result = 0;\n while (i > 0) {\n result += this.tree[i];\n // Move to parent: i - LSB(i)\n i -= i & -i;\n }\n return result;\n }\n\n /**\n * Get sum in range [left, right] (inclusive, 0-indexed)\n * Complexity: O(log n)\n */\n rangeSum(left: number, right: number): number {\n if (left > right) return 0;\n return this.sum(right) - (left > 0 ? this.sum(left - 1) : 0);\n }\n\n /**\n * Update value at index to newValue (handles delta internally)\n * Requires tracking current values externally or use add() directly\n * Complexity: O(log n)\n */\n update(index: number, oldValue: number, newValue: number): void {\n this.add(index, newValue - oldValue);\n }\n\n /**\n * Binary search to find the smallest index where sum(index) >= target\n * Useful for finding scroll position -> item index mapping\n * Complexity: O(log² n) or O(log n) with optimization\n * \n * @returns index (0-indexed) or -1 if not found\n */\n lowerBound(target: number): number {\n if (target <= 0) return 0;\n\n // Optimized binary search on Fenwick tree structure\n let pos = 0;\n let sum = 0;\n // Start from highest power of 2 <= size\n let bit = 1 << Math.floor(Math.log2(this.size));\n\n while (bit > 0) {\n if (pos + bit <= this.size) {\n const nextSum = sum + this.tree[pos + bit];\n if (nextSum < target) {\n pos += bit;\n sum = nextSum;\n }\n }\n bit >>= 1;\n }\n\n // Convert back to 0-indexed\n return pos;\n }\n\n /**\n * Reset all values to 0\n * Complexity: O(n)\n */\n reset(): void {\n this.tree.fill(0);\n }\n\n /**\n * Resize the tree (useful for dynamic item lists)\n * Complexity: O(n)\n */\n resize(newSize: number): void {\n if (newSize === this.size) return;\n \n const oldTree = this.tree;\n const oldSize = this.size;\n \n this.size = newSize;\n this.tree = new Float64Array(newSize + 1);\n \n // Copy existing values up to min(oldSize, newSize)\n const copySize = Math.min(oldSize, newSize);\n for (let i = 1; i <= copySize; i++) {\n this.tree[i] = oldTree[i];\n }\n }\n\n /**\n * Get current size\n */\n getSize(): number {\n return this.size;\n }\n\n /**\n * Export state for serialization (e.g., to SharedArrayBuffer)\n */\n exportState(): { size: number; tree: number[] } {\n return {\n size: this.size,\n tree: Array.from(this.tree),\n };\n }\n\n /**\n * Import state from serialization\n */\n static fromState(state: { size: number; tree: number[] }): FenwickTree {\n const ft = new FenwickTree(state.size);\n ft.tree = new Float64Array(state.tree);\n return ft;\n }\n}\n","/**\n * DOM Node Pool with LRU eviction and aggressive cleanup.\n * Reuses nodes to minimize GC pressure and layout thrashing.\n * \n * Features:\n * - LRU eviction when pool exceeds maxSize\n * - Style reset to avoid style pollution\n * - Event listener cleanup\n * - Performance telemetry integration\n */\n\ninterface PoolNode {\n node: HTMLElement;\n lastUsed: number; // performance.now() timestamp\n inUse: boolean;\n}\n\nexport interface DOMPoolOptions {\n /** Maximum pool size (default: renderedNodes + 32) */\n maxSize?: number;\n /** Factory function to create new nodes */\n factory: () => HTMLElement;\n /** Reset function called before reuse */\n reset?: (node: HTMLElement) => void;\n /** Enable performance telemetry */\n telemetry?: boolean;\n}\n\nexport class DOMPool {\n private pool: PoolNode[] = [];\n private factory: () => HTMLElement;\n private reset: (node: HTMLElement) => void;\n private maxSize: number;\n private telemetry: boolean;\n \n // Telemetry\n private hits = 0;\n private misses = 0;\n private evictions = 0;\n\n constructor(options: DOMPoolOptions) {\n this.factory = options.factory;\n this.reset = options.reset || this.defaultReset.bind(this);\n this.maxSize = options.maxSize || 64;\n this.telemetry = options.telemetry || false;\n }\n\n /**\n * Acquire a node from pool or create new one\n * Complexity: O(n) for LRU scan, amortized O(1) for small pools\n */\n acquire(): HTMLElement {\n const now = performance.now();\n\n // Find first available node\n for (let i = 0; i < this.pool.length; i++) {\n const poolNode = this.pool[i];\n if (!poolNode.inUse) {\n poolNode.inUse = true;\n poolNode.lastUsed = now;\n this.reset(poolNode.node);\n \n if (this.telemetry) this.hits++;\n return poolNode.node;\n }\n }\n\n // No available nodes, create new one\n const node = this.factory();\n this.pool.push({\n node,\n lastUsed: now,\n inUse: true,\n });\n\n if (this.telemetry) this.misses++;\n\n // Evict if pool too large\n if (this.pool.length > this.maxSize) {\n this.evictLRU();\n }\n\n return node;\n }\n\n /**\n * Release node back to pool\n * Complexity: O(n) to find node\n */\n release(node: HTMLElement): void {\n const poolNode = this.pool.find(p => p.node === node);\n if (poolNode) {\n poolNode.inUse = false;\n poolNode.lastUsed = performance.now();\n \n // Aggressive cleanup\n this.reset(poolNode.node);\n }\n }\n\n /**\n * Evict least recently used node\n * Complexity: O(n)\n */\n private evictLRU(): void {\n // Find LRU node that's not in use\n let lruIndex = -1;\n let oldestTime = Infinity;\n\n for (let i = 0; i < this.pool.length; i++) {\n const poolNode = this.pool[i];\n if (!poolNode.inUse && poolNode.lastUsed < oldestTime) {\n lruIndex = i;\n oldestTime = poolNode.lastUsed;\n }\n }\n\n if (lruIndex >= 0) {\n const evicted = this.pool.splice(lruIndex, 1)[0];\n // Full cleanup before GC\n this.deepCleanup(evicted.node);\n \n if (this.telemetry) this.evictions++;\n }\n }\n\n /**\n * Default reset: clear content, remove inline styles, remove attributes\n */\n private defaultReset(node: HTMLElement): void {\n // Clear content\n node.textContent = '';\n \n // Remove inline styles\n node.removeAttribute('style');\n \n // Remove data attributes (preserve data-index, data-selectable for delegation)\n const attrs = Array.from(node.attributes);\n for (const attr of attrs) {\n if (attr.name.startsWith('data-') && \n attr.name !== 'data-index' && \n attr.name !== 'data-selectable') {\n node.removeAttribute(attr.name);\n }\n }\n \n // Remove ARIA attributes that might pollute reuse\n const ariaAttrs = ['aria-selected', 'aria-checked', 'aria-disabled'];\n ariaAttrs.forEach(attr => node.removeAttribute(attr));\n }\n\n /**\n * Deep cleanup before eviction/destruction\n */\n private deepCleanup(node: HTMLElement): void {\n // Remove all event listeners by cloning (nuclear option)\n const clone = node.cloneNode(true) as HTMLElement;\n node.parentNode?.replaceChild(clone, node);\n \n // Clear references\n node.textContent = '';\n }\n\n /**\n * Clear entire pool\n */\n clear(): void {\n for (const poolNode of this.pool) {\n this.deepCleanup(poolNode.node);\n }\n this.pool = [];\n this.resetTelemetry();\n }\n\n /**\n * Adjust max pool size dynamically\n */\n setMaxSize(size: number): void {\n this.maxSize = size;\n // Evict excess nodes\n while (this.pool.length > this.maxSize) {\n this.evictLRU();\n }\n }\n\n /**\n * Get pool statistics\n */\n getStats() {\n const available = this.pool.filter(p => !p.inUse).length;\n const hitRate = this.hits + this.misses > 0 \n ? this.hits / (this.hits + this.misses) \n : 0;\n\n return {\n total: this.pool.length,\n available,\n inUse: this.pool.length - available,\n maxSize: this.maxSize,\n hits: this.hits,\n misses: this.misses,\n evictions: this.evictions,\n hitRate,\n };\n }\n\n /**\n * Reset telemetry counters\n */\n resetTelemetry(): void {\n this.hits = 0;\n this.misses = 0;\n this.evictions = 0;\n }\n}\n","import { FenwickTree } from './fenwick-tree.js';\nimport { DOMPool } from './dom-pool.js';\n\ntype ItemGetter = (index: number) => unknown;\n\nexport interface VirtualizerOptions {\n estimatedItemHeight: number;\n buffer: number;\n maxPoolExtra?: number; // extra nodes beyond window size\n measurementThreshold?: number; // px change to consider a height update\n enableTelemetry?: boolean; // enable pool stats\n}\n\nexport class Virtualizer {\n private container: HTMLElement;\n private itemsLength: number;\n private options: VirtualizerOptions;\n measuredHeights = new Map<number, number>();\n averageHeight: number;\n private pool: DOMPool;\n private itemGetter: ItemGetter;\n private fenwick?: FenwickTree;\n private activeNodes = new Map<number, HTMLElement>(); // index -> node mapping\n\n constructor(container: HTMLElement, itemsLength: number, itemGetter: ItemGetter, options: VirtualizerOptions) {\n this.container = container;\n this.itemsLength = itemsLength;\n this.itemGetter = itemGetter;\n this.options = options;\n this.averageHeight = options.estimatedItemHeight;\n \n // Initialize DOM pool with LRU eviction\n const maxPoolSize = Math.ceil((options.buffer * 2 + 10) * 1.5) + (options.maxPoolExtra ?? 32);\n this.pool = new DOMPool({\n maxSize: maxPoolSize,\n factory: () => {\n const div = document.createElement('div');\n div.setAttribute('data-selectable', '');\n return div;\n },\n reset: (node) => {\n // Clear content but preserve data-selectable\n node.textContent = '';\n node.removeAttribute('style');\n // Remove aria attributes\n node.removeAttribute('aria-selected');\n node.removeAttribute('aria-checked');\n },\n telemetry: options.enableTelemetry || false,\n });\n\n // Use Fenwick tree for large lists (>5000 items)\n if (itemsLength > 5000) {\n this.fenwick = new FenwickTree(itemsLength);\n // Initialize with estimated heights\n for (let i = 0; i < itemsLength; i++) {\n this.fenwick.add(i, options.estimatedItemHeight);\n }\n }\n \n this.container.style.willChange = 'transform';\n }\n\n computeWindow(scrollTop: number, viewportHeight: number) {\n const { buffer } = this.options;\n const startIndex = Math.max(Math.floor(scrollTop / this.averageHeight) - buffer, 0);\n const endIndex = Math.min(Math.ceil((scrollTop + viewportHeight) / this.averageHeight) + buffer, this.itemsLength - 1);\n const windowSize = Math.max(0, endIndex - startIndex + 1);\n \n // Adjust pool size dynamically based on window\n const newPoolSize = windowSize + (this.options.maxPoolExtra ?? 32);\n this.pool.setMaxSize(newPoolSize);\n \n return { startIndex, endIndex, windowSize };\n }\n\n cumulativeOffset(index: number): number {\n if (index <= 0) return 0;\n \n // Use Fenwick tree for O(log n) prefix sum\n if (this.fenwick) {\n return this.fenwick.sum(index - 1);\n }\n \n // Fallback: approximate using average height with sparse adjustments\n let total = 0;\n for (let i = 0; i < index; i++) {\n total += this.measuredHeights.get(i) ?? this.averageHeight;\n }\n return total;\n }\n\n acquireNode(index: number): HTMLElement {\n // Check if we already have this node active (reuse)\n const existing = this.activeNodes.get(index);\n if (existing) return existing;\n \n const node = this.pool.acquire();\n node.setAttribute('data-index', String(index));\n this.activeNodes.set(index, node);\n return node;\n }\n\n releaseNode(index: number): void {\n const node = this.activeNodes.get(index);\n if (node) {\n this.pool.release(node);\n this.activeNodes.delete(index);\n }\n }\n\n releaseExcess(activeIndices: Set<number>): void {\n // Release nodes not in active set\n for (const [index, node] of this.activeNodes) {\n if (!activeIndices.has(index)) {\n this.pool.release(node);\n this.activeNodes.delete(index);\n }\n }\n }\n\n render(startIndex: number, endIndex: number, updateNode: (node: HTMLElement, item: unknown, index: number) => void) {\n const frag = document.createDocumentFragment();\n const activeIndices = new Set<number>();\n \n for (let i = startIndex; i <= endIndex; i++) {\n const node = this.acquireNode(i);\n updateNode(node, this.itemGetter(i), i);\n frag.appendChild(node);\n activeIndices.add(i);\n \n // Measure on appear (deferred)\n queueMicrotask(() => this.measureOnAppear(node, i));\n }\n \n // Translate container by cumulative offset of startIndex\n const topOffset = this.cumulativeOffset(startIndex);\n this.container.style.transform = `translate3d(0, ${Math.round(topOffset * 100) / 100}px, 0)`;\n this.container.replaceChildren(frag);\n \n // Recycle nodes not in use\n requestAnimationFrame(() => this.releaseExcess(activeIndices));\n }\n\n measureOnAppear(node: HTMLElement, index: number) {\n const h = node.offsetHeight;\n const prev = this.measuredHeights.get(index);\n const threshold = this.options.measurementThreshold ?? 5;\n \n if (prev === undefined || Math.abs(prev - h) > threshold) {\n const oldValue = prev ?? this.averageHeight;\n this.measuredHeights.set(index, h);\n \n // Update Fenwick tree with new measurement\n if (this.fenwick) {\n this.fenwick.update(index, oldValue, h);\n }\n \n // Update running average (weighted by measured count)\n const count = this.measuredHeights.size;\n const total = Array.from(this.measuredHeights.values()).reduce((a, b) => a + b, 0);\n this.averageHeight = Math.round((total / count) * 100) / 100;\n }\n }\n\n /**\n * Get pool statistics (if telemetry enabled)\n */\n getPoolStats() {\n return this.pool.getStats();\n }\n\n /**\n * Update items length and resize Fenwick tree if needed\n */\n setItemsLength(newLength: number): void {\n this.itemsLength = newLength;\n \n if (this.fenwick) {\n this.fenwick.resize(newLength);\n } else if (newLength > 5000 && !this.fenwick) {\n // Activate Fenwick tree when crossing threshold\n this.fenwick = new FenwickTree(newLength);\n \n // Populate with existing measurements\n for (const [index, height] of this.measuredHeights) {\n this.fenwick.update(index, this.averageHeight, height);\n }\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.pool.clear();\n this.activeNodes.clear();\n this.measuredHeights.clear();\n if (this.fenwick) {\n this.fenwick.reset();\n }\n }\n}\n","/**\n * Custom Option Component Pool\n * \n * Manages lifecycle and recycling of custom option components for optimal performance.\n * Uses object pooling pattern to minimize allocation/deallocation overhead.\n */\n\nimport type { CustomOptionContract, CustomOptionContext, CustomOptionFactory } from '../types/custom-option';\n\ninterface PooledComponent {\n instance: CustomOptionContract;\n inUse: boolean;\n lastUsedIndex: number;\n}\n\n/**\n * Manages a pool of reusable custom option component instances\n */\nexport class CustomOptionPool {\n private _pool: Map<string, PooledComponent[]> = new Map();\n private _maxPoolSize: number;\n private _activeComponents: Map<number, CustomOptionContract> = new Map();\n \n constructor(maxPoolSize = 50) {\n this._maxPoolSize = maxPoolSize;\n }\n \n /**\n * Get or create a component instance for the given index\n * \n * @param factory - Factory function to create new instances\n * @param item - The data item\n * @param index - The option index\n * @param context - Context for mounting\n * @param container - DOM container for mounting\n * @returns Component instance\n */\n acquire(\n factory: CustomOptionFactory,\n item: unknown,\n index: number,\n context: CustomOptionContext,\n container: HTMLElement\n ): CustomOptionContract {\n const factoryKey = this._getFactoryKey(factory);\n \n // Try to find an available component in the pool\n const pooled = this._findAvailableComponent(factoryKey);\n \n let component: CustomOptionContract;\n \n if (pooled) {\n // Reuse pooled component\n component = pooled.instance;\n pooled.inUse = true;\n pooled.lastUsedIndex = index;\n console.log(`[CustomOptionPool] Reusing component for index ${index}`);\n } else {\n // Create new component\n try {\n component = factory(item, index);\n console.log(`[CustomOptionPool] Created new component for index ${index}`);\n \n // Add to pool if under limit\n const pool = this._pool.get(factoryKey) || [];\n if (pool.length < this._maxPoolSize) {\n pool.push({\n instance: component,\n inUse: true,\n lastUsedIndex: index\n });\n this._pool.set(factoryKey, pool);\n }\n } catch (error) {\n console.error(`[CustomOptionPool] Failed to create component:`, error);\n throw error;\n }\n }\n \n // Mount the component\n try {\n component.mountOption(container, context);\n this._activeComponents.set(index, component);\n } catch (error) {\n console.error(`[CustomOptionPool] Failed to mount component at index ${index}:`, error);\n throw error;\n }\n \n return component;\n }\n \n /**\n * Release a component back to the pool\n * \n * @param index - The index of the component to release\n */\n release(index: number): void {\n const component = this._activeComponents.get(index);\n if (!component) return;\n \n try {\n component.unmountOption();\n } catch (error) {\n console.error(`[CustomOptionPool] Failed to unmount component at index ${index}:`, error);\n }\n \n this._activeComponents.delete(index);\n \n // Mark as available in pool\n for (const pool of this._pool.values()) {\n const pooled = pool.find(p => p.instance === component);\n if (pooled) {\n pooled.inUse = false;\n console.log(`[CustomOptionPool] Released component from index ${index}`);\n break;\n }\n }\n }\n \n /**\n * Release all active components\n */\n releaseAll(): void {\n console.log(`[CustomOptionPool] Releasing ${this._activeComponents.size} active components`);\n const indices = Array.from(this._activeComponents.keys());\n indices.forEach(index => this.release(index));\n }\n \n /**\n * Update selection state for a component\n * \n * @param index - The index of the component\n * @param selected - Whether it's selected\n */\n updateSelection(index: number, selected: boolean): void {\n const component = this._activeComponents.get(index);\n if (component) {\n component.updateSelected(selected);\n }\n }\n \n /**\n * Update focused state for a component\n * \n * @param index - The index of the component\n * @param focused - Whether it has keyboard focus\n */\n updateFocused(index: number, focused: boolean): void {\n const component = this._activeComponents.get(index);\n if (component && component.updateFocused) {\n component.updateFocused(focused);\n }\n }\n \n /**\n * Get active component at index\n * \n * @param index - The option index\n * @returns The component instance or undefined\n */\n getComponent(index: number): CustomOptionContract | undefined {\n return this._activeComponents.get(index);\n }\n \n /**\n * Clear the entire pool\n */\n clear(): void {\n this.releaseAll();\n this._pool.clear();\n console.log('[CustomOptionPool] Pool cleared');\n }\n \n /**\n * Get pool statistics for debugging\n */\n getStats(): { totalPooled: number; activeComponents: number; availableComponents: number } {\n let totalPooled = 0;\n let availableComponents = 0;\n \n for (const pool of this._pool.values()) {\n totalPooled += pool.length;\n availableComponents += pool.filter(p => !p.inUse).length;\n }\n \n return {\n totalPooled,\n activeComponents: this._activeComponents.size,\n availableComponents\n };\n }\n \n /**\n * Find an available component in the pool\n */\n private _findAvailableComponent(factoryKey: string): PooledComponent | undefined {\n const pool = this._pool.get(factoryKey);\n if (!pool) return undefined;\n \n return pool.find(p => !p.inUse);\n }\n \n /**\n * Generate a unique key for a factory function\n */\n private _getFactoryKey(factory: CustomOptionFactory): string {\n // Use function name or create a symbol\n return factory.name || `factory_${factory.toString().slice(0, 50)}`;\n }\n}\n","/**\n * Option Renderer\n * \n * Unified renderer that handles both lightweight (label/value) and \n * custom component rendering with consistent performance characteristics.\n */\n\nimport type { \n CustomOptionContract, \n CustomOptionContext, \n CustomOptionFactory, \n ExtendedSelectItem \n} from '../types/custom-option';\nimport { CustomOptionPool } from './custom-option-pool';\n\nexport interface OptionRendererConfig {\n enableRecycling: boolean;\n maxPoolSize: number;\n getValue: (item: unknown) => unknown;\n getLabel: (item: unknown) => string;\n getDisabled?: (item: unknown) => boolean;\n onSelect: (index: number) => void;\n onCustomEvent?: (index: number, eventName: string, data: unknown) => void;\n onError?: (index: number, error: Error) => void;\n}\n\n/**\n * Manages rendering of both lightweight and custom component options\n */\nexport class OptionRenderer {\n private _config: OptionRendererConfig;\n private _pool: CustomOptionPool;\n private _mountedElements: Map<number, HTMLElement> = new Map();\n \n constructor(config: OptionRendererConfig) {\n this._config = config;\n this._pool = new CustomOptionPool(config.maxPoolSize);\n }\n \n /**\n * Render an option (lightweight or custom component)\n * \n * @param item - The data item\n * @param index - The option index\n * @param isSelected - Whether the option is selected\n * @param isFocused - Whether the option has keyboard focus\n * @param uniqueId - Unique ID for the select instance\n * @returns The rendered DOM element\n */\n render(\n item: unknown,\n index: number,\n isSelected: boolean,\n isFocused: boolean,\n uniqueId: string\n ): HTMLElement {\n const extendedItem = item as ExtendedSelectItem;\n const value = this._config.getValue(item);\n const label = this._config.getLabel(item);\n const isDisabled = this._config.getDisabled ? this._config.getDisabled(item) : false;\n \n // Determine if this is a custom component or lightweight option\n const hasCustomComponent = extendedItem.optionComponent && typeof extendedItem.optionComponent === 'function';\n \n if (hasCustomComponent) {\n return this._renderCustomComponent(\n item,\n index,\n value,\n label,\n isSelected,\n isFocused,\n isDisabled,\n uniqueId,\n extendedItem.optionComponent!\n );\n } else {\n return this._renderLightweightOption(\n item,\n index,\n value,\n label,\n isSelected,\n isFocused,\n isDisabled,\n uniqueId\n );\n }\n }\n \n /**\n * Update selection state for an option\n * \n * @param index - The option index\n * @param selected - Whether it's selected\n */\n updateSelection(index: number, selected: boolean): void {\n const element = this._mountedElements.get(index);\n if (!element) return;\n \n // Check if this is a custom component\n const component = this._pool.getComponent(index);\n if (component) {\n component.updateSelected(selected);\n } else {\n // Update lightweight option\n if (selected) {\n element.classList.add('selected');\n element.setAttribute('aria-selected', 'true');\n } else {\n element.classList.remove('selected');\n element.setAttribute('aria-selected', 'false');\n }\n }\n }\n \n /**\n * Update focused state for an option\n * \n * @param index - The option index\n * @param focused - Whether it has keyboard focus\n */\n updateFocused(index: number, focused: boolean): void {\n const element = this._mountedElements.get(index);\n if (!element) return;\n \n // Check if this is a custom component\n const component = this._pool.getComponent(index);\n if (component) {\n if (component.updateFocused) {\n component.updateFocused(focused);\n }\n // Also update the element's focused class for styling\n element.classList.toggle('focused', focused);\n } else {\n // Update lightweight option\n element.classList.toggle('focused', focused);\n }\n }\n \n /**\n * Unmount and cleanup an option\n * \n * @param index - The option index\n */\n unmount(index: number): void {\n // Release custom component if exists\n this._pool.release(index);\n \n // Remove from mounted elements\n this._mountedElements.delete(index);\n }\n \n /**\n * Unmount all options\n */\n unmountAll(): void {\n this._pool.releaseAll();\n this._mountedElements.clear();\n }\n \n /**\n * Get pool statistics\n */\n getStats() {\n return this._pool.getStats();\n }\n \n /**\n * Render a lightweight option (traditional label/value)\n */\n private _renderLightweightOption(\n item: unknown,\n index: number,\n value: unknown,\n label: string,\n isSelected: boolean,\n isFocused: boolean,\n isDisabled: boolean,\n uniqueId: string\n ): HTMLElement {\n const option = document.createElement('div');\n option.className = 'option';\n if (isSelected) option.classList.add('selected');\n if (isFocused) option.classList.add('focused');\n if (isDisabled) option.classList.add('disabled');\n \n option.id = `${uniqueId}-option-${index}`;\n option.textContent = label;\n option.dataset.value = String(value);\n option.dataset.index = String(index);\n option.dataset.mode = 'lightweight';\n option.setAttribute('role', 'option');\n option.setAttribute('aria-selected', String(isSelected));\n if (isDisabled) {\n option.setAttribute('aria-disabled', 'true');\n }\n \n // Click handler\n if (!isDisabled) {\n option.addEventListener('click', () => {\n this._config.onSelect(index);\n });\n }\n \n this._mountedElements.set(index, option);\n \n console.log(`[OptionRenderer] Rendered lightweight option ${index}: ${label}`);\n \n return option;\n }\n \n /**\n * Render a custom component option\n */\n private _renderCustomComponent(\n item: unknown,\n index: number,\n value: unknown,\n label: string,\n isSelected: boolean,\n isFocused: boolean,\n isDisabled: boolean,\n uniqueId: string,\n factory: CustomOptionFactory\n ): HTMLElement {\n // Create wrapper container for the custom component\n const wrapper = document.createElement('div');\n wrapper.className = 'option option-custom';\n if (isSelected) wrapper.classList.add('selected');\n if (isFocused) wrapper.classList.add('focused');\n if (isDisabled) wrapper.classList.add('disabled');\n \n wrapper.id = `${uniqueId}-option-${index}`;\n wrapper.dataset.value = String(value);\n wrapper.dataset.index = String(index);\n wrapper.dataset.mode = 'component';\n wrapper.setAttribute('role', 'option');\n wrapper.setAttribute('aria-selected', String(isSelected));\n wrapper.setAttribute('aria-label', label); // Accessibility fallback\n if (isDisabled) {\n wrapper.setAttribute('aria-disabled', 'true');\n }\n \n // Create context for the custom component\n const context: CustomOptionContext = {\n item,\n index,\n value,\n label,\n isSelected,\n isFocused,\n isDisabled,\n onSelect: (idx: number) => {\n if (!isDisabled) {\n this._config.onSelect(idx);\n }\n },\n onCustomEvent: (eventName: string, data: unknown) => {\n if (this._config.onCustomEvent) {\n this._config.onCustomEvent(index, eventName, data);\n }\n }\n };\n \n // Acquire component from pool and mount it\n try {\n const component = this._pool.acquire(factory, item, index, context, wrapper);\n \n // Get the component's root element and attach click handler to wrapper\n const componentElement = component.getElement();\n \n if (!isDisabled) {\n // Use event delegation on the wrapper\n wrapper.addEventListener('click', (e) => {\n // Only trigger if clicking within the component\n if (wrapper.contains(e.target as Node)) {\n this._config.onSelect(index);\n }\n });\n }\n \n console.log(`[OptionRenderer] Rendered custom component option ${index}: ${label}`);\n \n } catch (error) {\n console.error(`[OptionRenderer] Failed to render custom component at index ${index}:`, error);\n \n // Fallback to lightweight rendering on error\n wrapper.innerHTML = '';\n wrapper.textContent = label;\n wrapper.classList.add('component-error');\n \n if (this._config.onError) {\n this._config.onError(index, error as Error);\n }\n }\n \n this._mountedElements.set(index, wrapper);\n \n return wrapper;\n }\n}\n","import type { NativeSelectOptions, SelectEventName, SelectEventsDetailMap, RendererHelpers } from '../types';\nimport { createRendererHelpers, OptionRenderer, OptionTemplate, renderTemplate } from '../renderers/contracts';\nimport { Virtualizer } from '../utils/virtualizer';\nimport { OptionRenderer as UnifiedOptionRenderer } from '../utils/option-renderer';\nimport type { OptionRendererConfig } from '../utils/option-renderer';\n\nexport class NativeSelectElement extends HTMLElement {\n static get observedAttributes(): string[] {\n return ['placement', 'strategy', 'portal'];\n }\n\n private _options: NativeSelectOptions = {};\n private _shadow: ShadowRoot;\n private _listRoot: HTMLElement;\n private _items: unknown[] = [];\n private _helpers: RendererHelpers;\n private _virtualizer?: Virtualizer;\n private _unifiedRenderer?: UnifiedOptionRenderer;\n \n // Multi-select & interaction state\n private _selectedSet = new Set<number>(); // indices\n private _selectedItems = new Map<number, unknown>(); // index -> item\n private _activeIndex = -1;\n private _multi = false;\n private _typeBuffer = '';\n private _typeTimeout?: number;\n private _liveRegion?: HTMLElement;\n\n constructor() {\n super();\n this._shadow = this.attachShadow({ mode: 'open' });\n this._listRoot = document.createElement('div');\n this._listRoot.setAttribute('role', 'listbox');\n this._listRoot.setAttribute('tabindex', '0');\n this._shadow.appendChild(this._listRoot);\n\n // Live region for screen reader announcements\n this._liveRegion = document.createElement('div');\n this._liveRegion.setAttribute('role', 'status');\n this._liveRegion.setAttribute('aria-live', 'polite');\n this._liveRegion.style.cssText = 'position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;';\n this._shadow.appendChild(this._liveRegion);\n\n this._helpers = createRendererHelpers((item, index) => this._onSelect(item, index));\n \n // Delegated click\n this._listRoot.addEventListener('click', (e) => {\n const el = (e.target as HTMLElement).closest('[data-selectable]') as HTMLElement | null;\n if (!el) return;\n const idx = Number(el.dataset.index);\n const item = this._items[idx];\n this._onSelect(item, idx);\n });\n\n // Keyboard navigation\n this._listRoot.addEventListener('keydown', (e) => this._onKeydown(e));\n }\n\n connectedCallback() {\n // Initialize ARIA roles and open event\n this._listRoot.setAttribute('role', 'listbox');\n this._listRoot.setAttribute('aria-label', 'Options list');\n if (this._multi) this._listRoot.setAttribute('aria-multiselectable', 'true');\n this._initializeOptionRenderer();\n this._emit('open', {});\n }\n\n disconnectedCallback() {\n this._emit('close', {});\n // Cleanup unified renderer\n if (this._unifiedRenderer) {\n this._unifiedRenderer.unmountAll();\n }\n // Cleanup: remove listeners if any were added outside constructor\n if (this._typeTimeout) window.clearTimeout(this._typeTimeout);\n }\n\n private _initializeOptionRenderer(): void {\n const getValue = (item: unknown) => (item as any)?.value ?? item;\n const getLabel = (item: unknown) => (item as any)?.label ?? String(item);\n const getDisabled = (item: unknown) => (item as any)?.disabled ?? false;\n \n const rendererConfig: OptionRendererConfig = {\n enableRecycling: true,\n maxPoolSize: 100,\n getValue,\n getLabel,\n getDisabled,\n onSelect: (index: number) => {\n const item = this._items[index];\n this._onSelect(item, index);\n },\n onCustomEvent: (index: number, eventName: string, data: unknown) => {\n // Emit custom events from option components\n this.dispatchEvent(new CustomEvent('option:custom-event', {\n detail: { index, eventName, data },\n bubbles: true,\n composed: true\n }));\n },\n onError: (index: number, error: Error) => {\n console.error(`[NativeSelect] Error in option ${index}:`, error);\n this.dispatchEvent(new CustomEvent('option:mount-error', {\n detail: { index, error },\n bubbles: true,\n composed: true\n }));\n }\n };\n \n this._unifiedRenderer = new UnifiedOptionRenderer(rendererConfig);\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n switch (name) {\n case 'placement':\n this._options.placement = (newValue ?? undefined) as NativeSelectOptions['placement'];\n break;\n case 'strategy':\n this._options.strategy = (newValue ?? undefined) as NativeSelectOptions['strategy'];\n break;\n case 'portal':\n this._options.portal = newValue === 'true' ? true : newValue === 'false' ? false : undefined;\n break;\n }\n }\n\n set items(items: unknown[]) {\n this._items = items ?? [];\n // initialize virtualizer with estimated height (default 48) and buffer\n this._virtualizer = new Virtualizer(\n this._listRoot,\n this._items.length,\n (i) => this._items[i],\n { estimatedItemHeight: 48, buffer: 5 }\n );\n this.render();\n }\n\n get items() {\n return this._items;\n }\n\n set multi(value: boolean) {\n this._multi = value;\n if (value) {\n this._listRoot.setAttribute('aria-multiselectable', 'true');\n } else {\n this._listRoot.removeAttribute('aria-multiselectable');\n }\n }\n\n get multi() {\n return this._multi;\n }\n\n get selectedIndices(): number[] {\n return Array.from(this._selectedSet);\n }\n\n get selectedItems(): unknown[] {\n return Array.from(this._selectedItems.values());\n }\n\n set optionTemplate(template: OptionTemplate | undefined) {\n this._options.optionTemplate = template;\n this.render();\n }\n\n set optionRenderer(renderer: OptionRenderer | undefined) {\n this._options.optionRenderer = renderer;\n this.render();\n }\n\n /**\n * Public API: setItems() method for compatibility with EnhancedSelect\n * Accepts an array of items which can be:\n * - Simple primitives (string, number)\n * - Objects with {label, value} structure\n * - Objects with {label, value, optionComponent} for custom rendering (v1.2.0+)\n */\n setItems(items: unknown[]): void {\n this.items = items ?? [];\n }\n\n /**\n * Public API: setValue() method to programmatically select an item\n * For single select: clears selection and selects the item matching the value\n * For multi-select: adds to selection if not already selected\n */\n setValue(value: unknown): void {\n if (value === null || value === undefined || value === '') {\n // Clear selection\n this._selectedSet.clear();\n this._selectedItems.clear();\n this._activeIndex = -1;\n this.render();\n return;\n }\n\n // Find item by value\n const index = this._items.findIndex(item => {\n if (typeof item === 'object' && item !== null && 'value' in item) {\n return (item as any).value === value;\n }\n return item === value;\n });\n\n if (index >= 0) {\n const item = this._items[index];\n if (!this._multi) {\n // Single select: clear and set\n this._selectedSet.clear();\n this._selectedItems.clear();\n }\n this._selectedSet.add(index);\n this._selectedItems.set(index, item);\n this._activeIndex = index;\n this.render();\n }\n }\n\n /**\n * Public API: getValue() method to get currently selected value(s)\n * Returns single value for single-select, array for multi-select\n */\n getValue(): unknown | unknown[] {\n const values = Array.from(this._selectedItems.values()).map(item => {\n if (typeof item === 'object' && item !== null && 'value' in item) {\n return (item as any).value;\n }\n return item;\n });\n \n return this._multi ? values : (values[0] ?? null);\n }\n\n render() {\n const { optionTemplate, optionRenderer } = this._options;\n const viewportHeight = this.getBoundingClientRect().height || 300;\n const scrollTop = this.scrollTop || 0;\n \n // Update aria-activedescendant\n if (this._activeIndex >= 0) {\n this._listRoot.setAttribute('aria-activedescendant', `option-${this._activeIndex}`);\n } else {\n this._listRoot.removeAttribute('aria-activedescendant');\n }\n\n // Check if any items have custom components\n const hasCustomComponents = this._items.some(item => \n typeof item === 'object' && \n item !== null && \n Object.prototype.hasOwnProperty.call(item, 'optionComponent') &&\n typeof (item as any).optionComponent === 'function'\n );\n\n // Use unified renderer if we have custom components\n if (hasCustomComponents && this._unifiedRenderer) {\n this._listRoot.replaceChildren(); // Clear existing content\n const frag = document.createDocumentFragment();\n \n for (let i = 0; i < this._items.length; i++) {\n const item = this._items[i];\n const isSelected = this._selectedSet.has(i);\n const isFocused = this._activeIndex === i;\n \n const optionElement = this._unifiedRenderer.render(\n item,\n i,\n isSelected,\n isFocused,\n `native-${this.getAttribute('id') || 'default'}`\n );\n \n frag.appendChild(optionElement);\n }\n \n this._listRoot.appendChild(frag);\n return;\n }\n\n // Fall back to original rendering logic for lightweight options\n if (this._virtualizer) {\n const { startIndex, endIndex } = this._virtualizer.computeWindow(scrollTop, viewportHeight);\n this._virtualizer.render(startIndex, endIndex, (node, item, i) => {\n this._applyOptionAttrs(node, i);\n if (optionRenderer) {\n const el = optionRenderer(item, i, this._helpers);\n // replace node contents\n node.replaceChildren(el);\n } else if (optionTemplate) {\n const wrapper = document.createElement('div');\n wrapper.innerHTML = optionTemplate(item, i);\n const el = wrapper.firstElementChild as HTMLElement | null;\n node.replaceChildren(el ?? document.createTextNode(String(item)));\n } else {\n // Handle {label, value} objects or primitives\n const displayText = (typeof item === 'object' && item !== null && 'label' in item)\n ? String((item as any).label)\n : String(item);\n node.textContent = displayText;\n }\n });\n return;\n }\n const frag = document.createDocumentFragment();\n for (let i = 0; i < this._items.length; i++) {\n const item = this._items[i];\n if (optionRenderer) {\n const el = optionRenderer(item, i, this._helpers);\n if (!el.hasAttribute('data-selectable')) {\n el.setAttribute('data-selectable', '');\n el.setAttribute('data-index', String(i));\n }\n this._applyOptionAttrs(el, i);\n frag.appendChild(el);\n } else if (optionTemplate) {\n // Fast path: render all via DocumentFragment in one call\n renderTemplate(this._listRoot, this._items, optionTemplate);\n // Apply ARIA attrs after template render\n this._applyAriaToAll();\n return; // rendering complete\n } else {\n const el = document.createElement('div');\n // Handle {label, value} objects or primitives\n const displayText = (typeof item === 'object' && item !== null && 'label' in item)\n ? String((item as any).label)\n : String(item);\n el.textContent = displayText;\n el.setAttribute('data-selectable', '');\n el.setAttribute('data-index', String(i));\n this._applyOptionAttrs(el, i);\n frag.appendChild(el);\n }\n }\n this._listRoot.replaceChildren(frag);\n }\n\n private _applyOptionAttrs(node: HTMLElement, index: number) {\n node.setAttribute('role', 'option');\n node.id = `option-${index}`;\n if (this._selectedSet.has(index)) {\n node.setAttribute('aria-selected', 'true');\n } else {\n node.setAttribute('aria-selected', 'false');\n }\n }\n\n private _applyAriaToAll() {\n const children = Array.from(this._listRoot.children) as HTMLElement[];\n for (const child of children) {\n const idx = Number(child.dataset.index);\n if (Number.isFinite(idx)) this._applyOptionAttrs(child, idx);\n }\n }\n\n private _emit<K extends SelectEventName>(name: K, detail: SelectEventsDetailMap[K]) {\n this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true }));\n }\n\n // Multi-select and interaction methods\n private _onSelect(item: unknown, index: number) {\n if (this._multi) {\n if (this._selectedSet.has(index)) {\n this._selectedSet.delete(index);\n this._selectedItems.delete(index);\n } else {\n this._selectedSet.add(index);\n this._selectedItems.set(index, item);\n }\n } else {\n this._selectedSet.clear();\n this._selectedItems.clear();\n this._selectedSet.add(index);\n this._selectedItems.set(index, item);\n }\n this._activeIndex = index;\n this.render();\n \n // Emit with all required fields\n const selected = this._selectedSet.has(index);\n const value = (item as any)?.value ?? item;\n const label = (item as any)?.label ?? String(item);\n \n this._emit('select', { \n item, \n index, \n value,\n label,\n selected,\n multi: this._multi \n });\n \n // Emit 'change' event for better React compatibility\n this._emit('change', { \n selectedItems: Array.from(this._selectedItems.values()),\n selectedValues: Array.from(this._selectedItems.values()).map(i => (i as any)?.value ?? i),\n selectedIndices: Array.from(this._selectedSet)\n });\n \n this._announce(`Selected ${label}`);\n }\n\n private _onKeydown(e: KeyboardEvent) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this._moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._moveActive(-1);\n break;\n case 'Home':\n e.preventDefault();\n this._setActive(0);\n break;\n case 'End':\n e.preventDefault();\n this._setActive(this._items.length - 1);\n break;\n case 'PageDown':\n e.preventDefault();\n this._moveActive(10);\n break;\n case 'PageUp':\n e.preventDefault();\n this._moveActive(-10);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this._activeIndex >= 0) {\n const item = this._items[this._activeIndex];\n this._onSelect(item, this._activeIndex);\n }\n break;\n case 'Escape':\n e.preventDefault();\n this._emit('close', {});\n break;\n default:\n // Type-ahead buffer\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n this._onType(e.key);\n }\n break;\n }\n }\n\n private _moveActive(delta: number) {\n const next = Math.max(0, Math.min(this._items.length - 1, this._activeIndex + delta));\n this._setActive(next);\n }\n\n private _setActive(index: number) {\n this._activeIndex = index;\n this.render();\n this._scrollToActive();\n this._announce(`Navigated to ${String(this._items[index])}`);\n }\n\n private _scrollToActive() {\n const el = this._shadow.getElementById(`option-${this._activeIndex}`);\n el?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n\n private _onType(char: string) {\n if (this._typeTimeout) window.clearTimeout(this._typeTimeout);\n this._typeBuffer += char.toLowerCase();\n this._typeTimeout = window.setTimeout(() => {\n this._typeBuffer = '';\n }, 400);\n \n // Find first matching item\n const match = this._items.findIndex((item) => String(item).toLowerCase().startsWith(this._typeBuffer));\n if (match >= 0) {\n this._setActive(match);\n }\n }\n\n private _announce(msg: string) {\n if (this._liveRegion) {\n this._liveRegion.textContent = msg;\n setTimeout(() => {\n if (this._liveRegion) this._liveRegion.textContent = '';\n }, 1000);\n }\n }\n\n // Focus management\n focus() {\n this._listRoot.focus();\n }\n}\n\ncustomElements.define('smilodon-select', NativeSelectElement);\n","/**\n * Global Configuration System for Select Components\n * Allows users to define default behaviors that can be overridden at component level\n */\n\nexport interface ScrollToSelectedConfig {\n /** Whether to scroll to selected item when dropdown opens/closes */\n enabled: boolean;\n /** Which selected item to scroll to in multi-select mode: 'first' | 'last' */\n multiSelectTarget: 'first' | 'last';\n /** Scroll behavior */\n behavior?: ScrollBehavior;\n /** Scroll block alignment */\n block?: ScrollLogicalPosition;\n}\n\nexport interface LoadMoreConfig {\n /** Enable load more functionality */\n enabled: boolean;\n /** Number of items to load per increment */\n itemsPerLoad: number;\n /** Threshold (in pixels from bottom) to trigger auto-load */\n threshold?: number;\n /** Show loading indicator */\n showLoader?: boolean;\n}\n\nexport interface BusyBucketConfig {\n /** Enable busy/loading state bucket */\n enabled: boolean;\n /** Show spinner in bucket */\n showSpinner?: boolean;\n /** Custom loading message */\n message?: string;\n /** Minimum display time (ms) to prevent flashing */\n minDisplayTime?: number;\n}\n\nexport interface ExpandableConfig {\n /** Enable expandable dropdown height */\n enabled: boolean;\n /** Height when collapsed (default) */\n collapsedHeight?: string;\n /** Height when expanded */\n expandedHeight?: string;\n /** Label for the expand button */\n expandLabel?: string;\n /** Label for the collapse button */\n collapseLabel?: string;\n}\n\nexport interface SelectionConfig {\n /** Single or multi-select mode */\n mode: 'single' | 'multi';\n /** Allow deselection in single-select mode */\n allowDeselect?: boolean;\n /** Maximum selections in multi-select (0 = unlimited) */\n maxSelections?: number;\n /** Show remove button on selected options in multi-select */\n showRemoveButton?: boolean;\n /** Close dropdown after selection in single-select */\n closeOnSelect?: boolean;\n}\n\nexport interface StyleConfig {\n /** Container styles */\n container?: Partial<CSSStyleDeclaration>;\n /** Dropdown styles */\n dropdown?: Partial<CSSStyleDeclaration>;\n /** Option item styles */\n option?: Partial<CSSStyleDeclaration>;\n /** Selected option styles */\n selectedOption?: Partial<CSSStyleDeclaration>;\n /** Disabled option styles */\n disabledOption?: Partial<CSSStyleDeclaration>;\n /** Hover option styles */\n hoverOption?: Partial<CSSStyleDeclaration>;\n /** Input field styles */\n input?: Partial<CSSStyleDeclaration>;\n /** Loading indicator styles */\n loader?: Partial<CSSStyleDeclaration>;\n /** Custom CSS class names */\n classNames?: {\n container?: string;\n dropdown?: string;\n option?: string;\n selectedOption?: string;\n disabledOption?: string;\n input?: string;\n loader?: string;\n removeButton?: string;\n };\n}\n\nexport interface ServerSideConfig {\n /** Enable server-side data management */\n enabled: boolean;\n /** Initial selected value(s) from server */\n initialSelectedValues?: unknown[];\n /** Initial selected indices from server */\n initialSelectedIndices?: number[];\n /** Function to fetch pre-selected items not in current page */\n fetchSelectedItems?: (values: unknown[]) => Promise<unknown[]>;\n /** Value accessor function */\n getValueFromItem?: (item: unknown) => unknown;\n /** Label accessor function */\n getLabelFromItem?: (item: unknown) => string;\n}\n\nexport interface InfiniteScrollConfig {\n /** Enable infinite scroll */\n enabled: boolean;\n /** Page size for pagination */\n pageSize: number;\n /** Initial page */\n initialPage?: number;\n /** Cache loaded pages */\n cachePages?: boolean;\n /** Maximum cached pages (LRU eviction) */\n maxCachedPages?: number;\n /** Preload adjacent pages */\n preloadAdjacent?: boolean;\n /** Scroll restoration strategy for selected items on distant pages */\n scrollRestoration?: 'auto' | 'manual' | 'disabled';\n}\n\nexport interface CallbackConfig {\n /** Called when option is selected/deselected */\n onSelect?: (data: { item: unknown; index: number; value: unknown; label: string; selected: boolean }) => void;\n /** Called when dropdown opens */\n onOpen?: () => void;\n /** Called when dropdown closes */\n onClose?: () => void;\n /** Called when search query changes */\n onSearch?: (query: string) => void;\n /** Called when more items are loaded */\n onLoadMore?: (page: number) => void;\n /** Called when selection changes */\n onChange?: (selectedItems: unknown[], selectedValues: unknown[]) => void;\n /** Called on error */\n onError?: (error: Error) => void;\n}\n\nexport interface GlobalSelectConfig {\n /** Selection behavior */\n selection: SelectionConfig;\n /** Scroll to selected configuration */\n scrollToSelected: ScrollToSelectedConfig;\n /** Load more configuration */\n loadMore: LoadMoreConfig;\n /** Busy bucket configuration */\n busyBucket: BusyBucketConfig;\n /** Style customization */\n styles: StyleConfig;\n /** Server-side configuration */\n serverSide: ServerSideConfig;\n /** Infinite scroll configuration */\n infiniteScroll: InfiniteScrollConfig;\n /** Expandable dropdown configuration */\n expandable: ExpandableConfig;\n /** Callbacks */\n callbacks: CallbackConfig;\n /** Enable/disable entire component */\n enabled: boolean;\n /** Enable search/filter */\n searchable?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Virtualization */\n virtualize?: boolean;\n /** Estimated item height for virtualization */\n estimatedItemHeight?: number;\n}\n\n/**\n * Default global configuration\n */\nconst defaultConfig: GlobalSelectConfig = {\n selection: {\n mode: 'single',\n allowDeselect: false,\n maxSelections: 0,\n showRemoveButton: true,\n closeOnSelect: true,\n },\n scrollToSelected: {\n enabled: true,\n multiSelectTarget: 'first',\n behavior: 'smooth',\n block: 'nearest',\n },\n loadMore: {\n enabled: false,\n itemsPerLoad: 3,\n threshold: 100,\n showLoader: true,\n },\n busyBucket: {\n enabled: true,\n showSpinner: true,\n message: 'Loading...',\n minDisplayTime: 200,\n },\n styles: {\n classNames: {},\n },\n serverSide: {\n enabled: false,\n getValueFromItem: (item: unknown) => (item as any)?.value ?? item,\n getLabelFromItem: (item: unknown) => (item as any)?.label ?? String(item),\n },\n infiniteScroll: {\n enabled: false,\n pageSize: 20,\n initialPage: 1,\n cachePages: true,\n maxCachedPages: 10,\n preloadAdjacent: true,\n scrollRestoration: 'auto',\n },\n expandable: {\n enabled: false,\n collapsedHeight: '300px',\n expandedHeight: '500px',\n expandLabel: 'Show more',\n collapseLabel: 'Show less',\n },\n callbacks: {},\n enabled: true,\n searchable: false,\n placeholder: 'Select an option...',\n virtualize: true,\n estimatedItemHeight: 48,\n};\n\n/**\n * Global configuration instance\n */\nclass SelectConfigManager {\n private config: GlobalSelectConfig;\n\n constructor() {\n this.config = this.deepClone(defaultConfig);\n }\n\n /**\n * Get current global configuration\n */\n getConfig(): Readonly<GlobalSelectConfig> {\n return this.config;\n }\n\n /**\n * Update global configuration (deep merge)\n */\n updateConfig(updates: Partial<GlobalSelectConfig>): void {\n this.config = this.deepMerge(this.config, updates);\n }\n\n /**\n * Reset to default configuration\n */\n resetConfig(): void {\n this.config = this.deepClone(defaultConfig);\n }\n\n /**\n * Merge component-level config with global config\n * Component-level config takes precedence\n */\n mergeWithComponentConfig(componentConfig: Partial<GlobalSelectConfig>): GlobalSelectConfig {\n return this.deepMerge(this.deepClone(this.config), componentConfig);\n }\n\n private deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n\n private deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const result = { ...target };\n \n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n \n if (sourceValue && typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n result[key] = this.deepMerge(\n targetValue && typeof targetValue === 'object' ? targetValue : {},\n sourceValue\n ) as any;\n } else {\n result[key] = sourceValue as any;\n }\n }\n }\n \n return result;\n }\n}\n\n/**\n * Singleton instance\n */\nexport const selectConfig = new SelectConfigManager();\n\n/**\n * Helper function to configure select globally\n */\nexport function configureSelect(config: Partial<GlobalSelectConfig>): void {\n selectConfig.updateConfig(config);\n}\n\n/**\n * Helper function to reset select configuration\n */\nexport function resetSelectConfig(): void {\n selectConfig.resetConfig();\n}\n","/**\n * Enhanced Select Component\n * Implements all advanced features: infinite scroll, load more, busy state, \n * server-side selection, and full customization\n */\n\nimport type { GlobalSelectConfig } from '../config/global-config';\nimport { selectConfig } from '../config/global-config';\nimport type { SelectEventName, SelectEventsDetailMap, GroupedItem } from '../types';\nimport { SelectOption } from './select-option';\n\ninterface PageCache {\n [page: number]: unknown[];\n}\n\ninterface SelectState {\n isOpen: boolean;\n isBusy: boolean;\n isSearching: boolean;\n currentPage: number;\n totalPages: number;\n selectedIndices: Set<number>;\n selectedItems: Map<number, unknown>;\n activeIndex: number;\n searchQuery: string;\n loadedItems: unknown[];\n groupedItems: GroupedItem[];\n preserveScrollPosition: boolean;\n lastScrollPosition: number;\n lastNotifiedQuery: string | null;\n lastNotifiedResultCount: number;\n isExpanded: boolean;\n}\n\nexport class EnhancedSelect extends HTMLElement {\n private _config: GlobalSelectConfig;\n private _shadow: ShadowRoot;\n private _container: HTMLElement;\n private _inputContainer: HTMLElement;\n private _input: HTMLInputElement;\n private _dropdown: HTMLElement;\n private _optionsContainer: HTMLElement;\n private _loadMoreTrigger?: HTMLElement;\n private _busyBucket?: HTMLElement;\n private _liveRegion?: HTMLElement;\n private _state: SelectState;\n private _pageCache: PageCache = {};\n private _resizeObserver?: ResizeObserver;\n private _intersectionObserver?: IntersectionObserver;\n private _busyTimeout?: number;\n private _searchTimeout?: number;\n private _typeBuffer = '';\n private _typeTimeout?: number;\n private _uniqueId: string;\n private _hasError = false;\n private _errorMessage = '';\n private _boundArrowClick: ((e: Event) => void) | null = null;\n private _arrowContainer?: HTMLElement;\n\n constructor() {\n super();\n console.log('[EnhancedSelect] Constructor called');\n \n this._shadow = this.attachShadow({ mode: 'open' });\n console.log('[EnhancedSelect] Shadow root attached:', this._shadow);\n this._uniqueId = `enhanced-select-${Math.random().toString(36).substr(2, 9)}`;\n \n // Merge global config with component-level config\n this._config = selectConfig.getConfig() as GlobalSelectConfig;\n console.log('[EnhancedSelect] Config loaded');\n \n // Initialize state\n this._state = {\n isOpen: false,\n isBusy: false,\n isSearching: false,\n currentPage: this._config.infiniteScroll.initialPage || 1,\n totalPages: 1,\n selectedIndices: new Set(),\n selectedItems: new Map(),\n activeIndex: -1,\n searchQuery: '',\n loadedItems: [],\n groupedItems: [],\n preserveScrollPosition: false,\n lastScrollPosition: 0,\n lastNotifiedQuery: null,\n lastNotifiedResultCount: 0,\n isExpanded: false,\n };\n console.log('[EnhancedSelect] State initialized');\n \n // Create DOM structure\n this._container = this._createContainer();\n console.log('[EnhancedSelect] Container created:', this._container);\n this._inputContainer = this._createInputContainer();\n console.log('[EnhancedSelect] Input container created');\n this._input = this._createInput();\n console.log('[EnhancedSelect] Input created:', this._input);\n this._arrowContainer = this._createArrowContainer();\n console.log('[EnhancedSelect] Arrow container created');\n this._dropdown = this._createDropdown();\n console.log('[EnhancedSelect] Dropdown created');\n this._optionsContainer = this._createOptionsContainer();\n console.log('[EnhancedSelect] Options container created');\n this._liveRegion = this._createLiveRegion();\n console.log('[EnhancedSelect] Live region created');\n \n // Initialize styles BEFORE assembling DOM (order matters in shadow DOM)\n this._initializeStyles();\n console.log('[EnhancedSelect] Styles initialized');\n this._assembleDOM();\n console.log('[EnhancedSelect] DOM assembled');\n this._attachEventListeners();\n console.log('[EnhancedSelect] Event listeners attached');\n this._initializeObservers();\n console.log('[EnhancedSelect] Observers initialized');\n console.log('[EnhancedSelect] Constructor complete, shadow DOM children:', this._shadow.children.length);\n }\n\n connectedCallback(): void {\n console.log('[EnhancedSelect] connectedCallback called');\n \n // WORKAROUND: Force display style on host element for Angular compatibility\n // Angular's rendering seems to not apply :host styles correctly in some cases\n // Must be done in connectedCallback when element is attached to DOM\n this.style.display = 'block';\n this.style.width = '100%';\n console.log('[EnhancedSelect] Forced host display styles');\n \n // Load initial data if server-side is enabled\n if (this._config.serverSide.enabled && this._config.serverSide.initialSelectedValues) {\n this._loadInitialSelectedItems();\n }\n \n // Emit open event if configured to start open\n if (this._config.callbacks.onOpen) {\n this._config.callbacks.onOpen();\n }\n console.log('[EnhancedSelect] connectedCallback complete');\n }\n\n disconnectedCallback(): void {\n // Cleanup observers\n this._resizeObserver?.disconnect();\n this._intersectionObserver?.disconnect();\n if (this._busyTimeout) clearTimeout(this._busyTimeout);\n if (this._typeTimeout) clearTimeout(this._typeTimeout);\n if (this._searchTimeout) clearTimeout(this._searchTimeout);\n \n // Cleanup arrow click listener\n if (this._boundArrowClick && this._arrowContainer) {\n this._arrowContainer.removeEventListener('click', this._boundArrowClick);\n }\n }\n\n private _createContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'select-container';\n \n if (this._config.styles.classNames?.container) {\n container.className += ' ' + this._config.styles.classNames.container;\n }\n \n if (this._config.styles.container) {\n Object.assign(container.style, this._config.styles.container);\n }\n \n return container;\n }\n\n private _createInputContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'input-container';\n return container;\n }\n\n private _createInput(): HTMLInputElement {\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'select-input';\n input.placeholder = this._config.placeholder || 'Select an option...';\n input.disabled = !this._config.enabled;\n input.readOnly = !this._config.searchable;\n \n // Update readonly when input is focused if searchable\n input.addEventListener('focus', () => {\n if (this._config.searchable) {\n input.readOnly = false;\n }\n });\n \n if (this._config.styles.classNames?.input) {\n input.className += ' ' + this._config.styles.classNames.input;\n }\n \n if (this._config.styles.input) {\n Object.assign(input.style, this._config.styles.input);\n }\n \n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-expanded', 'false');\n input.setAttribute('aria-haspopup', 'listbox');\n input.setAttribute('aria-autocomplete', this._config.searchable ? 'list' : 'none');\n \n return input;\n }\n\n private _createDropdown(): HTMLElement {\n const dropdown = document.createElement('div');\n dropdown.className = 'select-dropdown';\n dropdown.style.display = 'none';\n \n if (this._config.styles.classNames?.dropdown) {\n dropdown.className += ' ' + this._config.styles.classNames.dropdown;\n }\n \n if (this._config.styles.dropdown) {\n Object.assign(dropdown.style, this._config.styles.dropdown);\n }\n \n dropdown.setAttribute('role', 'listbox');\n if (this._config.selection.mode === 'multi') {\n dropdown.setAttribute('aria-multiselectable', 'true');\n }\n \n return dropdown;\n }\n\n private _createOptionsContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'options-container';\n return container;\n }\n\n private _createLiveRegion(): HTMLElement {\n const liveRegion = document.createElement('div');\n liveRegion.setAttribute('role', 'status');\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.style.cssText = 'position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;';\n return liveRegion;\n }\n\n private _createArrowContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'dropdown-arrow-container';\n container.innerHTML = `\n <svg class=\"dropdown-arrow\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n return container;\n }\n\n private _assembleDOM(): void {\n console.log('[EnhancedSelect] _assembleDOM: Starting DOM assembly');\n console.log('[EnhancedSelect] _assembleDOM: Elements to assemble:', {\n inputContainer: !!this._inputContainer,\n input: !!this._input,\n arrowContainer: !!this._arrowContainer,\n container: !!this._container,\n dropdown: !!this._dropdown,\n optionsContainer: !!this._optionsContainer,\n shadow: !!this._shadow,\n liveRegion: !!this._liveRegion\n });\n \n this._inputContainer.appendChild(this._input);\n console.log('[EnhancedSelect] _assembleDOM: Appended input to inputContainer');\n \n if (this._arrowContainer) {\n this._inputContainer.appendChild(this._arrowContainer);\n console.log('[EnhancedSelect] _assembleDOM: Appended arrowContainer to inputContainer');\n }\n \n this._container.appendChild(this._inputContainer);\n console.log('[EnhancedSelect] _assembleDOM: Appended inputContainer to container');\n \n this._dropdown.appendChild(this._optionsContainer);\n console.log('[EnhancedSelect] _assembleDOM: Appended optionsContainer to dropdown');\n \n this._container.appendChild(this._dropdown);\n console.log('[EnhancedSelect] _assembleDOM: Appended dropdown to container');\n \n this._shadow.appendChild(this._container);\n console.log('[EnhancedSelect] _assembleDOM: Appended container to shadow root');\n \n if (this._liveRegion) {\n this._shadow.appendChild(this._liveRegion);\n console.log('[EnhancedSelect] _assembleDOM: Appended liveRegion to shadow root');\n }\n \n console.log('[EnhancedSelect] _assembleDOM: Shadow root children count:', this._shadow.children.length);\n console.log('[EnhancedSelect] _assembleDOM: Shadow root HTML length:', this._shadow.innerHTML.length);\n \n // Set ARIA relationships\n const listboxId = `${this._uniqueId}-listbox`;\n this._dropdown.id = listboxId;\n this._input.setAttribute('aria-controls', listboxId);\n this._input.setAttribute('aria-owns', listboxId);\n console.log('[EnhancedSelect] _assembleDOM: Set ARIA relationships with listboxId:', listboxId);\n }\n\n private _initializeStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n :host {\n display: block;\n position: relative;\n width: 100%;\n }\n \n .select-container {\n position: relative;\n width: 100%;\n }\n \n .input-container {\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n padding: 6px 52px 6px 8px;\n min-height: 44px;\n background: white;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n box-sizing: border-box;\n transition: all 0.2s ease;\n }\n \n .input-container:focus-within {\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n }\n \n /* Gradient separator before arrow */\n .input-container::after {\n content: '';\n position: absolute;\n top: 50%;\n right: 40px;\n transform: translateY(-50%);\n width: 1px;\n height: 60%;\n background: linear-gradient(\n to bottom,\n transparent 0%,\n rgba(0, 0, 0, 0.1) 20%,\n rgba(0, 0, 0, 0.1) 80%,\n transparent 100%\n );\n pointer-events: none;\n z-index: 1;\n }\n \n .dropdown-arrow-container {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s ease;\n border-radius: 0 4px 4px 0;\n z-index: 2;\n }\n \n .dropdown-arrow-container:hover {\n background-color: rgba(102, 126, 234, 0.08);\n }\n \n .dropdown-arrow {\n width: 16px;\n height: 16px;\n color: #667eea;\n transition: transform 0.2s ease, color 0.2s ease;\n transform: translateY(0);\n }\n \n .dropdown-arrow-container:hover .dropdown-arrow {\n color: #667eea;\n }\n \n .dropdown-arrow.open {\n transform: rotate(180deg);\n }\n \n .select-input {\n flex: 1;\n min-width: 120px;\n padding: 4px;\n border: none;\n font-size: 14px;\n line-height: 1.5;\n color: #1f2937;\n background: transparent;\n box-sizing: border-box;\n outline: none;\n }\n \n .select-input::placeholder {\n color: #9ca3af;\n }\n \n .selection-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n margin: 2px;\n background: #667eea;\n color: white;\n border-radius: 4px;\n font-size: 13px;\n line-height: 1;\n }\n \n .badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n margin-left: 4px;\n background: rgba(255, 255, 255, 0.3);\n border: none;\n border-radius: 50%;\n color: white;\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n transition: background 0.2s;\n }\n \n .badge-remove:hover {\n background: rgba(255, 255, 255, 0.5);\n }\n \n .select-input:disabled {\n background-color: var(--select-disabled-bg, #f5f5f5);\n cursor: not-allowed;\n }\n \n .select-dropdown {\n position: absolute;\n scroll-behavior: smooth;\n top: 100%;\n left: 0;\n right: 0;\n margin-top: 4px;\n max-height: 300px;\n overflow: hidden;\n background: var(--select-dropdown-bg, white);\n border: 1px solid var(--select-dropdown-border, #ccc);\n border-radius: var(--select-border-radius, 4px);\n box-shadow: var(--select-dropdown-shadow, 0 4px 6px rgba(0,0,0,0.1));\n z-index: var(--select-dropdown-z-index, 1000);\n }\n \n .options-container {\n position: relative;\n max-height: 300px;\n overflow: auto;\n transition: opacity 0.2s ease-in-out;\n }\n\n .option {\n padding: 8px 12px;\n cursor: pointer;\n color: inherit;\n transition: background-color 0.15s ease;\n user-select: none;\n }\n\n .option:hover {\n background-color: #f3f4f6;\n }\n\n .option.selected {\n background-color: #e0e7ff;\n color: #4338ca;\n font-weight: 500;\n }\n\n .option.active {\n background-color: #f3f4f6;\n }\n \n .load-more-container {\n padding: 12px;\n text-align: center;\n border-top: 1px solid var(--select-divider-color, #e0e0e0);\n }\n \n .load-more-button {\n padding: 8px 16px;\n border: 1px solid var(--select-button-border, #1976d2);\n background: var(--select-button-bg, white);\n color: var(--select-button-color, #1976d2);\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: all 0.2s ease;\n }\n \n .load-more-button:hover {\n background: var(--select-button-hover-bg, #1976d2);\n color: var(--select-button-hover-color, white);\n }\n \n .load-more-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .busy-bucket {\n padding: 16px;\n text-align: center;\n color: var(--select-busy-color, #666);\n }\n \n .spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 2px solid var(--select-spinner-color, #ccc);\n border-top-color: var(--select-spinner-active-color, #1976d2);\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n }\n \n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n \n .empty-state {\n padding: 24px;\n text-align: center;\n color: var(--select-empty-color, #999);\n }\n \n .searching-state {\n padding: 24px;\n text-align: center;\n color: #667eea;\n font-style: italic;\n animation: pulse 1.5s ease-in-out infinite;\n }\n \n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n \n /* Error states */\n .select-input[aria-invalid=\"true\"] {\n border-color: var(--select-error-border, #dc2626);\n }\n \n .select-input[aria-invalid=\"true\"]:focus {\n border-color: var(--select-error-border, #dc2626);\n box-shadow: 0 0 0 2px var(--select-error-shadow, rgba(220, 38, 38, 0.1));\n outline-color: var(--select-error-border, #dc2626);\n }\n \n /* Accessibility: Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n }\n \n /* Accessibility: Dark mode */\n @media (prefers-color-scheme: dark) {\n .select-input {\n background: var(--select-dark-bg, #1f2937);\n color: var(--select-dark-text, #f9fafb);\n border-color: var(--select-dark-border, #4b5563);\n }\n \n .select-dropdown {\n background: var(--select-dark-dropdown-bg, #1f2937);\n border-color: var(--select-dark-dropdown-border, #4b5563);\n color: var(--select-dark-text, #f9fafb);\n }\n \n .option:hover {\n background-color: var(--select-dark-option-hover-bg, #374151);\n }\n \n .option.selected {\n background-color: var(--select-dark-option-selected-bg, #3730a3);\n color: var(--select-dark-option-selected-text, #e0e7ff);\n }\n \n .option.active {\n background-color: var(--select-dark-option-active-bg, #374151);\n }\n \n .busy-bucket {\n color: var(--select-dark-busy-color, #9ca3af);\n }\n }\n \n /* Accessibility: High contrast mode */\n @media (prefers-contrast: high) {\n .select-input:focus {\n outline-width: 3px;\n outline-color: Highlight;\n }\n \n .select-input {\n border-width: 2px;\n }\n }\n \n /* Touch targets (WCAG 2.5.5) */\n .load-more-button,\n select-option {\n min-height: 44px;\n }\n `;\n console.log('[EnhancedSelect] _initializeStyles: Created style element, content length:', style.textContent?.length || 0);\n console.log('[EnhancedSelect] _initializeStyles: Shadow root children BEFORE:', this._shadow.children.length);\n \n // Insert as first child to ensure styles are processed first\n if (this._shadow.firstChild) {\n this._shadow.insertBefore(style, this._shadow.firstChild);\n } else {\n this._shadow.appendChild(style);\n }\n \n console.log('[EnhancedSelect] _initializeStyles: Style inserted, shadow root children AFTER:', this._shadow.children.length);\n console.log('[EnhancedSelect] _initializeStyles: Shadow root has style element:', !!this._shadow.querySelector('style'));\n console.log('[EnhancedSelect] _initializeStyles: Style sheet rules:', style.sheet?.cssRules?.length || 'NOT PARSED');\n }\n\n private _attachEventListeners(): void {\n // Arrow click handler\n if (this._arrowContainer) {\n this._boundArrowClick = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n \n const wasOpen = this._state.isOpen;\n this._state.isOpen = !this._state.isOpen;\n this._updateDropdownVisibility();\n this._updateArrowRotation();\n \n if (this._state.isOpen && this._config.callbacks.onOpen) {\n this._config.callbacks.onOpen();\n } else if (!this._state.isOpen && this._config.callbacks.onClose) {\n this._config.callbacks.onClose();\n }\n \n // Scroll to selected when opening\n if (!wasOpen && this._state.isOpen && this._state.selectedIndices.size > 0) {\n setTimeout(() => this._scrollToSelected(), 50);\n }\n };\n this._arrowContainer.addEventListener('click', this._boundArrowClick);\n }\n \n // Input container click - prevent event from reaching document listener\n this._container.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n \n // Input focus/blur\n this._input.addEventListener('focus', () => this._handleOpen());\n this._input.addEventListener('blur', (e) => {\n // Delay to allow option click\n setTimeout(() => {\n if (!this._dropdown.contains(document.activeElement)) {\n this._handleClose();\n }\n }, 200);\n });\n \n // Input search\n this._input.addEventListener('input', (e) => {\n if (!this._config.searchable) return;\n const query = (e.target as HTMLInputElement).value;\n this._handleSearch(query);\n });\n \n // Keyboard navigation\n this._input.addEventListener('keydown', (e) => this._handleKeydown(e));\n \n // Click outside to close\n document.addEventListener('click', (e) => {\n const target = e.target as Node;\n // Check if click is outside shadow root\n if (!this._shadow.contains(target) && !this._container.contains(target)) {\n this._handleClose();\n }\n });\n }\n\n private _initializeObservers(): void {\n // Disconnect existing observer if any\n if (this._intersectionObserver) {\n this._intersectionObserver.disconnect();\n this._intersectionObserver = undefined;\n }\n\n // Intersection observer for infinite scroll\n if (this._config.infiniteScroll.enabled) {\n this._intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!this._state.isBusy) {\n this._loadMoreItems();\n }\n }\n });\n },\n { threshold: 0.1 }\n );\n }\n }\n\n private async _loadInitialSelectedItems(): Promise<void> {\n if (!this._config.serverSide.fetchSelectedItems || !this._config.serverSide.initialSelectedValues) {\n return;\n }\n \n this._setBusy(true);\n \n try {\n const items = await this._config.serverSide.fetchSelectedItems(\n this._config.serverSide.initialSelectedValues\n );\n \n // Add to state\n items.forEach((item, index) => {\n this._state.selectedItems.set(index, item);\n this._state.selectedIndices.add(index);\n });\n \n this._updateInputDisplay();\n } catch (error) {\n this._handleError(error as Error);\n } finally {\n this._setBusy(false);\n }\n }\n\n private _handleOpen(): void {\n if (!this._config.enabled || this._state.isOpen) return;\n \n this._state.isOpen = true;\n this._dropdown.style.display = 'block';\n this._input.setAttribute('aria-expanded', 'true');\n this._updateArrowRotation();\n \n // Clear search query when opening to show all options\n // This ensures we can scroll to selected item\n if (this._config.searchable) {\n this._state.searchQuery = '';\n // Don't clear input value if it represents selection\n // But if we want to search, we might want to clear it?\n // Standard behavior: input keeps value (label), but dropdown shows all options\n // until user types.\n // However, our filtering logic uses _state.searchQuery.\n // So clearing it here resets the filter.\n }\n\n // Render options when opening\n this._renderOptions();\n \n this._emit('open', {});\n this._config.callbacks.onOpen?.();\n \n // Scroll to selected if configured\n if (this._config.scrollToSelected.enabled) {\n // Use requestAnimationFrame for better timing after render\n requestAnimationFrame(() => {\n // Double RAF to ensure layout is complete\n requestAnimationFrame(() => {\n this._scrollToSelected();\n });\n });\n }\n }\n\n private _handleClose(): void {\n if (!this._state.isOpen) return;\n \n this._state.isOpen = false;\n this._dropdown.style.display = 'none';\n this._input.setAttribute('aria-expanded', 'false');\n this._updateArrowRotation();\n \n this._emit('close', {});\n this._config.callbacks.onClose?.();\n }\n\n private _updateDropdownVisibility(): void {\n if (this._state.isOpen) {\n this._dropdown.style.display = 'block';\n this._input.setAttribute('aria-expanded', 'true');\n } else {\n this._dropdown.style.display = 'none';\n this._input.setAttribute('aria-expanded', 'false');\n }\n }\n\n private _updateArrowRotation(): void {\n if (this._arrowContainer) {\n const arrow = this._arrowContainer.querySelector('.dropdown-arrow');\n if (arrow) {\n if (this._state.isOpen) {\n arrow.classList.add('open');\n } else {\n arrow.classList.remove('open');\n }\n }\n }\n }\n\n private _handleSearch(query: string): void {\n this._state.searchQuery = query;\n \n // Clear previous search timeout\n if (this._searchTimeout) {\n clearTimeout(this._searchTimeout);\n }\n \n // Search immediately - no debouncing for better responsiveness\n // Users expect instant feedback as they type\n this._state.isSearching = false;\n \n // Ensure dropdown is open when searching\n if (!this._state.isOpen) {\n this._handleOpen();\n } else {\n // Filter and render options immediately\n this._renderOptions();\n }\n \n // Get filtered items based on search query - searches ENTIRE phrase\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n // FIX: Do not trim query to allow searching for phrases with spaces\n const searchQuery = query.toLowerCase();\n \n const filteredItems = searchQuery\n ? this._state.loadedItems.filter((item: any) => {\n try {\n const label = String(getLabel(item)).toLowerCase();\n // Match the entire search phrase\n return label.includes(searchQuery);\n } catch (e) {\n return false;\n }\n })\n : this._state.loadedItems;\n \n const count = filteredItems.length;\n \n // Announce search results for accessibility\n if (searchQuery) {\n this._announce(`${count} result${count !== 1 ? 's' : ''} found for \"${query}\"`);\n }\n \n // Only notify if query or result count changed to prevent infinite loops\n if (query !== this._state.lastNotifiedQuery || count !== this._state.lastNotifiedResultCount) {\n this._state.lastNotifiedQuery = query;\n this._state.lastNotifiedResultCount = count;\n \n // Use setTimeout to avoid synchronous state updates during render\n setTimeout(() => {\n this._emit('search', { query, results: filteredItems, count });\n this._config.callbacks.onSearch?.(query);\n }, 0);\n }\n }\n\n private _handleKeydown(e: KeyboardEvent): void {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!this._state.isOpen) {\n this._handleOpen();\n } else {\n this._moveActive(1);\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!this._state.isOpen) {\n this._handleOpen();\n } else {\n this._moveActive(-1);\n }\n break;\n case 'Home':\n e.preventDefault();\n if (this._state.isOpen) {\n this._setActive(0);\n }\n break;\n case 'End':\n e.preventDefault();\n if (this._state.isOpen) {\n const options = Array.from(this._optionsContainer.children) as SelectOption[];\n this._setActive(options.length - 1);\n }\n break;\n case 'PageDown':\n e.preventDefault();\n if (this._state.isOpen) {\n this._moveActive(10);\n }\n break;\n case 'PageUp':\n e.preventDefault();\n if (this._state.isOpen) {\n this._moveActive(-10);\n }\n break;\n case 'Enter':\n e.preventDefault();\n if (this._state.activeIndex >= 0) {\n this._selectOption(this._state.activeIndex);\n }\n break;\n case 'Escape':\n e.preventDefault();\n this._handleClose();\n break;\n case 'a':\n case 'A':\n if ((e.ctrlKey || e.metaKey) && this._config.selection.mode === 'multi') {\n e.preventDefault();\n this._selectAll();\n }\n break;\n default:\n // Type-ahead search\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n this._handleTypeAhead(e.key);\n }\n break;\n }\n }\n\n private _moveActive(delta: number): void {\n const options = Array.from(this._optionsContainer.children) as SelectOption[];\n const next = Math.max(0, Math.min(options.length - 1, this._state.activeIndex + delta));\n this._setActive(next);\n }\n\n private _setActive(index: number): void {\n const options = Array.from(this._optionsContainer.children);\n \n // Clear previous active state\n if (this._state.activeIndex >= 0 && options[this._state.activeIndex]) {\n const prevOption = options[this._state.activeIndex];\n // Check if it's a custom SelectOption or a lightweight DOM element\n if ('setActive' in prevOption && typeof (prevOption as any).setActive === 'function') {\n (prevOption as SelectOption).setActive(false);\n } else {\n // Lightweight option - remove active class\n (prevOption as HTMLElement).classList.remove('smilodon-option--active');\n (prevOption as HTMLElement).setAttribute('aria-selected', 'false');\n }\n }\n \n this._state.activeIndex = index;\n \n // Set new active state\n if (options[index]) {\n const option = options[index];\n \n // Check if it's a custom SelectOption or a lightweight DOM element\n if ('setActive' in option && typeof (option as any).setActive === 'function') {\n (option as SelectOption).setActive(true);\n } else {\n // Lightweight option - add active class\n (option as HTMLElement).classList.add('smilodon-option--active');\n (option as HTMLElement).setAttribute('aria-selected', 'true');\n }\n \n (option as HTMLElement).scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n \n // Announce position for screen readers\n const total = options.length;\n this._announce(`Item ${index + 1} of ${total}`);\n \n // Update aria-activedescendant\n const optionId = `${this._uniqueId}-option-${index}`;\n this._input.setAttribute('aria-activedescendant', optionId);\n }\n }\n\n private _handleTypeAhead(char: string): void {\n if (this._typeTimeout) clearTimeout(this._typeTimeout);\n \n this._typeBuffer += char.toLowerCase();\n this._typeTimeout = window.setTimeout(() => {\n this._typeBuffer = '';\n }, 500);\n \n // Find first matching option\n const getValue = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n const matchIndex = this._state.loadedItems.findIndex((item) =>\n getValue(item).toLowerCase().startsWith(this._typeBuffer)\n );\n \n if (matchIndex >= 0) {\n this._setActive(matchIndex);\n }\n }\n\n private _selectAll(): void {\n if (this._config.selection.mode !== 'multi') return;\n \n const options = Array.from(this._optionsContainer.children);\n const maxSelections = this._config.selection.maxSelections || 0;\n \n options.forEach((option, index) => {\n if (maxSelections > 0 && this._state.selectedIndices.size >= maxSelections) {\n return;\n }\n \n if (!this._state.selectedIndices.has(index)) {\n // Check if it's a custom SelectOption or a lightweight DOM element\n if ('getConfig' in option && typeof (option as any).getConfig === 'function') {\n const config = (option as SelectOption).getConfig();\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, config.item);\n (option as SelectOption).setSelected(true);\n } else {\n // Lightweight option - get item from data attribute or state\n const item = this._state.loadedItems[index];\n if (item) {\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n (option as HTMLElement).classList.add('smilodon-option--selected');\n (option as HTMLElement).setAttribute('aria-selected', 'true');\n }\n }\n }\n });\n \n this._updateInputDisplay();\n this._emitChange();\n this._announce(`Selected all ${options.length} items`);\n }\n\n private _announce(message: string): void {\n if (this._liveRegion) {\n this._liveRegion.textContent = message;\n setTimeout(() => {\n if (this._liveRegion) this._liveRegion.textContent = '';\n }, 1000);\n }\n }\n\n private _selectOption(index: number): void {\n // FIX: Do not rely on this._optionsContainer.children[index] because filtering changes the children\n // Instead, use the index to update state directly\n \n const item = this._state.loadedItems[index];\n if (!item) return;\n \n const config = { item }; // Minimal config needed\n const isCurrentlySelected = this._state.selectedIndices.has(index);\n \n if (this._config.selection.mode === 'single') {\n // Single select: clear previous and select new\n const wasSelected = this._state.selectedIndices.has(index);\n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n \n if (!wasSelected) {\n // Select this option\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n }\n \n // Re-render to update all option styles\n this._renderOptions();\n \n if (this._config.selection.closeOnSelect) {\n this._handleClose();\n }\n } else {\n // Multi select with toggle\n const maxSelections = this._config.selection.maxSelections || 0;\n \n if (isCurrentlySelected) {\n // Deselect (toggle off)\n this._state.selectedIndices.delete(index);\n this._state.selectedItems.delete(index);\n } else {\n // Select (toggle on)\n if (maxSelections > 0 && this._state.selectedIndices.size >= maxSelections) {\n this._announce(`Maximum ${maxSelections} selections allowed`);\n return; // Max selections reached\n }\n \n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n }\n \n // Re-render to update styles (safer than trying to find the element in filtered list)\n this._renderOptions();\n }\n \n this._updateInputDisplay();\n this._emitChange();\n \n // Call user callback\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n \n this._config.callbacks.onSelect?.({\n item: item,\n index,\n value: getValue(item),\n label: getLabel(item),\n selected: this._state.selectedIndices.has(index),\n });\n }\n\n private _handleOptionRemove(index: number): void {\n const option = this._optionsContainer.children[index] as SelectOption;\n if (!option) return;\n \n this._state.selectedIndices.delete(index);\n this._state.selectedItems.delete(index);\n option.setSelected(false);\n \n this._updateInputDisplay();\n this._emitChange();\n \n const config = option.getConfig();\n this._emit('remove', { item: config.item, index });\n }\n\n private _updateInputDisplay(): void {\n const selectedItems = Array.from(this._state.selectedItems.values());\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n \n if (selectedItems.length === 0) {\n this._input.value = '';\n this._input.placeholder = this._config.placeholder || 'Select an option...';\n // Clear any badges\n const existingBadges = this._inputContainer.querySelectorAll('.selection-badge');\n existingBadges.forEach(badge => badge.remove());\n } else if (this._config.selection.mode === 'single') {\n this._input.value = getLabel(selectedItems[0]);\n } else {\n // Multi-select: show badges instead of text in input\n this._input.value = '';\n this._input.placeholder = '';\n \n // Clear existing badges\n const existingBadges = this._inputContainer.querySelectorAll('.selection-badge');\n existingBadges.forEach(badge => badge.remove());\n \n // Create badges for each selected item\n const selectedEntries = Array.from(this._state.selectedItems.entries());\n selectedEntries.forEach(([index, item]) => {\n const badge = document.createElement('span');\n badge.className = 'selection-badge';\n badge.textContent = getLabel(item);\n \n // Add remove button to badge\n const removeBtn = document.createElement('button');\n removeBtn.className = 'badge-remove';\n removeBtn.innerHTML = '×';\n removeBtn.setAttribute('aria-label', `Remove ${getLabel(item)}`);\n removeBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n this._state.selectedIndices.delete(index);\n this._state.selectedItems.delete(index);\n this._updateInputDisplay();\n this._renderOptions();\n this._emitChange();\n });\n \n badge.appendChild(removeBtn);\n this._inputContainer.insertBefore(badge, this._input);\n });\n }\n }\n\n private _renderOptionsWithAnimation(): void {\n // Add fade-out animation\n this._optionsContainer.style.opacity = '0';\n this._optionsContainer.style.transition = 'opacity 0.15s ease-out';\n \n setTimeout(() => {\n this._renderOptions();\n // Fade back in\n this._optionsContainer.style.opacity = '1';\n this._optionsContainer.style.transition = 'opacity 0.2s ease-in';\n }, 150);\n }\n\n private _scrollToSelected(): void {\n if (this._state.selectedIndices.size === 0) return;\n \n const target = this._config.scrollToSelected.multiSelectTarget;\n const indices = Array.from(this._state.selectedIndices).sort((a, b) => a - b);\n \n // For multi-select, find the closest selected item to the current scroll position\n let targetIndex: number;\n \n if (this._config.selection.mode === 'multi' && indices.length > 1) {\n // Calculate which selected item is closest to the center of the viewport\n const dropdownRect = this._dropdown.getBoundingClientRect();\n const viewportCenter = this._dropdown.scrollTop + (dropdownRect.height / 2);\n \n // Find the selected item closest to viewport center\n let closestIndex = indices[0];\n let closestDistance = Infinity;\n \n for (const index of indices) {\n const optionId = `${this._uniqueId}-option-${index}`;\n const option = this._optionsContainer.querySelector(`[id=\"${optionId}\"]`) as HTMLElement;\n \n if (option) {\n const optionTop = option.offsetTop;\n const distance = Math.abs(optionTop - viewportCenter);\n \n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n }\n \n targetIndex = closestIndex;\n } else {\n // For single select or only one selected item, use the configured target\n targetIndex = target === 'first' ? indices[0] : indices[indices.length - 1];\n }\n \n // Find and scroll to the target option\n const optionId = `${this._uniqueId}-option-${targetIndex}`;\n const option = this._optionsContainer.querySelector(`[id=\"${optionId}\"]`) as HTMLElement;\n \n if (option) {\n // Use smooth scrolling with center alignment for better UX\n option.scrollIntoView({\n block: this._config.scrollToSelected.block || 'center',\n behavior: 'smooth',\n });\n \n // Also set it as active for keyboard navigation\n this._setActive(targetIndex);\n }\n }\n\n private async _loadMoreItems(): Promise<void> {\n if (this._state.isBusy) return;\n \n this._setBusy(true);\n \n // Save scroll position before loading\n if (this._dropdown) {\n this._state.lastScrollPosition = this._dropdown.scrollTop;\n this._state.preserveScrollPosition = true;\n \n // Update dropdown to show loading indicator but keep the\n // same scrollTop so the visible items don't move.\n this._renderOptions();\n this._dropdown.scrollTop = this._state.lastScrollPosition;\n }\n \n try {\n // Emit event for parent to handle\n this._state.currentPage++;\n \n this._emit('loadMore', { page: this._state.currentPage, items: [] });\n this._config.callbacks.onLoadMore?.(this._state.currentPage);\n \n // NOTE: We do NOT set isBusy = false here.\n // The parent component MUST call setItems() or similar to clear the busy state.\n // This prevents the sentinel from reappearing before new items are loaded.\n } catch (error) {\n this._handleError(error as Error);\n this._setBusy(false); // Only clear on error\n }\n }\n\n private _setBusy(busy: boolean): void {\n this._state.isBusy = busy;\n \n // Trigger re-render to show/hide busy indicator\n // We use _renderOptions to handle the UI update\n this._renderOptions();\n }\n\n private _showBusyBucket(): void {\n // Deprecated: Logic moved to _renderOptions\n }\n\n private _hideBusyBucket(): void {\n // Deprecated: Logic moved to _renderOptions\n }\n\n private _handleError(error: Error): void {\n this._emit('error', { message: error.message, cause: error });\n this._config.callbacks.onError?.(error);\n }\n\n private _emit<K extends SelectEventName>(name: K, detail: SelectEventsDetailMap[K]): void {\n this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n }\n\n private _emitChange(): void {\n const selectedItems = Array.from(this._state.selectedItems.values());\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n const selectedValues = selectedItems.map(getValue);\n const selectedIndices = Array.from(this._state.selectedIndices);\n \n this._emit('change', { selectedItems, selectedValues, selectedIndices });\n this._config.callbacks.onChange?.(selectedItems, selectedValues);\n }\n\n // Public API\n \n /**\n * Set items to display in the select\n */\n setItems(items: unknown[]): void {\n console.log('[EnhancedSelect] setItems called with', items?.length || 0, 'items');\n console.log('[EnhancedSelect] Items:', items);\n \n const previousLength = this._state.loadedItems.length;\n this._state.loadedItems = items;\n \n // If grouped items exist, flatten them to items\n if (this._state.groupedItems.length > 0) {\n this._state.loadedItems = this._state.groupedItems.flatMap(group => group.options);\n console.log('[EnhancedSelect] Flattened grouped items to', this._state.loadedItems.length, 'items');\n }\n \n const newLength = this._state.loadedItems.length;\n console.log('[EnhancedSelect] State.loadedItems updated:', previousLength, '→', newLength);\n \n // When infinite scroll is active (preserveScrollPosition = true),\n // we need to maintain scroll position during the update\n if (this._state.preserveScrollPosition && this._dropdown) {\n const targetScrollTop = this._state.lastScrollPosition;\n console.log('[EnhancedSelect] Preserving scroll position:', targetScrollTop);\n \n // Only clear loading if we actually got more items\n if (newLength > previousLength) {\n this._state.isBusy = false;\n }\n \n console.log('[EnhancedSelect] Calling _renderOptions (with scroll preservation)...');\n this._renderOptions();\n \n // Restore the exact scrollTop we had before loading\n // so the previously visible items stay in place and\n // new ones simply appear below.\n this._dropdown.scrollTop = targetScrollTop;\n \n // Ensure it sticks after layout\n requestAnimationFrame(() => {\n if (this._dropdown) {\n this._dropdown.scrollTop = targetScrollTop;\n }\n });\n \n // Only clear preserveScrollPosition if we got new items\n if (newLength > previousLength) {\n this._state.preserveScrollPosition = false;\n }\n } else {\n // Normal update - just render normally\n this._state.isBusy = false;\n console.log('[EnhancedSelect] Calling _renderOptions (normal)...');\n this._renderOptions();\n }\n \n console.log('[EnhancedSelect] setItems complete');\n }\n\n /**\n * Set grouped items\n */\n setGroupedItems(groupedItems: GroupedItem[]): void {\n this._state.groupedItems = groupedItems;\n this._state.loadedItems = groupedItems.flatMap(group => group.options);\n this._renderOptions();\n }\n\n /**\n * Get currently selected items\n */\n getSelectedItems(): unknown[] {\n return Array.from(this._state.selectedItems.values());\n }\n\n /**\n * Get all loaded items\n */\n get loadedItems(): unknown[] {\n return this._state.loadedItems;\n }\n\n /**\n * Get currently selected values\n */\n getSelectedValues(): unknown[] {\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n return this.getSelectedItems().map(getValue);\n }\n\n /**\n * Set selected items by value\n */\n async setSelectedValues(values: unknown[]): Promise<void> {\n if (this._config.serverSide.enabled && this._config.serverSide.fetchSelectedItems) {\n await this._loadSelectedItemsByValues(values);\n } else {\n // Select from loaded items\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n \n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n \n this._state.loadedItems.forEach((item, index) => {\n if (values.includes(getValue(item))) {\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n }\n });\n \n this._renderOptions();\n this._updateInputDisplay();\n this._emitChange();\n }\n }\n\n /**\n * Load and select items by their values (for infinite scroll scenario)\n */\n private async _loadSelectedItemsByValues(values: unknown[]): Promise<void> {\n if (!this._config.serverSide.fetchSelectedItems) return;\n \n this._setBusy(true);\n \n try {\n const items = await this._config.serverSide.fetchSelectedItems(values);\n \n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n \n items.forEach((item, index) => {\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n });\n \n this._renderOptions();\n this._updateInputDisplay();\n this._emitChange();\n \n // Scroll to selected if configured\n if (this._config.scrollToSelected.enabled) {\n this._scrollToSelected();\n }\n } catch (error) {\n this._handleError(error as Error);\n } finally {\n this._setBusy(false);\n }\n }\n\n /**\n * Clear all selections\n */\n clear(): void {\n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n this._renderOptions();\n this._updateInputDisplay();\n this._emitChange();\n }\n\n /**\n * Open dropdown\n */\n open(): void {\n this._handleOpen();\n }\n\n /**\n * Close dropdown\n */\n close(): void {\n this._handleClose();\n }\n\n /**\n * Update component configuration\n */\n updateConfig(config: Partial<GlobalSelectConfig>): void {\n this._config = selectConfig.mergeWithComponentConfig(config);\n \n // Update input state based on new config\n if (this._input) {\n this._input.readOnly = !this._config.searchable;\n this._input.setAttribute('aria-autocomplete', this._config.searchable ? 'list' : 'none');\n }\n \n // Re-initialize observers in case infinite scroll was enabled/disabled\n this._initializeObservers();\n \n this._renderOptions();\n }\n\n /**\n * Set error state\n */\n setError(message: string): void {\n this._hasError = true;\n this._errorMessage = message;\n this._input.setAttribute('aria-invalid', 'true');\n this._announce(`Error: ${message}`);\n }\n\n /**\n * Clear error state\n */\n clearError(): void {\n this._hasError = false;\n this._errorMessage = '';\n this._input.removeAttribute('aria-invalid');\n }\n\n /**\n * Set required state\n */\n setRequired(required: boolean): void {\n if (required) {\n this._input.setAttribute('aria-required', 'true');\n this._input.setAttribute('required', '');\n } else {\n this._input.removeAttribute('aria-required');\n this._input.removeAttribute('required');\n }\n }\n\n /**\n * Validate selection (for required fields)\n */\n validate(): boolean {\n const isRequired = this._input.hasAttribute('required');\n if (isRequired && this._state.selectedIndices.size === 0) {\n this.setError('Selection is required');\n return false;\n }\n this.clearError();\n return true;\n }\n\n /**\n * Render options based on current state\n */\n private _renderOptions(): void {\n console.log('[EnhancedSelect] _renderOptions called');\n console.log('[EnhancedSelect] State:', {\n loadedItems: this._state.loadedItems.length,\n groupedItems: this._state.groupedItems.length,\n isOpen: this._state.isOpen,\n isSearching: this._state.isSearching,\n searchQuery: this._state.searchQuery,\n isBusy: this._state.isBusy\n });\n \n // Cleanup observer\n if (this._loadMoreTrigger && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this._loadMoreTrigger);\n }\n \n // Clear options container\n console.log('[EnhancedSelect] Clearing options container, previous children:', this._optionsContainer.children.length);\n this._optionsContainer.innerHTML = '';\n \n // Ensure dropdown only contains options container (cleanup legacy direct children)\n // We need to preserve optionsContainer, so we can't just clear dropdown.innerHTML\n // But we can check if there are other children and remove them\n Array.from(this._dropdown.children).forEach(child => {\n if (child !== this._optionsContainer) {\n this._dropdown.removeChild(child);\n }\n });\n \n // Ensure dropdown is visible if we are rendering options\n if (this._state.isOpen && this._dropdown.style.display === 'none') {\n this._dropdown.style.display = 'block';\n console.log('[EnhancedSelect] Dropdown display set to block');\n }\n \n // Show searching state (exclusive state)\n if (this._state.isSearching) {\n const searching = document.createElement('div');\n searching.className = 'searching-state';\n searching.textContent = 'Searching...';\n this._optionsContainer.appendChild(searching);\n console.log('[EnhancedSelect] Added searching state');\n return;\n }\n \n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n \n // Filter items by search query\n const query = this._state.searchQuery.toLowerCase();\n \n // Handle Grouped Items Rendering (when no search query)\n if (this._state.groupedItems.length > 0 && !query) {\n console.log('[EnhancedSelect] Rendering grouped items:', this._state.groupedItems.length, 'groups');\n this._state.groupedItems.forEach(group => {\n const header = document.createElement('div');\n header.className = 'group-header';\n header.textContent = group.label;\n Object.assign(header.style, {\n padding: '8px 12px',\n fontWeight: '600',\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n fontSize: '12px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n position: 'sticky',\n top: '0',\n zIndex: '1',\n borderBottom: '1px solid #e5e7eb'\n });\n this._optionsContainer.appendChild(header);\n \n group.options.forEach(item => {\n // Find original index for correct ID generation and selection\n const index = this._state.loadedItems.indexOf(item);\n if (index !== -1) {\n this._renderSingleOption(item, index, getValue, getLabel);\n }\n });\n });\n } else {\n // Normal rendering (flat list or filtered)\n console.log('[EnhancedSelect] Rendering flat list:', this._state.loadedItems.length, 'items');\n let hasRenderedItems = false;\n \n this._state.loadedItems.forEach((item, index) => {\n // Apply filter if query exists\n if (query) {\n try {\n const label = String(getLabel(item)).toLowerCase();\n if (!label.includes(query)) return;\n } catch (e) {\n return;\n }\n }\n \n hasRenderedItems = true;\n this._renderSingleOption(item, index, getValue, getLabel);\n });\n \n console.log('[EnhancedSelect] Rendered', hasRenderedItems ? 'items' : 'no items');\n \n if (!hasRenderedItems && !this._state.isBusy) {\n const empty = document.createElement('div');\n empty.className = 'empty-state';\n if (query) {\n empty.textContent = `No results found for \"${this._state.searchQuery}\"`;\n } else {\n empty.textContent = 'No options available';\n }\n this._optionsContainer.appendChild(empty);\n console.log('[EnhancedSelect] Added empty state');\n }\n }\n \n // Append Busy Indicator if busy\n if (this._state.isBusy && this._config.busyBucket.enabled) {\n const busyBucket = document.createElement('div');\n busyBucket.className = 'busy-bucket';\n \n if (this._config.busyBucket.showSpinner) {\n const spinner = document.createElement('div');\n spinner.className = 'spinner';\n busyBucket.appendChild(spinner);\n }\n \n if (this._config.busyBucket.message) {\n const message = document.createElement('div');\n message.textContent = this._config.busyBucket.message;\n busyBucket.appendChild(message);\n }\n \n this._optionsContainer.appendChild(busyBucket);\n console.log('[EnhancedSelect] Added busy bucket');\n }\n // Append Load More Trigger (Button or Sentinel) if enabled and not busy\n else if ((this._config.loadMore.enabled || this._config.infiniteScroll.enabled) && this._state.loadedItems.length > 0) {\n this._addLoadMoreTrigger();\n }\n \n console.log('[EnhancedSelect] _renderOptions complete, optionsContainer children:', this._optionsContainer.children.length);\n }\n\n private _renderSingleOption(item: any, index: number, getValue: (item: any) => any, getLabel: (item: any) => string) {\n const option = document.createElement('div');\n option.className = 'option';\n option.id = `${this._uniqueId}-option-${index}`;\n const value = getValue(item);\n const label = getLabel(item);\n \n console.log('[EnhancedSelect] Rendering option', index, ':', { value, label });\n \n option.textContent = label;\n option.dataset.value = String(value);\n option.dataset.index = String(index); // Also useful for debugging/selectors\n \n // Check if selected using selectedItems map\n const isSelected = this._state.selectedIndices.has(index);\n \n if (isSelected) {\n option.classList.add('selected');\n option.setAttribute('aria-selected', 'true');\n } else {\n option.setAttribute('aria-selected', 'false');\n }\n \n option.addEventListener('click', () => {\n this._selectOption(index);\n });\n \n this._optionsContainer.appendChild(option);\n console.log('[EnhancedSelect] Option', index, 'appended to optionsContainer');\n }\n\n private _addLoadMoreTrigger(): void {\n const container = document.createElement('div');\n container.className = 'load-more-container';\n \n if (this._config.infiniteScroll.enabled) {\n // Infinite Scroll: Render an invisible sentinel\n // It must have some height to be intersected\n const sentinel = document.createElement('div');\n sentinel.className = 'infinite-scroll-sentinel';\n sentinel.style.height = '10px';\n sentinel.style.width = '100%';\n sentinel.style.opacity = '0'; // Invisible\n \n this._loadMoreTrigger = sentinel;\n container.appendChild(sentinel);\n } else {\n // Manual Load More: Render a button\n const button = document.createElement('button');\n button.className = 'load-more-button';\n button.textContent = `Load ${this._config.loadMore.itemsPerLoad} more`;\n button.addEventListener('click', () => this._loadMoreItems());\n \n this._loadMoreTrigger = button;\n container.appendChild(button);\n }\n \n this._optionsContainer.appendChild(container);\n \n // Setup intersection observer for auto-load\n if (this._intersectionObserver && this._loadMoreTrigger) {\n this._intersectionObserver.observe(this._loadMoreTrigger);\n }\n }\n}\n\n// Register custom element\nif (!customElements.get('enhanced-select')) {\n customElements.define('enhanced-select', EnhancedSelect);\n}\n","/**\n * Independent Option Component\n * High cohesion, low coupling - handles its own selection state and events\n */\n\nexport interface OptionConfig {\n /** The data item this option represents */\n item: unknown;\n /** The index of this option */\n index: number;\n /** Whether this option is selected */\n selected: boolean;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Whether this option is focused/active */\n active?: boolean;\n /** Custom value accessor */\n getValue?: (item: unknown) => unknown;\n /** Custom label accessor */\n getLabel?: (item: unknown) => string;\n /** Custom renderer */\n render?: (item: unknown, index: number) => HTMLElement | string;\n /** Custom style */\n style?: Partial<CSSStyleDeclaration>;\n /** Custom class names */\n className?: string;\n /** Show remove button (for multi-select) */\n showRemoveButton?: boolean;\n}\n\nexport interface OptionEventDetail {\n item: unknown;\n index: number;\n value: unknown;\n label: string;\n selected: boolean;\n}\n\nexport class SelectOption extends HTMLElement {\n private _config: OptionConfig;\n private _shadow: ShadowRoot;\n private _container: HTMLElement;\n private _removeButton?: HTMLButtonElement;\n\n constructor(config: OptionConfig) {\n super();\n this._config = config;\n this._shadow = this.attachShadow({ mode: 'open' });\n this._container = document.createElement('div');\n this._container.className = 'option-container';\n \n this._initializeStyles();\n this._render();\n this._attachEventListeners();\n \n this._shadow.appendChild(this._container);\n }\n\n private _initializeStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n :host {\n display: block;\n position: relative;\n }\n \n .option-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s ease;\n }\n \n .option-container:hover {\n background-color: var(--select-option-hover-bg, #f0f0f0);\n }\n \n .option-container.selected {\n background-color: var(--select-option-selected-bg, #e3f2fd);\n color: var(--select-option-selected-color, #1976d2);\n }\n \n .option-container.active {\n outline: 2px solid var(--select-option-active-outline, #1976d2);\n outline-offset: -2px;\n }\n \n .option-container.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n \n .option-content {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n \n .remove-button {\n margin-left: 8px;\n padding: 2px 6px;\n border: none;\n background-color: var(--select-remove-btn-bg, transparent);\n color: var(--select-remove-btn-color, #666);\n cursor: pointer;\n border-radius: 3px;\n font-size: 16px;\n line-height: 1;\n transition: all 0.2s ease;\n }\n \n .remove-button:hover {\n background-color: var(--select-remove-btn-hover-bg, #ffebee);\n color: var(--select-remove-btn-hover-color, #c62828);\n }\n \n .remove-button:focus {\n outline: 2px solid var(--select-remove-btn-focus-outline, #1976d2);\n outline-offset: 2px;\n }\n `;\n this._shadow.appendChild(style);\n }\n\n private _render(): void {\n const { item, index, selected, disabled, active, render, showRemoveButton } = this._config;\n \n // Clear container\n this._container.innerHTML = '';\n \n // Apply state classes\n this._container.classList.toggle('selected', selected);\n this._container.classList.toggle('disabled', disabled || false);\n this._container.classList.toggle('active', active || false);\n \n // Custom class name\n if (this._config.className) {\n this._container.className += ' ' + this._config.className;\n }\n \n // Apply custom styles\n if (this._config.style) {\n Object.assign(this._container.style, this._config.style);\n }\n \n // Render content\n const contentDiv = document.createElement('div');\n contentDiv.className = 'option-content';\n \n if (render) {\n const rendered = render(item, index);\n if (typeof rendered === 'string') {\n contentDiv.innerHTML = rendered;\n } else {\n contentDiv.appendChild(rendered);\n }\n } else {\n const label = this._getLabel();\n contentDiv.textContent = label;\n }\n \n this._container.appendChild(contentDiv);\n \n // Add remove button if needed\n if (showRemoveButton && selected) {\n this._removeButton = document.createElement('button');\n this._removeButton.className = 'remove-button';\n this._removeButton.innerHTML = '×';\n this._removeButton.setAttribute('aria-label', 'Remove option');\n this._removeButton.setAttribute('type', 'button');\n this._container.appendChild(this._removeButton);\n }\n \n // Set ARIA attributes\n this.setAttribute('role', 'option');\n this.setAttribute('aria-selected', String(selected));\n if (disabled) this.setAttribute('aria-disabled', 'true');\n this.id = `select-option-${index}`;\n }\n\n private _attachEventListeners(): void {\n // Click handler for selection\n this._container.addEventListener('click', (e) => {\n // Don't trigger selection if clicking remove button\n if (e.target === this._removeButton) {\n return;\n }\n \n if (!this._config.disabled) {\n this._handleSelect();\n }\n });\n \n // Remove button handler\n if (this._removeButton) {\n this._removeButton.addEventListener('click', (e) => {\n e.stopPropagation();\n this._handleRemove();\n });\n }\n \n // Keyboard handler\n this.addEventListener('keydown', (e) => {\n if (this._config.disabled) return;\n \n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._handleSelect();\n } else if (e.key === 'Delete' || e.key === 'Backspace') {\n if (this._config.selected && this._config.showRemoveButton) {\n e.preventDefault();\n this._handleRemove();\n }\n }\n });\n }\n\n private _handleSelect(): void {\n const detail: OptionEventDetail = {\n item: this._config.item,\n index: this._config.index,\n value: this._getValue(),\n label: this._getLabel(),\n selected: !this._config.selected,\n };\n \n this.dispatchEvent(new CustomEvent('optionSelect', {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n private _handleRemove(): void {\n const detail: OptionEventDetail = {\n item: this._config.item,\n index: this._config.index,\n value: this._getValue(),\n label: this._getLabel(),\n selected: false,\n };\n \n this.dispatchEvent(new CustomEvent('optionRemove', {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n private _getValue(): unknown {\n if (this._config.getValue) {\n return this._config.getValue(this._config.item);\n }\n return (this._config.item as any)?.value ?? this._config.item;\n }\n\n private _getLabel(): string {\n if (this._config.getLabel) {\n return this._config.getLabel(this._config.item);\n }\n return (this._config.item as any)?.label ?? String(this._config.item);\n }\n\n /**\n * Update option configuration and re-render\n */\n updateConfig(updates: Partial<OptionConfig>): void {\n this._config = { ...this._config, ...updates };\n this._render();\n this._attachEventListeners();\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<OptionConfig> {\n return this._config;\n }\n\n /**\n * Get option value\n */\n getValue(): unknown {\n return this._getValue();\n }\n\n /**\n * Get option label\n */\n getLabel(): string {\n return this._getLabel();\n }\n\n /**\n * Set selected state\n */\n setSelected(selected: boolean): void {\n this._config.selected = selected;\n this._render();\n }\n\n /**\n * Set active state\n */\n setActive(active: boolean): void {\n this._config.active = active;\n this._render();\n }\n\n /**\n * Set disabled state\n */\n setDisabled(disabled: boolean): void {\n this._config.disabled = disabled;\n this._render();\n }\n}\n\n// Register custom element\nif (!customElements.get('select-option')) {\n customElements.define('select-option', SelectOption);\n}\n","/**\n * Web Worker protocol types for off-main-thread processing.\n * Supports heavy transforms, fuzzy search, and data processing.\n */\n\nexport interface WorkerRequest {\n id: string;\n type: 'transform' | 'search' | 'filter' | 'sort';\n payload: unknown;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: string;\n success: boolean;\n data?: T;\n error?: string;\n duration?: number; // milliseconds\n}\n\nexport interface TransformRequest {\n items: unknown[];\n transformer: string; // serialized function\n}\n\nexport interface SearchRequest {\n items: unknown[];\n query: string;\n fuzzy?: boolean;\n maxResults?: number;\n}\n\nexport interface FilterRequest {\n items: unknown[];\n predicate: string; // serialized function\n}\n\nexport interface SortRequest {\n items: unknown[];\n comparator: string; // serialized function\n}\n\n/**\n * Worker manager for handling off-main-thread processing.\n * Automatically falls back if workers not available or blocked by COOP/COEP.\n */\nexport class WorkerManager {\n private worker: Worker | null = null;\n private pending = new Map<string, {\n resolve: (data: any) => void;\n reject: (error: Error) => void;\n timeout: number;\n }>();\n private supportsWorkers = false;\n private supportsSharedArrayBuffer = false;\n private nextId = 0;\n\n constructor() {\n this.detectFeatures();\n this.initWorker();\n }\n\n /**\n * Detect browser capabilities\n */\n private detectFeatures(): void {\n this.supportsWorkers = typeof Worker !== 'undefined';\n this.supportsSharedArrayBuffer = typeof SharedArrayBuffer !== 'undefined';\n }\n\n /**\n * Initialize worker (inline blob URL for simplicity)\n */\n private initWorker(): void {\n if (!this.supportsWorkers) return;\n\n try {\n const workerCode = this.generateWorkerCode();\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n const url = URL.createObjectURL(blob);\n \n this.worker = new Worker(url);\n this.worker.onmessage = this.handleMessage.bind(this);\n this.worker.onerror = this.handleError.bind(this);\n \n // Cleanup blob URL after worker loads\n URL.revokeObjectURL(url);\n } catch (err) {\n console.warn('Worker initialization failed, falling back to main thread', err);\n this.worker = null;\n }\n }\n\n /**\n * Generate worker code as string\n */\n private generateWorkerCode(): string {\n return `\n // Worker code\n self.onmessage = function(e) {\n const start = performance.now();\n const { id, type, payload } = e.data;\n \n try {\n let result;\n \n switch (type) {\n case 'transform':\n result = handleTransform(payload);\n break;\n case 'search':\n result = handleSearch(payload);\n break;\n case 'filter':\n result = handleFilter(payload);\n break;\n case 'sort':\n result = handleSort(payload);\n break;\n default:\n throw new Error('Unknown operation: ' + type);\n }\n \n const duration = performance.now() - start;\n self.postMessage({\n id,\n success: true,\n data: result,\n duration,\n });\n } catch (error) {\n self.postMessage({\n id,\n success: false,\n error: error.message,\n });\n }\n };\n \n function handleTransform({ items, transformer }) {\n const fn = new Function('item', 'index', 'return (' + transformer + ')(item, index)');\n return items.map((item, i) => fn(item, i));\n }\n \n function handleSearch({ items, query, fuzzy, maxResults }) {\n const lowerQuery = query.toLowerCase();\n const results = [];\n \n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const text = String(item).toLowerCase();\n \n if (fuzzy) {\n if (fuzzyMatch(text, lowerQuery)) {\n results.push({ item, index: i, score: fuzzyScore(text, lowerQuery) });\n }\n } else {\n if (text.includes(lowerQuery)) {\n results.push({ item, index: i });\n }\n }\n \n if (maxResults && results.length >= maxResults) break;\n }\n \n if (fuzzy) {\n results.sort((a, b) => b.score - a.score);\n }\n \n return results;\n }\n \n function handleFilter({ items, predicate }) {\n const fn = new Function('item', 'index', 'return (' + predicate + ')(item, index)');\n return items.filter((item, i) => fn(item, i));\n }\n \n function handleSort({ items, comparator }) {\n const fn = new Function('a', 'b', 'return (' + comparator + ')(a, b)');\n return [...items].sort(fn);\n }\n \n // Simple fuzzy matching (Levenshtein-inspired)\n function fuzzyMatch(text, query) {\n let qi = 0;\n for (let ti = 0; ti < text.length && qi < query.length; ti++) {\n if (text[ti] === query[qi]) qi++;\n }\n return qi === query.length;\n }\n \n function fuzzyScore(text, query) {\n let score = 0;\n let qi = 0;\n for (let ti = 0; ti < text.length && qi < query.length; ti++) {\n if (text[ti] === query[qi]) {\n score += 100 - ti; // Earlier matches score higher\n qi++;\n }\n }\n return score;\n }\n `;\n }\n\n /**\n * Handle worker message\n */\n private handleMessage(e: MessageEvent<WorkerResponse>): void {\n const { id, success, data, error } = e.data;\n const pending = this.pending.get(id);\n \n if (!pending) return;\n \n clearTimeout(pending.timeout);\n this.pending.delete(id);\n \n if (success) {\n pending.resolve(data);\n } else {\n pending.reject(new Error(error || 'Worker error'));\n }\n }\n\n /**\n * Handle worker error\n */\n private handleError(err: ErrorEvent): void {\n console.error('Worker error:', err);\n // Reject all pending requests\n for (const [id, pending] of this.pending) {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Worker crashed'));\n }\n this.pending.clear();\n }\n\n /**\n * Execute operation (worker or fallback)\n */\n async execute<T = unknown>(\n type: WorkerRequest['type'],\n payload: unknown,\n timeout = 5000\n ): Promise<T> {\n // Fallback to main thread if no worker\n if (!this.worker) {\n return this.executeFallback<T>(type, payload);\n }\n\n const id = `req_${this.nextId++}`;\n \n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error('Worker timeout'));\n }, timeout) as unknown as number;\n\n this.pending.set(id, { resolve, reject, timeout: timeoutId });\n\n this.worker!.postMessage({ id, type, payload });\n });\n }\n\n /**\n * Fallback to main thread execution\n */\n private async executeFallback<T>(type: string, payload: any): Promise<T> {\n // Simple synchronous fallback implementations\n switch (type) {\n case 'transform': {\n const { items, transformer } = payload as TransformRequest;\n const fn = new Function('item', 'index', `return (${transformer})(item, index)`);\n return items.map((item, i) => fn(item, i)) as T;\n }\n case 'search': {\n const { items, query, fuzzy } = payload as SearchRequest;\n const lowerQuery = query.toLowerCase();\n const results: { item: any; index: number }[] = [];\n \n items.forEach((item, index) => {\n const itemStr = String(item).toLowerCase();\n if (fuzzy) {\n // Simple fuzzy match - check if all query chars appear in order\n let queryIndex = 0;\n for (let i = 0; i < itemStr.length && queryIndex < lowerQuery.length; i++) {\n if (itemStr[i] === lowerQuery[queryIndex]) {\n queryIndex++;\n }\n }\n if (queryIndex === lowerQuery.length) {\n results.push({ item, index });\n }\n } else {\n // Exact substring match\n if (itemStr.includes(lowerQuery)) {\n results.push({ item, index });\n }\n }\n });\n \n return results as T;\n }\n case 'filter': {\n const { items, predicate } = payload as FilterRequest;\n const fn = new Function('item', 'index', `return (${predicate})(item, index)`);\n return items.filter((item, i) => fn(item, i)) as T;\n }\n case 'sort': {\n const { items, comparator } = payload as SortRequest;\n const fn = new Function('a', 'b', `return (${comparator})(a, b)`) as (a: any, b: any) => number;\n return [...items].sort(fn) as T;\n }\n default:\n throw new Error(`Unknown operation: ${type}`);\n }\n }\n\n /**\n * Transform items with custom function\n */\n async transform<T, R>(items: T[], transformer: (item: T, index: number) => R): Promise<R[]> {\n return this.execute<R[]>('transform', {\n items,\n transformer: transformer.toString(),\n });\n }\n\n /**\n * Search items with optional fuzzy matching\n */\n async search<T>(items: T[], query: string, fuzzy = false): Promise<{ item: T; index: number }[]> {\n return this.execute('search', { items, query, fuzzy });\n }\n\n /**\n * Filter items with predicate\n */\n async filter<T>(items: T[], predicate: (item: T, index: number) => boolean): Promise<T[]> {\n return this.execute<T[]>('filter', {\n items,\n predicate: predicate.toString(),\n });\n }\n\n /**\n * Sort items with comparator\n */\n async sort<T>(items: T[], comparator: (a: T, b: T) => number): Promise<T[]> {\n return this.execute<T[]>('sort', {\n items,\n comparator: comparator.toString(),\n });\n }\n\n /**\n * Check if workers are supported\n */\n get hasWorkerSupport(): boolean {\n return this.supportsWorkers && this.worker !== null;\n }\n\n /**\n * Check if SharedArrayBuffer is supported\n */\n get hasSharedArrayBuffer(): boolean {\n return this.supportsSharedArrayBuffer;\n }\n\n /**\n * Terminate worker\n */\n destroy(): void {\n if (this.worker) {\n // Reject all pending\n for (const [id, pending] of this.pending) {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Worker terminated'));\n }\n this.pending.clear();\n \n this.worker.terminate();\n this.worker = null;\n }\n }\n}\n\n/**\n * Singleton instance\n */\nlet workerManager: WorkerManager | null = null;\n\nexport function getWorkerManager(): WorkerManager {\n if (!workerManager) {\n workerManager = new WorkerManager();\n }\n return workerManager;\n}\n","/**\n * Performance telemetry module for tracking frame timing and performance metrics.\n * Uses PerformanceObserver for precise measurements.\n * \n * Tracks:\n * - Frame time (should be < 16.67ms for 60fps)\n * - Main thread work per frame (target < 8ms, ideal 4-6ms)\n * - Long tasks (> 50ms blocks)\n * - Memory usage (if available)\n */\n\nexport interface FrameMetrics {\n frameTime: number; // milliseconds\n fps: number;\n longTasks: number; // count of frames > 16.67ms\n droppedFrames: number;\n}\n\nexport interface PerformanceMetrics {\n frames: FrameMetrics;\n mainThreadWork: number; // average ms per frame\n longTaskCount: number;\n memory?: {\n usedJSHeapSize: number;\n totalJSHeapSize: number;\n jsHeapSizeLimit: number;\n };\n}\n\nexport class PerformanceTelemetry {\n private frameTimes: number[] = [];\n private longTasks: number = 0;\n private lastFrameTime: number = 0;\n private rafId: number = 0;\n private measuring = false;\n private observer: PerformanceObserver | null = null;\n private workTimes: number[] = [];\n\n constructor() {\n this.setupObserver();\n }\n\n /**\n * Setup PerformanceObserver for long tasks\n */\n private setupObserver(): void {\n if (typeof PerformanceObserver === 'undefined') return;\n\n try {\n this.observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.entryType === 'longtask' && entry.duration > 50) {\n this.longTasks++;\n }\n if (entry.entryType === 'measure') {\n this.workTimes.push(entry.duration);\n }\n }\n });\n\n // Observe long tasks if supported\n try {\n this.observer.observe({ entryTypes: ['longtask', 'measure'] });\n } catch {\n // Fallback to just measure if longtask not supported\n this.observer.observe({ entryTypes: ['measure'] });\n }\n } catch (err) {\n console.warn('PerformanceObserver not available', err);\n }\n }\n\n /**\n * Start measuring frame performance\n */\n start(): void {\n if (this.measuring) return;\n \n this.measuring = true;\n this.frameTimes = [];\n this.workTimes = [];\n this.longTasks = 0;\n this.lastFrameTime = performance.now();\n \n this.measureFrame();\n }\n\n /**\n * Stop measuring\n */\n stop(): void {\n this.measuring = false;\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n }\n }\n\n /**\n * Measure frame timing via requestAnimationFrame\n */\n private measureFrame = (): void => {\n if (!this.measuring) return;\n\n const now = performance.now();\n const frameTime = now - this.lastFrameTime;\n \n this.frameTimes.push(frameTime);\n \n // Keep last 60 frames (1 second at 60fps)\n if (this.frameTimes.length > 60) {\n this.frameTimes.shift();\n }\n \n this.lastFrameTime = now;\n this.rafId = requestAnimationFrame(this.measureFrame);\n };\n\n /**\n * Mark start of work for custom measurement\n */\n markStart(label: string): void {\n performance.mark(`${label}-start`);\n }\n\n /**\n * Mark end of work and measure duration\n */\n markEnd(label: string): number {\n performance.mark(`${label}-end`);\n performance.measure(label, `${label}-start`, `${label}-end`);\n \n const measure = performance.getEntriesByName(label, 'measure')[0];\n return measure ? measure.duration : 0;\n }\n\n /**\n * Get current metrics snapshot\n */\n getMetrics(): PerformanceMetrics {\n const avgFrameTime = this.frameTimes.length > 0\n ? this.frameTimes.reduce((a, b) => a + b, 0) / this.frameTimes.length\n : 0;\n \n const fps = avgFrameTime > 0 ? 1000 / avgFrameTime : 0;\n \n const longFrames = this.frameTimes.filter(t => t > 16.67).length;\n const droppedFrames = this.frameTimes.filter(t => t > 33.33).length; // > 2 frames\n \n const avgMainThreadWork = this.workTimes.length > 0\n ? this.workTimes.reduce((a, b) => a + b, 0) / this.workTimes.length\n : 0;\n\n const metrics: PerformanceMetrics = {\n frames: {\n frameTime: avgFrameTime,\n fps,\n longTasks: longFrames,\n droppedFrames,\n },\n mainThreadWork: avgMainThreadWork,\n longTaskCount: this.longTasks,\n };\n\n // Add memory info if available\n if ('memory' in performance && (performance as any).memory) {\n const mem = (performance as any).memory;\n metrics.memory = {\n usedJSHeapSize: mem.usedJSHeapSize,\n totalJSHeapSize: mem.totalJSHeapSize,\n jsHeapSizeLimit: mem.jsHeapSizeLimit,\n };\n }\n\n return metrics;\n }\n\n /**\n * Check if performance is acceptable\n */\n isPerformanceGood(): boolean {\n const metrics = this.getMetrics();\n \n // Target: 60fps (16.67ms), < 8ms main thread work, minimal long tasks\n return (\n metrics.frames.fps >= 55 && // Allow some variance\n metrics.mainThreadWork < 8 &&\n metrics.frames.longTasks < 3 // Max 5% long frames\n );\n }\n\n /**\n * Get detailed report as string\n */\n getReport(): string {\n const metrics = this.getMetrics();\n \n let report = '=== Performance Report ===\\n';\n report += `FPS: ${metrics.frames.fps.toFixed(2)}\\n`;\n report += `Avg Frame Time: ${metrics.frames.frameTime.toFixed(2)}ms\\n`;\n report += `Long Frames (>16.67ms): ${metrics.frames.longTasks}\\n`;\n report += `Dropped Frames (>33ms): ${metrics.frames.droppedFrames}\\n`;\n report += `Avg Main Thread Work: ${metrics.mainThreadWork.toFixed(2)}ms\\n`;\n report += `Long Tasks (>50ms): ${metrics.longTaskCount}\\n`;\n \n if (metrics.memory) {\n const usedMB = (metrics.memory.usedJSHeapSize / 1024 / 1024).toFixed(2);\n const limitMB = (metrics.memory.jsHeapSizeLimit / 1024 / 1024).toFixed(2);\n report += `Memory: ${usedMB}MB / ${limitMB}MB\\n`;\n }\n \n report += `Status: ${this.isPerformanceGood() ? '✓ GOOD' : '✗ POOR'}\\n`;\n \n return report;\n }\n\n /**\n * Reset all metrics\n */\n reset(): void {\n this.frameTimes = [];\n this.workTimes = [];\n this.longTasks = 0;\n }\n\n /**\n * Cleanup\n */\n destroy(): void {\n this.stop();\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n\n/**\n * Singleton instance\n */\nlet telemetry: PerformanceTelemetry | null = null;\n\nexport function getTelemetry(): PerformanceTelemetry {\n if (!telemetry) {\n telemetry = new PerformanceTelemetry();\n }\n return telemetry;\n}\n\n/**\n * Helper to measure async function execution\n */\nexport async function measureAsync<T>(\n label: string,\n fn: () => Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = performance.now();\n const result = await fn();\n const duration = performance.now() - start;\n \n console.log(`[Perf] ${label}: ${duration.toFixed(2)}ms`);\n \n return { result, duration };\n}\n\n/**\n * Helper to measure sync function execution\n */\nexport function measureSync<T>(\n label: string,\n fn: () => T\n): { result: T; duration: number } {\n const start = performance.now();\n const result = fn();\n const duration = performance.now() - start;\n \n console.log(`[Perf] ${label}: ${duration.toFixed(2)}ms`);\n \n return { result, duration };\n}\n","/**\n * Security utilities for CSP-compliant environments.\n * All utilities are opt-in and do not run by default.\n */\n\n/**\n * HTML Sanitizer interface - developers must provide their own implementation\n * (e.g., DOMPurify) or use the no-op default.\n */\nexport interface HTMLSanitizer {\n sanitize(html: string): string;\n}\n\n/**\n * No-op sanitizer - DOES NOT sanitize HTML.\n * Used by default to avoid forcing a dependency on sanitizer libraries.\n * Developers using untrusted data MUST provide a real sanitizer.\n */\nclass NoOpSanitizer implements HTMLSanitizer {\n sanitize(html: string): string {\n return html;\n }\n}\n\n/**\n * Registry for custom sanitizer implementation.\n * Defaults to no-op - developers must explicitly set a sanitizer.\n */\nlet globalSanitizer: HTMLSanitizer = new NoOpSanitizer();\n\n/**\n * Set a custom HTML sanitizer (e.g., DOMPurify).\n * \n * @example\n * import DOMPurify from 'dompurify';\n * setHTMLSanitizer({\n * sanitize: (html) => DOMPurify.sanitize(html)\n * });\n */\nexport function setHTMLSanitizer(sanitizer: HTMLSanitizer): void {\n globalSanitizer = sanitizer;\n}\n\n/**\n * Reset to the default no-op sanitizer.\n * Mainly for testing purposes.\n */\nexport function resetHTMLSanitizer(): void {\n globalSanitizer = new NoOpSanitizer();\n}\n\n/**\n * Get the current HTML sanitizer.\n */\nexport function getHTMLSanitizer(): HTMLSanitizer {\n return globalSanitizer;\n}\n\n/**\n * Sanitize HTML using the registered sanitizer.\n * WARNING: Default is no-op! Set a real sanitizer for untrusted content.\n * \n * @param html - HTML string to sanitize\n * @returns Sanitized HTML string\n */\nexport function sanitizeHTML(html: string): string {\n return globalSanitizer.sanitize(html);\n}\n\n/**\n * Create a text node (CSP-safe alternative to innerHTML for text content).\n * \n * @param text - Text content\n * @returns Text node\n */\nexport function createTextNode(text: string): Text {\n return document.createTextNode(text);\n}\n\n/**\n * Set text content safely (CSP-compliant).\n * \n * @param element - Target element\n * @param text - Text content\n */\nexport function setTextContent(element: Element, text: string): void {\n element.textContent = text;\n}\n\n/**\n * Create an element with attributes (CSP-safe).\n * No inline styles or event handlers.\n * \n * @param tagName - HTML tag name\n * @param attributes - Element attributes (excluding style and on* handlers)\n * @param textContent - Optional text content\n * @returns Created element\n */\nexport function createElement(\n tagName: string,\n attributes?: Record<string, string>,\n textContent?: string\n): HTMLElement {\n const el = document.createElement(tagName);\n \n if (attributes) {\n for (const [key, value] of Object.entries(attributes)) {\n // Block dangerous attributes\n if (key.startsWith('on') || key === 'style') {\n console.warn(`[NativeSelect Security] Blocked attribute: ${key}`);\n continue;\n }\n el.setAttribute(key, value);\n }\n }\n \n if (textContent !== undefined) {\n el.textContent = textContent;\n }\n \n return el;\n}\n\n/**\n * Set CSS custom properties (CSP-safe way to style elements).\n * \n * @param element - Target element\n * @param properties - CSS custom properties (e.g., { '--color': 'red' })\n */\nexport function setCSSProperties(element: HTMLElement, properties: Record<string, string>): void {\n for (const [key, value] of Object.entries(properties)) {\n if (!key.startsWith('--')) {\n console.warn(`[NativeSelect Security] CSS property must start with --: ${key}`);\n continue;\n }\n element.style.setProperty(key, value);\n }\n}\n\n/**\n * Feature detection utilities for CSP-restricted environments.\n */\nexport const CSPFeatures = {\n /**\n * Check if inline scripts are allowed (CSP: script-src 'unsafe-inline').\n */\n hasInlineScripts(): boolean {\n try {\n // Try to create a function (blocked by CSP: script-src without 'unsafe-eval')\n new Function('return true');\n return true;\n } catch {\n return false;\n }\n },\n\n /**\n * Check if eval is allowed (CSP: script-src 'unsafe-eval').\n */\n hasEval(): boolean {\n try {\n eval('true');\n return true;\n } catch {\n return false;\n }\n },\n\n /**\n * Check if SharedArrayBuffer is available.\n * Required for some Worker features, blocked without COOP/COEP headers.\n */\n hasSharedArrayBuffer(): boolean {\n return typeof SharedArrayBuffer !== 'undefined';\n },\n\n /**\n * Check if Web Workers are available and functional.\n */\n hasWorkers(): boolean {\n try {\n return typeof Worker !== 'undefined';\n } catch {\n return false;\n }\n },\n\n /**\n * Check if we're in a sandboxed iframe.\n */\n isSandboxed(): boolean {\n try {\n // Sandboxed iframes may not have access to parent\n return window !== window.parent && !window.parent;\n } catch {\n return true;\n }\n },\n\n /**\n * Check CSP policy via meta tag or SecurityPolicyViolationEvent.\n */\n getCSPDirectives(): string[] {\n const metaTags = document.querySelectorAll('meta[http-equiv=\"Content-Security-Policy\"]');\n const directives: string[] = [];\n \n metaTags.forEach((meta) => {\n const content = meta.getAttribute('content');\n if (content) {\n directives.push(content);\n }\n });\n \n return directives;\n }\n};\n\n/**\n * Runtime environment checks for degraded features.\n */\nexport interface EnvironmentCapabilities {\n canUseWorkers: boolean;\n canUseSharedArrayBuffer: boolean;\n canUseInlineScripts: boolean;\n canUseEval: boolean;\n isSandboxed: boolean;\n cspDirectives: string[];\n}\n\n/**\n * Detect environment capabilities once at initialization.\n */\nexport function detectEnvironment(): EnvironmentCapabilities {\n return {\n canUseWorkers: CSPFeatures.hasWorkers(),\n canUseSharedArrayBuffer: CSPFeatures.hasSharedArrayBuffer(),\n canUseInlineScripts: CSPFeatures.hasInlineScripts(),\n canUseEval: CSPFeatures.hasEval(),\n isSandboxed: CSPFeatures.isSandboxed(),\n cspDirectives: CSPFeatures.getCSPDirectives()\n };\n}\n\n/**\n * Validation for untrusted HTML in templates.\n * Logs warning if no sanitizer is configured.\n */\nexport function validateTemplate(html: string, source: string): string {\n if (globalSanitizer instanceof NoOpSanitizer) {\n console.warn(\n `[NativeSelect Security] Template from \"${source}\" contains HTML but no sanitizer is configured. ` +\n `This may be unsafe if the content is untrusted. ` +\n `Call setHTMLSanitizer() with a sanitizer like DOMPurify.`\n );\n }\n return sanitizeHTML(html);\n}\n\n/**\n * Check if a string looks like it might contain executable code.\n */\nexport function containsSuspiciousPatterns(str: string): boolean {\n const patterns = [\n /<script/i,\n /javascript:/i,\n /on\\w+\\s*=/i, // event handlers like onclick=\n /eval\\s*\\(/i,\n /Function\\s*\\(/i,\n /setTimeout\\s*\\(/i,\n /setInterval\\s*\\(/i\n ];\n \n return patterns.some(pattern => pattern.test(str));\n}\n\n/**\n * Escape HTML entities for text content.\n */\nexport function escapeHTML(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\n\n/**\n * Escape attribute values.\n */\nexport function escapeAttribute(attr: string): string {\n return attr\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n","/**\n * CSP-compliant styling utilities.\n * No inline styles or runtime style tag injection.\n * Uses CSS custom properties and class names only.\n */\n\n/**\n * Apply CSS classes to an element (CSP-safe).\n */\nexport function applyClasses(element: HTMLElement, classes: string[]): void {\n element.className = classes.filter(Boolean).join(' ');\n}\n\n/**\n * Toggle a CSS class (CSP-safe).\n */\nexport function toggleClass(element: HTMLElement, className: string, force?: boolean): void {\n element.classList.toggle(className, force);\n}\n\n/**\n * Set CSS custom properties (CSP-safe dynamic styling).\n * All properties must start with -- (CSS variables).\n * \n * @example\n * setCustomProperties(element, {\n * '--item-height': '48px',\n * '--selected-bg': '#0066cc'\n * });\n */\nexport function setCustomProperties(\n element: HTMLElement,\n properties: Record<string, string>\n): void {\n for (const [key, value] of Object.entries(properties)) {\n if (!key.startsWith('--')) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[NativeSelect CSP] Custom property must start with --: \"${key}\". Skipping.`\n );\n }\n continue;\n }\n element.style.setProperty(key, value);\n }\n}\n\n/**\n * Get a CSS custom property value.\n */\nexport function getCustomProperty(element: HTMLElement, propertyName: string): string {\n return getComputedStyle(element).getPropertyValue(propertyName).trim();\n}\n\n/**\n * Remove a CSS custom property.\n */\nexport function removeCustomProperty(element: HTMLElement, propertyName: string): void {\n element.style.removeProperty(propertyName);\n}\n\n/**\n * Predefined theme as CSS custom properties.\n * Can be overridden by consumers via CSS.\n */\nexport const defaultTheme = {\n '--ns-item-height': '40px',\n '--ns-item-padding': '8px 12px',\n '--ns-item-bg': 'transparent',\n '--ns-item-hover-bg': 'rgba(0, 0, 0, 0.05)',\n '--ns-item-selected-bg': 'rgba(0, 102, 204, 0.1)',\n '--ns-item-active-bg': 'rgba(0, 102, 204, 0.2)',\n '--ns-item-color': 'inherit',\n '--ns-item-selected-color': '#0066cc',\n '--ns-border-color': '#ccc',\n '--ns-border-radius': '4px',\n '--ns-focus-outline': '2px solid #0066cc',\n '--ns-font-size': '14px',\n '--ns-font-family': 'system-ui, -apple-system, sans-serif'\n};\n\n/**\n * Apply the default theme to an element.\n */\nexport function applyDefaultTheme(element: HTMLElement): void {\n setCustomProperties(element, defaultTheme);\n}\n\n/**\n * Static CSS for shadow DOM (no runtime injection).\n * This CSS is CSP-safe because it's defined at build time as a string constant,\n * not generated at runtime.\n */\nexport const shadowDOMStyles = `\n:host {\n display: block;\n box-sizing: border-box;\n font-family: var(--ns-font-family, system-ui, -apple-system, sans-serif);\n font-size: var(--ns-font-size, 14px);\n}\n\n* {\n box-sizing: border-box;\n}\n\n.ns-list {\n position: relative;\n overflow: auto;\n max-height: var(--ns-max-height, 300px);\n border: 1px solid var(--ns-border-color, #ccc);\n border-radius: var(--ns-border-radius, 4px);\n background: var(--ns-bg, white);\n outline: none;\n}\n\n.ns-list:focus {\n outline: var(--ns-focus-outline, 2px solid #0066cc);\n outline-offset: -2px;\n}\n\n.ns-item {\n padding: var(--ns-item-padding, 8px 12px);\n min-height: var(--ns-item-height, 40px);\n color: var(--ns-item-color, inherit);\n background: var(--ns-item-bg, transparent);\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n transition: background-color 0.15s ease;\n}\n\n.ns-item:hover {\n background: var(--ns-item-hover-bg, rgba(0, 0, 0, 0.05));\n}\n\n.ns-item[aria-selected=\"true\"] {\n background: var(--ns-item-selected-bg, rgba(0, 102, 204, 0.1));\n color: var(--ns-item-selected-color, #0066cc);\n}\n\n.ns-item[data-active=\"true\"] {\n background: var(--ns-item-active-bg, rgba(0, 102, 204, 0.2));\n}\n\n.ns-item[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.ns-viewport {\n position: relative;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.ns-spacer {\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n pointer-events: none;\n}\n\n/* Screen reader only */\n.ns-sr-only {\n position: absolute;\n left: -9999px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n/* Portal mode (teleported outside shadow DOM) */\n.ns-portal {\n position: fixed;\n z-index: var(--ns-portal-z-index, 9999);\n}\n\n/* CSP warning banner (only shown in development) */\n.ns-csp-warning {\n padding: 8px;\n background: #fff3cd;\n border: 1px solid #ffc107;\n border-radius: 4px;\n color: #856404;\n font-size: 12px;\n margin-bottom: 8px;\n}\n`;\n\n/**\n * Inject static styles into shadow root (CSP-safe).\n * Only called once during component initialization.\n */\nexport function injectShadowStyles(shadowRoot: ShadowRoot): void {\n const style = document.createElement('style');\n style.textContent = shadowDOMStyles;\n shadowRoot.appendChild(style);\n}\n\n/**\n * Check if element has overflow:hidden ancestors (portal fallback detection).\n */\nexport function hasOverflowHiddenAncestor(element: HTMLElement): boolean {\n let current: HTMLElement | null = element.parentElement;\n \n while (current && current !== document.body) {\n const overflow = getComputedStyle(current).overflow;\n if (overflow === 'hidden' || overflow === 'clip') {\n return true;\n }\n current = current.parentElement;\n }\n \n return false;\n}\n\n/**\n * Runtime warning for CSP violations (development only).\n */\nexport function warnCSPViolation(feature: string, fallback: string): void {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[NativeSelect CSP] Feature \"${feature}\" blocked by Content Security Policy. ` +\n `Falling back to \"${fallback}\".`\n );\n }\n}\n"],"names":["UnifiedOptionRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/renderers/contracts.ts","../../../src/utils/fenwick-tree.ts","../../../src/utils/dom-pool.ts","../../../src/utils/virtualizer.ts","../../../src/utils/custom-option-pool.ts","../../../src/utils/option-renderer.ts","../../../src/components/native-select.ts","../../../src/config/global-config.ts","../../../src/components/enhanced-select.ts","../../../src/components/select-option.ts","../../../src/utils/worker-manager.ts","../../../src/utils/telemetry.ts","../../../src/utils/security.ts","../../../src/utils/csp-styles.ts"],"sourcesContent":["import type { RendererHelpers } from '../types';\n\nexport type OptionTemplate = (item: unknown, index: number) => string;\nexport type OptionRenderer = (item: unknown, index: number, helpers: RendererHelpers) => HTMLElement;\n\nexport const createRendererHelpers = (onSelect: (item: unknown, index: number) => void): RendererHelpers => ({\n onSelect,\n getIndex: (node: Element | null) => {\n const el = node?.closest?.('[data-selectable]') as HTMLElement | null;\n if (!el) return null;\n const idx = Number(el.dataset.index);\n return Number.isFinite(idx) ? idx : null;\n },\n keyboardFocus: (index: number) => {\n const el = document.querySelector(`[data-selectable][data-index=\"${index}\"]`) as HTMLElement | null;\n el?.focus?.();\n }\n});\n\n// Fast template render path: string -> DOM via DocumentFragment, with delegation markers\nexport function renderTemplate(container: HTMLElement, items: unknown[], optionTemplate: OptionTemplate) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const wrapper = document.createElement('div');\n wrapper.innerHTML = optionTemplate(item, i);\n let el = wrapper.firstElementChild as HTMLElement | null;\n if (!el) {\n // Edge case: template produced multiple or zero root nodes; wrap children\n const wrap = document.createElement('div');\n wrap.setAttribute('data-selectable', '');\n wrap.setAttribute('data-index', String(i));\n while (wrapper.firstChild) wrap.appendChild(wrapper.firstChild);\n frag.appendChild(wrap);\n continue;\n }\n // Allow override if developer sets data-smilodon-handled=\"true\"\n if (!el.hasAttribute('data-smilodon-handled')) {\n el.setAttribute('data-selectable', '');\n el.setAttribute('data-index', String(i));\n }\n frag.appendChild(el);\n }\n container.replaceChildren(frag);\n}\n","/**\n * Fenwick Tree (Binary Indexed Tree) for O(log n) prefix sum queries and updates.\n * Used for cumulative height calculations in variable-height virtualization.\n * \n * Space: O(n)\n * Time: O(log n) for both query and update\n * \n * @see https://en.wikipedia.org/wiki/Fenwick_tree\n */\nexport class FenwickTree {\n private tree: Float64Array;\n private size: number;\n\n constructor(size: number) {\n this.size = size;\n // 1-indexed for cleaner bit manipulation\n this.tree = new Float64Array(size + 1);\n }\n\n /**\n * Add delta to index i (0-indexed input)\n * Complexity: O(log n)\n */\n add(index: number, delta: number): void {\n // Convert to 1-indexed\n let i = index + 1;\n while (i <= this.size) {\n this.tree[i] += delta;\n // Move to next relevant index: i + LSB(i)\n i += i & -i;\n }\n }\n\n /**\n * Get prefix sum from 0 to index (inclusive, 0-indexed input)\n * Complexity: O(log n)\n */\n sum(index: number): number {\n if (index < 0) return 0;\n // Convert to 1-indexed\n let i = index + 1;\n let result = 0;\n while (i > 0) {\n result += this.tree[i];\n // Move to parent: i - LSB(i)\n i -= i & -i;\n }\n return result;\n }\n\n /**\n * Get sum in range [left, right] (inclusive, 0-indexed)\n * Complexity: O(log n)\n */\n rangeSum(left: number, right: number): number {\n if (left > right) return 0;\n return this.sum(right) - (left > 0 ? this.sum(left - 1) : 0);\n }\n\n /**\n * Update value at index to newValue (handles delta internally)\n * Requires tracking current values externally or use add() directly\n * Complexity: O(log n)\n */\n update(index: number, oldValue: number, newValue: number): void {\n this.add(index, newValue - oldValue);\n }\n\n /**\n * Binary search to find the smallest index where sum(index) >= target\n * Useful for finding scroll position -> item index mapping\n * Complexity: O(log² n) or O(log n) with optimization\n * \n * @returns index (0-indexed) or -1 if not found\n */\n lowerBound(target: number): number {\n if (target <= 0) return 0;\n\n // Optimized binary search on Fenwick tree structure\n let pos = 0;\n let sum = 0;\n // Start from highest power of 2 <= size\n let bit = 1 << Math.floor(Math.log2(this.size));\n\n while (bit > 0) {\n if (pos + bit <= this.size) {\n const nextSum = sum + this.tree[pos + bit];\n if (nextSum < target) {\n pos += bit;\n sum = nextSum;\n }\n }\n bit >>= 1;\n }\n\n // Convert back to 0-indexed\n return pos;\n }\n\n /**\n * Reset all values to 0\n * Complexity: O(n)\n */\n reset(): void {\n this.tree.fill(0);\n }\n\n /**\n * Resize the tree (useful for dynamic item lists)\n * Complexity: O(n)\n */\n resize(newSize: number): void {\n if (newSize === this.size) return;\n \n const oldTree = this.tree;\n const oldSize = this.size;\n \n this.size = newSize;\n this.tree = new Float64Array(newSize + 1);\n \n // Copy existing values up to min(oldSize, newSize)\n const copySize = Math.min(oldSize, newSize);\n for (let i = 1; i <= copySize; i++) {\n this.tree[i] = oldTree[i];\n }\n }\n\n /**\n * Get current size\n */\n getSize(): number {\n return this.size;\n }\n\n /**\n * Export state for serialization (e.g., to SharedArrayBuffer)\n */\n exportState(): { size: number; tree: number[] } {\n return {\n size: this.size,\n tree: Array.from(this.tree),\n };\n }\n\n /**\n * Import state from serialization\n */\n static fromState(state: { size: number; tree: number[] }): FenwickTree {\n const ft = new FenwickTree(state.size);\n ft.tree = new Float64Array(state.tree);\n return ft;\n }\n}\n","/**\n * DOM Node Pool with LRU eviction and aggressive cleanup.\n * Reuses nodes to minimize GC pressure and layout thrashing.\n * \n * Features:\n * - LRU eviction when pool exceeds maxSize\n * - Style reset to avoid style pollution\n * - Event listener cleanup\n * - Performance telemetry integration\n */\n\ninterface PoolNode {\n node: HTMLElement;\n lastUsed: number; // performance.now() timestamp\n inUse: boolean;\n}\n\nexport interface DOMPoolOptions {\n /** Maximum pool size (default: renderedNodes + 32) */\n maxSize?: number;\n /** Factory function to create new nodes */\n factory: () => HTMLElement;\n /** Reset function called before reuse */\n reset?: (node: HTMLElement) => void;\n /** Enable performance telemetry */\n telemetry?: boolean;\n}\n\nexport class DOMPool {\n private pool: PoolNode[] = [];\n private factory: () => HTMLElement;\n private reset: (node: HTMLElement) => void;\n private maxSize: number;\n private telemetry: boolean;\n \n // Telemetry\n private hits = 0;\n private misses = 0;\n private evictions = 0;\n\n constructor(options: DOMPoolOptions) {\n this.factory = options.factory;\n this.reset = options.reset || this.defaultReset.bind(this);\n this.maxSize = options.maxSize || 64;\n this.telemetry = options.telemetry || false;\n }\n\n /**\n * Acquire a node from pool or create new one\n * Complexity: O(n) for LRU scan, amortized O(1) for small pools\n */\n acquire(): HTMLElement {\n const now = performance.now();\n\n // Find first available node\n for (let i = 0; i < this.pool.length; i++) {\n const poolNode = this.pool[i];\n if (!poolNode.inUse) {\n poolNode.inUse = true;\n poolNode.lastUsed = now;\n this.reset(poolNode.node);\n \n if (this.telemetry) this.hits++;\n return poolNode.node;\n }\n }\n\n // No available nodes, create new one\n const node = this.factory();\n this.pool.push({\n node,\n lastUsed: now,\n inUse: true,\n });\n\n if (this.telemetry) this.misses++;\n\n // Evict if pool too large\n if (this.pool.length > this.maxSize) {\n this.evictLRU();\n }\n\n return node;\n }\n\n /**\n * Release node back to pool\n * Complexity: O(n) to find node\n */\n release(node: HTMLElement): void {\n const poolNode = this.pool.find(p => p.node === node);\n if (poolNode) {\n poolNode.inUse = false;\n poolNode.lastUsed = performance.now();\n \n // Aggressive cleanup\n this.reset(poolNode.node);\n }\n }\n\n /**\n * Evict least recently used node\n * Complexity: O(n)\n */\n private evictLRU(): void {\n // Find LRU node that's not in use\n let lruIndex = -1;\n let oldestTime = Infinity;\n\n for (let i = 0; i < this.pool.length; i++) {\n const poolNode = this.pool[i];\n if (!poolNode.inUse && poolNode.lastUsed < oldestTime) {\n lruIndex = i;\n oldestTime = poolNode.lastUsed;\n }\n }\n\n if (lruIndex >= 0) {\n const evicted = this.pool.splice(lruIndex, 1)[0];\n // Full cleanup before GC\n this.deepCleanup(evicted.node);\n \n if (this.telemetry) this.evictions++;\n }\n }\n\n /**\n * Default reset: clear content, remove inline styles, remove attributes\n */\n private defaultReset(node: HTMLElement): void {\n // Clear content\n node.textContent = '';\n \n // Remove inline styles\n node.removeAttribute('style');\n \n // Remove data attributes (preserve data-index, data-selectable for delegation)\n const attrs = Array.from(node.attributes);\n for (const attr of attrs) {\n if (attr.name.startsWith('data-') && \n attr.name !== 'data-index' && \n attr.name !== 'data-selectable') {\n node.removeAttribute(attr.name);\n }\n }\n \n // Remove ARIA attributes that might pollute reuse\n const ariaAttrs = ['aria-selected', 'aria-checked', 'aria-disabled'];\n ariaAttrs.forEach(attr => node.removeAttribute(attr));\n }\n\n /**\n * Deep cleanup before eviction/destruction\n */\n private deepCleanup(node: HTMLElement): void {\n // Remove all event listeners by cloning (nuclear option)\n const clone = node.cloneNode(true) as HTMLElement;\n node.parentNode?.replaceChild(clone, node);\n \n // Clear references\n node.textContent = '';\n }\n\n /**\n * Clear entire pool\n */\n clear(): void {\n for (const poolNode of this.pool) {\n this.deepCleanup(poolNode.node);\n }\n this.pool = [];\n this.resetTelemetry();\n }\n\n /**\n * Adjust max pool size dynamically\n */\n setMaxSize(size: number): void {\n this.maxSize = size;\n // Evict excess nodes\n while (this.pool.length > this.maxSize) {\n this.evictLRU();\n }\n }\n\n /**\n * Get pool statistics\n */\n getStats() {\n const available = this.pool.filter(p => !p.inUse).length;\n const hitRate = this.hits + this.misses > 0 \n ? this.hits / (this.hits + this.misses) \n : 0;\n\n return {\n total: this.pool.length,\n available,\n inUse: this.pool.length - available,\n maxSize: this.maxSize,\n hits: this.hits,\n misses: this.misses,\n evictions: this.evictions,\n hitRate,\n };\n }\n\n /**\n * Reset telemetry counters\n */\n resetTelemetry(): void {\n this.hits = 0;\n this.misses = 0;\n this.evictions = 0;\n }\n}\n","import { FenwickTree } from './fenwick-tree.js';\nimport { DOMPool } from './dom-pool.js';\n\ntype ItemGetter = (index: number) => unknown;\n\nexport interface VirtualizerOptions {\n estimatedItemHeight: number;\n buffer: number;\n maxPoolExtra?: number; // extra nodes beyond window size\n measurementThreshold?: number; // px change to consider a height update\n enableTelemetry?: boolean; // enable pool stats\n}\n\nexport class Virtualizer {\n private container: HTMLElement;\n private itemsLength: number;\n private options: VirtualizerOptions;\n measuredHeights = new Map<number, number>();\n averageHeight: number;\n private pool: DOMPool;\n private itemGetter: ItemGetter;\n private fenwick?: FenwickTree;\n private activeNodes = new Map<number, HTMLElement>(); // index -> node mapping\n\n constructor(container: HTMLElement, itemsLength: number, itemGetter: ItemGetter, options: VirtualizerOptions) {\n this.container = container;\n this.itemsLength = itemsLength;\n this.itemGetter = itemGetter;\n this.options = options;\n this.averageHeight = options.estimatedItemHeight;\n \n // Initialize DOM pool with LRU eviction\n const maxPoolSize = Math.ceil((options.buffer * 2 + 10) * 1.5) + (options.maxPoolExtra ?? 32);\n this.pool = new DOMPool({\n maxSize: maxPoolSize,\n factory: () => {\n const div = document.createElement('div');\n div.setAttribute('data-selectable', '');\n return div;\n },\n reset: (node) => {\n // Clear content but preserve data-selectable\n node.textContent = '';\n node.removeAttribute('style');\n // Remove aria attributes\n node.removeAttribute('aria-selected');\n node.removeAttribute('aria-checked');\n },\n telemetry: options.enableTelemetry || false,\n });\n\n // Use Fenwick tree for large lists (>5000 items)\n if (itemsLength > 5000) {\n this.fenwick = new FenwickTree(itemsLength);\n // Initialize with estimated heights\n for (let i = 0; i < itemsLength; i++) {\n this.fenwick.add(i, options.estimatedItemHeight);\n }\n }\n \n this.container.style.willChange = 'transform';\n }\n\n computeWindow(scrollTop: number, viewportHeight: number) {\n const { buffer } = this.options;\n const startIndex = Math.max(Math.floor(scrollTop / this.averageHeight) - buffer, 0);\n const endIndex = Math.min(Math.ceil((scrollTop + viewportHeight) / this.averageHeight) + buffer, this.itemsLength - 1);\n const windowSize = Math.max(0, endIndex - startIndex + 1);\n \n // Adjust pool size dynamically based on window\n const newPoolSize = windowSize + (this.options.maxPoolExtra ?? 32);\n this.pool.setMaxSize(newPoolSize);\n \n return { startIndex, endIndex, windowSize };\n }\n\n cumulativeOffset(index: number): number {\n if (index <= 0) return 0;\n \n // Use Fenwick tree for O(log n) prefix sum\n if (this.fenwick) {\n return this.fenwick.sum(index - 1);\n }\n \n // Fallback: approximate using average height with sparse adjustments\n let total = 0;\n for (let i = 0; i < index; i++) {\n total += this.measuredHeights.get(i) ?? this.averageHeight;\n }\n return total;\n }\n\n acquireNode(index: number): HTMLElement {\n // Check if we already have this node active (reuse)\n const existing = this.activeNodes.get(index);\n if (existing) return existing;\n \n const node = this.pool.acquire();\n node.setAttribute('data-index', String(index));\n this.activeNodes.set(index, node);\n return node;\n }\n\n releaseNode(index: number): void {\n const node = this.activeNodes.get(index);\n if (node) {\n this.pool.release(node);\n this.activeNodes.delete(index);\n }\n }\n\n releaseExcess(activeIndices: Set<number>): void {\n // Release nodes not in active set\n for (const [index, node] of this.activeNodes) {\n if (!activeIndices.has(index)) {\n this.pool.release(node);\n this.activeNodes.delete(index);\n }\n }\n }\n\n render(startIndex: number, endIndex: number, updateNode: (node: HTMLElement, item: unknown, index: number) => void) {\n const frag = document.createDocumentFragment();\n const activeIndices = new Set<number>();\n \n for (let i = startIndex; i <= endIndex; i++) {\n const node = this.acquireNode(i);\n updateNode(node, this.itemGetter(i), i);\n frag.appendChild(node);\n activeIndices.add(i);\n \n // Measure on appear (deferred)\n queueMicrotask(() => this.measureOnAppear(node, i));\n }\n \n // Translate container by cumulative offset of startIndex\n const topOffset = this.cumulativeOffset(startIndex);\n this.container.style.transform = `translate3d(0, ${Math.round(topOffset * 100) / 100}px, 0)`;\n this.container.replaceChildren(frag);\n \n // Recycle nodes not in use\n requestAnimationFrame(() => this.releaseExcess(activeIndices));\n }\n\n measureOnAppear(node: HTMLElement, index: number) {\n const h = node.offsetHeight;\n const prev = this.measuredHeights.get(index);\n const threshold = this.options.measurementThreshold ?? 5;\n \n if (prev === undefined || Math.abs(prev - h) > threshold) {\n const oldValue = prev ?? this.averageHeight;\n this.measuredHeights.set(index, h);\n \n // Update Fenwick tree with new measurement\n if (this.fenwick) {\n this.fenwick.update(index, oldValue, h);\n }\n \n // Update running average (weighted by measured count)\n const count = this.measuredHeights.size;\n const total = Array.from(this.measuredHeights.values()).reduce((a, b) => a + b, 0);\n this.averageHeight = Math.round((total / count) * 100) / 100;\n }\n }\n\n /**\n * Get pool statistics (if telemetry enabled)\n */\n getPoolStats() {\n return this.pool.getStats();\n }\n\n /**\n * Update items length and resize Fenwick tree if needed\n */\n setItemsLength(newLength: number): void {\n this.itemsLength = newLength;\n \n if (this.fenwick) {\n this.fenwick.resize(newLength);\n } else if (newLength > 5000 && !this.fenwick) {\n // Activate Fenwick tree when crossing threshold\n this.fenwick = new FenwickTree(newLength);\n \n // Populate with existing measurements\n for (const [index, height] of this.measuredHeights) {\n this.fenwick.update(index, this.averageHeight, height);\n }\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.pool.clear();\n this.activeNodes.clear();\n this.measuredHeights.clear();\n if (this.fenwick) {\n this.fenwick.reset();\n }\n }\n}\n","/**\n * Custom Option Component Pool\n * \n * Manages lifecycle and recycling of custom option components for optimal performance.\n * Uses object pooling pattern to minimize allocation/deallocation overhead.\n */\n\nimport type { CustomOptionContract, CustomOptionContext, CustomOptionFactory } from '../types/custom-option';\n\ninterface PooledComponent {\n instance: CustomOptionContract;\n inUse: boolean;\n lastUsedIndex: number;\n}\n\n/**\n * Manages a pool of reusable custom option component instances\n */\nexport class CustomOptionPool {\n private _pool: Map<string, PooledComponent[]> = new Map();\n private _maxPoolSize: number;\n private _activeComponents: Map<number, CustomOptionContract> = new Map();\n \n constructor(maxPoolSize = 50) {\n this._maxPoolSize = maxPoolSize;\n }\n \n /**\n * Get or create a component instance for the given index\n * \n * @param factory - Factory function to create new instances\n * @param item - The data item\n * @param index - The option index\n * @param context - Context for mounting\n * @param container - DOM container for mounting\n * @returns Component instance\n */\n acquire(\n factory: CustomOptionFactory,\n item: unknown,\n index: number,\n context: CustomOptionContext,\n container: HTMLElement\n ): CustomOptionContract {\n const factoryKey = this._getFactoryKey(factory);\n \n // Try to find an available component in the pool\n const pooled = this._findAvailableComponent(factoryKey);\n \n let component: CustomOptionContract;\n \n if (pooled) {\n // Reuse pooled component\n component = pooled.instance;\n pooled.inUse = true;\n pooled.lastUsedIndex = index;\n } else {\n // Create new component\n try {\n component = factory(item, index);\n \n // Add to pool if under limit\n const pool = this._pool.get(factoryKey) || [];\n if (pool.length < this._maxPoolSize) {\n pool.push({\n instance: component,\n inUse: true,\n lastUsedIndex: index\n });\n this._pool.set(factoryKey, pool);\n }\n } catch (error) {\n console.error(`[CustomOptionPool] Failed to create component:`, error);\n throw error;\n }\n }\n \n // Mount the component\n try {\n component.mountOption(container, context);\n this._activeComponents.set(index, component);\n } catch (error) {\n console.error(`[CustomOptionPool] Failed to mount component at index ${index}:`, error);\n throw error;\n }\n \n return component;\n }\n \n /**\n * Release a component back to the pool\n * \n * @param index - The index of the component to release\n */\n release(index: number): void {\n const component = this._activeComponents.get(index);\n if (!component) return;\n \n try {\n component.unmountOption();\n } catch (error) {\n console.error(`[CustomOptionPool] Failed to unmount component at index ${index}:`, error);\n }\n \n this._activeComponents.delete(index);\n \n // Mark as available in pool\n for (const pool of this._pool.values()) {\n const pooled = pool.find(p => p.instance === component);\n if (pooled) {\n pooled.inUse = false;\n break;\n }\n }\n }\n \n /**\n * Release all active components\n */\n releaseAll(): void {\n const indices = Array.from(this._activeComponents.keys());\n indices.forEach(index => this.release(index));\n }\n \n /**\n * Update selection state for a component\n * \n * @param index - The index of the component\n * @param selected - Whether it's selected\n */\n updateSelection(index: number, selected: boolean): void {\n const component = this._activeComponents.get(index);\n if (component) {\n component.updateSelected(selected);\n }\n }\n \n /**\n * Update focused state for a component\n * \n * @param index - The index of the component\n * @param focused - Whether it has keyboard focus\n */\n updateFocused(index: number, focused: boolean): void {\n const component = this._activeComponents.get(index);\n if (component && component.updateFocused) {\n component.updateFocused(focused);\n }\n }\n \n /**\n * Get active component at index\n * \n * @param index - The option index\n * @returns The component instance or undefined\n */\n getComponent(index: number): CustomOptionContract | undefined {\n return this._activeComponents.get(index);\n }\n \n /**\n * Clear the entire pool\n */\n clear(): void {\n this.releaseAll();\n this._pool.clear();\n }\n \n /**\n * Get pool statistics for debugging\n */\n getStats(): { totalPooled: number; activeComponents: number; availableComponents: number } {\n let totalPooled = 0;\n let availableComponents = 0;\n \n for (const pool of this._pool.values()) {\n totalPooled += pool.length;\n availableComponents += pool.filter(p => !p.inUse).length;\n }\n \n return {\n totalPooled,\n activeComponents: this._activeComponents.size,\n availableComponents\n };\n }\n \n /**\n * Find an available component in the pool\n */\n private _findAvailableComponent(factoryKey: string): PooledComponent | undefined {\n const pool = this._pool.get(factoryKey);\n if (!pool) return undefined;\n \n return pool.find(p => !p.inUse);\n }\n \n /**\n * Generate a unique key for a factory function\n */\n private _getFactoryKey(factory: CustomOptionFactory): string {\n // Use function name or create a symbol\n return factory.name || `factory_${factory.toString().slice(0, 50)}`;\n }\n}\n","/**\n * Option Renderer\n * \n * Unified renderer that handles both lightweight (label/value) and \n * custom component rendering with consistent performance characteristics.\n */\n\nimport type { \n CustomOptionContract, \n CustomOptionContext, \n CustomOptionFactory, \n ExtendedSelectItem \n} from '../types/custom-option';\nimport { CustomOptionPool } from './custom-option-pool';\n\nexport interface OptionRendererConfig {\n enableRecycling: boolean;\n maxPoolSize: number;\n getValue: (item: unknown) => unknown;\n getLabel: (item: unknown) => string;\n getDisabled?: (item: unknown) => boolean;\n onSelect: (index: number) => void;\n onCustomEvent?: (index: number, eventName: string, data: unknown) => void;\n onError?: (index: number, error: Error) => void;\n}\n\n/**\n * Manages rendering of both lightweight and custom component options\n */\nexport class OptionRenderer {\n private _config: OptionRendererConfig;\n private _pool: CustomOptionPool;\n private _mountedElements: Map<number, HTMLElement> = new Map();\n \n constructor(config: OptionRendererConfig) {\n this._config = config;\n this._pool = new CustomOptionPool(config.maxPoolSize);\n }\n \n /**\n * Render an option (lightweight or custom component)\n * \n * @param item - The data item\n * @param index - The option index\n * @param isSelected - Whether the option is selected\n * @param isFocused - Whether the option has keyboard focus\n * @param uniqueId - Unique ID for the select instance\n * @returns The rendered DOM element\n */\n render(\n item: unknown,\n index: number,\n isSelected: boolean,\n isFocused: boolean,\n uniqueId: string\n ): HTMLElement {\n const extendedItem = item as ExtendedSelectItem;\n const value = this._config.getValue(item);\n const label = this._config.getLabel(item);\n const isDisabled = this._config.getDisabled ? this._config.getDisabled(item) : false;\n \n // Determine if this is a custom component or lightweight option\n const hasCustomComponent = extendedItem.optionComponent && typeof extendedItem.optionComponent === 'function';\n \n if (hasCustomComponent) {\n return this._renderCustomComponent(\n item,\n index,\n value,\n label,\n isSelected,\n isFocused,\n isDisabled,\n uniqueId,\n extendedItem.optionComponent!\n );\n } else {\n return this._renderLightweightOption(\n item,\n index,\n value,\n label,\n isSelected,\n isFocused,\n isDisabled,\n uniqueId\n );\n }\n }\n \n /**\n * Update selection state for an option\n * \n * @param index - The option index\n * @param selected - Whether it's selected\n */\n updateSelection(index: number, selected: boolean): void {\n const element = this._mountedElements.get(index);\n if (!element) return;\n \n // Check if this is a custom component\n const component = this._pool.getComponent(index);\n if (component) {\n component.updateSelected(selected);\n } else {\n // Update lightweight option\n if (selected) {\n element.classList.add('selected');\n element.setAttribute('aria-selected', 'true');\n } else {\n element.classList.remove('selected');\n element.setAttribute('aria-selected', 'false');\n }\n }\n }\n \n /**\n * Update focused state for an option\n * \n * @param index - The option index\n * @param focused - Whether it has keyboard focus\n */\n updateFocused(index: number, focused: boolean): void {\n const element = this._mountedElements.get(index);\n if (!element) return;\n \n // Check if this is a custom component\n const component = this._pool.getComponent(index);\n if (component) {\n if (component.updateFocused) {\n component.updateFocused(focused);\n }\n // Also update the element's focused class for styling\n element.classList.toggle('focused', focused);\n } else {\n // Update lightweight option\n element.classList.toggle('focused', focused);\n }\n }\n \n /**\n * Unmount and cleanup an option\n * \n * @param index - The option index\n */\n unmount(index: number): void {\n // Release custom component if exists\n this._pool.release(index);\n \n // Remove from mounted elements\n this._mountedElements.delete(index);\n }\n \n /**\n * Unmount all options\n */\n unmountAll(): void {\n this._pool.releaseAll();\n this._mountedElements.clear();\n }\n \n /**\n * Get pool statistics\n */\n getStats() {\n return this._pool.getStats();\n }\n \n /**\n * Render a lightweight option (traditional label/value)\n */\n private _renderLightweightOption(\n item: unknown,\n index: number,\n value: unknown,\n label: string,\n isSelected: boolean,\n isFocused: boolean,\n isDisabled: boolean,\n uniqueId: string\n ): HTMLElement {\n const option = document.createElement('div');\n option.className = 'option';\n if (isSelected) option.classList.add('selected');\n if (isFocused) option.classList.add('focused');\n if (isDisabled) option.classList.add('disabled');\n \n option.id = `${uniqueId}-option-${index}`;\n option.textContent = label;\n option.dataset.value = String(value);\n option.dataset.index = String(index);\n option.dataset.mode = 'lightweight';\n option.setAttribute('role', 'option');\n option.setAttribute('aria-selected', String(isSelected));\n if (isDisabled) {\n option.setAttribute('aria-disabled', 'true');\n }\n \n // Click handler\n if (!isDisabled) {\n option.addEventListener('click', () => {\n this._config.onSelect(index);\n });\n }\n \n this._mountedElements.set(index, option);\n \n \n return option;\n }\n \n /**\n * Render a custom component option\n */\n private _renderCustomComponent(\n item: unknown,\n index: number,\n value: unknown,\n label: string,\n isSelected: boolean,\n isFocused: boolean,\n isDisabled: boolean,\n uniqueId: string,\n factory: CustomOptionFactory\n ): HTMLElement {\n // Create wrapper container for the custom component\n const wrapper = document.createElement('div');\n wrapper.className = 'option option-custom';\n if (isSelected) wrapper.classList.add('selected');\n if (isFocused) wrapper.classList.add('focused');\n if (isDisabled) wrapper.classList.add('disabled');\n \n wrapper.id = `${uniqueId}-option-${index}`;\n wrapper.dataset.value = String(value);\n wrapper.dataset.index = String(index);\n wrapper.dataset.mode = 'component';\n wrapper.setAttribute('role', 'option');\n wrapper.setAttribute('aria-selected', String(isSelected));\n wrapper.setAttribute('aria-label', label); // Accessibility fallback\n if (isDisabled) {\n wrapper.setAttribute('aria-disabled', 'true');\n }\n \n // Create context for the custom component\n const context: CustomOptionContext = {\n item,\n index,\n value,\n label,\n isSelected,\n isFocused,\n isDisabled,\n onSelect: (idx: number) => {\n if (!isDisabled) {\n this._config.onSelect(idx);\n }\n },\n onCustomEvent: (eventName: string, data: unknown) => {\n if (this._config.onCustomEvent) {\n this._config.onCustomEvent(index, eventName, data);\n }\n }\n };\n \n // Acquire component from pool and mount it\n try {\n const component = this._pool.acquire(factory, item, index, context, wrapper);\n \n // Get the component's root element and attach click handler to wrapper\n const componentElement = component.getElement();\n \n if (!isDisabled) {\n // Use event delegation on the wrapper\n wrapper.addEventListener('click', (e) => {\n // Only trigger if clicking within the component\n if (wrapper.contains(e.target as Node)) {\n this._config.onSelect(index);\n }\n });\n }\n \n \n } catch (error) {\n console.error(`[OptionRenderer] Failed to render custom component at index ${index}:`, error);\n \n // Fallback to lightweight rendering on error\n wrapper.innerHTML = '';\n wrapper.textContent = label;\n wrapper.classList.add('component-error');\n \n if (this._config.onError) {\n this._config.onError(index, error as Error);\n }\n }\n \n this._mountedElements.set(index, wrapper);\n \n return wrapper;\n }\n}\n","import type { NativeSelectOptions, SelectEventName, SelectEventsDetailMap, RendererHelpers } from '../types';\nimport { createRendererHelpers, OptionRenderer, OptionTemplate, renderTemplate } from '../renderers/contracts';\nimport { Virtualizer } from '../utils/virtualizer';\nimport { OptionRenderer as UnifiedOptionRenderer } from '../utils/option-renderer';\nimport type { OptionRendererConfig } from '../utils/option-renderer';\n\nexport class NativeSelectElement extends HTMLElement {\n static get observedAttributes(): string[] {\n return ['placement', 'strategy', 'portal'];\n }\n\n private _options: NativeSelectOptions = {};\n private _shadow: ShadowRoot;\n private _listRoot: HTMLElement;\n private _items: unknown[] = [];\n private _helpers: RendererHelpers;\n private _virtualizer?: Virtualizer;\n private _unifiedRenderer?: UnifiedOptionRenderer;\n \n // Multi-select & interaction state\n private _selectedSet = new Set<number>(); // indices\n private _selectedItems = new Map<number, unknown>(); // index -> item\n private _activeIndex = -1;\n private _multi = false;\n private _typeBuffer = '';\n private _typeTimeout?: number;\n private _liveRegion?: HTMLElement;\n\n constructor() {\n super();\n this._shadow = this.attachShadow({ mode: 'open' });\n this._listRoot = document.createElement('div');\n this._listRoot.setAttribute('role', 'listbox');\n this._listRoot.setAttribute('tabindex', '0');\n this._shadow.appendChild(this._listRoot);\n\n // Live region for screen reader announcements\n this._liveRegion = document.createElement('div');\n this._liveRegion.setAttribute('role', 'status');\n this._liveRegion.setAttribute('aria-live', 'polite');\n this._liveRegion.style.cssText = 'position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;';\n this._shadow.appendChild(this._liveRegion);\n\n this._helpers = createRendererHelpers((item, index) => this._onSelect(item, index));\n \n // Delegated click\n this._listRoot.addEventListener('click', (e) => {\n const el = (e.target as HTMLElement).closest('[data-selectable]') as HTMLElement | null;\n if (!el) return;\n const idx = Number(el.dataset.index);\n const item = this._items[idx];\n this._onSelect(item, idx);\n });\n\n // Keyboard navigation\n this._listRoot.addEventListener('keydown', (e) => this._onKeydown(e));\n }\n\n connectedCallback() {\n // Initialize ARIA roles and open event\n this._listRoot.setAttribute('role', 'listbox');\n this._listRoot.setAttribute('aria-label', 'Options list');\n if (this._multi) this._listRoot.setAttribute('aria-multiselectable', 'true');\n this._initializeOptionRenderer();\n this._emit('open', {});\n }\n\n disconnectedCallback() {\n this._emit('close', {});\n // Cleanup unified renderer\n if (this._unifiedRenderer) {\n this._unifiedRenderer.unmountAll();\n }\n // Cleanup: remove listeners if any were added outside constructor\n if (this._typeTimeout) window.clearTimeout(this._typeTimeout);\n }\n\n private _initializeOptionRenderer(): void {\n const getValue = (item: unknown) => (item as any)?.value ?? item;\n const getLabel = (item: unknown) => (item as any)?.label ?? String(item);\n const getDisabled = (item: unknown) => (item as any)?.disabled ?? false;\n \n const rendererConfig: OptionRendererConfig = {\n enableRecycling: true,\n maxPoolSize: 100,\n getValue,\n getLabel,\n getDisabled,\n onSelect: (index: number) => {\n const item = this._items[index];\n this._onSelect(item, index);\n },\n onCustomEvent: (index: number, eventName: string, data: unknown) => {\n // Emit custom events from option components\n this.dispatchEvent(new CustomEvent('option:custom-event', {\n detail: { index, eventName, data },\n bubbles: true,\n composed: true\n }));\n },\n onError: (index: number, error: Error) => {\n console.error(`[NativeSelect] Error in option ${index}:`, error);\n this.dispatchEvent(new CustomEvent('option:mount-error', {\n detail: { index, error },\n bubbles: true,\n composed: true\n }));\n }\n };\n \n this._unifiedRenderer = new UnifiedOptionRenderer(rendererConfig);\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n switch (name) {\n case 'placement':\n this._options.placement = (newValue ?? undefined) as NativeSelectOptions['placement'];\n break;\n case 'strategy':\n this._options.strategy = (newValue ?? undefined) as NativeSelectOptions['strategy'];\n break;\n case 'portal':\n this._options.portal = newValue === 'true' ? true : newValue === 'false' ? false : undefined;\n break;\n }\n }\n\n set items(items: unknown[]) {\n this._items = items ?? [];\n // initialize virtualizer with estimated height (default 48) and buffer\n this._virtualizer = new Virtualizer(\n this._listRoot,\n this._items.length,\n (i) => this._items[i],\n { estimatedItemHeight: 48, buffer: 5 }\n );\n this.render();\n }\n\n get items() {\n return this._items;\n }\n\n set multi(value: boolean) {\n this._multi = value;\n if (value) {\n this._listRoot.setAttribute('aria-multiselectable', 'true');\n } else {\n this._listRoot.removeAttribute('aria-multiselectable');\n }\n }\n\n get multi() {\n return this._multi;\n }\n\n get selectedIndices(): number[] {\n return Array.from(this._selectedSet);\n }\n\n get selectedItems(): unknown[] {\n return Array.from(this._selectedItems.values());\n }\n\n set optionTemplate(template: OptionTemplate | undefined) {\n this._options.optionTemplate = template;\n this.render();\n }\n\n set optionRenderer(renderer: OptionRenderer | undefined) {\n this._options.optionRenderer = renderer;\n this.render();\n }\n\n /**\n * Public API: setItems() method for compatibility with EnhancedSelect\n * Accepts an array of items which can be:\n * - Simple primitives (string, number)\n * - Objects with {label, value} structure\n * - Objects with {label, value, optionComponent} for custom rendering (v1.2.0+)\n */\n setItems(items: unknown[]): void {\n this.items = items ?? [];\n }\n\n /**\n * Public API: setValue() method to programmatically select an item\n * For single select: clears selection and selects the item matching the value\n * For multi-select: adds to selection if not already selected\n */\n setValue(value: unknown): void {\n if (value === null || value === undefined || value === '') {\n // Clear selection\n this._selectedSet.clear();\n this._selectedItems.clear();\n this._activeIndex = -1;\n this.render();\n return;\n }\n\n // Find item by value\n const index = this._items.findIndex(item => {\n if (typeof item === 'object' && item !== null && 'value' in item) {\n return (item as any).value === value;\n }\n return item === value;\n });\n\n if (index >= 0) {\n const item = this._items[index];\n if (!this._multi) {\n // Single select: clear and set\n this._selectedSet.clear();\n this._selectedItems.clear();\n }\n this._selectedSet.add(index);\n this._selectedItems.set(index, item);\n this._activeIndex = index;\n this.render();\n }\n }\n\n /**\n * Public API: getValue() method to get currently selected value(s)\n * Returns single value for single-select, array for multi-select\n */\n getValue(): unknown | unknown[] {\n const values = Array.from(this._selectedItems.values()).map(item => {\n if (typeof item === 'object' && item !== null && 'value' in item) {\n return (item as any).value;\n }\n return item;\n });\n \n return this._multi ? values : (values[0] ?? null);\n }\n\n render() {\n const { optionTemplate, optionRenderer } = this._options;\n const viewportHeight = this.getBoundingClientRect().height || 300;\n const scrollTop = this.scrollTop || 0;\n \n // Update aria-activedescendant\n if (this._activeIndex >= 0) {\n this._listRoot.setAttribute('aria-activedescendant', `option-${this._activeIndex}`);\n } else {\n this._listRoot.removeAttribute('aria-activedescendant');\n }\n\n // Check if any items have custom components\n const hasCustomComponents = this._items.some(item => \n typeof item === 'object' && \n item !== null && \n Object.prototype.hasOwnProperty.call(item, 'optionComponent') &&\n typeof (item as any).optionComponent === 'function'\n );\n\n // Use unified renderer if we have custom components\n if (hasCustomComponents && this._unifiedRenderer) {\n this._listRoot.replaceChildren(); // Clear existing content\n const frag = document.createDocumentFragment();\n \n for (let i = 0; i < this._items.length; i++) {\n const item = this._items[i];\n const isSelected = this._selectedSet.has(i);\n const isFocused = this._activeIndex === i;\n \n const optionElement = this._unifiedRenderer.render(\n item,\n i,\n isSelected,\n isFocused,\n `native-${this.getAttribute('id') || 'default'}`\n );\n \n frag.appendChild(optionElement);\n }\n \n this._listRoot.appendChild(frag);\n return;\n }\n\n // Fall back to original rendering logic for lightweight options\n if (this._virtualizer) {\n const { startIndex, endIndex } = this._virtualizer.computeWindow(scrollTop, viewportHeight);\n this._virtualizer.render(startIndex, endIndex, (node, item, i) => {\n this._applyOptionAttrs(node, i);\n if (optionRenderer) {\n const el = optionRenderer(item, i, this._helpers);\n // replace node contents\n node.replaceChildren(el);\n } else if (optionTemplate) {\n const wrapper = document.createElement('div');\n wrapper.innerHTML = optionTemplate(item, i);\n const el = wrapper.firstElementChild as HTMLElement | null;\n node.replaceChildren(el ?? document.createTextNode(String(item)));\n } else {\n // Handle {label, value} objects or primitives\n const displayText = (typeof item === 'object' && item !== null && 'label' in item)\n ? String((item as any).label)\n : String(item);\n node.textContent = displayText;\n }\n });\n return;\n }\n const frag = document.createDocumentFragment();\n for (let i = 0; i < this._items.length; i++) {\n const item = this._items[i];\n if (optionRenderer) {\n const el = optionRenderer(item, i, this._helpers);\n if (!el.hasAttribute('data-selectable')) {\n el.setAttribute('data-selectable', '');\n el.setAttribute('data-index', String(i));\n }\n this._applyOptionAttrs(el, i);\n frag.appendChild(el);\n } else if (optionTemplate) {\n // Fast path: render all via DocumentFragment in one call\n renderTemplate(this._listRoot, this._items, optionTemplate);\n // Apply ARIA attrs after template render\n this._applyAriaToAll();\n return; // rendering complete\n } else {\n const el = document.createElement('div');\n // Handle {label, value} objects or primitives\n const displayText = (typeof item === 'object' && item !== null && 'label' in item)\n ? String((item as any).label)\n : String(item);\n el.textContent = displayText;\n el.setAttribute('data-selectable', '');\n el.setAttribute('data-index', String(i));\n this._applyOptionAttrs(el, i);\n frag.appendChild(el);\n }\n }\n this._listRoot.replaceChildren(frag);\n }\n\n private _applyOptionAttrs(node: HTMLElement, index: number) {\n node.setAttribute('role', 'option');\n node.id = `option-${index}`;\n if (this._selectedSet.has(index)) {\n node.setAttribute('aria-selected', 'true');\n } else {\n node.setAttribute('aria-selected', 'false');\n }\n }\n\n private _applyAriaToAll() {\n const children = Array.from(this._listRoot.children) as HTMLElement[];\n for (const child of children) {\n const idx = Number(child.dataset.index);\n if (Number.isFinite(idx)) this._applyOptionAttrs(child, idx);\n }\n }\n\n private _emit<K extends SelectEventName>(name: K, detail: SelectEventsDetailMap[K]) {\n this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true }));\n }\n\n // Multi-select and interaction methods\n private _onSelect(item: unknown, index: number) {\n if (this._multi) {\n if (this._selectedSet.has(index)) {\n this._selectedSet.delete(index);\n this._selectedItems.delete(index);\n } else {\n this._selectedSet.add(index);\n this._selectedItems.set(index, item);\n }\n } else {\n this._selectedSet.clear();\n this._selectedItems.clear();\n this._selectedSet.add(index);\n this._selectedItems.set(index, item);\n }\n this._activeIndex = index;\n this.render();\n \n // Emit with all required fields\n const selected = this._selectedSet.has(index);\n const value = (item as any)?.value ?? item;\n const label = (item as any)?.label ?? String(item);\n \n this._emit('select', { \n item, \n index, \n value,\n label,\n selected,\n multi: this._multi \n });\n \n // Emit 'change' event for better React compatibility\n this._emit('change', { \n selectedItems: Array.from(this._selectedItems.values()),\n selectedValues: Array.from(this._selectedItems.values()).map(i => (i as any)?.value ?? i),\n selectedIndices: Array.from(this._selectedSet)\n });\n \n this._announce(`Selected ${label}`);\n }\n\n private _onKeydown(e: KeyboardEvent) {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this._moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._moveActive(-1);\n break;\n case 'Home':\n e.preventDefault();\n this._setActive(0);\n break;\n case 'End':\n e.preventDefault();\n this._setActive(this._items.length - 1);\n break;\n case 'PageDown':\n e.preventDefault();\n this._moveActive(10);\n break;\n case 'PageUp':\n e.preventDefault();\n this._moveActive(-10);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this._activeIndex >= 0) {\n const item = this._items[this._activeIndex];\n this._onSelect(item, this._activeIndex);\n }\n break;\n case 'Escape':\n e.preventDefault();\n this._emit('close', {});\n break;\n default:\n // Type-ahead buffer\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n this._onType(e.key);\n }\n break;\n }\n }\n\n private _moveActive(delta: number) {\n const next = Math.max(0, Math.min(this._items.length - 1, this._activeIndex + delta));\n this._setActive(next);\n }\n\n private _setActive(index: number) {\n this._activeIndex = index;\n this.render();\n this._scrollToActive();\n this._announce(`Navigated to ${String(this._items[index])}`);\n }\n\n private _scrollToActive() {\n const el = this._shadow.getElementById(`option-${this._activeIndex}`);\n el?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n\n private _onType(char: string) {\n if (this._typeTimeout) window.clearTimeout(this._typeTimeout);\n this._typeBuffer += char.toLowerCase();\n this._typeTimeout = window.setTimeout(() => {\n this._typeBuffer = '';\n }, 400);\n \n // Find first matching item\n const match = this._items.findIndex((item) => String(item).toLowerCase().startsWith(this._typeBuffer));\n if (match >= 0) {\n this._setActive(match);\n }\n }\n\n private _announce(msg: string) {\n if (this._liveRegion) {\n this._liveRegion.textContent = msg;\n setTimeout(() => {\n if (this._liveRegion) this._liveRegion.textContent = '';\n }, 1000);\n }\n }\n\n // Focus management\n focus() {\n this._listRoot.focus();\n }\n}\n\ncustomElements.define('smilodon-select', NativeSelectElement);\n","/**\n * Global Configuration System for Select Components\n * Allows users to define default behaviors that can be overridden at component level\n */\n\nexport interface ScrollToSelectedConfig {\n /** Whether to scroll to selected item when dropdown opens/closes */\n enabled: boolean;\n /** Which selected item to scroll to in multi-select mode: 'first' | 'last' */\n multiSelectTarget: 'first' | 'last';\n /** Scroll behavior */\n behavior?: ScrollBehavior;\n /** Scroll block alignment */\n block?: ScrollLogicalPosition;\n}\n\nexport interface LoadMoreConfig {\n /** Enable load more functionality */\n enabled: boolean;\n /** Number of items to load per increment */\n itemsPerLoad: number;\n /** Threshold (in pixels from bottom) to trigger auto-load */\n threshold?: number;\n /** Show loading indicator */\n showLoader?: boolean;\n}\n\nexport interface BusyBucketConfig {\n /** Enable busy/loading state bucket */\n enabled: boolean;\n /** Show spinner in bucket */\n showSpinner?: boolean;\n /** Custom loading message */\n message?: string;\n /** Minimum display time (ms) to prevent flashing */\n minDisplayTime?: number;\n}\n\nexport interface ExpandableConfig {\n /** Enable expandable dropdown height */\n enabled: boolean;\n /** Height when collapsed (default) */\n collapsedHeight?: string;\n /** Height when expanded */\n expandedHeight?: string;\n /** Label for the expand button */\n expandLabel?: string;\n /** Label for the collapse button */\n collapseLabel?: string;\n}\n\nexport interface SelectionConfig {\n /** Single or multi-select mode */\n mode: 'single' | 'multi';\n /** Allow deselection in single-select mode */\n allowDeselect?: boolean;\n /** Maximum selections in multi-select (0 = unlimited) */\n maxSelections?: number;\n /** Show remove button on selected options in multi-select */\n showRemoveButton?: boolean;\n /** Close dropdown after selection in single-select */\n closeOnSelect?: boolean;\n}\n\nexport interface StyleConfig {\n /** Container styles */\n container?: Partial<CSSStyleDeclaration>;\n /** Dropdown styles */\n dropdown?: Partial<CSSStyleDeclaration>;\n /** Option item styles */\n option?: Partial<CSSStyleDeclaration>;\n /** Selected option styles */\n selectedOption?: Partial<CSSStyleDeclaration>;\n /** Disabled option styles */\n disabledOption?: Partial<CSSStyleDeclaration>;\n /** Hover option styles */\n hoverOption?: Partial<CSSStyleDeclaration>;\n /** Input field styles */\n input?: Partial<CSSStyleDeclaration>;\n /** Loading indicator styles */\n loader?: Partial<CSSStyleDeclaration>;\n /** Custom CSS class names */\n classNames?: {\n container?: string;\n dropdown?: string;\n option?: string;\n selectedOption?: string;\n disabledOption?: string;\n input?: string;\n loader?: string;\n removeButton?: string;\n };\n}\n\nexport interface ServerSideConfig {\n /** Enable server-side data management */\n enabled: boolean;\n /** Initial selected value(s) from server */\n initialSelectedValues?: unknown[];\n /** Initial selected indices from server */\n initialSelectedIndices?: number[];\n /** Function to fetch pre-selected items not in current page */\n fetchSelectedItems?: (values: unknown[]) => Promise<unknown[]>;\n /** Value accessor function */\n getValueFromItem?: (item: unknown) => unknown;\n /** Label accessor function */\n getLabelFromItem?: (item: unknown) => string;\n}\n\nexport interface InfiniteScrollConfig {\n /** Enable infinite scroll */\n enabled: boolean;\n /** Page size for pagination */\n pageSize: number;\n /** Initial page */\n initialPage?: number;\n /** Cache loaded pages */\n cachePages?: boolean;\n /** Maximum cached pages (LRU eviction) */\n maxCachedPages?: number;\n /** Preload adjacent pages */\n preloadAdjacent?: boolean;\n /** Scroll restoration strategy for selected items on distant pages */\n scrollRestoration?: 'auto' | 'manual' | 'disabled';\n}\n\nexport interface CallbackConfig {\n /** Called when option is selected/deselected */\n onSelect?: (data: { item: unknown; index: number; value: unknown; label: string; selected: boolean }) => void;\n /** Called when dropdown opens */\n onOpen?: () => void;\n /** Called when dropdown closes */\n onClose?: () => void;\n /** Called when search query changes */\n onSearch?: (query: string) => void;\n /** Called when more items are loaded */\n onLoadMore?: (page: number) => void;\n /** Called when selection changes */\n onChange?: (selectedItems: unknown[], selectedValues: unknown[]) => void;\n /** Called on error */\n onError?: (error: Error) => void;\n}\n\nexport interface GlobalSelectConfig {\n /** Selection behavior */\n selection: SelectionConfig;\n /** Scroll to selected configuration */\n scrollToSelected: ScrollToSelectedConfig;\n /** Load more configuration */\n loadMore: LoadMoreConfig;\n /** Busy bucket configuration */\n busyBucket: BusyBucketConfig;\n /** Style customization */\n styles: StyleConfig;\n /** Server-side configuration */\n serverSide: ServerSideConfig;\n /** Infinite scroll configuration */\n infiniteScroll: InfiniteScrollConfig;\n /** Expandable dropdown configuration */\n expandable: ExpandableConfig;\n /** Callbacks */\n callbacks: CallbackConfig;\n /** Enable/disable entire component */\n enabled: boolean;\n /** Enable search/filter */\n searchable?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Virtualization */\n virtualize?: boolean;\n /** Estimated item height for virtualization */\n estimatedItemHeight?: number;\n}\n\n/**\n * Default global configuration\n */\nconst defaultConfig: GlobalSelectConfig = {\n selection: {\n mode: 'single',\n allowDeselect: false,\n maxSelections: 0,\n showRemoveButton: true,\n closeOnSelect: true,\n },\n scrollToSelected: {\n enabled: true,\n multiSelectTarget: 'first',\n behavior: 'smooth',\n block: 'nearest',\n },\n loadMore: {\n enabled: false,\n itemsPerLoad: 3,\n threshold: 100,\n showLoader: true,\n },\n busyBucket: {\n enabled: true,\n showSpinner: true,\n message: 'Loading...',\n minDisplayTime: 200,\n },\n styles: {\n classNames: {},\n },\n serverSide: {\n enabled: false,\n getValueFromItem: (item: unknown) => (item as any)?.value ?? item,\n getLabelFromItem: (item: unknown) => (item as any)?.label ?? String(item),\n },\n infiniteScroll: {\n enabled: false,\n pageSize: 20,\n initialPage: 1,\n cachePages: true,\n maxCachedPages: 10,\n preloadAdjacent: true,\n scrollRestoration: 'auto',\n },\n expandable: {\n enabled: false,\n collapsedHeight: '300px',\n expandedHeight: '500px',\n expandLabel: 'Show more',\n collapseLabel: 'Show less',\n },\n callbacks: {},\n enabled: true,\n searchable: false,\n placeholder: 'Select an option...',\n virtualize: true,\n estimatedItemHeight: 48,\n};\n\n/**\n * Global configuration instance\n */\nclass SelectConfigManager {\n private config: GlobalSelectConfig;\n\n constructor() {\n this.config = this.deepClone(defaultConfig);\n }\n\n /**\n * Get current global configuration\n */\n getConfig(): Readonly<GlobalSelectConfig> {\n return this.config;\n }\n\n /**\n * Update global configuration (deep merge)\n */\n updateConfig(updates: Partial<GlobalSelectConfig>): void {\n this.config = this.deepMerge(this.config, updates);\n }\n\n /**\n * Reset to default configuration\n */\n resetConfig(): void {\n this.config = this.deepClone(defaultConfig);\n }\n\n /**\n * Merge component-level config with global config\n * Component-level config takes precedence\n */\n mergeWithComponentConfig(componentConfig: Partial<GlobalSelectConfig>): GlobalSelectConfig {\n return this.deepMerge(this.deepClone(this.config), componentConfig);\n }\n\n private deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n\n private deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const result = { ...target };\n \n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n \n if (sourceValue && typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n result[key] = this.deepMerge(\n targetValue && typeof targetValue === 'object' ? targetValue : {},\n sourceValue\n ) as any;\n } else {\n result[key] = sourceValue as any;\n }\n }\n }\n \n return result;\n }\n}\n\n/**\n * Singleton instance\n */\nexport const selectConfig = new SelectConfigManager();\n\n/**\n * Helper function to configure select globally\n */\nexport function configureSelect(config: Partial<GlobalSelectConfig>): void {\n selectConfig.updateConfig(config);\n}\n\n/**\n * Helper function to reset select configuration\n */\nexport function resetSelectConfig(): void {\n selectConfig.resetConfig();\n}\n","/**\n * Enhanced Select Component\n * Implements all advanced features: infinite scroll, load more, busy state, \n * server-side selection, and full customization\n */\n\nimport type { GlobalSelectConfig } from '../config/global-config';\nimport { selectConfig } from '../config/global-config';\nimport type { SelectEventName, SelectEventsDetailMap, GroupedItem } from '../types';\nimport { SelectOption } from './select-option';\n\ninterface PageCache {\n [page: number]: unknown[];\n}\n\ninterface SelectState {\n isOpen: boolean;\n isBusy: boolean;\n isSearching: boolean;\n currentPage: number;\n totalPages: number;\n selectedIndices: Set<number>;\n selectedItems: Map<number, unknown>;\n activeIndex: number;\n searchQuery: string;\n loadedItems: unknown[];\n groupedItems: GroupedItem[];\n preserveScrollPosition: boolean;\n lastScrollPosition: number;\n lastNotifiedQuery: string | null;\n lastNotifiedResultCount: number;\n isExpanded: boolean;\n}\n\nexport class EnhancedSelect extends HTMLElement {\n private _config: GlobalSelectConfig;\n private _shadow: ShadowRoot;\n private _container: HTMLElement;\n private _inputContainer: HTMLElement;\n private _input: HTMLInputElement;\n private _dropdown: HTMLElement;\n private _optionsContainer: HTMLElement;\n private _loadMoreTrigger?: HTMLElement;\n private _busyBucket?: HTMLElement;\n private _liveRegion?: HTMLElement;\n private _state: SelectState;\n private _pageCache: PageCache = {};\n private _resizeObserver?: ResizeObserver;\n private _intersectionObserver?: IntersectionObserver;\n private _busyTimeout?: number;\n private _searchTimeout?: number;\n private _typeBuffer = '';\n private _typeTimeout?: number;\n private _uniqueId: string;\n private _hasError = false;\n private _errorMessage = '';\n private _boundArrowClick: ((e: Event) => void) | null = null;\n private _arrowContainer?: HTMLElement;\n\n constructor() {\n super();\n \n this._shadow = this.attachShadow({ mode: 'open' });\n this._uniqueId = `enhanced-select-${Math.random().toString(36).substr(2, 9)}`;\n \n // Merge global config with component-level config\n this._config = selectConfig.getConfig() as GlobalSelectConfig;\n \n // Initialize state\n this._state = {\n isOpen: false,\n isBusy: false,\n isSearching: false,\n currentPage: this._config.infiniteScroll.initialPage || 1,\n totalPages: 1,\n selectedIndices: new Set(),\n selectedItems: new Map(),\n activeIndex: -1,\n searchQuery: '',\n loadedItems: [],\n groupedItems: [],\n preserveScrollPosition: false,\n lastScrollPosition: 0,\n lastNotifiedQuery: null,\n lastNotifiedResultCount: 0,\n isExpanded: false,\n };\n \n // Create DOM structure\n this._container = this._createContainer();\n this._inputContainer = this._createInputContainer();\n this._input = this._createInput();\n this._arrowContainer = this._createArrowContainer();\n this._dropdown = this._createDropdown();\n this._optionsContainer = this._createOptionsContainer();\n this._liveRegion = this._createLiveRegion();\n \n // Initialize styles BEFORE assembling DOM (order matters in shadow DOM)\n this._initializeStyles();\n this._assembleDOM();\n this._attachEventListeners();\n this._initializeObservers();\n }\n\n connectedCallback(): void {\n \n // WORKAROUND: Force display style on host element for Angular compatibility\n // Angular's rendering seems to not apply :host styles correctly in some cases\n // Must be done in connectedCallback when element is attached to DOM\n this.style.display = 'block';\n this.style.width = '100%';\n \n // Load initial data if server-side is enabled\n if (this._config.serverSide.enabled && this._config.serverSide.initialSelectedValues) {\n this._loadInitialSelectedItems();\n }\n \n // Emit open event if configured to start open\n if (this._config.callbacks.onOpen) {\n this._config.callbacks.onOpen();\n }\n }\n\n disconnectedCallback(): void {\n // Cleanup observers\n this._resizeObserver?.disconnect();\n this._intersectionObserver?.disconnect();\n if (this._busyTimeout) clearTimeout(this._busyTimeout);\n if (this._typeTimeout) clearTimeout(this._typeTimeout);\n if (this._searchTimeout) clearTimeout(this._searchTimeout);\n \n // Cleanup arrow click listener\n if (this._boundArrowClick && this._arrowContainer) {\n this._arrowContainer.removeEventListener('click', this._boundArrowClick);\n }\n }\n\n private _createContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'select-container';\n \n if (this._config.styles.classNames?.container) {\n container.className += ' ' + this._config.styles.classNames.container;\n }\n \n if (this._config.styles.container) {\n Object.assign(container.style, this._config.styles.container);\n }\n \n return container;\n }\n\n private _createInputContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'input-container';\n return container;\n }\n\n private _createInput(): HTMLInputElement {\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'select-input';\n input.placeholder = this._config.placeholder || 'Select an option...';\n input.disabled = !this._config.enabled;\n input.readOnly = !this._config.searchable;\n \n // Update readonly when input is focused if searchable\n input.addEventListener('focus', () => {\n if (this._config.searchable) {\n input.readOnly = false;\n }\n });\n \n if (this._config.styles.classNames?.input) {\n input.className += ' ' + this._config.styles.classNames.input;\n }\n \n if (this._config.styles.input) {\n Object.assign(input.style, this._config.styles.input);\n }\n \n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-expanded', 'false');\n input.setAttribute('aria-haspopup', 'listbox');\n input.setAttribute('aria-autocomplete', this._config.searchable ? 'list' : 'none');\n \n return input;\n }\n\n private _createDropdown(): HTMLElement {\n const dropdown = document.createElement('div');\n dropdown.className = 'select-dropdown';\n dropdown.style.display = 'none';\n \n if (this._config.styles.classNames?.dropdown) {\n dropdown.className += ' ' + this._config.styles.classNames.dropdown;\n }\n \n if (this._config.styles.dropdown) {\n Object.assign(dropdown.style, this._config.styles.dropdown);\n }\n \n dropdown.setAttribute('role', 'listbox');\n if (this._config.selection.mode === 'multi') {\n dropdown.setAttribute('aria-multiselectable', 'true');\n }\n \n return dropdown;\n }\n\n private _createOptionsContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'options-container';\n return container;\n }\n\n private _createLiveRegion(): HTMLElement {\n const liveRegion = document.createElement('div');\n liveRegion.setAttribute('role', 'status');\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.style.cssText = 'position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;';\n return liveRegion;\n }\n\n private _createArrowContainer(): HTMLElement {\n const container = document.createElement('div');\n container.className = 'dropdown-arrow-container';\n container.innerHTML = `\n <svg class=\"dropdown-arrow\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n return container;\n }\n\n private _assembleDOM(): void {\n \n this._inputContainer.appendChild(this._input);\n \n if (this._arrowContainer) {\n this._inputContainer.appendChild(this._arrowContainer);\n }\n \n this._container.appendChild(this._inputContainer);\n \n this._dropdown.appendChild(this._optionsContainer);\n \n this._container.appendChild(this._dropdown);\n \n this._shadow.appendChild(this._container);\n \n if (this._liveRegion) {\n this._shadow.appendChild(this._liveRegion);\n }\n \n \n // Set ARIA relationships\n const listboxId = `${this._uniqueId}-listbox`;\n this._dropdown.id = listboxId;\n this._input.setAttribute('aria-controls', listboxId);\n this._input.setAttribute('aria-owns', listboxId);\n }\n\n private _initializeStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n :host {\n display: block;\n position: relative;\n width: 100%;\n }\n \n .select-container {\n position: relative;\n width: 100%;\n }\n \n .input-container {\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n padding: 6px 52px 6px 8px;\n min-height: 44px;\n background: white;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n box-sizing: border-box;\n transition: all 0.2s ease;\n }\n \n .input-container:focus-within {\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n }\n \n /* Gradient separator before arrow */\n .input-container::after {\n content: '';\n position: absolute;\n top: 50%;\n right: 40px;\n transform: translateY(-50%);\n width: 1px;\n height: 60%;\n background: linear-gradient(\n to bottom,\n transparent 0%,\n rgba(0, 0, 0, 0.1) 20%,\n rgba(0, 0, 0, 0.1) 80%,\n transparent 100%\n );\n pointer-events: none;\n z-index: 1;\n }\n \n .dropdown-arrow-container {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s ease;\n border-radius: 0 4px 4px 0;\n z-index: 2;\n }\n \n .dropdown-arrow-container:hover {\n background-color: rgba(102, 126, 234, 0.08);\n }\n \n .dropdown-arrow {\n width: 16px;\n height: 16px;\n color: #667eea;\n transition: transform 0.2s ease, color 0.2s ease;\n transform: translateY(0);\n }\n \n .dropdown-arrow-container:hover .dropdown-arrow {\n color: #667eea;\n }\n \n .dropdown-arrow.open {\n transform: rotate(180deg);\n }\n \n .select-input {\n flex: 1;\n min-width: 120px;\n padding: 4px;\n border: none;\n font-size: 14px;\n line-height: 1.5;\n color: #1f2937;\n background: transparent;\n box-sizing: border-box;\n outline: none;\n }\n \n .select-input::placeholder {\n color: #9ca3af;\n }\n \n .selection-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n margin: 2px;\n background: #667eea;\n color: white;\n border-radius: 4px;\n font-size: 13px;\n line-height: 1;\n }\n \n .badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n margin-left: 4px;\n background: rgba(255, 255, 255, 0.3);\n border: none;\n border-radius: 50%;\n color: white;\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n transition: background 0.2s;\n }\n \n .badge-remove:hover {\n background: rgba(255, 255, 255, 0.5);\n }\n \n .select-input:disabled {\n background-color: var(--select-disabled-bg, #f5f5f5);\n cursor: not-allowed;\n }\n \n .select-dropdown {\n position: absolute;\n scroll-behavior: smooth;\n top: 100%;\n left: 0;\n right: 0;\n margin-top: 4px;\n max-height: 300px;\n overflow: hidden;\n background: var(--select-dropdown-bg, white);\n border: 1px solid var(--select-dropdown-border, #ccc);\n border-radius: var(--select-border-radius, 4px);\n box-shadow: var(--select-dropdown-shadow, 0 4px 6px rgba(0,0,0,0.1));\n z-index: var(--select-dropdown-z-index, 1000);\n }\n \n .options-container {\n position: relative;\n max-height: 300px;\n overflow: auto;\n transition: opacity 0.2s ease-in-out;\n }\n\n .option {\n padding: 8px 12px;\n cursor: pointer;\n color: inherit;\n transition: background-color 0.15s ease;\n user-select: none;\n }\n\n .option:hover {\n background-color: #f3f4f6;\n }\n\n .option.selected {\n background-color: #e0e7ff;\n color: #4338ca;\n font-weight: 500;\n }\n\n .option.active {\n background-color: #f3f4f6;\n }\n \n .load-more-container {\n padding: 12px;\n text-align: center;\n border-top: 1px solid var(--select-divider-color, #e0e0e0);\n }\n \n .load-more-button {\n padding: 8px 16px;\n border: 1px solid var(--select-button-border, #1976d2);\n background: var(--select-button-bg, white);\n color: var(--select-button-color, #1976d2);\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: all 0.2s ease;\n }\n \n .load-more-button:hover {\n background: var(--select-button-hover-bg, #1976d2);\n color: var(--select-button-hover-color, white);\n }\n \n .load-more-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .busy-bucket {\n padding: 16px;\n text-align: center;\n color: var(--select-busy-color, #666);\n }\n \n .spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 2px solid var(--select-spinner-color, #ccc);\n border-top-color: var(--select-spinner-active-color, #1976d2);\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n }\n \n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n \n .empty-state {\n padding: 24px;\n text-align: center;\n color: var(--select-empty-color, #999);\n }\n \n .searching-state {\n padding: 24px;\n text-align: center;\n color: #667eea;\n font-style: italic;\n animation: pulse 1.5s ease-in-out infinite;\n }\n \n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n \n /* Error states */\n .select-input[aria-invalid=\"true\"] {\n border-color: var(--select-error-border, #dc2626);\n }\n \n .select-input[aria-invalid=\"true\"]:focus {\n border-color: var(--select-error-border, #dc2626);\n box-shadow: 0 0 0 2px var(--select-error-shadow, rgba(220, 38, 38, 0.1));\n outline-color: var(--select-error-border, #dc2626);\n }\n \n /* Accessibility: Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n }\n \n /* Accessibility: Dark mode */\n @media (prefers-color-scheme: dark) {\n .select-input {\n background: var(--select-dark-bg, #1f2937);\n color: var(--select-dark-text, #f9fafb);\n border-color: var(--select-dark-border, #4b5563);\n }\n \n .select-dropdown {\n background: var(--select-dark-dropdown-bg, #1f2937);\n border-color: var(--select-dark-dropdown-border, #4b5563);\n color: var(--select-dark-text, #f9fafb);\n }\n \n .option:hover {\n background-color: var(--select-dark-option-hover-bg, #374151);\n }\n \n .option.selected {\n background-color: var(--select-dark-option-selected-bg, #3730a3);\n color: var(--select-dark-option-selected-text, #e0e7ff);\n }\n \n .option.active {\n background-color: var(--select-dark-option-active-bg, #374151);\n }\n \n .busy-bucket {\n color: var(--select-dark-busy-color, #9ca3af);\n }\n }\n \n /* Accessibility: High contrast mode */\n @media (prefers-contrast: high) {\n .select-input:focus {\n outline-width: 3px;\n outline-color: Highlight;\n }\n \n .select-input {\n border-width: 2px;\n }\n }\n \n /* Touch targets (WCAG 2.5.5) */\n .load-more-button,\n select-option {\n min-height: 44px;\n }\n `;\n \n // Insert as first child to ensure styles are processed first\n if (this._shadow.firstChild) {\n this._shadow.insertBefore(style, this._shadow.firstChild);\n } else {\n this._shadow.appendChild(style);\n }\n \n }\n\n private _attachEventListeners(): void {\n // Arrow click handler\n if (this._arrowContainer) {\n this._boundArrowClick = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n \n const wasOpen = this._state.isOpen;\n this._state.isOpen = !this._state.isOpen;\n this._updateDropdownVisibility();\n this._updateArrowRotation();\n \n if (this._state.isOpen && this._config.callbacks.onOpen) {\n this._config.callbacks.onOpen();\n } else if (!this._state.isOpen && this._config.callbacks.onClose) {\n this._config.callbacks.onClose();\n }\n \n // Scroll to selected when opening\n if (!wasOpen && this._state.isOpen && this._state.selectedIndices.size > 0) {\n setTimeout(() => this._scrollToSelected(), 50);\n }\n };\n this._arrowContainer.addEventListener('click', this._boundArrowClick);\n }\n \n // Input container click - prevent event from reaching document listener\n this._container.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n \n // Input focus/blur\n this._input.addEventListener('focus', () => this._handleOpen());\n this._input.addEventListener('blur', (e) => {\n // Delay to allow option click\n setTimeout(() => {\n if (!this._dropdown.contains(document.activeElement)) {\n this._handleClose();\n }\n }, 200);\n });\n \n // Input search\n this._input.addEventListener('input', (e) => {\n if (!this._config.searchable) return;\n const query = (e.target as HTMLInputElement).value;\n this._handleSearch(query);\n });\n \n // Keyboard navigation\n this._input.addEventListener('keydown', (e) => this._handleKeydown(e));\n \n // Click outside to close\n document.addEventListener('click', (e) => {\n const target = e.target as Node;\n // Check if click is outside shadow root\n if (!this._shadow.contains(target) && !this._container.contains(target)) {\n this._handleClose();\n }\n });\n }\n\n private _initializeObservers(): void {\n // Disconnect existing observer if any\n if (this._intersectionObserver) {\n this._intersectionObserver.disconnect();\n this._intersectionObserver = undefined;\n }\n\n // Intersection observer for infinite scroll\n if (this._config.infiniteScroll.enabled) {\n this._intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!this._state.isBusy) {\n this._loadMoreItems();\n }\n }\n });\n },\n { threshold: 0.1 }\n );\n }\n }\n\n private async _loadInitialSelectedItems(): Promise<void> {\n if (!this._config.serverSide.fetchSelectedItems || !this._config.serverSide.initialSelectedValues) {\n return;\n }\n \n this._setBusy(true);\n \n try {\n const items = await this._config.serverSide.fetchSelectedItems(\n this._config.serverSide.initialSelectedValues\n );\n \n // Add to state\n items.forEach((item, index) => {\n this._state.selectedItems.set(index, item);\n this._state.selectedIndices.add(index);\n });\n \n this._updateInputDisplay();\n } catch (error) {\n this._handleError(error as Error);\n } finally {\n this._setBusy(false);\n }\n }\n\n private _handleOpen(): void {\n if (!this._config.enabled || this._state.isOpen) return;\n \n this._state.isOpen = true;\n this._dropdown.style.display = 'block';\n this._input.setAttribute('aria-expanded', 'true');\n this._updateArrowRotation();\n \n // Clear search query when opening to show all options\n // This ensures we can scroll to selected item\n if (this._config.searchable) {\n this._state.searchQuery = '';\n // Don't clear input value if it represents selection\n // But if we want to search, we might want to clear it?\n // Standard behavior: input keeps value (label), but dropdown shows all options\n // until user types.\n // However, our filtering logic uses _state.searchQuery.\n // So clearing it here resets the filter.\n }\n\n // Render options when opening\n this._renderOptions();\n \n this._emit('open', {});\n this._config.callbacks.onOpen?.();\n \n // Scroll to selected if configured\n if (this._config.scrollToSelected.enabled) {\n // Use requestAnimationFrame for better timing after render\n requestAnimationFrame(() => {\n // Double RAF to ensure layout is complete\n requestAnimationFrame(() => {\n this._scrollToSelected();\n });\n });\n }\n }\n\n private _handleClose(): void {\n if (!this._state.isOpen) return;\n \n this._state.isOpen = false;\n this._dropdown.style.display = 'none';\n this._input.setAttribute('aria-expanded', 'false');\n this._updateArrowRotation();\n \n this._emit('close', {});\n this._config.callbacks.onClose?.();\n }\n\n private _updateDropdownVisibility(): void {\n if (this._state.isOpen) {\n this._dropdown.style.display = 'block';\n this._input.setAttribute('aria-expanded', 'true');\n } else {\n this._dropdown.style.display = 'none';\n this._input.setAttribute('aria-expanded', 'false');\n }\n }\n\n private _updateArrowRotation(): void {\n if (this._arrowContainer) {\n const arrow = this._arrowContainer.querySelector('.dropdown-arrow');\n if (arrow) {\n if (this._state.isOpen) {\n arrow.classList.add('open');\n } else {\n arrow.classList.remove('open');\n }\n }\n }\n }\n\n private _handleSearch(query: string): void {\n this._state.searchQuery = query;\n \n // Clear previous search timeout\n if (this._searchTimeout) {\n clearTimeout(this._searchTimeout);\n }\n \n // Search immediately - no debouncing for better responsiveness\n // Users expect instant feedback as they type\n this._state.isSearching = false;\n \n // Ensure dropdown is open when searching\n if (!this._state.isOpen) {\n this._handleOpen();\n } else {\n // Filter and render options immediately\n this._renderOptions();\n }\n \n // Get filtered items based on search query - searches ENTIRE phrase\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n // FIX: Do not trim query to allow searching for phrases with spaces\n const searchQuery = query.toLowerCase();\n \n const filteredItems = searchQuery\n ? this._state.loadedItems.filter((item: any) => {\n try {\n const label = String(getLabel(item)).toLowerCase();\n // Match the entire search phrase\n return label.includes(searchQuery);\n } catch (e) {\n return false;\n }\n })\n : this._state.loadedItems;\n \n const count = filteredItems.length;\n \n // Announce search results for accessibility\n if (searchQuery) {\n this._announce(`${count} result${count !== 1 ? 's' : ''} found for \"${query}\"`);\n }\n \n // Only notify if query or result count changed to prevent infinite loops\n if (query !== this._state.lastNotifiedQuery || count !== this._state.lastNotifiedResultCount) {\n this._state.lastNotifiedQuery = query;\n this._state.lastNotifiedResultCount = count;\n \n // Use setTimeout to avoid synchronous state updates during render\n setTimeout(() => {\n this._emit('search', { query, results: filteredItems, count });\n this._config.callbacks.onSearch?.(query);\n }, 0);\n }\n }\n\n private _handleKeydown(e: KeyboardEvent): void {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!this._state.isOpen) {\n this._handleOpen();\n } else {\n this._moveActive(1);\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!this._state.isOpen) {\n this._handleOpen();\n } else {\n this._moveActive(-1);\n }\n break;\n case 'Home':\n e.preventDefault();\n if (this._state.isOpen) {\n this._setActive(0);\n }\n break;\n case 'End':\n e.preventDefault();\n if (this._state.isOpen) {\n const options = Array.from(this._optionsContainer.children) as SelectOption[];\n this._setActive(options.length - 1);\n }\n break;\n case 'PageDown':\n e.preventDefault();\n if (this._state.isOpen) {\n this._moveActive(10);\n }\n break;\n case 'PageUp':\n e.preventDefault();\n if (this._state.isOpen) {\n this._moveActive(-10);\n }\n break;\n case 'Enter':\n e.preventDefault();\n if (this._state.activeIndex >= 0) {\n this._selectOption(this._state.activeIndex);\n }\n break;\n case 'Escape':\n e.preventDefault();\n this._handleClose();\n break;\n case 'a':\n case 'A':\n if ((e.ctrlKey || e.metaKey) && this._config.selection.mode === 'multi') {\n e.preventDefault();\n this._selectAll();\n }\n break;\n default:\n // Type-ahead search\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n this._handleTypeAhead(e.key);\n }\n break;\n }\n }\n\n private _moveActive(delta: number): void {\n const options = Array.from(this._optionsContainer.children) as SelectOption[];\n const next = Math.max(0, Math.min(options.length - 1, this._state.activeIndex + delta));\n this._setActive(next);\n }\n\n private _setActive(index: number): void {\n const options = Array.from(this._optionsContainer.children);\n \n // Clear previous active state\n if (this._state.activeIndex >= 0 && options[this._state.activeIndex]) {\n const prevOption = options[this._state.activeIndex];\n // Check if it's a custom SelectOption or a lightweight DOM element\n if ('setActive' in prevOption && typeof (prevOption as any).setActive === 'function') {\n (prevOption as SelectOption).setActive(false);\n } else {\n // Lightweight option - remove active class\n (prevOption as HTMLElement).classList.remove('smilodon-option--active');\n (prevOption as HTMLElement).setAttribute('aria-selected', 'false');\n }\n }\n \n this._state.activeIndex = index;\n \n // Set new active state\n if (options[index]) {\n const option = options[index];\n \n // Check if it's a custom SelectOption or a lightweight DOM element\n if ('setActive' in option && typeof (option as any).setActive === 'function') {\n (option as SelectOption).setActive(true);\n } else {\n // Lightweight option - add active class\n (option as HTMLElement).classList.add('smilodon-option--active');\n (option as HTMLElement).setAttribute('aria-selected', 'true');\n }\n \n (option as HTMLElement).scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n \n // Announce position for screen readers\n const total = options.length;\n this._announce(`Item ${index + 1} of ${total}`);\n \n // Update aria-activedescendant\n const optionId = `${this._uniqueId}-option-${index}`;\n this._input.setAttribute('aria-activedescendant', optionId);\n }\n }\n\n private _handleTypeAhead(char: string): void {\n if (this._typeTimeout) clearTimeout(this._typeTimeout);\n \n this._typeBuffer += char.toLowerCase();\n this._typeTimeout = window.setTimeout(() => {\n this._typeBuffer = '';\n }, 500);\n \n // Find first matching option\n const getValue = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n const matchIndex = this._state.loadedItems.findIndex((item) =>\n getValue(item).toLowerCase().startsWith(this._typeBuffer)\n );\n \n if (matchIndex >= 0) {\n this._setActive(matchIndex);\n }\n }\n\n private _selectAll(): void {\n if (this._config.selection.mode !== 'multi') return;\n \n const options = Array.from(this._optionsContainer.children);\n const maxSelections = this._config.selection.maxSelections || 0;\n \n options.forEach((option, index) => {\n if (maxSelections > 0 && this._state.selectedIndices.size >= maxSelections) {\n return;\n }\n \n if (!this._state.selectedIndices.has(index)) {\n // Check if it's a custom SelectOption or a lightweight DOM element\n if ('getConfig' in option && typeof (option as any).getConfig === 'function') {\n const config = (option as SelectOption).getConfig();\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, config.item);\n (option as SelectOption).setSelected(true);\n } else {\n // Lightweight option - get item from data attribute or state\n const item = this._state.loadedItems[index];\n if (item) {\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n (option as HTMLElement).classList.add('smilodon-option--selected');\n (option as HTMLElement).setAttribute('aria-selected', 'true');\n }\n }\n }\n });\n \n this._updateInputDisplay();\n this._emitChange();\n this._announce(`Selected all ${options.length} items`);\n }\n\n private _announce(message: string): void {\n if (this._liveRegion) {\n this._liveRegion.textContent = message;\n setTimeout(() => {\n if (this._liveRegion) this._liveRegion.textContent = '';\n }, 1000);\n }\n }\n\n private _selectOption(index: number): void {\n // FIX: Do not rely on this._optionsContainer.children[index] because filtering changes the children\n // Instead, use the index to update state directly\n \n const item = this._state.loadedItems[index];\n if (!item) return;\n \n const config = { item }; // Minimal config needed\n const isCurrentlySelected = this._state.selectedIndices.has(index);\n \n if (this._config.selection.mode === 'single') {\n // Single select: clear previous and select new\n const wasSelected = this._state.selectedIndices.has(index);\n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n \n if (!wasSelected) {\n // Select this option\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n }\n \n // Re-render to update all option styles\n this._renderOptions();\n \n if (this._config.selection.closeOnSelect) {\n this._handleClose();\n }\n } else {\n // Multi select with toggle\n const maxSelections = this._config.selection.maxSelections || 0;\n \n if (isCurrentlySelected) {\n // Deselect (toggle off)\n this._state.selectedIndices.delete(index);\n this._state.selectedItems.delete(index);\n } else {\n // Select (toggle on)\n if (maxSelections > 0 && this._state.selectedIndices.size >= maxSelections) {\n this._announce(`Maximum ${maxSelections} selections allowed`);\n return; // Max selections reached\n }\n \n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n }\n \n // Re-render to update styles (safer than trying to find the element in filtered list)\n this._renderOptions();\n }\n \n this._updateInputDisplay();\n this._emitChange();\n \n // Call user callback\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n \n this._config.callbacks.onSelect?.({\n item: item,\n index,\n value: getValue(item),\n label: getLabel(item),\n selected: this._state.selectedIndices.has(index),\n });\n }\n\n private _handleOptionRemove(index: number): void {\n const option = this._optionsContainer.children[index] as SelectOption;\n if (!option) return;\n \n this._state.selectedIndices.delete(index);\n this._state.selectedItems.delete(index);\n option.setSelected(false);\n \n this._updateInputDisplay();\n this._emitChange();\n \n const config = option.getConfig();\n this._emit('remove', { item: config.item, index });\n }\n\n private _updateInputDisplay(): void {\n const selectedItems = Array.from(this._state.selectedItems.values());\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n \n if (selectedItems.length === 0) {\n this._input.value = '';\n this._input.placeholder = this._config.placeholder || 'Select an option...';\n // Clear any badges\n const existingBadges = this._inputContainer.querySelectorAll('.selection-badge');\n existingBadges.forEach(badge => badge.remove());\n } else if (this._config.selection.mode === 'single') {\n this._input.value = getLabel(selectedItems[0]);\n } else {\n // Multi-select: show badges instead of text in input\n this._input.value = '';\n this._input.placeholder = '';\n \n // Clear existing badges\n const existingBadges = this._inputContainer.querySelectorAll('.selection-badge');\n existingBadges.forEach(badge => badge.remove());\n \n // Create badges for each selected item\n const selectedEntries = Array.from(this._state.selectedItems.entries());\n selectedEntries.forEach(([index, item]) => {\n const badge = document.createElement('span');\n badge.className = 'selection-badge';\n badge.textContent = getLabel(item);\n \n // Add remove button to badge\n const removeBtn = document.createElement('button');\n removeBtn.className = 'badge-remove';\n removeBtn.innerHTML = '×';\n removeBtn.setAttribute('aria-label', `Remove ${getLabel(item)}`);\n removeBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n this._state.selectedIndices.delete(index);\n this._state.selectedItems.delete(index);\n this._updateInputDisplay();\n this._renderOptions();\n this._emitChange();\n });\n \n badge.appendChild(removeBtn);\n this._inputContainer.insertBefore(badge, this._input);\n });\n }\n }\n\n private _renderOptionsWithAnimation(): void {\n // Add fade-out animation\n this._optionsContainer.style.opacity = '0';\n this._optionsContainer.style.transition = 'opacity 0.15s ease-out';\n \n setTimeout(() => {\n this._renderOptions();\n // Fade back in\n this._optionsContainer.style.opacity = '1';\n this._optionsContainer.style.transition = 'opacity 0.2s ease-in';\n }, 150);\n }\n\n private _scrollToSelected(): void {\n if (this._state.selectedIndices.size === 0) return;\n \n const target = this._config.scrollToSelected.multiSelectTarget;\n const indices = Array.from(this._state.selectedIndices).sort((a, b) => a - b);\n \n // For multi-select, find the closest selected item to the current scroll position\n let targetIndex: number;\n \n if (this._config.selection.mode === 'multi' && indices.length > 1) {\n // Calculate which selected item is closest to the center of the viewport\n const dropdownRect = this._dropdown.getBoundingClientRect();\n const viewportCenter = this._dropdown.scrollTop + (dropdownRect.height / 2);\n \n // Find the selected item closest to viewport center\n let closestIndex = indices[0];\n let closestDistance = Infinity;\n \n for (const index of indices) {\n const optionId = `${this._uniqueId}-option-${index}`;\n const option = this._optionsContainer.querySelector(`[id=\"${optionId}\"]`) as HTMLElement;\n \n if (option) {\n const optionTop = option.offsetTop;\n const distance = Math.abs(optionTop - viewportCenter);\n \n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n }\n \n targetIndex = closestIndex;\n } else {\n // For single select or only one selected item, use the configured target\n targetIndex = target === 'first' ? indices[0] : indices[indices.length - 1];\n }\n \n // Find and scroll to the target option\n const optionId = `${this._uniqueId}-option-${targetIndex}`;\n const option = this._optionsContainer.querySelector(`[id=\"${optionId}\"]`) as HTMLElement;\n \n if (option) {\n // Use smooth scrolling with center alignment for better UX\n option.scrollIntoView({\n block: this._config.scrollToSelected.block || 'center',\n behavior: 'smooth',\n });\n \n // Also set it as active for keyboard navigation\n this._setActive(targetIndex);\n }\n }\n\n private async _loadMoreItems(): Promise<void> {\n if (this._state.isBusy) return;\n \n this._setBusy(true);\n \n // Save scroll position before loading\n if (this._dropdown) {\n this._state.lastScrollPosition = this._dropdown.scrollTop;\n this._state.preserveScrollPosition = true;\n \n // Update dropdown to show loading indicator but keep the\n // same scrollTop so the visible items don't move.\n this._renderOptions();\n this._dropdown.scrollTop = this._state.lastScrollPosition;\n }\n \n try {\n // Emit event for parent to handle\n this._state.currentPage++;\n \n this._emit('loadMore', { page: this._state.currentPage, items: [] });\n this._config.callbacks.onLoadMore?.(this._state.currentPage);\n \n // NOTE: We do NOT set isBusy = false here.\n // The parent component MUST call setItems() or similar to clear the busy state.\n // This prevents the sentinel from reappearing before new items are loaded.\n } catch (error) {\n this._handleError(error as Error);\n this._setBusy(false); // Only clear on error\n }\n }\n\n private _setBusy(busy: boolean): void {\n this._state.isBusy = busy;\n \n // Trigger re-render to show/hide busy indicator\n // We use _renderOptions to handle the UI update\n this._renderOptions();\n }\n\n private _showBusyBucket(): void {\n // Deprecated: Logic moved to _renderOptions\n }\n\n private _hideBusyBucket(): void {\n // Deprecated: Logic moved to _renderOptions\n }\n\n private _handleError(error: Error): void {\n this._emit('error', { message: error.message, cause: error });\n this._config.callbacks.onError?.(error);\n }\n\n private _emit<K extends SelectEventName>(name: K, detail: SelectEventsDetailMap[K]): void {\n this.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));\n }\n\n private _emitChange(): void {\n const selectedItems = Array.from(this._state.selectedItems.values());\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n const selectedValues = selectedItems.map(getValue);\n const selectedIndices = Array.from(this._state.selectedIndices);\n \n this._emit('change', { selectedItems, selectedValues, selectedIndices });\n this._config.callbacks.onChange?.(selectedItems, selectedValues);\n }\n\n // Public API\n \n /**\n * Set items to display in the select\n */\n setItems(items: unknown[]): void {\n \n const previousLength = this._state.loadedItems.length;\n this._state.loadedItems = items;\n \n // If grouped items exist, flatten them to items\n if (this._state.groupedItems.length > 0) {\n this._state.loadedItems = this._state.groupedItems.flatMap(group => group.options);\n }\n \n const newLength = this._state.loadedItems.length;\n \n // When infinite scroll is active (preserveScrollPosition = true),\n // we need to maintain scroll position during the update\n if (this._state.preserveScrollPosition && this._dropdown) {\n const targetScrollTop = this._state.lastScrollPosition;\n \n // Only clear loading if we actually got more items\n if (newLength > previousLength) {\n this._state.isBusy = false;\n }\n \n this._renderOptions();\n \n // Restore the exact scrollTop we had before loading\n // so the previously visible items stay in place and\n // new ones simply appear below.\n this._dropdown.scrollTop = targetScrollTop;\n \n // Ensure it sticks after layout\n requestAnimationFrame(() => {\n if (this._dropdown) {\n this._dropdown.scrollTop = targetScrollTop;\n }\n });\n \n // Only clear preserveScrollPosition if we got new items\n if (newLength > previousLength) {\n this._state.preserveScrollPosition = false;\n }\n } else {\n // Normal update - just render normally\n this._state.isBusy = false;\n this._renderOptions();\n }\n \n }\n\n /**\n * Set grouped items\n */\n setGroupedItems(groupedItems: GroupedItem[]): void {\n this._state.groupedItems = groupedItems;\n this._state.loadedItems = groupedItems.flatMap(group => group.options);\n this._renderOptions();\n }\n\n /**\n * Get currently selected items\n */\n getSelectedItems(): unknown[] {\n return Array.from(this._state.selectedItems.values());\n }\n\n /**\n * Get all loaded items\n */\n get loadedItems(): unknown[] {\n return this._state.loadedItems;\n }\n\n /**\n * Get currently selected values\n */\n getSelectedValues(): unknown[] {\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n return this.getSelectedItems().map(getValue);\n }\n\n /**\n * Set selected items by value\n */\n async setSelectedValues(values: unknown[]): Promise<void> {\n if (this._config.serverSide.enabled && this._config.serverSide.fetchSelectedItems) {\n await this._loadSelectedItemsByValues(values);\n } else {\n // Select from loaded items\n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n \n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n \n this._state.loadedItems.forEach((item, index) => {\n if (values.includes(getValue(item))) {\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n }\n });\n \n this._renderOptions();\n this._updateInputDisplay();\n this._emitChange();\n }\n }\n\n /**\n * Load and select items by their values (for infinite scroll scenario)\n */\n private async _loadSelectedItemsByValues(values: unknown[]): Promise<void> {\n if (!this._config.serverSide.fetchSelectedItems) return;\n \n this._setBusy(true);\n \n try {\n const items = await this._config.serverSide.fetchSelectedItems(values);\n \n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n \n items.forEach((item, index) => {\n this._state.selectedIndices.add(index);\n this._state.selectedItems.set(index, item);\n });\n \n this._renderOptions();\n this._updateInputDisplay();\n this._emitChange();\n \n // Scroll to selected if configured\n if (this._config.scrollToSelected.enabled) {\n this._scrollToSelected();\n }\n } catch (error) {\n this._handleError(error as Error);\n } finally {\n this._setBusy(false);\n }\n }\n\n /**\n * Clear all selections\n */\n clear(): void {\n this._state.selectedIndices.clear();\n this._state.selectedItems.clear();\n this._renderOptions();\n this._updateInputDisplay();\n this._emitChange();\n }\n\n /**\n * Open dropdown\n */\n open(): void {\n this._handleOpen();\n }\n\n /**\n * Close dropdown\n */\n close(): void {\n this._handleClose();\n }\n\n /**\n * Update component configuration\n */\n updateConfig(config: Partial<GlobalSelectConfig>): void {\n this._config = selectConfig.mergeWithComponentConfig(config);\n \n // Update input state based on new config\n if (this._input) {\n this._input.readOnly = !this._config.searchable;\n this._input.setAttribute('aria-autocomplete', this._config.searchable ? 'list' : 'none');\n }\n \n // Re-initialize observers in case infinite scroll was enabled/disabled\n this._initializeObservers();\n \n this._renderOptions();\n }\n\n /**\n * Set error state\n */\n setError(message: string): void {\n this._hasError = true;\n this._errorMessage = message;\n this._input.setAttribute('aria-invalid', 'true');\n this._announce(`Error: ${message}`);\n }\n\n /**\n * Clear error state\n */\n clearError(): void {\n this._hasError = false;\n this._errorMessage = '';\n this._input.removeAttribute('aria-invalid');\n }\n\n /**\n * Set required state\n */\n setRequired(required: boolean): void {\n if (required) {\n this._input.setAttribute('aria-required', 'true');\n this._input.setAttribute('required', '');\n } else {\n this._input.removeAttribute('aria-required');\n this._input.removeAttribute('required');\n }\n }\n\n /**\n * Validate selection (for required fields)\n */\n validate(): boolean {\n const isRequired = this._input.hasAttribute('required');\n if (isRequired && this._state.selectedIndices.size === 0) {\n this.setError('Selection is required');\n return false;\n }\n this.clearError();\n return true;\n }\n\n /**\n * Render options based on current state\n */\n private _renderOptions(): void {\n \n // Cleanup observer\n if (this._loadMoreTrigger && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this._loadMoreTrigger);\n }\n \n // Clear options container\n this._optionsContainer.innerHTML = '';\n \n // Ensure dropdown only contains options container (cleanup legacy direct children)\n // We need to preserve optionsContainer, so we can't just clear dropdown.innerHTML\n // But we can check if there are other children and remove them\n Array.from(this._dropdown.children).forEach(child => {\n if (child !== this._optionsContainer) {\n this._dropdown.removeChild(child);\n }\n });\n \n // Ensure dropdown is visible if we are rendering options\n if (this._state.isOpen && this._dropdown.style.display === 'none') {\n this._dropdown.style.display = 'block';\n }\n \n // Show searching state (exclusive state)\n if (this._state.isSearching) {\n const searching = document.createElement('div');\n searching.className = 'searching-state';\n searching.textContent = 'Searching...';\n this._optionsContainer.appendChild(searching);\n return;\n }\n \n const getValue = this._config.serverSide.getValueFromItem || ((item) => (item as any)?.value ?? item);\n const getLabel = this._config.serverSide.getLabelFromItem || ((item) => (item as any)?.label ?? String(item));\n \n // Filter items by search query\n const query = this._state.searchQuery.toLowerCase();\n \n // Handle Grouped Items Rendering (when no search query)\n if (this._state.groupedItems.length > 0 && !query) {\n this._state.groupedItems.forEach(group => {\n const header = document.createElement('div');\n header.className = 'group-header';\n header.textContent = group.label;\n Object.assign(header.style, {\n padding: '8px 12px',\n fontWeight: '600',\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n fontSize: '12px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n position: 'sticky',\n top: '0',\n zIndex: '1',\n borderBottom: '1px solid #e5e7eb'\n });\n this._optionsContainer.appendChild(header);\n \n group.options.forEach(item => {\n // Find original index for correct ID generation and selection\n const index = this._state.loadedItems.indexOf(item);\n if (index !== -1) {\n this._renderSingleOption(item, index, getValue, getLabel);\n }\n });\n });\n } else {\n // Normal rendering (flat list or filtered)\n let hasRenderedItems = false;\n \n this._state.loadedItems.forEach((item, index) => {\n // Apply filter if query exists\n if (query) {\n try {\n const label = String(getLabel(item)).toLowerCase();\n if (!label.includes(query)) return;\n } catch (e) {\n return;\n }\n }\n \n hasRenderedItems = true;\n this._renderSingleOption(item, index, getValue, getLabel);\n });\n \n \n if (!hasRenderedItems && !this._state.isBusy) {\n const empty = document.createElement('div');\n empty.className = 'empty-state';\n if (query) {\n empty.textContent = `No results found for \"${this._state.searchQuery}\"`;\n } else {\n empty.textContent = 'No options available';\n }\n this._optionsContainer.appendChild(empty);\n }\n }\n \n // Append Busy Indicator if busy\n if (this._state.isBusy && this._config.busyBucket.enabled) {\n const busyBucket = document.createElement('div');\n busyBucket.className = 'busy-bucket';\n \n if (this._config.busyBucket.showSpinner) {\n const spinner = document.createElement('div');\n spinner.className = 'spinner';\n busyBucket.appendChild(spinner);\n }\n \n if (this._config.busyBucket.message) {\n const message = document.createElement('div');\n message.textContent = this._config.busyBucket.message;\n busyBucket.appendChild(message);\n }\n \n this._optionsContainer.appendChild(busyBucket);\n }\n // Append Load More Trigger (Button or Sentinel) if enabled and not busy\n else if ((this._config.loadMore.enabled || this._config.infiniteScroll.enabled) && this._state.loadedItems.length > 0) {\n this._addLoadMoreTrigger();\n }\n \n }\n\n private _renderSingleOption(item: any, index: number, getValue: (item: any) => any, getLabel: (item: any) => string) {\n const option = document.createElement('div');\n option.className = 'option';\n option.id = `${this._uniqueId}-option-${index}`;\n const value = getValue(item);\n const label = getLabel(item);\n \n \n option.textContent = label;\n option.dataset.value = String(value);\n option.dataset.index = String(index); // Also useful for debugging/selectors\n \n // Check if selected using selectedItems map\n const isSelected = this._state.selectedIndices.has(index);\n \n if (isSelected) {\n option.classList.add('selected');\n option.setAttribute('aria-selected', 'true');\n } else {\n option.setAttribute('aria-selected', 'false');\n }\n \n option.addEventListener('click', () => {\n this._selectOption(index);\n });\n \n this._optionsContainer.appendChild(option);\n }\n\n private _addLoadMoreTrigger(): void {\n const container = document.createElement('div');\n container.className = 'load-more-container';\n \n if (this._config.infiniteScroll.enabled) {\n // Infinite Scroll: Render an invisible sentinel\n // It must have some height to be intersected\n const sentinel = document.createElement('div');\n sentinel.className = 'infinite-scroll-sentinel';\n sentinel.style.height = '10px';\n sentinel.style.width = '100%';\n sentinel.style.opacity = '0'; // Invisible\n \n this._loadMoreTrigger = sentinel;\n container.appendChild(sentinel);\n } else {\n // Manual Load More: Render a button\n const button = document.createElement('button');\n button.className = 'load-more-button';\n button.textContent = `Load ${this._config.loadMore.itemsPerLoad} more`;\n button.addEventListener('click', () => this._loadMoreItems());\n \n this._loadMoreTrigger = button;\n container.appendChild(button);\n }\n \n this._optionsContainer.appendChild(container);\n \n // Setup intersection observer for auto-load\n if (this._intersectionObserver && this._loadMoreTrigger) {\n this._intersectionObserver.observe(this._loadMoreTrigger);\n }\n }\n}\n\n// Register custom element\nif (!customElements.get('enhanced-select')) {\n customElements.define('enhanced-select', EnhancedSelect);\n}\n","/**\n * Independent Option Component\n * High cohesion, low coupling - handles its own selection state and events\n */\n\nexport interface OptionConfig {\n /** The data item this option represents */\n item: unknown;\n /** The index of this option */\n index: number;\n /** Whether this option is selected */\n selected: boolean;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Whether this option is focused/active */\n active?: boolean;\n /** Custom value accessor */\n getValue?: (item: unknown) => unknown;\n /** Custom label accessor */\n getLabel?: (item: unknown) => string;\n /** Custom renderer */\n render?: (item: unknown, index: number) => HTMLElement | string;\n /** Custom style */\n style?: Partial<CSSStyleDeclaration>;\n /** Custom class names */\n className?: string;\n /** Show remove button (for multi-select) */\n showRemoveButton?: boolean;\n}\n\nexport interface OptionEventDetail {\n item: unknown;\n index: number;\n value: unknown;\n label: string;\n selected: boolean;\n}\n\nexport class SelectOption extends HTMLElement {\n private _config: OptionConfig;\n private _shadow: ShadowRoot;\n private _container: HTMLElement;\n private _removeButton?: HTMLButtonElement;\n\n constructor(config: OptionConfig) {\n super();\n this._config = config;\n this._shadow = this.attachShadow({ mode: 'open' });\n this._container = document.createElement('div');\n this._container.className = 'option-container';\n \n this._initializeStyles();\n this._render();\n this._attachEventListeners();\n \n this._shadow.appendChild(this._container);\n }\n\n private _initializeStyles(): void {\n const style = document.createElement('style');\n style.textContent = `\n :host {\n display: block;\n position: relative;\n }\n \n .option-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n cursor: pointer;\n user-select: none;\n transition: background-color 0.2s ease;\n }\n \n .option-container:hover {\n background-color: var(--select-option-hover-bg, #f0f0f0);\n }\n \n .option-container.selected {\n background-color: var(--select-option-selected-bg, #e3f2fd);\n color: var(--select-option-selected-color, #1976d2);\n }\n \n .option-container.active {\n outline: 2px solid var(--select-option-active-outline, #1976d2);\n outline-offset: -2px;\n }\n \n .option-container.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n \n .option-content {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n \n .remove-button {\n margin-left: 8px;\n padding: 2px 6px;\n border: none;\n background-color: var(--select-remove-btn-bg, transparent);\n color: var(--select-remove-btn-color, #666);\n cursor: pointer;\n border-radius: 3px;\n font-size: 16px;\n line-height: 1;\n transition: all 0.2s ease;\n }\n \n .remove-button:hover {\n background-color: var(--select-remove-btn-hover-bg, #ffebee);\n color: var(--select-remove-btn-hover-color, #c62828);\n }\n \n .remove-button:focus {\n outline: 2px solid var(--select-remove-btn-focus-outline, #1976d2);\n outline-offset: 2px;\n }\n `;\n this._shadow.appendChild(style);\n }\n\n private _render(): void {\n const { item, index, selected, disabled, active, render, showRemoveButton } = this._config;\n \n // Clear container\n this._container.innerHTML = '';\n \n // Apply state classes\n this._container.classList.toggle('selected', selected);\n this._container.classList.toggle('disabled', disabled || false);\n this._container.classList.toggle('active', active || false);\n \n // Custom class name\n if (this._config.className) {\n this._container.className += ' ' + this._config.className;\n }\n \n // Apply custom styles\n if (this._config.style) {\n Object.assign(this._container.style, this._config.style);\n }\n \n // Render content\n const contentDiv = document.createElement('div');\n contentDiv.className = 'option-content';\n \n if (render) {\n const rendered = render(item, index);\n if (typeof rendered === 'string') {\n contentDiv.innerHTML = rendered;\n } else {\n contentDiv.appendChild(rendered);\n }\n } else {\n const label = this._getLabel();\n contentDiv.textContent = label;\n }\n \n this._container.appendChild(contentDiv);\n \n // Add remove button if needed\n if (showRemoveButton && selected) {\n this._removeButton = document.createElement('button');\n this._removeButton.className = 'remove-button';\n this._removeButton.innerHTML = '×';\n this._removeButton.setAttribute('aria-label', 'Remove option');\n this._removeButton.setAttribute('type', 'button');\n this._container.appendChild(this._removeButton);\n }\n \n // Set ARIA attributes\n this.setAttribute('role', 'option');\n this.setAttribute('aria-selected', String(selected));\n if (disabled) this.setAttribute('aria-disabled', 'true');\n this.id = `select-option-${index}`;\n }\n\n private _attachEventListeners(): void {\n // Click handler for selection\n this._container.addEventListener('click', (e) => {\n // Don't trigger selection if clicking remove button\n if (e.target === this._removeButton) {\n return;\n }\n \n if (!this._config.disabled) {\n this._handleSelect();\n }\n });\n \n // Remove button handler\n if (this._removeButton) {\n this._removeButton.addEventListener('click', (e) => {\n e.stopPropagation();\n this._handleRemove();\n });\n }\n \n // Keyboard handler\n this.addEventListener('keydown', (e) => {\n if (this._config.disabled) return;\n \n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._handleSelect();\n } else if (e.key === 'Delete' || e.key === 'Backspace') {\n if (this._config.selected && this._config.showRemoveButton) {\n e.preventDefault();\n this._handleRemove();\n }\n }\n });\n }\n\n private _handleSelect(): void {\n const detail: OptionEventDetail = {\n item: this._config.item,\n index: this._config.index,\n value: this._getValue(),\n label: this._getLabel(),\n selected: !this._config.selected,\n };\n \n this.dispatchEvent(new CustomEvent('optionSelect', {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n private _handleRemove(): void {\n const detail: OptionEventDetail = {\n item: this._config.item,\n index: this._config.index,\n value: this._getValue(),\n label: this._getLabel(),\n selected: false,\n };\n \n this.dispatchEvent(new CustomEvent('optionRemove', {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n private _getValue(): unknown {\n if (this._config.getValue) {\n return this._config.getValue(this._config.item);\n }\n return (this._config.item as any)?.value ?? this._config.item;\n }\n\n private _getLabel(): string {\n if (this._config.getLabel) {\n return this._config.getLabel(this._config.item);\n }\n return (this._config.item as any)?.label ?? String(this._config.item);\n }\n\n /**\n * Update option configuration and re-render\n */\n updateConfig(updates: Partial<OptionConfig>): void {\n this._config = { ...this._config, ...updates };\n this._render();\n this._attachEventListeners();\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<OptionConfig> {\n return this._config;\n }\n\n /**\n * Get option value\n */\n getValue(): unknown {\n return this._getValue();\n }\n\n /**\n * Get option label\n */\n getLabel(): string {\n return this._getLabel();\n }\n\n /**\n * Set selected state\n */\n setSelected(selected: boolean): void {\n this._config.selected = selected;\n this._render();\n }\n\n /**\n * Set active state\n */\n setActive(active: boolean): void {\n this._config.active = active;\n this._render();\n }\n\n /**\n * Set disabled state\n */\n setDisabled(disabled: boolean): void {\n this._config.disabled = disabled;\n this._render();\n }\n}\n\n// Register custom element\nif (!customElements.get('select-option')) {\n customElements.define('select-option', SelectOption);\n}\n","/**\n * Web Worker protocol types for off-main-thread processing.\n * Supports heavy transforms, fuzzy search, and data processing.\n */\n\nexport interface WorkerRequest {\n id: string;\n type: 'transform' | 'search' | 'filter' | 'sort';\n payload: unknown;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: string;\n success: boolean;\n data?: T;\n error?: string;\n duration?: number; // milliseconds\n}\n\nexport interface TransformRequest {\n items: unknown[];\n transformer: string; // serialized function\n}\n\nexport interface SearchRequest {\n items: unknown[];\n query: string;\n fuzzy?: boolean;\n maxResults?: number;\n}\n\nexport interface FilterRequest {\n items: unknown[];\n predicate: string; // serialized function\n}\n\nexport interface SortRequest {\n items: unknown[];\n comparator: string; // serialized function\n}\n\n/**\n * Worker manager for handling off-main-thread processing.\n * Automatically falls back if workers not available or blocked by COOP/COEP.\n */\nexport class WorkerManager {\n private worker: Worker | null = null;\n private pending = new Map<string, {\n resolve: (data: any) => void;\n reject: (error: Error) => void;\n timeout: number;\n }>();\n private supportsWorkers = false;\n private supportsSharedArrayBuffer = false;\n private nextId = 0;\n\n constructor() {\n this.detectFeatures();\n this.initWorker();\n }\n\n /**\n * Detect browser capabilities\n */\n private detectFeatures(): void {\n this.supportsWorkers = typeof Worker !== 'undefined';\n this.supportsSharedArrayBuffer = typeof SharedArrayBuffer !== 'undefined';\n }\n\n /**\n * Initialize worker (inline blob URL for simplicity)\n */\n private initWorker(): void {\n if (!this.supportsWorkers) return;\n\n try {\n const workerCode = this.generateWorkerCode();\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n const url = URL.createObjectURL(blob);\n \n this.worker = new Worker(url);\n this.worker.onmessage = this.handleMessage.bind(this);\n this.worker.onerror = this.handleError.bind(this);\n \n // Cleanup blob URL after worker loads\n URL.revokeObjectURL(url);\n } catch (err) {\n console.warn('Worker initialization failed, falling back to main thread', err);\n this.worker = null;\n }\n }\n\n /**\n * Generate worker code as string\n */\n private generateWorkerCode(): string {\n return `\n // Worker code\n self.onmessage = function(e) {\n const start = performance.now();\n const { id, type, payload } = e.data;\n \n try {\n let result;\n \n switch (type) {\n case 'transform':\n result = handleTransform(payload);\n break;\n case 'search':\n result = handleSearch(payload);\n break;\n case 'filter':\n result = handleFilter(payload);\n break;\n case 'sort':\n result = handleSort(payload);\n break;\n default:\n throw new Error('Unknown operation: ' + type);\n }\n \n const duration = performance.now() - start;\n self.postMessage({\n id,\n success: true,\n data: result,\n duration,\n });\n } catch (error) {\n self.postMessage({\n id,\n success: false,\n error: error.message,\n });\n }\n };\n \n function handleTransform({ items, transformer }) {\n const fn = new Function('item', 'index', 'return (' + transformer + ')(item, index)');\n return items.map((item, i) => fn(item, i));\n }\n \n function handleSearch({ items, query, fuzzy, maxResults }) {\n const lowerQuery = query.toLowerCase();\n const results = [];\n \n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const text = String(item).toLowerCase();\n \n if (fuzzy) {\n if (fuzzyMatch(text, lowerQuery)) {\n results.push({ item, index: i, score: fuzzyScore(text, lowerQuery) });\n }\n } else {\n if (text.includes(lowerQuery)) {\n results.push({ item, index: i });\n }\n }\n \n if (maxResults && results.length >= maxResults) break;\n }\n \n if (fuzzy) {\n results.sort((a, b) => b.score - a.score);\n }\n \n return results;\n }\n \n function handleFilter({ items, predicate }) {\n const fn = new Function('item', 'index', 'return (' + predicate + ')(item, index)');\n return items.filter((item, i) => fn(item, i));\n }\n \n function handleSort({ items, comparator }) {\n const fn = new Function('a', 'b', 'return (' + comparator + ')(a, b)');\n return [...items].sort(fn);\n }\n \n // Simple fuzzy matching (Levenshtein-inspired)\n function fuzzyMatch(text, query) {\n let qi = 0;\n for (let ti = 0; ti < text.length && qi < query.length; ti++) {\n if (text[ti] === query[qi]) qi++;\n }\n return qi === query.length;\n }\n \n function fuzzyScore(text, query) {\n let score = 0;\n let qi = 0;\n for (let ti = 0; ti < text.length && qi < query.length; ti++) {\n if (text[ti] === query[qi]) {\n score += 100 - ti; // Earlier matches score higher\n qi++;\n }\n }\n return score;\n }\n `;\n }\n\n /**\n * Handle worker message\n */\n private handleMessage(e: MessageEvent<WorkerResponse>): void {\n const { id, success, data, error } = e.data;\n const pending = this.pending.get(id);\n \n if (!pending) return;\n \n clearTimeout(pending.timeout);\n this.pending.delete(id);\n \n if (success) {\n pending.resolve(data);\n } else {\n pending.reject(new Error(error || 'Worker error'));\n }\n }\n\n /**\n * Handle worker error\n */\n private handleError(err: ErrorEvent): void {\n console.error('Worker error:', err);\n // Reject all pending requests\n for (const [id, pending] of this.pending) {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Worker crashed'));\n }\n this.pending.clear();\n }\n\n /**\n * Execute operation (worker or fallback)\n */\n async execute<T = unknown>(\n type: WorkerRequest['type'],\n payload: unknown,\n timeout = 5000\n ): Promise<T> {\n // Fallback to main thread if no worker\n if (!this.worker) {\n return this.executeFallback<T>(type, payload);\n }\n\n const id = `req_${this.nextId++}`;\n \n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error('Worker timeout'));\n }, timeout) as unknown as number;\n\n this.pending.set(id, { resolve, reject, timeout: timeoutId });\n\n this.worker!.postMessage({ id, type, payload });\n });\n }\n\n /**\n * Fallback to main thread execution\n */\n private async executeFallback<T>(type: string, payload: any): Promise<T> {\n // Simple synchronous fallback implementations\n switch (type) {\n case 'transform': {\n const { items, transformer } = payload as TransformRequest;\n const fn = new Function('item', 'index', `return (${transformer})(item, index)`);\n return items.map((item, i) => fn(item, i)) as T;\n }\n case 'search': {\n const { items, query, fuzzy } = payload as SearchRequest;\n const lowerQuery = query.toLowerCase();\n const results: { item: any; index: number }[] = [];\n \n items.forEach((item, index) => {\n const itemStr = String(item).toLowerCase();\n if (fuzzy) {\n // Simple fuzzy match - check if all query chars appear in order\n let queryIndex = 0;\n for (let i = 0; i < itemStr.length && queryIndex < lowerQuery.length; i++) {\n if (itemStr[i] === lowerQuery[queryIndex]) {\n queryIndex++;\n }\n }\n if (queryIndex === lowerQuery.length) {\n results.push({ item, index });\n }\n } else {\n // Exact substring match\n if (itemStr.includes(lowerQuery)) {\n results.push({ item, index });\n }\n }\n });\n \n return results as T;\n }\n case 'filter': {\n const { items, predicate } = payload as FilterRequest;\n const fn = new Function('item', 'index', `return (${predicate})(item, index)`);\n return items.filter((item, i) => fn(item, i)) as T;\n }\n case 'sort': {\n const { items, comparator } = payload as SortRequest;\n const fn = new Function('a', 'b', `return (${comparator})(a, b)`) as (a: any, b: any) => number;\n return [...items].sort(fn) as T;\n }\n default:\n throw new Error(`Unknown operation: ${type}`);\n }\n }\n\n /**\n * Transform items with custom function\n */\n async transform<T, R>(items: T[], transformer: (item: T, index: number) => R): Promise<R[]> {\n return this.execute<R[]>('transform', {\n items,\n transformer: transformer.toString(),\n });\n }\n\n /**\n * Search items with optional fuzzy matching\n */\n async search<T>(items: T[], query: string, fuzzy = false): Promise<{ item: T; index: number }[]> {\n return this.execute('search', { items, query, fuzzy });\n }\n\n /**\n * Filter items with predicate\n */\n async filter<T>(items: T[], predicate: (item: T, index: number) => boolean): Promise<T[]> {\n return this.execute<T[]>('filter', {\n items,\n predicate: predicate.toString(),\n });\n }\n\n /**\n * Sort items with comparator\n */\n async sort<T>(items: T[], comparator: (a: T, b: T) => number): Promise<T[]> {\n return this.execute<T[]>('sort', {\n items,\n comparator: comparator.toString(),\n });\n }\n\n /**\n * Check if workers are supported\n */\n get hasWorkerSupport(): boolean {\n return this.supportsWorkers && this.worker !== null;\n }\n\n /**\n * Check if SharedArrayBuffer is supported\n */\n get hasSharedArrayBuffer(): boolean {\n return this.supportsSharedArrayBuffer;\n }\n\n /**\n * Terminate worker\n */\n destroy(): void {\n if (this.worker) {\n // Reject all pending\n for (const [id, pending] of this.pending) {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Worker terminated'));\n }\n this.pending.clear();\n \n this.worker.terminate();\n this.worker = null;\n }\n }\n}\n\n/**\n * Singleton instance\n */\nlet workerManager: WorkerManager | null = null;\n\nexport function getWorkerManager(): WorkerManager {\n if (!workerManager) {\n workerManager = new WorkerManager();\n }\n return workerManager;\n}\n","/**\n * Performance telemetry module for tracking frame timing and performance metrics.\n * Uses PerformanceObserver for precise measurements.\n * \n * Tracks:\n * - Frame time (should be < 16.67ms for 60fps)\n * - Main thread work per frame (target < 8ms, ideal 4-6ms)\n * - Long tasks (> 50ms blocks)\n * - Memory usage (if available)\n */\n\nexport interface FrameMetrics {\n frameTime: number; // milliseconds\n fps: number;\n longTasks: number; // count of frames > 16.67ms\n droppedFrames: number;\n}\n\nexport interface PerformanceMetrics {\n frames: FrameMetrics;\n mainThreadWork: number; // average ms per frame\n longTaskCount: number;\n memory?: {\n usedJSHeapSize: number;\n totalJSHeapSize: number;\n jsHeapSizeLimit: number;\n };\n}\n\nexport class PerformanceTelemetry {\n private frameTimes: number[] = [];\n private longTasks: number = 0;\n private lastFrameTime: number = 0;\n private rafId: number = 0;\n private measuring = false;\n private observer: PerformanceObserver | null = null;\n private workTimes: number[] = [];\n\n constructor() {\n this.setupObserver();\n }\n\n /**\n * Setup PerformanceObserver for long tasks\n */\n private setupObserver(): void {\n if (typeof PerformanceObserver === 'undefined') return;\n\n try {\n this.observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.entryType === 'longtask' && entry.duration > 50) {\n this.longTasks++;\n }\n if (entry.entryType === 'measure') {\n this.workTimes.push(entry.duration);\n }\n }\n });\n\n // Observe long tasks if supported\n try {\n this.observer.observe({ entryTypes: ['longtask', 'measure'] });\n } catch {\n // Fallback to just measure if longtask not supported\n this.observer.observe({ entryTypes: ['measure'] });\n }\n } catch (err) {\n console.warn('PerformanceObserver not available', err);\n }\n }\n\n /**\n * Start measuring frame performance\n */\n start(): void {\n if (this.measuring) return;\n \n this.measuring = true;\n this.frameTimes = [];\n this.workTimes = [];\n this.longTasks = 0;\n this.lastFrameTime = performance.now();\n \n this.measureFrame();\n }\n\n /**\n * Stop measuring\n */\n stop(): void {\n this.measuring = false;\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n }\n }\n\n /**\n * Measure frame timing via requestAnimationFrame\n */\n private measureFrame = (): void => {\n if (!this.measuring) return;\n\n const now = performance.now();\n const frameTime = now - this.lastFrameTime;\n \n this.frameTimes.push(frameTime);\n \n // Keep last 60 frames (1 second at 60fps)\n if (this.frameTimes.length > 60) {\n this.frameTimes.shift();\n }\n \n this.lastFrameTime = now;\n this.rafId = requestAnimationFrame(this.measureFrame);\n };\n\n /**\n * Mark start of work for custom measurement\n */\n markStart(label: string): void {\n performance.mark(`${label}-start`);\n }\n\n /**\n * Mark end of work and measure duration\n */\n markEnd(label: string): number {\n performance.mark(`${label}-end`);\n performance.measure(label, `${label}-start`, `${label}-end`);\n \n const measure = performance.getEntriesByName(label, 'measure')[0];\n return measure ? measure.duration : 0;\n }\n\n /**\n * Get current metrics snapshot\n */\n getMetrics(): PerformanceMetrics {\n const avgFrameTime = this.frameTimes.length > 0\n ? this.frameTimes.reduce((a, b) => a + b, 0) / this.frameTimes.length\n : 0;\n \n const fps = avgFrameTime > 0 ? 1000 / avgFrameTime : 0;\n \n const longFrames = this.frameTimes.filter(t => t > 16.67).length;\n const droppedFrames = this.frameTimes.filter(t => t > 33.33).length; // > 2 frames\n \n const avgMainThreadWork = this.workTimes.length > 0\n ? this.workTimes.reduce((a, b) => a + b, 0) / this.workTimes.length\n : 0;\n\n const metrics: PerformanceMetrics = {\n frames: {\n frameTime: avgFrameTime,\n fps,\n longTasks: longFrames,\n droppedFrames,\n },\n mainThreadWork: avgMainThreadWork,\n longTaskCount: this.longTasks,\n };\n\n // Add memory info if available\n if ('memory' in performance && (performance as any).memory) {\n const mem = (performance as any).memory;\n metrics.memory = {\n usedJSHeapSize: mem.usedJSHeapSize,\n totalJSHeapSize: mem.totalJSHeapSize,\n jsHeapSizeLimit: mem.jsHeapSizeLimit,\n };\n }\n\n return metrics;\n }\n\n /**\n * Check if performance is acceptable\n */\n isPerformanceGood(): boolean {\n const metrics = this.getMetrics();\n \n // Target: 60fps (16.67ms), < 8ms main thread work, minimal long tasks\n return (\n metrics.frames.fps >= 55 && // Allow some variance\n metrics.mainThreadWork < 8 &&\n metrics.frames.longTasks < 3 // Max 5% long frames\n );\n }\n\n /**\n * Get detailed report as string\n */\n getReport(): string {\n const metrics = this.getMetrics();\n \n let report = '=== Performance Report ===\\n';\n report += `FPS: ${metrics.frames.fps.toFixed(2)}\\n`;\n report += `Avg Frame Time: ${metrics.frames.frameTime.toFixed(2)}ms\\n`;\n report += `Long Frames (>16.67ms): ${metrics.frames.longTasks}\\n`;\n report += `Dropped Frames (>33ms): ${metrics.frames.droppedFrames}\\n`;\n report += `Avg Main Thread Work: ${metrics.mainThreadWork.toFixed(2)}ms\\n`;\n report += `Long Tasks (>50ms): ${metrics.longTaskCount}\\n`;\n \n if (metrics.memory) {\n const usedMB = (metrics.memory.usedJSHeapSize / 1024 / 1024).toFixed(2);\n const limitMB = (metrics.memory.jsHeapSizeLimit / 1024 / 1024).toFixed(2);\n report += `Memory: ${usedMB}MB / ${limitMB}MB\\n`;\n }\n \n report += `Status: ${this.isPerformanceGood() ? '✓ GOOD' : '✗ POOR'}\\n`;\n \n return report;\n }\n\n /**\n * Reset all metrics\n */\n reset(): void {\n this.frameTimes = [];\n this.workTimes = [];\n this.longTasks = 0;\n }\n\n /**\n * Cleanup\n */\n destroy(): void {\n this.stop();\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n\n/**\n * Singleton instance\n */\nlet telemetry: PerformanceTelemetry | null = null;\n\nexport function getTelemetry(): PerformanceTelemetry {\n if (!telemetry) {\n telemetry = new PerformanceTelemetry();\n }\n return telemetry;\n}\n\n/**\n * Helper to measure async function execution\n */\nexport async function measureAsync<T>(\n label: string,\n fn: () => Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = performance.now();\n const result = await fn();\n const duration = performance.now() - start;\n \n \n return { result, duration };\n}\n\n/**\n * Helper to measure sync function execution\n */\nexport function measureSync<T>(\n label: string,\n fn: () => T\n): { result: T; duration: number } {\n const start = performance.now();\n const result = fn();\n const duration = performance.now() - start;\n \n \n return { result, duration };\n}\n","/**\n * Security utilities for CSP-compliant environments.\n * All utilities are opt-in and do not run by default.\n */\n\n/**\n * HTML Sanitizer interface - developers must provide their own implementation\n * (e.g., DOMPurify) or use the no-op default.\n */\nexport interface HTMLSanitizer {\n sanitize(html: string): string;\n}\n\n/**\n * No-op sanitizer - DOES NOT sanitize HTML.\n * Used by default to avoid forcing a dependency on sanitizer libraries.\n * Developers using untrusted data MUST provide a real sanitizer.\n */\nclass NoOpSanitizer implements HTMLSanitizer {\n sanitize(html: string): string {\n return html;\n }\n}\n\n/**\n * Registry for custom sanitizer implementation.\n * Defaults to no-op - developers must explicitly set a sanitizer.\n */\nlet globalSanitizer: HTMLSanitizer = new NoOpSanitizer();\n\n/**\n * Set a custom HTML sanitizer (e.g., DOMPurify).\n * \n * @example\n * import DOMPurify from 'dompurify';\n * setHTMLSanitizer({\n * sanitize: (html) => DOMPurify.sanitize(html)\n * });\n */\nexport function setHTMLSanitizer(sanitizer: HTMLSanitizer): void {\n globalSanitizer = sanitizer;\n}\n\n/**\n * Reset to the default no-op sanitizer.\n * Mainly for testing purposes.\n */\nexport function resetHTMLSanitizer(): void {\n globalSanitizer = new NoOpSanitizer();\n}\n\n/**\n * Get the current HTML sanitizer.\n */\nexport function getHTMLSanitizer(): HTMLSanitizer {\n return globalSanitizer;\n}\n\n/**\n * Sanitize HTML using the registered sanitizer.\n * WARNING: Default is no-op! Set a real sanitizer for untrusted content.\n * \n * @param html - HTML string to sanitize\n * @returns Sanitized HTML string\n */\nexport function sanitizeHTML(html: string): string {\n return globalSanitizer.sanitize(html);\n}\n\n/**\n * Create a text node (CSP-safe alternative to innerHTML for text content).\n * \n * @param text - Text content\n * @returns Text node\n */\nexport function createTextNode(text: string): Text {\n return document.createTextNode(text);\n}\n\n/**\n * Set text content safely (CSP-compliant).\n * \n * @param element - Target element\n * @param text - Text content\n */\nexport function setTextContent(element: Element, text: string): void {\n element.textContent = text;\n}\n\n/**\n * Create an element with attributes (CSP-safe).\n * No inline styles or event handlers.\n * \n * @param tagName - HTML tag name\n * @param attributes - Element attributes (excluding style and on* handlers)\n * @param textContent - Optional text content\n * @returns Created element\n */\nexport function createElement(\n tagName: string,\n attributes?: Record<string, string>,\n textContent?: string\n): HTMLElement {\n const el = document.createElement(tagName);\n \n if (attributes) {\n for (const [key, value] of Object.entries(attributes)) {\n // Block dangerous attributes\n if (key.startsWith('on') || key === 'style') {\n console.warn(`[NativeSelect Security] Blocked attribute: ${key}`);\n continue;\n }\n el.setAttribute(key, value);\n }\n }\n \n if (textContent !== undefined) {\n el.textContent = textContent;\n }\n \n return el;\n}\n\n/**\n * Set CSS custom properties (CSP-safe way to style elements).\n * \n * @param element - Target element\n * @param properties - CSS custom properties (e.g., { '--color': 'red' })\n */\nexport function setCSSProperties(element: HTMLElement, properties: Record<string, string>): void {\n for (const [key, value] of Object.entries(properties)) {\n if (!key.startsWith('--')) {\n console.warn(`[NativeSelect Security] CSS property must start with --: ${key}`);\n continue;\n }\n element.style.setProperty(key, value);\n }\n}\n\n/**\n * Feature detection utilities for CSP-restricted environments.\n */\nexport const CSPFeatures = {\n /**\n * Check if inline scripts are allowed (CSP: script-src 'unsafe-inline').\n */\n hasInlineScripts(): boolean {\n try {\n // Try to create a function (blocked by CSP: script-src without 'unsafe-eval')\n new Function('return true');\n return true;\n } catch {\n return false;\n }\n },\n\n /**\n * Check if eval is allowed (CSP: script-src 'unsafe-eval').\n */\n hasEval(): boolean {\n try {\n eval('true');\n return true;\n } catch {\n return false;\n }\n },\n\n /**\n * Check if SharedArrayBuffer is available.\n * Required for some Worker features, blocked without COOP/COEP headers.\n */\n hasSharedArrayBuffer(): boolean {\n return typeof SharedArrayBuffer !== 'undefined';\n },\n\n /**\n * Check if Web Workers are available and functional.\n */\n hasWorkers(): boolean {\n try {\n return typeof Worker !== 'undefined';\n } catch {\n return false;\n }\n },\n\n /**\n * Check if we're in a sandboxed iframe.\n */\n isSandboxed(): boolean {\n try {\n // Sandboxed iframes may not have access to parent\n return window !== window.parent && !window.parent;\n } catch {\n return true;\n }\n },\n\n /**\n * Check CSP policy via meta tag or SecurityPolicyViolationEvent.\n */\n getCSPDirectives(): string[] {\n const metaTags = document.querySelectorAll('meta[http-equiv=\"Content-Security-Policy\"]');\n const directives: string[] = [];\n \n metaTags.forEach((meta) => {\n const content = meta.getAttribute('content');\n if (content) {\n directives.push(content);\n }\n });\n \n return directives;\n }\n};\n\n/**\n * Runtime environment checks for degraded features.\n */\nexport interface EnvironmentCapabilities {\n canUseWorkers: boolean;\n canUseSharedArrayBuffer: boolean;\n canUseInlineScripts: boolean;\n canUseEval: boolean;\n isSandboxed: boolean;\n cspDirectives: string[];\n}\n\n/**\n * Detect environment capabilities once at initialization.\n */\nexport function detectEnvironment(): EnvironmentCapabilities {\n return {\n canUseWorkers: CSPFeatures.hasWorkers(),\n canUseSharedArrayBuffer: CSPFeatures.hasSharedArrayBuffer(),\n canUseInlineScripts: CSPFeatures.hasInlineScripts(),\n canUseEval: CSPFeatures.hasEval(),\n isSandboxed: CSPFeatures.isSandboxed(),\n cspDirectives: CSPFeatures.getCSPDirectives()\n };\n}\n\n/**\n * Validation for untrusted HTML in templates.\n * Logs warning if no sanitizer is configured.\n */\nexport function validateTemplate(html: string, source: string): string {\n if (globalSanitizer instanceof NoOpSanitizer) {\n console.warn(\n `[NativeSelect Security] Template from \"${source}\" contains HTML but no sanitizer is configured. ` +\n `This may be unsafe if the content is untrusted. ` +\n `Call setHTMLSanitizer() with a sanitizer like DOMPurify.`\n );\n }\n return sanitizeHTML(html);\n}\n\n/**\n * Check if a string looks like it might contain executable code.\n */\nexport function containsSuspiciousPatterns(str: string): boolean {\n const patterns = [\n /<script/i,\n /javascript:/i,\n /on\\w+\\s*=/i, // event handlers like onclick=\n /eval\\s*\\(/i,\n /Function\\s*\\(/i,\n /setTimeout\\s*\\(/i,\n /setInterval\\s*\\(/i\n ];\n \n return patterns.some(pattern => pattern.test(str));\n}\n\n/**\n * Escape HTML entities for text content.\n */\nexport function escapeHTML(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\n\n/**\n * Escape attribute values.\n */\nexport function escapeAttribute(attr: string): string {\n return attr\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n","/**\n * CSP-compliant styling utilities.\n * No inline styles or runtime style tag injection.\n * Uses CSS custom properties and class names only.\n */\n\n/**\n * Apply CSS classes to an element (CSP-safe).\n */\nexport function applyClasses(element: HTMLElement, classes: string[]): void {\n element.className = classes.filter(Boolean).join(' ');\n}\n\n/**\n * Toggle a CSS class (CSP-safe).\n */\nexport function toggleClass(element: HTMLElement, className: string, force?: boolean): void {\n element.classList.toggle(className, force);\n}\n\n/**\n * Set CSS custom properties (CSP-safe dynamic styling).\n * All properties must start with -- (CSS variables).\n * \n * @example\n * setCustomProperties(element, {\n * '--item-height': '48px',\n * '--selected-bg': '#0066cc'\n * });\n */\nexport function setCustomProperties(\n element: HTMLElement,\n properties: Record<string, string>\n): void {\n for (const [key, value] of Object.entries(properties)) {\n if (!key.startsWith('--')) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[NativeSelect CSP] Custom property must start with --: \"${key}\". Skipping.`\n );\n }\n continue;\n }\n element.style.setProperty(key, value);\n }\n}\n\n/**\n * Get a CSS custom property value.\n */\nexport function getCustomProperty(element: HTMLElement, propertyName: string): string {\n return getComputedStyle(element).getPropertyValue(propertyName).trim();\n}\n\n/**\n * Remove a CSS custom property.\n */\nexport function removeCustomProperty(element: HTMLElement, propertyName: string): void {\n element.style.removeProperty(propertyName);\n}\n\n/**\n * Predefined theme as CSS custom properties.\n * Can be overridden by consumers via CSS.\n */\nexport const defaultTheme = {\n '--ns-item-height': '40px',\n '--ns-item-padding': '8px 12px',\n '--ns-item-bg': 'transparent',\n '--ns-item-hover-bg': 'rgba(0, 0, 0, 0.05)',\n '--ns-item-selected-bg': 'rgba(0, 102, 204, 0.1)',\n '--ns-item-active-bg': 'rgba(0, 102, 204, 0.2)',\n '--ns-item-color': 'inherit',\n '--ns-item-selected-color': '#0066cc',\n '--ns-border-color': '#ccc',\n '--ns-border-radius': '4px',\n '--ns-focus-outline': '2px solid #0066cc',\n '--ns-font-size': '14px',\n '--ns-font-family': 'system-ui, -apple-system, sans-serif'\n};\n\n/**\n * Apply the default theme to an element.\n */\nexport function applyDefaultTheme(element: HTMLElement): void {\n setCustomProperties(element, defaultTheme);\n}\n\n/**\n * Static CSS for shadow DOM (no runtime injection).\n * This CSS is CSP-safe because it's defined at build time as a string constant,\n * not generated at runtime.\n */\nexport const shadowDOMStyles = `\n:host {\n display: block;\n box-sizing: border-box;\n font-family: var(--ns-font-family, system-ui, -apple-system, sans-serif);\n font-size: var(--ns-font-size, 14px);\n}\n\n* {\n box-sizing: border-box;\n}\n\n.ns-list {\n position: relative;\n overflow: auto;\n max-height: var(--ns-max-height, 300px);\n border: 1px solid var(--ns-border-color, #ccc);\n border-radius: var(--ns-border-radius, 4px);\n background: var(--ns-bg, white);\n outline: none;\n}\n\n.ns-list:focus {\n outline: var(--ns-focus-outline, 2px solid #0066cc);\n outline-offset: -2px;\n}\n\n.ns-item {\n padding: var(--ns-item-padding, 8px 12px);\n min-height: var(--ns-item-height, 40px);\n color: var(--ns-item-color, inherit);\n background: var(--ns-item-bg, transparent);\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n transition: background-color 0.15s ease;\n}\n\n.ns-item:hover {\n background: var(--ns-item-hover-bg, rgba(0, 0, 0, 0.05));\n}\n\n.ns-item[aria-selected=\"true\"] {\n background: var(--ns-item-selected-bg, rgba(0, 102, 204, 0.1));\n color: var(--ns-item-selected-color, #0066cc);\n}\n\n.ns-item[data-active=\"true\"] {\n background: var(--ns-item-active-bg, rgba(0, 102, 204, 0.2));\n}\n\n.ns-item[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.ns-viewport {\n position: relative;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.ns-spacer {\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n pointer-events: none;\n}\n\n/* Screen reader only */\n.ns-sr-only {\n position: absolute;\n left: -9999px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n}\n\n/* Portal mode (teleported outside shadow DOM) */\n.ns-portal {\n position: fixed;\n z-index: var(--ns-portal-z-index, 9999);\n}\n\n/* CSP warning banner (only shown in development) */\n.ns-csp-warning {\n padding: 8px;\n background: #fff3cd;\n border: 1px solid #ffc107;\n border-radius: 4px;\n color: #856404;\n font-size: 12px;\n margin-bottom: 8px;\n}\n`;\n\n/**\n * Inject static styles into shadow root (CSP-safe).\n * Only called once during component initialization.\n */\nexport function injectShadowStyles(shadowRoot: ShadowRoot): void {\n const style = document.createElement('style');\n style.textContent = shadowDOMStyles;\n shadowRoot.appendChild(style);\n}\n\n/**\n * Check if element has overflow:hidden ancestors (portal fallback detection).\n */\nexport function hasOverflowHiddenAncestor(element: HTMLElement): boolean {\n let current: HTMLElement | null = element.parentElement;\n \n while (current && current !== document.body) {\n const overflow = getComputedStyle(current).overflow;\n if (overflow === 'hidden' || overflow === 'clip') {\n return true;\n }\n current = current.parentElement;\n }\n \n return false;\n}\n\n/**\n * Runtime warning for CSP violations (development only).\n */\nexport function warnCSPViolation(feature: string, fallback: string): void {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[NativeSelect CSP] Feature \"${feature}\" blocked by Content Security Policy. ` +\n `Falling back to \"${fallback}\".`\n );\n }\n}\n"],"names":["UnifiedOptionRenderer"],"mappings":"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"}
|