vanilla-smart-select 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +928 -0
- package/README.pt-BR.md +928 -0
- package/dist/vanilla-smart-select.cjs.js +6346 -0
- package/dist/vanilla-smart-select.cjs.js.map +1 -0
- package/dist/vanilla-smart-select.css +316 -0
- package/dist/vanilla-smart-select.css.map +1 -0
- package/dist/vanilla-smart-select.esm.js +6326 -0
- package/dist/vanilla-smart-select.esm.js.map +1 -0
- package/dist/vanilla-smart-select.js +5967 -0
- package/dist/vanilla-smart-select.js.map +1 -0
- package/dist/vanilla-smart-select.min.css +2 -0
- package/dist/vanilla-smart-select.min.css.map +1 -0
- package/dist/vanilla-smart-select.min.js +7 -0
- package/dist/vanilla-smart-select.min.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vanilla-smart-select.esm.js","sources":["../src/core/EventEmitter.js","../src/i18n/en.js","../src/i18n/pt-BR.js","../src/i18n/es.js","../src/i18n/index.js","../src/constants/defaults.js","../src/core/Options.js","../src/constants/events.js","../src/utils/dom.js","../src/adapters/BaseAdapter.js","../src/adapters/DataAdapter.js","../src/adapters/AjaxAdapter.js","../src/utils/template.js","../src/components/Selection.js","../src/adapters/SelectionAdapter.js","../src/components/Dropdown.js","../src/components/SearchBox.js","../src/utils/debounce.js","../src/adapters/DropdownAdapter.js","../src/components/ResultsList.js","../src/utils/diacritics.js","../src/managers/SearchManager.js","../src/adapters/ResultsAdapter.js","../src/constants/keys.js","../src/managers/KeyboardManager.js","../src/managers/AccessibilityManager.js","../src/core/VanillaSmartSelect.js","../src/constants/aria.js","../src/utils/decorators.js","../src/index.js"],"sourcesContent":["/**\n * EventEmitter class - Foundation for the event system\n * Provides internal event bus and DOM event triggering capabilities\n */\n\nclass EventEmitter {\n constructor() {\n this._events = new Map();\n }\n\n /**\n * Register an event listener\n * @param {string} eventName - Name of the event\n * @param {Function} handler - Event handler function\n * @returns {EventEmitter} Returns this for chaining\n */\n on(eventName, handler) {\n if (typeof handler !== \"function\") {\n throw new TypeError(\"Event handler must be a function\");\n }\n\n if (!this._events.has(eventName)) {\n this._events.set(eventName, []);\n }\n\n this._events.get(eventName).push(handler);\n return this;\n }\n\n /**\n * Register a one-time event listener\n * @param {string} eventName - Name of the event\n * @param {Function} handler - Event handler function\n * @returns {EventEmitter} Returns this for chaining\n */\n once(eventName, handler) {\n const onceWrapper = (...args) => {\n handler(...args);\n this.off(eventName, onceWrapper);\n };\n\n return this.on(eventName, onceWrapper);\n }\n\n /**\n * Remove an event listener\n * @param {string} eventName - Name of the event\n * @param {Function} handler - Event handler function to remove\n * @returns {EventEmitter} Returns this for chaining\n */\n off(eventName, handler) {\n if (!this._events.has(eventName)) {\n return this;\n }\n\n if (!handler) {\n // Remove all listeners for this event\n this._events.delete(eventName);\n return this;\n }\n\n const handlers = this._events.get(eventName);\n const index = handlers.indexOf(handler);\n\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n\n // Clean up empty arrays\n if (handlers.length === 0) {\n this._events.delete(eventName);\n }\n\n return this;\n }\n\n /**\n * Emit an event (internal event system)\n * @param {string} eventName - Name of the event\n * @param {*} data - Data to pass to handlers\n * @returns {boolean} Returns true if event had listeners\n */\n emit(eventName, data) {\n if (!this._events.has(eventName)) {\n return false;\n }\n\n const handlers = this._events.get(eventName).slice(); // Clone to avoid issues if handler modifies listeners\n\n handlers.forEach((handler) => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in event handler for \"${eventName}\":`, error);\n }\n });\n\n return true;\n }\n\n /**\n * Trigger a DOM event on an element (for external listeners)\n * @param {HTMLElement} element - Element to trigger event on\n * @param {string} eventName - Name of the event\n * @param {*} detail - Event detail data\n * @param {Object} options - Additional event options\n * @returns {boolean} Returns true if event was not cancelled\n */\n trigger(element, eventName, detail = null, options = {}) {\n if (!element || !(element instanceof HTMLElement)) {\n console.warn(\"Cannot trigger event on invalid element\");\n return false;\n }\n\n const eventOptions = {\n bubbles: true,\n cancelable: true,\n detail,\n ...options,\n };\n\n const event = new CustomEvent(eventName, eventOptions);\n return element.dispatchEvent(event);\n }\n\n /**\n * Remove all event listeners\n */\n removeAllListeners() {\n this._events.clear();\n }\n\n /**\n * Get count of listeners for an event\n * @param {string} eventName - Name of the event\n * @returns {number} Number of listeners\n */\n listenerCount(eventName) {\n if (!this._events.has(eventName)) {\n return 0;\n }\n return this._events.get(eventName).length;\n }\n\n /**\n * Get all event names that have listeners\n * @returns {Array<string>} Array of event names\n */\n eventNames() {\n return Array.from(this._events.keys());\n }\n}\n\nexport default EventEmitter;\n","/**\n * English (en) language strings for Vanilla Smart Select\n */\n\nexport const EN = {\n // Results display\n noResults: \"No results found\",\n\n // Search\n searching: \"Searching...\",\n searchPlaceholder: \"Search...\",\n inputTooShort: (args) => `Please enter ${args.minimum} or more characters`,\n inputTooLong: (args) => `Please delete ${args.excess} characters`,\n\n // Selection limits\n maximumSelected: (args) => `You can only select ${args.maximum} items`,\n\n // AJAX (Phase 2)\n loading: \"Loading...\",\n loadingMore: \"Loading more results...\",\n errorLoading: \"The results could not be loaded\",\n\n // Tagging (Phase 2)\n createNewTag: (args) => `Create tag: \"${args.term}\"`,\n tagAdded: (args) => `Tag \"${args.text}\" added`,\n\n // Pagination (Phase 2)\n loadMore: \"Load more results\",\n\n // Accessibility (ARIA labels)\n searchLabel: \"Search options\",\n clearSelection: \"Clear selection\",\n removeItem: (args) => `Remove ${args.text}`,\n selectOptions: \"Select options\",\n\n // Screen reader announcements\n noResultsAvailable: \"No results found\",\n resultsAvailable: {\n one: \"1 result available\",\n other: (args) => `${args.count} results available`,\n },\n selected: (args) => `Selected: ${args.text}`,\n};\n\nexport default EN;\n","/**\n * Portuguese - Brazil (pt-BR) language strings for Vanilla Smart Select\n */\n\nexport const PT_BR = {\n // Results display\n noResults: \"Nenhum resultado encontrado\",\n\n // Search\n searching: \"Buscando...\",\n searchPlaceholder: \"Buscar...\",\n inputTooShort: (args) =>\n `Por favor, digite ${args.minimum} ou mais caracteres`,\n inputTooLong: (args) => `Por favor, delete ${args.excess} caracteres`,\n\n // Selection limits\n maximumSelected: (args) =>\n `Você só pode selecionar ${args.maximum} ${args.maximum === 1 ? \"item\" : \"itens\"}`,\n\n // AJAX (Phase 2)\n loading: \"Carregando...\",\n loadingMore: \"Carregando mais resultados...\",\n errorLoading: \"Os resultados não puderam ser carregados\",\n\n // Tagging (Phase 2)\n createNewTag: (args) => `Criar tag: \"${args.term}\"`,\n tagAdded: (args) => `Tag \"${args.text}\" adicionada`,\n\n // Pagination (Phase 2)\n loadMore: \"Carregar mais resultados\",\n\n // Accessibility (ARIA labels)\n searchLabel: \"Buscar opções\",\n clearSelection: \"Limpar seleção\",\n removeItem: (args) => `Remover ${args.text}`,\n selectOptions: \"Selecionar opções\",\n\n // Screen reader announcements\n noResultsAvailable: \"Nenhum resultado encontrado\",\n resultsAvailable: {\n one: \"1 resultado disponível\",\n other: (args) => `${args.count} resultados disponíveis`,\n },\n selected: (args) => `Selecionado: ${args.text}`,\n};\n\nexport default PT_BR;\n","/**\n * Spanish (es) language strings for Vanilla Smart Select\n */\n\nexport const ES = {\n // Results display\n noResults: \"No se encontraron resultados\",\n\n // Search\n searching: \"Buscando...\",\n searchPlaceholder: \"Buscar...\",\n inputTooShort: (args) =>\n `Por favor, ingrese ${args.minimum} o más caracteres`,\n inputTooLong: (args) => `Por favor, elimine ${args.excess} caracteres`,\n\n // Selection limits\n maximumSelected: (args) =>\n `Solo puede seleccionar ${args.maximum} ${args.maximum === 1 ? \"elemento\" : \"elementos\"}`,\n\n // AJAX (Phase 2)\n loading: \"Cargando...\",\n loadingMore: \"Cargando más resultados...\",\n errorLoading: \"Los resultados no se pudieron cargar\",\n\n // Tagging (Phase 2)\n createNewTag: (args) => `Crear etiqueta: \"${args.term}\"`,\n tagAdded: (args) => `Etiqueta \"${args.text}\" agregada`,\n\n // Pagination (Phase 2)\n loadMore: \"Cargar más resultados\",\n\n // Accessibility (ARIA labels)\n searchLabel: \"Buscar opciones\",\n clearSelection: \"Limpiar selección\",\n removeItem: (args) => `Eliminar ${args.text}`,\n selectOptions: \"Seleccionar opciones\",\n\n // Screen reader announcements\n noResultsAvailable: \"No se encontraron resultados\",\n resultsAvailable: {\n one: \"1 resultado disponible\",\n other: (args) => `${args.count} resultados disponibles`,\n },\n selected: (args) => `Seleccionado: ${args.text}`,\n};\n\nexport default ES;\n","/**\n * i18n System - Language Registry for Vanilla Smart Select\n * Provides centralized language management and utilities\n */\n\nimport { EN } from \"./en.js\";\nimport { PT_BR } from \"./pt-BR.js\";\nimport { ES } from \"./es.js\";\n\n/**\n * Language registry - maps language codes to language objects\n */\nexport const LANGUAGES = {\n en: EN,\n \"en-US\": EN,\n \"en-GB\": EN,\n \"pt-BR\": PT_BR,\n pt: PT_BR,\n es: ES,\n \"es-ES\": ES,\n \"es-MX\": ES,\n};\n\n/**\n * Get language object by locale code\n * Falls back to English if locale not found\n *\n * @param {string} locale - Language code (e.g., 'en', 'pt-BR', 'es')\n * @returns {Object} Language object with all translated strings\n */\nexport function getLanguage(locale) {\n if (!locale || typeof locale !== \"string\") {\n return EN;\n }\n\n // Try exact match first\n if (LANGUAGES[locale]) {\n return LANGUAGES[locale];\n }\n\n // Try base language (e.g., 'pt' from 'pt-BR')\n const baseLang = locale.split(\"-\")[0];\n if (LANGUAGES[baseLang]) {\n return LANGUAGES[baseLang];\n }\n\n // Fallback to English\n return EN;\n}\n\n/**\n * Detect browser language\n * Returns the best matching language from available translations\n *\n * @returns {string} Language code\n */\nexport function detectBrowserLanguage() {\n // Try navigator.language first (most specific)\n if (navigator.language && LANGUAGES[navigator.language]) {\n return navigator.language;\n }\n\n // Try base language\n if (navigator.language) {\n const baseLang = navigator.language.split(\"-\")[0];\n if (LANGUAGES[baseLang]) {\n return baseLang;\n }\n }\n\n // Try navigator.languages array\n if (navigator.languages && navigator.languages.length > 0) {\n for (const lang of navigator.languages) {\n if (LANGUAGES[lang]) {\n return lang;\n }\n const baseLang = lang.split(\"-\")[0];\n if (LANGUAGES[baseLang]) {\n return baseLang;\n }\n }\n }\n\n // Fallback to English\n return \"en\";\n}\n\n/**\n * Get list of available languages\n *\n * @returns {Array} Array of language codes\n */\nexport function getAvailableLanguages() {\n return Object.keys(LANGUAGES);\n}\n\n/**\n * Check if a language is available\n *\n * @param {string} locale - Language code\n * @returns {boolean} True if language is available\n */\nexport function isLanguageAvailable(locale) {\n return !!LANGUAGES[locale] || !!LANGUAGES[locale.split(\"-\")[0]];\n}\n\nexport default {\n LANGUAGES,\n getLanguage,\n detectBrowserLanguage,\n getAvailableLanguages,\n isLanguageAvailable,\n};\n","/**\n * Default configuration options for vanilla-smart-select\n */\n\nimport { detectBrowserLanguage, getLanguage } from \"../i18n/index.js\";\n\nexport const DEFAULTS = {\n // Display options\n placeholder: \"\",\n theme: \"default\",\n width: \"100%\",\n containerCssClass: \"\",\n dropdownCssClass: \"\",\n\n // Behavior options\n multiple: false,\n searchable: true,\n allowClear: false,\n disabled: false,\n closeOnSelect: true,\n\n // Data options\n data: null,\n\n // Search options\n searchMinimumLength: 0,\n searchDelay: 250,\n searchPlaceholder: null, // Use null to allow i18n translation, or set a custom string to override\n matcher: null, // Custom matcher function\n matchStrategy: \"contains\", // 'startsWith', 'contains', 'exact'\n\n // Template options\n templateResult: null, // Function: (item) => HTMLElement\n templateSelection: null, // Function: (item) => HTMLElement\n escapeMarkup: (markup) => markup, // Function to escape/sanitize HTML\n\n // Dropdown options\n dropdownParent: null,\n dropdownAutoWidth: false,\n dropdownCssClass: \"\",\n\n // AJAX options (Phase 2)\n ajax: null,\n /*\n ajax: {\n url: '',\n method: 'GET',\n dataType: 'json',\n delay: 250,\n headers: {},\n data: (params) => params,\n processResults: (data) => data,\n transport: null // Custom transport function\n }\n */\n\n // Tagging options (Phase 2)\n tags: false,\n createTag: (params) => {\n const term = params.term?.trim();\n if (!term) return null;\n return { id: term, text: term };\n },\n insertTag: (data, tag) => {\n data.unshift(tag);\n },\n\n // Language/i18n options\n // Auto-detect browser language and load appropriate translations\n language: getLanguage(detectBrowserLanguage()),\n\n // Accessibility options\n ariaLabel: null,\n ariaDescribedBy: null,\n\n // Selection limit (for multiple select)\n maximumSelectionLength: 0, // 0 = unlimited\n\n // Event callbacks\n onOpen: null,\n onClose: null,\n onChange: null,\n onSelect: null,\n onUnselect: null,\n onClear: null,\n\n // Debug mode\n debug: false,\n};\n\nexport default DEFAULTS;\n","/**\n * Options class - Manages configuration options\n * Handles merging, validation, and access to configuration\n */\n\nimport { DEFAULTS } from \"../constants/defaults.js\";\n\nclass Options {\n constructor(options = {}, defaults = DEFAULTS) {\n this._options = this._merge(defaults, options);\n this._validate();\n }\n\n /**\n * Deep merge two objects\n * @param {Object} target - Target object\n * @param {Object} source - Source object\n * @returns {Object} Merged object\n * @private\n */\n _merge(target, source) {\n const result = { ...target };\n\n Object.keys(source).forEach((key) => {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (\n this._isPlainObject(sourceValue) &&\n this._isPlainObject(targetValue)\n ) {\n result[key] = this._merge(targetValue, sourceValue);\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue;\n }\n });\n\n return result;\n }\n\n /**\n * Check if value is a plain object\n * @param {*} value - Value to check\n * @returns {boolean} Whether value is a plain object\n * @private\n */\n _isPlainObject(value) {\n return (\n value !== null &&\n typeof value === \"object\" &&\n value.constructor === Object\n );\n }\n\n /**\n * Validate options\n * @throws {Error} If options are invalid\n * @private\n */\n _validate() {\n // Validate searchDelay\n if (\n typeof this._options.searchDelay !== \"number\" ||\n this._options.searchDelay < 0\n ) {\n throw new Error(\"searchDelay must be a non-negative number\");\n }\n\n // Validate searchMinimumLength\n if (\n typeof this._options.searchMinimumLength !== \"number\" ||\n this._options.searchMinimumLength < 0\n ) {\n throw new Error(\"searchMinimumLength must be a non-negative number\");\n }\n\n // Validate matcher\n if (\n this._options.matcher !== null &&\n typeof this._options.matcher !== \"function\"\n ) {\n throw new Error(\"matcher must be a function or null\");\n }\n\n // Validate matchStrategy\n const validStrategies = [\"startsWith\", \"contains\", \"exact\"];\n if (!validStrategies.includes(this._options.matchStrategy)) {\n throw new Error(\n `matchStrategy must be one of: ${validStrategies.join(\", \")}`,\n );\n }\n\n // Validate template functions\n if (\n this._options.templateResult !== null &&\n typeof this._options.templateResult !== \"function\"\n ) {\n throw new Error(\"templateResult must be a function or null\");\n }\n\n if (\n this._options.templateSelection !== null &&\n typeof this._options.templateSelection !== \"function\"\n ) {\n throw new Error(\"templateSelection must be a function or null\");\n }\n\n // Validate maximumSelectionLength\n if (\n typeof this._options.maximumSelectionLength !== \"number\" ||\n this._options.maximumSelectionLength < 0\n ) {\n throw new Error(\"maximumSelectionLength must be a non-negative number\");\n }\n\n // Validate theme\n if (typeof this._options.theme !== \"string\") {\n throw new Error(\"theme must be a string\");\n }\n\n // Validate width\n if (typeof this._options.width !== \"string\") {\n throw new Error('width must be a string (e.g., \"100%\", \"300px\")');\n }\n }\n\n /**\n * Get an option value\n * @param {string} key - Option key (supports dot notation)\n * @returns {*} Option value\n */\n get(key) {\n const keys = key.split(\".\");\n let value = this._options;\n\n for (const k of keys) {\n if (value && typeof value === \"object\" && k in value) {\n value = value[k];\n } else {\n return undefined;\n }\n }\n\n return value;\n }\n\n /**\n * Set an option value\n * @param {string} key - Option key (supports dot notation)\n * @param {*} value - New value\n */\n set(key, value) {\n const keys = key.split(\".\");\n const lastKey = keys.pop();\n let target = this._options;\n\n for (const k of keys) {\n if (!target[k] || typeof target[k] !== \"object\") {\n target[k] = {};\n }\n target = target[k];\n }\n\n target[lastKey] = value;\n }\n\n /**\n * Merge new options\n * @param {Object} options - New options to merge\n */\n merge(options) {\n this._options = this._merge(this._options, options);\n this._validate();\n }\n\n /**\n * Get all options\n * @returns {Object} All options\n */\n getAll() {\n return { ...this._options };\n }\n\n /**\n * Check if an option exists\n * @param {string} key - Option key\n * @returns {boolean} Whether option exists\n */\n has(key) {\n return this.get(key) !== undefined;\n }\n}\n\nexport default Options;\n","/**\n * Event name constants for vanilla-smart-select\n * All events use 'vs:' prefix to avoid conflicts\n */\n\nexport const EVENTS = {\n // Lifecycle events\n INIT: \"vs:init\",\n DESTROY: \"vs:destroy\",\n\n // Selection events\n SELECT: \"vs:select\",\n SELECTING: \"vs:selecting\",\n UNSELECT: \"vs:unselect\",\n UNSELECTING: \"vs:unselecting\",\n CHANGE: \"vs:change\",\n CLEAR: \"vs:clear\",\n CLEARING: \"vs:clearing\",\n SELECTION_LIMIT_REACHED: \"vs:selectionLimitReached\",\n\n // Dropdown events\n OPEN: \"vs:open\",\n OPENING: \"vs:opening\",\n CLOSE: \"vs:close\",\n CLOSING: \"vs:closing\",\n\n // Search/Query events\n QUERY: \"vs:query\",\n RESULTS: \"vs:results\",\n\n // Data events\n DATA_LOADED: \"vs:dataLoaded\",\n\n // AJAX events (Phase 2)\n AJAX_LOADING: \"vs:ajaxLoading\",\n AJAX_SUCCESS: \"vs:ajaxSuccess\",\n AJAX_ERROR: \"vs:ajaxError\",\n\n // Focus events\n FOCUS: \"vs:focus\",\n BLUR: \"vs:blur\",\n};\n\nexport default EVENTS;\n","/**\n * DOM manipulation utilities\n * Helper functions for common DOM operations\n */\n\n/**\n * Create an element with attributes and children\n * @param {string} tag - HTML tag name\n * @param {Object} attributes - Object with attributes to set\n * @param {Array|string|HTMLElement} children - Child elements or text\n * @returns {HTMLElement} Created element\n */\nexport function createElement(tag, attributes = {}, children = []) {\n const element = document.createElement(tag);\n\n // Set attributes\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === \"className\") {\n element.className = value;\n } else if (key === \"dataset\") {\n Object.entries(value).forEach(([dataKey, dataValue]) => {\n element.dataset[dataKey] = dataValue;\n });\n } else if (key.startsWith(\"on\") && typeof value === \"function\") {\n const eventName = key.substring(2).toLowerCase();\n element.addEventListener(eventName, value);\n } else {\n element.setAttribute(key, value);\n }\n });\n\n // Add children\n const childArray = Array.isArray(children) ? children : [children];\n childArray.forEach((child) => {\n if (typeof child === \"string\") {\n element.appendChild(document.createTextNode(child));\n } else if (child instanceof HTMLElement) {\n element.appendChild(child);\n }\n });\n\n return element;\n}\n\n/**\n * Find closest parent matching selector\n * @param {HTMLElement} element - Starting element\n * @param {string} selector - CSS selector\n * @returns {HTMLElement|null} Matching element or null\n */\nexport function closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n\n // Fallback for older browsers\n let el = element;\n while (el) {\n if (el.matches(selector)) {\n return el;\n }\n el = el.parentElement;\n }\n return null;\n}\n\n/**\n * Add one or more classes to an element\n * @param {HTMLElement} element - Element to modify\n * @param {string|Array<string>} classes - Class name(s) to add\n */\nexport function addClass(element, classes) {\n const classList = Array.isArray(classes) ? classes : [classes];\n classList.forEach((cls) => {\n if (cls) element.classList.add(cls);\n });\n}\n\n/**\n * Remove one or more classes from an element\n * @param {HTMLElement} element - Element to modify\n * @param {string|Array<string>} classes - Class name(s) to remove\n */\nexport function removeClass(element, classes) {\n const classList = Array.isArray(classes) ? classes : [classes];\n classList.forEach((cls) => {\n if (cls) element.classList.remove(cls);\n });\n}\n\n/**\n * Toggle a class on an element\n * @param {HTMLElement} element - Element to modify\n * @param {string} className - Class name to toggle\n * @param {boolean} force - Force add (true) or remove (false)\n * @returns {boolean} Whether class is present after toggle\n */\nexport function toggleClass(element, className, force) {\n return element.classList.toggle(className, force);\n}\n\n/**\n * Check if element has a class\n * @param {HTMLElement} element - Element to check\n * @param {string} className - Class name to check\n * @returns {boolean} Whether element has the class\n */\nexport function hasClass(element, className) {\n return element.classList.contains(className);\n}\n\n/**\n * Remove an element from the DOM\n * @param {HTMLElement} element - Element to remove\n */\nexport function removeElement(element) {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n}\n\n/**\n * Empty an element (remove all children)\n * @param {HTMLElement} element - Element to empty\n */\nexport function emptyElement(element) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n}\n\n/**\n * Get element by selector (single)\n * @param {string} selector - CSS selector\n * @param {HTMLElement} context - Context element (default: document)\n * @returns {HTMLElement|null} Found element or null\n */\nexport function querySelector(selector, context = document) {\n return context.querySelector(selector);\n}\n\n/**\n * Get elements by selector (multiple)\n * @param {string} selector - CSS selector\n * @param {HTMLElement} context - Context element (default: document)\n * @returns {Array<HTMLElement>} Array of found elements\n */\nexport function querySelectorAll(selector, context = document) {\n return Array.from(context.querySelectorAll(selector));\n}\n\n/**\n * Get element's offset position relative to document\n * @param {HTMLElement} element - Element to get position of\n * @returns {Object} Object with top, left, width, height\n */\nexport function getOffset(element) {\n const rect = element.getBoundingClientRect();\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft,\n width: rect.width,\n height: rect.height,\n };\n}\n\n/**\n * Get element's position relative to offset parent\n * @param {HTMLElement} element - Element to get position of\n * @returns {Object} Object with top and left\n */\nexport function getPosition(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft,\n };\n}\n\n/**\n * Check if element is visible in viewport\n * @param {HTMLElement} element - Element to check\n * @returns {boolean} Whether element is visible\n */\nexport function isInViewport(element) {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Scroll element into view if needed\n * @param {HTMLElement} element - Element to scroll to\n * @param {HTMLElement} container - Container to scroll within\n */\nexport function scrollIntoViewIfNeeded(element, container) {\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n if (elementRect.top < containerRect.top) {\n container.scrollTop -= containerRect.top - elementRect.top;\n } else if (elementRect.bottom > containerRect.bottom) {\n container.scrollTop += elementRect.bottom - containerRect.bottom;\n }\n}\n\n/**\n * Generate unique ID\n * @param {string} prefix - Prefix for the ID\n * @returns {string} Unique ID\n */\nlet uniqueIdCounter = 0;\nexport function generateUniqueId(prefix = \"vs\") {\n return `${prefix}-${Date.now()}-${++uniqueIdCounter}`;\n}\n\n/**\n * Escape HTML special characters\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\nexport function escapeHtml(text) {\n const div = document.createElement(\"div\");\n div.textContent = text;\n return div.innerHTML;\n}\n\n/**\n * Parse HTML string into DOM elements\n * @param {string} html - HTML string\n * @returns {NodeList} Parsed elements\n */\nexport function parseHtml(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html.trim();\n return template.content.childNodes;\n}\n\nexport default {\n createElement,\n closest,\n addClass,\n removeClass,\n toggleClass,\n hasClass,\n removeElement,\n emptyElement,\n querySelector,\n querySelectorAll,\n getOffset,\n getPosition,\n isInViewport,\n scrollIntoViewIfNeeded,\n generateUniqueId,\n escapeHtml,\n parseHtml,\n};\n","/**\n * BaseAdapter - Abstract base class for all adapters\n * Provides common interface and functionality\n */\n\nclass BaseAdapter {\n constructor(instance, options) {\n this.instance = instance;\n this.options = options;\n this.$element = instance.element;\n }\n\n /**\n * Bind the adapter to a container\n * @param {HTMLElement} container - Container element\n */\n bind(container) {\n this.container = container;\n }\n\n /**\n * Destroy the adapter and cleanup\n */\n destroy() {\n // Override in subclasses\n }\n\n /**\n * Emit an event through the instance\n * @param {string} eventName - Event name\n * @param {*} data - Event data\n */\n emit(eventName, data) {\n if (this.instance && this.instance.emit) {\n this.instance.emit(eventName, data);\n }\n }\n\n /**\n * Trigger a DOM event\n * @param {HTMLElement} element - Element to trigger event on\n * @param {string} eventName - Event name\n * @param {*} detail - Event detail\n */\n trigger(element, eventName, detail) {\n if (this.instance && this.instance.trigger) {\n this.instance.trigger(element, eventName, detail);\n }\n }\n}\n\nexport default BaseAdapter;\n","/**\n * DataAdapter - Manages data source and selection state\n * Handles data normalization, querying, and selection tracking\n */\n\nimport BaseAdapter from \"./BaseAdapter.js\";\nimport { EVENTS } from \"../constants/events.js\";\n\nclass DataAdapter extends BaseAdapter {\n constructor(instance, options) {\n super(instance, options);\n\n this.data = [];\n this.selection = [];\n }\n\n /**\n * Initialize data from element or options\n */\n init() {\n // Load data from options or element\n const optionsData = this.options.get(\"data\");\n\n if (optionsData && Array.isArray(optionsData)) {\n this.setData(optionsData);\n } else {\n // Load from <option> elements\n this.loadFromElement();\n }\n\n // Load initial selection\n this.loadInitialSelection();\n }\n\n /**\n * Load data from <option> elements\n */\n loadFromElement() {\n const data = [];\n const options = this.$element.querySelectorAll(\"option\");\n const optgroups = this.$element.querySelectorAll(\"optgroup\");\n\n // Process optgroups\n optgroups.forEach((optgroup, index) => {\n const group = {\n id: `group-${index}-${optgroup.label}`,\n text: optgroup.label,\n children: [],\n };\n\n const groupOptions = optgroup.querySelectorAll(\"option\");\n groupOptions.forEach((option) => {\n const normalized = this._normalizeOption(option);\n // Skip empty placeholder options\n if (!this._isPlaceholder(normalized)) {\n group.children.push(normalized);\n }\n });\n\n // Only add group if it has children\n if (group.children.length > 0) {\n data.push(group);\n }\n });\n\n // Process standalone options (not in optgroups)\n options.forEach((option) => {\n if (\n !option.parentElement ||\n option.parentElement.tagName !== \"OPTGROUP\"\n ) {\n const normalized = this._normalizeOption(option);\n // Skip empty placeholder options\n if (!this._isPlaceholder(normalized)) {\n data.push(normalized);\n }\n }\n });\n\n this.data = data;\n }\n\n /**\n * Normalize an option element to data format\n * @param {HTMLOptionElement} option - Option element\n * @returns {Object} Normalized data object\n */\n _normalizeOption(option) {\n // Use value if present, otherwise use text as fallback\n // But preserve empty string values (for placeholder detection)\n const value = option.value;\n const id =\n value !== \"\" && value != null ? value : value === \"\" ? \"\" : option.text;\n\n return {\n id: id,\n text: option.text,\n disabled: option.disabled,\n selected: option.selected,\n element: option,\n _isEmptyValue: value === \"\", // Mark for placeholder detection\n };\n }\n\n /**\n * Check if an item is a placeholder\n * @param {Object} item - Normalized item\n * @returns {boolean} True if placeholder\n * @private\n */\n _isPlaceholder(item) {\n // Consider it a placeholder if it has an empty value attribute\n // This catches <option value=\"\">Placeholder</option> patterns\n // Note: Using explicit checks to allow id=0 (which is a valid ID)\n return (\n item._isEmptyValue === true ||\n item.id === undefined ||\n item.id === null ||\n item.id === \"\"\n );\n }\n\n /**\n * Load initial selection from element\n */\n loadInitialSelection() {\n const selectedOptions = this.$element.querySelectorAll(\"option:checked\");\n this.selection = Array.from(selectedOptions).map((opt) =>\n this._normalizeOption(opt),\n );\n }\n\n /**\n * Set data programmatically\n * @param {Array} data - Data array\n */\n setData(data) {\n this.data = data.map((item) => this._normalizeItem(item));\n this.emit(EVENTS.DATA_LOADED, { data: this.data });\n }\n\n /**\n * Normalize a data item\n * @param {Object} item - Data item\n * @returns {Object} Normalized item\n */\n _normalizeItem(item) {\n // Preserve all custom properties by spreading the original item\n const normalized = {\n ...item, // Keep all custom properties (flag, code, emoji, avatar, etc.)\n id: item.id !== undefined ? item.id : item.text,\n text: item.text || \"\",\n disabled: item.disabled || false,\n selected: item.selected || false,\n };\n\n // Handle groups\n if (item.children && Array.isArray(item.children)) {\n normalized.children = item.children.map((child) =>\n this._normalizeItem(child),\n );\n }\n\n // Keep original data\n if (item.element) {\n normalized.element = item.element;\n }\n\n return normalized;\n }\n\n /**\n * Query data (search/filter)\n * @param {Object} _params - Query parameters (reserved for future use)\n * @returns {Array} Filtered data with groups preserved\n */\n query(_params = {}) {\n // Return data with groups intact - don't flatten!\n // Filtering/searching is handled by SearchManager and ResultsAdapter\n return this.data;\n }\n\n /**\n * Get current selection\n * @returns {Array} Selected items\n */\n current() {\n return this.selection;\n }\n\n /**\n * Select an item\n * @param {Object} data - Item to select\n * @returns {boolean} True if selection was successful, false if limit reached or already selected\n */\n select(data) {\n const isMultiple = this.options.get(\"multiple\");\n\n if (!isMultiple) {\n // Single select - clear previous selection\n this.selection = [data];\n } else {\n // Multiple select - add to selection\n const exists = this.selection.some((item) => item.id === data.id);\n if (!exists) {\n // Check selection limit\n const maximumSelectionLength = this.options.get(\n \"maximumSelectionLength\",\n );\n if (\n maximumSelectionLength > 0 &&\n this.selection.length >= maximumSelectionLength\n ) {\n // Limit reached - emit event and return false\n const language = this.options.get(\"language\");\n const message =\n typeof language.maximumSelected === \"function\"\n ? language.maximumSelected({ maximum: maximumSelectionLength })\n : `You can only select ${maximumSelectionLength} items`;\n\n this.emit(EVENTS.SELECTION_LIMIT_REACHED, {\n maximum: maximumSelectionLength,\n message: message,\n });\n this.trigger(this.$element, EVENTS.SELECTION_LIMIT_REACHED, {\n maximum: maximumSelectionLength,\n message: message,\n });\n\n return false; // Selection failed - limit reached\n }\n\n this.selection.push(data);\n } else {\n // Item already selected\n return false;\n }\n }\n\n // Update element\n this._updateElement();\n\n // Emit events\n this.emit(EVENTS.SELECT, { data });\n this.emit(EVENTS.CHANGE, { value: this.getValue() });\n this.trigger(this.$element, EVENTS.SELECT, { data });\n this.trigger(this.$element, EVENTS.CHANGE, { value: this.getValue() });\n\n return true; // Selection successful\n }\n\n /**\n * Unselect an item\n * @param {Object} data - Item to unselect\n */\n unselect(data) {\n this.selection = this.selection.filter((item) => item.id !== data.id);\n\n // Update element\n this._updateElement();\n\n // Emit events\n this.emit(EVENTS.UNSELECT, { data });\n this.emit(EVENTS.CHANGE, { value: this.getValue() });\n this.trigger(this.$element, EVENTS.UNSELECT, { data });\n this.trigger(this.$element, EVENTS.CHANGE, { value: this.getValue() });\n }\n\n /**\n * Clear all selections\n */\n clear() {\n this.selection = [];\n this._updateElement();\n\n // Don't emit events here - VanillaSmartSelect.clear() will emit them\n // This prevents double emission and timing issues\n }\n\n /**\n * Get current value(s)\n * @returns {string|Array} Current value\n */\n getValue() {\n const isMultiple = this.options.get(\"multiple\");\n\n if (isMultiple) {\n return this.selection.map((item) => item.id);\n }\n\n return this.selection.length > 0 ? this.selection[0].id : null;\n }\n\n /**\n * Update the original select element\n * @private\n */\n _updateElement() {\n const options = this.$element.querySelectorAll(\"option\");\n const selectedIds = this.selection.map((item) => item.id);\n\n options.forEach((option) => {\n const value = option.value || option.text;\n option.selected = selectedIds.includes(value);\n });\n\n // Trigger native change event\n const event = new Event(\"change\", { bubbles: true });\n this.$element.dispatchEvent(event);\n }\n\n /**\n * Destroy the adapter\n */\n destroy() {\n this.data = [];\n this.selection = [];\n }\n}\n\nexport default DataAdapter;\n","/**\n * AjaxAdapter - Handles remote data loading via AJAX\n * Supports search, pagination, and custom request configuration\n */\n\nimport BaseAdapter from \"./BaseAdapter.js\";\nimport { EVENTS } from \"../constants/events.js\";\n\nclass AjaxAdapter extends BaseAdapter {\n constructor(instance, options, dataAdapter) {\n super(instance, options);\n\n this.dataAdapter = dataAdapter;\n this.currentRequest = null;\n this.cache = new Map();\n\n // Get AJAX configuration\n this.ajaxConfig = this.options.get(\"ajax\");\n\n if (!this.ajaxConfig) {\n throw new Error(\"AjaxAdapter requires ajax configuration option\");\n }\n\n // Normalize AJAX config with defaults\n this.ajaxConfig = {\n url: \"\",\n method: \"GET\",\n dataType: \"json\",\n delay: 250,\n headers: {},\n cache: false,\n data: (params) => params,\n processResults: (data) => ({ results: data }),\n transport: null,\n ...this.ajaxConfig,\n };\n }\n\n /**\n * Query remote data\n * @param {Object} params - Query parameters\n * @param {string} params.term - Search term\n * @param {number} params.page - Page number (for pagination)\n * @returns {Promise<Object>} Results with data and pagination info\n */\n query(params = {}) {\n const { term = \"\", page = 1 } = params;\n\n // Check cache if enabled\n const cacheKey = this._getCacheKey(params);\n if (this.ajaxConfig.cache && this.cache.has(cacheKey)) {\n return Promise.resolve(this.cache.get(cacheKey));\n }\n\n // Cancel previous request if exists\n if (this.currentRequest) {\n this.currentRequest.abort();\n }\n\n // Emit loading event\n this.emit(EVENTS.AJAX_LOADING, { params });\n this.trigger(this.$element, EVENTS.AJAX_LOADING, { params });\n\n // Prepare request parameters using custom data function\n const requestParams = this.ajaxConfig.data({ term, page });\n\n // Use custom transport if provided, otherwise use default fetch\n const request = this.ajaxConfig.transport\n ? this.ajaxConfig.transport.call(this, requestParams, this.ajaxConfig)\n : this._defaultTransport(requestParams);\n\n this.currentRequest = request;\n\n return request\n .then((response) => {\n this.currentRequest = null;\n\n // Process results using custom function\n const processedResults = this.ajaxConfig.processResults(\n response,\n params,\n );\n\n // Normalize the results\n const normalizedResults = {\n results: Array.isArray(processedResults.results)\n ? processedResults.results.map((item) => this._normalizeItem(item))\n : [],\n pagination: processedResults.pagination || { more: false },\n };\n\n // Update cache if enabled\n if (this.ajaxConfig.cache) {\n this.cache.set(cacheKey, normalizedResults);\n }\n\n // Emit success event\n this.emit(EVENTS.AJAX_SUCCESS, { results: normalizedResults, params });\n this.trigger(this.$element, EVENTS.AJAX_SUCCESS, {\n results: normalizedResults,\n params,\n });\n\n return normalizedResults;\n })\n .catch((error) => {\n this.currentRequest = null;\n\n // Only emit error if it's not an abort\n if (error.name !== \"AbortError\") {\n this.emit(EVENTS.AJAX_ERROR, { error, params });\n this.trigger(this.$element, EVENTS.AJAX_ERROR, { error, params });\n }\n\n // Return empty results on error\n return { results: [], pagination: { more: false } };\n });\n }\n\n /**\n * Default transport using Fetch API\n * @param {Object} params - Request parameters\n * @returns {Promise} Fetch promise with AbortController\n * @private\n */\n _defaultTransport(params) {\n const abortController = new AbortController();\n\n let url = this.ajaxConfig.url;\n const method = this.ajaxConfig.method.toUpperCase();\n\n // Prepare request options\n const fetchOptions = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.ajaxConfig.headers,\n },\n signal: abortController.signal,\n };\n\n // Handle GET requests - add params to URL\n if (method === \"GET\") {\n const queryString = new URLSearchParams(params).toString();\n if (queryString) {\n url += (url.includes(\"?\") ? \"&\" : \"?\") + queryString;\n }\n } else {\n // Handle POST/PUT requests - add params to body\n fetchOptions.body = JSON.stringify(params);\n }\n\n const fetchPromise = fetch(url, fetchOptions).then((response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n // Parse response based on dataType\n if (this.ajaxConfig.dataType === \"json\") {\n return response.json();\n } else if (this.ajaxConfig.dataType === \"text\") {\n return response.text();\n } else {\n return response.blob();\n }\n });\n\n // Add abort method to the promise\n fetchPromise.abort = () => abortController.abort();\n\n return fetchPromise;\n }\n\n /**\n * Normalize a data item (same as DataAdapter)\n * @param {Object} item - Data item\n * @returns {Object} Normalized item\n * @private\n */\n _normalizeItem(item) {\n // Preserve all custom properties by spreading the original item\n const normalized = {\n ...item, // Keep all custom properties\n id: item.id !== undefined ? item.id : item.text,\n text: item.text || \"\",\n disabled: item.disabled || false,\n selected: item.selected || false,\n };\n\n // Handle groups\n if (item.children && Array.isArray(item.children)) {\n normalized.children = item.children.map((child) =>\n this._normalizeItem(child),\n );\n }\n\n return normalized;\n }\n\n /**\n * Generate cache key from parameters\n * @param {Object} params - Query parameters\n * @returns {string} Cache key\n * @private\n */\n _getCacheKey(params) {\n return JSON.stringify(params);\n }\n\n /**\n * Clear the cache\n */\n clearCache() {\n this.cache.clear();\n }\n\n /**\n * Destroy the adapter\n */\n destroy() {\n // Cancel any pending requests\n if (this.currentRequest) {\n this.currentRequest.abort();\n this.currentRequest = null;\n }\n\n // Clear cache\n this.clearCache();\n }\n}\n\nexport default AjaxAdapter;\n","/**\n * Template Utilities\n * Handles custom template rendering with safety checks\n */\n\nimport { createElement } from \"./dom.js\";\n\n/**\n * Apply a custom template function to render content\n * @param {Function} templateFn - Template function that receives item and returns HTMLElement or string\n * @param {Object} item - Data item to render\n * @param {HTMLElement} targetElement - Element to append rendered content to\n * @param {Object} options - Rendering options\n * @param {string} options.defaultText - Default text to use if template fails (defaults to item.text)\n * @param {boolean} options.useTextContent - Use textContent instead of createElement for fallback (defaults to false)\n * @returns {boolean} True if template was applied successfully, false if fallback was used\n */\nexport function applyTemplate(templateFn, item, targetElement, options = {}) {\n const { defaultText = item.text, useTextContent = false } = options;\n\n // If no template function provided, use default rendering\n if (!templateFn || typeof templateFn !== \"function\") {\n _renderDefault(targetElement, defaultText, useTextContent);\n return false;\n }\n\n try {\n // Call template function\n const customContent = templateFn(item);\n\n // Handle HTMLElement return\n if (customContent instanceof HTMLElement) {\n targetElement.appendChild(customContent);\n return true;\n }\n\n // Handle string return (HTML)\n if (typeof customContent === \"string\") {\n // Note: Using innerHTML here - developers are responsible for sanitizing\n // user-generated content to prevent XSS attacks\n targetElement.innerHTML = customContent;\n return true;\n }\n\n // Invalid return type - use fallback\n console.warn(\n \"Template function returned invalid content type:\",\n typeof customContent,\n );\n _renderDefault(targetElement, defaultText, useTextContent);\n return false;\n } catch (error) {\n // Template function threw an error - log and use fallback\n console.error(\"Template rendering error:\", error);\n _renderDefault(targetElement, defaultText, useTextContent);\n return false;\n }\n}\n\n/**\n * Render default content (fallback)\n * @param {HTMLElement} targetElement - Target element\n * @param {string} text - Text to render\n * @param {boolean} useTextContent - Use textContent directly or create span wrapper\n * @private\n */\nfunction _renderDefault(targetElement, text, useTextContent) {\n if (useTextContent) {\n targetElement.textContent = text;\n } else {\n const textElement = createElement(\"span\", {}, text);\n targetElement.appendChild(textElement);\n }\n}\n","/**\n * Selection Component - Renders selected items display\n * Handles single and multiple selection display\n */\n\nimport { createElement } from \"../utils/dom.js\";\nimport { applyTemplate } from \"../utils/template.js\";\n\nclass Selection {\n constructor(options) {\n this.options = options;\n this.container = null;\n\n // Cache template function for performance (avoids repeated options.get calls)\n this._cachedTemplateSelection = options.get(\"templateSelection\");\n }\n\n /**\n * Render the selection container\n * @returns {HTMLElement} Selection container\n */\n render() {\n this.container = createElement(\"div\", {\n className: \"vs-selection\",\n tabindex: \"0\",\n role: \"combobox\",\n \"aria-expanded\": \"false\",\n \"aria-haspopup\": \"listbox\",\n });\n\n // Render placeholder initially\n this.renderPlaceholder();\n\n return this.container;\n }\n\n /**\n * Render placeholder\n */\n renderPlaceholder() {\n if (!this.container) return;\n\n // Always clear the container first\n this.container.innerHTML = \"\";\n\n // Then add placeholder if defined\n const placeholder = this.options.get(\"placeholder\");\n if (placeholder) {\n const placeholderEl = createElement(\n \"span\",\n {\n className: \"vs-selection__placeholder\",\n },\n placeholder,\n );\n this.container.appendChild(placeholderEl);\n }\n }\n\n /**\n * Update selection display\n * @param {Array} selection - Selected items\n */\n update(selection) {\n if (!this.container) return;\n\n const isMultiple = this.options.get(\"multiple\");\n\n if (!selection || selection.length === 0) {\n this.renderPlaceholder();\n return;\n }\n\n if (isMultiple) {\n this._renderMultiple(selection);\n } else {\n this._renderSingle(selection[0]);\n }\n }\n\n /**\n * Render single selection\n * @param {Object} item - Selected item\n * @private\n */\n _renderSingle(item) {\n this.container.innerHTML = \"\";\n\n const rendered = createElement(\"span\", {\n className: \"vs-selection__rendered\",\n });\n\n // Use custom template if provided, otherwise use default\n // Uses cached template function for better performance\n applyTemplate(this._cachedTemplateSelection, item, rendered, {\n defaultText: item.text,\n useTextContent: true, // Use textContent directly for better performance\n });\n\n this.container.appendChild(rendered);\n\n // Add clear button if allowClear is enabled\n const allowClear = this.options.get(\"allowClear\");\n if (allowClear) {\n const language = this.options.get(\"language\");\n const clearLabel = language.clearSelection || \"Clear selection\";\n\n const clearBtn = createElement(\n \"span\",\n {\n className: \"vs-selection__clear\",\n role: \"button\",\n \"aria-label\": clearLabel,\n title: clearLabel,\n },\n \"×\",\n );\n\n this.container.appendChild(clearBtn);\n }\n }\n\n /**\n * Render multiple selection\n * @param {Array} items - Selected items\n * @private\n */\n _renderMultiple(items) {\n this.container.innerHTML = \"\";\n\n const choicesContainer = createElement(\"ul\", {\n className: \"vs-selection__choices\",\n });\n\n items.forEach((item) => {\n const choice = this._renderChoice(item);\n choicesContainer.appendChild(choice);\n });\n\n this.container.appendChild(choicesContainer);\n }\n\n /**\n * Render a single choice (tag) in multiple select\n * @param {Object} item - Item to render\n * @returns {HTMLElement} Choice element\n * @private\n */\n _renderChoice(item) {\n const choice = createElement(\"li\", {\n className: \"vs-selection__choice\",\n \"data-id\": item.id,\n });\n\n const text = createElement(\"span\", {\n className: \"vs-selection__choice__text\",\n });\n\n // Use custom template if provided, otherwise use default\n // Uses cached template function for better performance\n applyTemplate(this._cachedTemplateSelection, item, text, {\n defaultText: item.text,\n useTextContent: true, // Use textContent directly for better performance\n });\n\n const language = this.options.get(\"language\");\n const removeLabel =\n typeof language.removeItem === \"function\"\n ? language.removeItem({ text: item.text })\n : `Remove ${item.text}`;\n\n const remove = createElement(\n \"span\",\n {\n className: \"vs-selection__choice__remove\",\n role: \"button\",\n \"aria-label\": removeLabel,\n \"data-id\": item.id,\n },\n \"×\",\n );\n\n choice.appendChild(text);\n choice.appendChild(remove);\n\n return choice;\n }\n\n /**\n * Clear the selection display\n */\n clear() {\n this.renderPlaceholder();\n }\n\n /**\n * Get the container element\n * @returns {HTMLElement} Container\n */\n getContainer() {\n return this.container;\n }\n\n /**\n * Destroy the component\n */\n destroy() {\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n }\n}\n\nexport default Selection;\n","/**\n * SelectionAdapter - Manages selection UI rendering\n * Coordinates between Selection component and DataAdapter\n */\n\nimport BaseAdapter from \"./BaseAdapter.js\";\nimport Selection from \"../components/Selection.js\";\nimport { EVENTS } from \"../constants/events.js\";\n\nclass SelectionAdapter extends BaseAdapter {\n constructor(instance, options) {\n super(instance, options);\n\n this.selection = new Selection(options);\n this.dataAdapter = null;\n\n // Store event handler references for proper cleanup\n this._toggleClickHandler = null;\n this._clearClickHandler = null;\n this._removeClickHandler = null;\n this.selectionContainer = null;\n }\n\n /**\n * Bind the adapter\n * @param {HTMLElement} container - Container element\n * @param {DataAdapter} dataAdapter - Data adapter instance\n */\n bind(container, dataAdapter) {\n super.bind(container);\n this.dataAdapter = dataAdapter;\n\n // Render selection component\n const selectionElement = this.selection.render();\n container.appendChild(selectionElement);\n\n // Bind events\n this._bindEvents();\n\n // Initial render\n this.update();\n }\n\n /**\n * Bind event listeners\n * @private\n */\n _bindEvents() {\n const selectionContainer = this.selection.getContainer();\n this.selectionContainer = selectionContainer;\n\n // Click to open dropdown - store handler reference for cleanup\n this._toggleClickHandler = (e) => {\n // Don't open if clicking on remove button or clear button\n if (\n e.target.classList.contains(\"vs-selection__choice__remove\") ||\n e.target.classList.contains(\"vs-selection__clear\")\n ) {\n return;\n }\n\n if (this.instance) {\n this.instance.toggle();\n }\n };\n selectionContainer.addEventListener(\"click\", this._toggleClickHandler);\n\n // Handle clear button click - store handler reference for cleanup\n this._clearClickHandler = (e) => {\n if (e.target.classList.contains(\"vs-selection__clear\")) {\n e.stopPropagation();\n e.preventDefault();\n\n // Use the clear() method from the main API\n if (this.instance) {\n this.instance.clear();\n }\n }\n };\n selectionContainer.addEventListener(\"click\", this._clearClickHandler);\n\n // Handle remove button clicks (for multiple select) - store handler reference for cleanup\n this._removeClickHandler = (e) => {\n if (e.target.classList.contains(\"vs-selection__choice__remove\")) {\n const id = e.target.dataset.id;\n const item = this.dataAdapter.current().find((item) => item.id === id);\n\n if (item) {\n this.dataAdapter.unselect(item);\n this.update();\n }\n\n e.stopPropagation();\n }\n };\n selectionContainer.addEventListener(\"click\", this._removeClickHandler);\n\n // Listen to selection changes\n this.instance.on(EVENTS.SELECT, () => {\n this.update();\n });\n\n this.instance.on(EVENTS.UNSELECT, () => {\n this.update();\n });\n\n this.instance.on(EVENTS.CLEAR, () => {\n this.update();\n });\n }\n\n /**\n * Update the selection display\n */\n update() {\n if (!this.dataAdapter) return;\n\n const current = this.dataAdapter.current();\n this.selection.update(current);\n }\n\n /**\n * Clear the selection\n */\n clear() {\n this.selection.clear();\n }\n\n /**\n * Destroy the adapter\n */\n destroy() {\n // Properly remove event listeners to prevent memory leaks\n if (this.selectionContainer) {\n if (this._toggleClickHandler) {\n this.selectionContainer.removeEventListener(\n \"click\",\n this._toggleClickHandler,\n );\n this._toggleClickHandler = null;\n }\n\n if (this._clearClickHandler) {\n this.selectionContainer.removeEventListener(\n \"click\",\n this._clearClickHandler,\n );\n this._clearClickHandler = null;\n }\n\n if (this._removeClickHandler) {\n this.selectionContainer.removeEventListener(\n \"click\",\n this._removeClickHandler,\n );\n this._removeClickHandler = null;\n }\n\n this.selectionContainer = null;\n }\n\n this.selection.destroy();\n }\n}\n\nexport default SelectionAdapter;\n","/**\n * Dropdown Component - Manages dropdown container\n * Handles positioning, visibility, and container structure\n */\n\nimport { createElement } from \"../utils/dom.js\";\n\nclass Dropdown {\n constructor(options) {\n this.options = options;\n this.container = null;\n this.isOpen = false;\n this.positionContext = \"body\"; // 'body' or 'modal'\n this.modalParent = null;\n }\n\n /**\n * Set the positioning context\n * @param {string} context - 'body' or 'modal'\n * @param {HTMLElement|null} modalParent - Modal parent element\n */\n setPositionContext(context, modalParent) {\n this.positionContext = context;\n this.modalParent = modalParent;\n }\n\n /**\n * Render the dropdown container\n * @returns {HTMLElement} Dropdown container\n */\n render() {\n const theme = this.options.get(\"theme\") || \"default\";\n\n this.container = createElement(\"div\", {\n className: `vs-dropdown vs-container--${theme}`,\n role: \"listbox\",\n });\n\n return this.container;\n }\n\n /**\n * Position the dropdown\n * @param {HTMLElement} anchor - Anchor element (selection container)\n */\n position(anchor) {\n if (!this.container || !anchor) return;\n\n const anchorRect = anchor.getBoundingClientRect();\n const dropdownHeight = this.container.offsetHeight;\n const viewportHeight = window.innerHeight;\n\n if (this.positionContext === \"modal\" && this.modalParent) {\n // Position relative to modal\n const modalRect = this.modalParent.getBoundingClientRect();\n\n // Calculate position relative to modal\n const relativeTop = anchorRect.bottom - modalRect.top;\n const relativeLeft = anchorRect.left - modalRect.left;\n\n // Check available space within modal\n const spaceBelow = modalRect.bottom - anchorRect.bottom;\n const spaceAbove = anchorRect.top - modalRect.top;\n\n // Determine position (above or below)\n let position = \"below\";\n if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {\n position = \"above\";\n }\n\n // Use absolute positioning within modal\n this.container.style.position = \"absolute\";\n\n if (position === \"above\") {\n this.container.style.bottom = `${modalRect.bottom - anchorRect.top}px`;\n this.container.style.top = \"auto\";\n } else {\n this.container.style.top = `${relativeTop}px`;\n this.container.style.bottom = \"auto\";\n }\n\n this.container.style.left = `${relativeLeft}px`;\n this.container.style.width = `${anchorRect.width}px`;\n } else {\n // Position fixed to viewport (original behavior)\n const spaceBelow = viewportHeight - anchorRect.bottom;\n const spaceAbove = anchorRect.top;\n\n // Determine position (above or below)\n let position = \"below\";\n if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {\n position = \"above\";\n }\n\n // Use fixed positioning\n this.container.style.position = \"fixed\";\n\n // Apply positioning\n if (position === \"above\") {\n this.container.style.bottom = `${viewportHeight - anchorRect.top}px`;\n this.container.style.top = \"auto\";\n } else {\n this.container.style.top = `${anchorRect.bottom}px`;\n this.container.style.bottom = \"auto\";\n }\n\n this.container.style.left = `${anchorRect.left}px`;\n this.container.style.width = `${anchorRect.width}px`;\n }\n }\n\n /**\n * Open the dropdown\n */\n open() {\n if (this.isOpen || !this.container) return;\n\n this.container.classList.add(\"vs-dropdown--open\");\n this.container.style.display = \"block\";\n this.isOpen = true;\n }\n\n /**\n * Close the dropdown\n */\n close() {\n if (!this.isOpen || !this.container) return;\n\n this.container.classList.remove(\"vs-dropdown--open\");\n this.container.style.display = \"none\";\n this.isOpen = false;\n }\n\n /**\n * Toggle dropdown open/closed\n */\n toggle() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Get the container element\n * @returns {HTMLElement} Container\n */\n getContainer() {\n return this.container;\n }\n\n /**\n * Destroy the component\n */\n destroy() {\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n this.isOpen = false;\n }\n}\n\nexport default Dropdown;\n","/**\n * SearchBox Component - Search input inside dropdown\n * Handles search input rendering and events\n */\n\nimport { createElement, emptyElement } from \"../utils/dom.js\";\n\nclass SearchBox {\n constructor(options) {\n this.options = options;\n this.container = null;\n this.input = null;\n }\n\n /**\n * Get placeholder text based on options and language\n * @returns {string} Placeholder text\n * @private\n */\n _getPlaceholder() {\n const language = this.options.get(\"language\");\n const customPlaceholder = this.options.get(\"searchPlaceholder\");\n return customPlaceholder !== null && customPlaceholder !== undefined\n ? customPlaceholder\n : language.searchPlaceholder || \"Search...\";\n }\n\n /**\n * Get ARIA label based on language\n * @returns {string} ARIA label text\n * @private\n */\n _getAriaLabel() {\n const language = this.options.get(\"language\");\n return language.searchLabel || \"Search options\";\n }\n\n /**\n * Render the search box\n * @returns {HTMLElement} Search box container\n */\n render() {\n this.container = createElement(\"div\", {\n className: \"vs-search-container\",\n });\n\n this.input = createElement(\"input\", {\n type: \"text\",\n className: \"vs-search\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\",\n role: \"searchbox\",\n \"aria-autocomplete\": \"list\",\n \"aria-label\": this._getAriaLabel(),\n });\n\n this.input.placeholder = this._getPlaceholder();\n\n this.container.appendChild(this.input);\n\n return this.container;\n }\n\n /**\n * Get the input element\n * @returns {HTMLInputElement} Input element\n */\n getInput() {\n return this.input;\n }\n\n /**\n * Get the container element\n * @returns {HTMLElement} Container element\n */\n getContainer() {\n return this.container;\n }\n\n /**\n * Focus the search input\n */\n focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * Clear the search input\n */\n clear() {\n if (this.input) {\n this.input.value = \"\";\n }\n }\n\n /**\n * Get current search value\n * @returns {string} Search value\n */\n getValue() {\n return this.input ? this.input.value : \"\";\n }\n\n /**\n * Set search value\n * @param {string} value - Value to set\n */\n setValue(value) {\n if (this.input) {\n this.input.value = value;\n }\n }\n\n /**\n * Update component with new language/options\n * Refreshes placeholder and aria-label\n */\n update() {\n if (!this.input) {\n return;\n }\n\n this.input.placeholder = this._getPlaceholder();\n this.input.setAttribute(\"aria-label\", this._getAriaLabel());\n }\n\n /**\n * Destroy the component\n */\n destroy() {\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n this.input = null;\n }\n}\n\nexport default SearchBox;\n","/**\n * Debounce Utility\n * Delays function execution until after a specified wait period\n */\n\n/**\n * Creates a debounced function that delays invoking func until after\n * wait milliseconds have elapsed since the last time the debounced\n * function was invoked\n * @param {Function} func - Function to debounce\n * @param {number} wait - Milliseconds to wait\n * @param {boolean} immediate - If true, trigger function on leading edge instead of trailing\n * @returns {Function} Debounced function with cancel method\n */\nexport function debounce(func, wait = 250, immediate = false) {\n let timeout;\n\n const debounced = function (...args) {\n const context = this;\n\n const later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n\n // Add cancel method to clear pending execution\n debounced.cancel = () => {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes func at most once per\n * every wait milliseconds\n * @param {Function} func - Function to throttle\n * @param {number} wait - Milliseconds to wait\n * @returns {Function} Throttled function\n */\nexport function throttle(func, wait = 250) {\n let timeout;\n let previous = 0;\n\n return function (...args) {\n const context = this;\n const now = Date.now();\n const remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(() => {\n previous = Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\n\nexport default debounce;\n","/**\n * DropdownAdapter - Manages dropdown display and positioning\n * Coordinates dropdown opening, closing, and positioning\n */\n\nimport BaseAdapter from \"./BaseAdapter.js\";\nimport Dropdown from \"../components/Dropdown.js\";\nimport SearchBox from \"../components/SearchBox.js\";\nimport { EVENTS } from \"../constants/events.js\";\nimport { debounce } from \"../utils/debounce.js\";\n\nclass DropdownAdapter extends BaseAdapter {\n constructor(instance, options) {\n super(instance, options);\n\n this.dropdown = new Dropdown(options);\n this.searchBox = null;\n this.anchorElement = null;\n this._justOpened = false; // Flag to prevent immediate close on programmatic open\n\n // Store event handler references for proper cleanup\n // Bind handlers once in constructor to maintain same reference\n this._boundHandleOutsideClick = this._handleOutsideClick.bind(this);\n this._boundHandleResize = this._handleResize.bind(this);\n this._boundHandleScroll = this._handleScroll.bind(this);\n this._inputHandler = null;\n this._searchClickHandler = null;\n }\n\n /**\n * Bind the adapter\n * @param {HTMLElement} container - Main container\n * @param {HTMLElement} anchor - Anchor element (selection container)\n */\n bind(container, anchor) {\n super.bind(container);\n this.anchorElement = anchor;\n\n // Render dropdown and append to body (for proper positioning)\n const dropdownElement = this.dropdown.render();\n\n // Add search box if searchable\n const searchable = this.options.get(\"searchable\");\n if (searchable) {\n this.searchBox = new SearchBox(this.options);\n const searchBoxElement = this.searchBox.render();\n dropdownElement.insertBefore(\n searchBoxElement,\n dropdownElement.firstChild,\n );\n }\n\n // Determine where to append dropdown\n // If inside a modal, append to modal (like Select2's dropdownParent)\n // This keeps the dropdown within Bootstrap's focus trap\n const modalElement = this._findModalParent();\n if (modalElement) {\n modalElement.appendChild(dropdownElement);\n this.dropdown.setPositionContext(\"modal\", modalElement);\n } else {\n document.body.appendChild(dropdownElement);\n this.dropdown.setPositionContext(\"body\", null);\n }\n\n // Bind events\n this._bindEvents();\n }\n\n /**\n * Find the closest modal parent element\n * @returns {HTMLElement|null} Modal element or null\n * @private\n */\n _findModalParent() {\n if (!this.container) return null;\n\n let element = this.container;\n while (element && element !== document.body) {\n // Bootstrap modal\n if (element.classList && element.classList.contains(\"modal\")) {\n return element;\n }\n // Generic dialog\n if (\n element.hasAttribute(\"role\") &&\n element.getAttribute(\"role\") === \"dialog\"\n ) {\n return element;\n }\n element = element.parentElement;\n }\n\n return null;\n }\n\n /**\n * Bind event listeners\n * @private\n */\n _bindEvents() {\n // Listen to open/close events\n this.instance.on(EVENTS.OPENING, () => {\n this.open();\n });\n\n this.instance.on(EVENTS.CLOSING, () => {\n this.close();\n });\n\n // SearchBox events\n if (this.searchBox) {\n const input = this.searchBox.getInput();\n\n // Check if AJAX is configured\n const ajaxConfig = this.options.get(\"ajax\");\n const searchDelay = ajaxConfig\n ? ajaxConfig.delay || 250\n : this.options.get(\"searchDelay\") || 0;\n\n // Create query handler (with debounce for AJAX)\n const handleQuery = (term) => {\n this.instance.emit(EVENTS.QUERY, { term });\n };\n\n // Use debounce for AJAX queries, immediate for local filtering\n const queryHandler =\n searchDelay > 0 ? debounce(handleQuery, searchDelay) : handleQuery;\n\n // Emit query event on input - store handler reference for cleanup\n this._inputHandler = (e) => {\n const term = e.target.value;\n queryHandler(term);\n };\n input.addEventListener(\"input\", this._inputHandler);\n\n // Prevent dropdown close on search input click - store handler reference for cleanup\n this._searchClickHandler = (e) => {\n e.stopPropagation();\n };\n input.addEventListener(\"click\", this._searchClickHandler);\n }\n\n // Close on outside click - use bound reference for proper cleanup\n document.addEventListener(\"click\", this._boundHandleOutsideClick);\n\n // Reposition on scroll/resize - use bound references for proper cleanup\n window.addEventListener(\"resize\", this._boundHandleResize);\n window.addEventListener(\"scroll\", this._boundHandleScroll, true);\n }\n\n /**\n * Handle outside clicks\n * @param {Event} e - Click event\n * @private\n */\n _handleOutsideClick(e) {\n if (!this.dropdown.isOpen) return;\n\n // Ignore clicks that happened in the same event loop as opening\n // This prevents programmatic open() from being immediately closed\n if (this._justOpened) {\n return;\n }\n\n const dropdownEl = this.dropdown.getContainer();\n const isClickInside =\n this.container.contains(e.target) || dropdownEl.contains(e.target);\n\n if (!isClickInside) {\n this.instance.close();\n }\n }\n\n /**\n * Handle window resize\n * @private\n */\n _handleResize() {\n if (this.dropdown.isOpen) {\n this.dropdown.position(this.anchorElement);\n }\n }\n\n /**\n * Handle scroll\n * @private\n */\n _handleScroll() {\n if (this.dropdown.isOpen) {\n this.dropdown.position(this.anchorElement);\n }\n }\n\n /**\n * Open the dropdown\n */\n open() {\n this.dropdown.open();\n this.dropdown.position(this.anchorElement);\n\n // Set flag to prevent immediate close from the same click event\n this._justOpened = true;\n setTimeout(() => {\n this._justOpened = false;\n }, 50);\n\n // Focus search box if available\n if (this.searchBox) {\n setTimeout(() => {\n this.searchBox.focus();\n }, 10);\n }\n\n // Update ARIA\n if (this.anchorElement) {\n this.anchorElement.setAttribute(\"aria-expanded\", \"true\");\n }\n }\n\n /**\n * Close the dropdown\n */\n close() {\n // Save the active element BEFORE closing\n const activeElement = document.activeElement;\n const wasDropdownFocused =\n this.dropdown.container &&\n this.dropdown.container.contains(activeElement);\n const wasSearchFocused = activeElement === this.searchBox?.getInput();\n\n // Close dropdown\n this.dropdown.close();\n\n // Clear search box\n if (this.searchBox) {\n this.searchBox.clear();\n // Re-query to show all results next time\n this.instance.emit(EVENTS.QUERY, { term: \"\" });\n }\n\n // Update ARIA\n if (this.anchorElement) {\n this.anchorElement.setAttribute(\"aria-expanded\", \"false\");\n\n // Return focus to selection element if focus was in dropdown\n // This must be synchronous for Tab key to work correctly\n if (wasDropdownFocused || wasSearchFocused) {\n this.anchorElement.focus();\n }\n }\n }\n\n /**\n * Check if dropdown is open\n * @returns {boolean} Is open\n */\n isOpen() {\n return this.dropdown.isOpen;\n }\n\n /**\n * Get dropdown container\n * @returns {HTMLElement} Dropdown container\n */\n getContainer() {\n return this.dropdown.getContainer();\n }\n\n /**\n * Update components with new options (e.g., language changes)\n */\n update() {\n if (this.searchBox) {\n this.searchBox.update();\n }\n }\n\n /**\n * Destroy the adapter\n */\n destroy() {\n // Properly remove event listeners to prevent memory leaks\n // Use the same bound references that were used in addEventListener\n document.removeEventListener(\"click\", this._boundHandleOutsideClick);\n window.removeEventListener(\"resize\", this._boundHandleResize);\n window.removeEventListener(\"scroll\", this._boundHandleScroll, true);\n\n // Remove searchBox event listeners if they exist\n if (this.searchBox) {\n const input = this.searchBox.getInput();\n if (input) {\n if (this._inputHandler) {\n input.removeEventListener(\"input\", this._inputHandler);\n this._inputHandler = null;\n }\n if (this._searchClickHandler) {\n input.removeEventListener(\"click\", this._searchClickHandler);\n this._searchClickHandler = null;\n }\n }\n }\n\n // Clear bound references\n this._boundHandleOutsideClick = null;\n this._boundHandleResize = null;\n this._boundHandleScroll = null;\n\n this.dropdown.destroy();\n }\n}\n\nexport default DropdownAdapter;\n","/**\n * ResultsList Component - Renders list of options\n * Handles option rendering, highlighting, and selection\n */\n\nimport { createElement, emptyElement } from \"../utils/dom.js\";\nimport { applyTemplate } from \"../utils/template.js\";\n\nclass ResultsList {\n constructor(options) {\n this.options = options;\n this.container = null;\n this.highlightedIndex = -1;\n this.results = [];\n\n // Cache template function for performance (avoids repeated options.get calls)\n this._cachedTemplateResult = options.get(\"templateResult\");\n }\n\n /**\n * Render the results container\n * @returns {HTMLElement} Results container\n */\n render() {\n this.container = createElement(\"div\", {\n className: \"vs-results\",\n });\n\n return this.container;\n }\n\n /**\n * Update results list\n * @param {Array} results - Array of result items\n */\n update(results) {\n this.results = results;\n this.flatResults = []; // Flat list of rendered items\n this.highlightedIndex = -1;\n\n if (!this.container) return;\n\n emptyElement(this.container);\n\n if (!results || results.length === 0) {\n this._renderNoResults();\n return;\n }\n\n let flatIndex = 0;\n results.forEach((item) => {\n // Check if item is a group\n if (item.children && Array.isArray(item.children)) {\n // Render group header\n const groupHeader = this._renderGroupHeader(item);\n this.container.appendChild(groupHeader);\n\n // Render group children\n item.children.forEach((child) => {\n const childElement = this._renderItem(child, flatIndex, true);\n this.container.appendChild(childElement);\n this.flatResults.push(child); // Add to flat list\n flatIndex++;\n });\n } else {\n // Render regular item\n const resultElement = this._renderItem(item, flatIndex, false);\n this.container.appendChild(resultElement);\n this.flatResults.push(item); // Add to flat list\n flatIndex++;\n }\n });\n }\n\n /**\n * Render group header\n * @param {Object} group - Group data\n * @returns {HTMLElement} Group header element\n * @private\n */\n _renderGroupHeader(group) {\n const header = createElement(\"div\", {\n className: \"vs-result--group\",\n role: \"presentation\",\n });\n\n const text = createElement(\"span\", {}, group.text);\n header.appendChild(text);\n\n return header;\n }\n\n /**\n * Render a single result item\n * @param {Object} item - Item data\n * @param {number} index - Item index\n * @param {boolean} isGroupChild - Whether item is a child of a group\n * @returns {HTMLElement} Result element\n * @private\n */\n _renderItem(item, index, isGroupChild = false) {\n const className = isGroupChild\n ? \"vs-result vs-result--group-child\"\n : \"vs-result\";\n\n const result = createElement(\"div\", {\n className: className,\n role: \"option\",\n \"data-index\": index,\n \"data-id\": item.id,\n \"aria-selected\": item.selected ? \"true\" : \"false\",\n });\n\n if (item.disabled) {\n result.classList.add(\"vs-result--disabled\");\n result.setAttribute(\"aria-disabled\", \"true\");\n }\n\n // Mark as tag if it's a tag creation option\n if (item._isTag) {\n result.classList.add(\"vs-result--tag\");\n result.setAttribute(\"data-is-tag\", \"true\");\n }\n\n // Use custom template if provided, otherwise use default\n // Uses cached template function for better performance\n applyTemplate(this._cachedTemplateResult, item, result, {\n defaultText: item._isTag ? item.text : item.text,\n useTextContent: false, // Use createElement wrapper for consistency\n });\n\n return result;\n }\n\n /**\n * Render \"no results\" message\n * @private\n */\n _renderNoResults() {\n const message =\n this.options.get(\"language.noResults\") || \"No results found\";\n const noResults = createElement(\n \"div\",\n {\n className: \"vs-results--no-results\",\n },\n message,\n );\n\n this.container.appendChild(noResults);\n }\n\n /**\n * Highlight item at index (flat index)\n * @param {number} index - Flat index to highlight\n */\n highlight(index) {\n // Use flat results length for validation\n const totalItems = this.flatResults ? this.flatResults.length : 0;\n if (index < 0 || index >= totalItems) return;\n\n // Remove previous highlight\n const previousHighlight = this.container.querySelector(\n \".vs-result--highlighted\",\n );\n if (previousHighlight) {\n previousHighlight.classList.remove(\"vs-result--highlighted\");\n }\n\n // Add new highlight\n const items = this.container.querySelectorAll(\".vs-result\");\n if (items[index]) {\n items[index].classList.add(\"vs-result--highlighted\");\n this.highlightedIndex = index;\n\n // Scroll into view if needed\n items[index].scrollIntoView({ block: \"nearest\" });\n }\n }\n\n /**\n * Get highlighted item\n * @returns {Object|null} Highlighted item data\n */\n getHighlighted() {\n // Use flat results array\n if (\n this.flatResults &&\n this.highlightedIndex >= 0 &&\n this.highlightedIndex < this.flatResults.length\n ) {\n return this.flatResults[this.highlightedIndex];\n }\n return null;\n }\n\n /**\n * Clear the results\n */\n clear() {\n if (this.container) {\n emptyElement(this.container);\n }\n this.results = [];\n this.highlightedIndex = -1;\n }\n\n /**\n * Get the container element\n * @returns {HTMLElement} Container\n */\n getContainer() {\n return this.container;\n }\n\n /**\n * Destroy the component\n */\n destroy() {\n this.clear();\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n }\n}\n\nexport default ResultsList;\n","/**\n * Diacritics mapping for text normalization\n * Maps accented/special characters to their base forms for search functionality\n */\n\nexport const diacritics = {\n \"\\u24B6\": \"A\",\n \"\\uFF21\": \"A\",\n \"\\u00C0\": \"A\",\n \"\\u00C1\": \"A\",\n \"\\u00C2\": \"A\",\n \"\\u1EA6\": \"A\",\n \"\\u1EA4\": \"A\",\n \"\\u1EAA\": \"A\",\n \"\\u1EA8\": \"A\",\n \"\\u00C3\": \"A\",\n \"\\u0100\": \"A\",\n \"\\u0102\": \"A\",\n \"\\u1EB0\": \"A\",\n \"\\u1EAE\": \"A\",\n \"\\u1EB4\": \"A\",\n \"\\u1EB2\": \"A\",\n \"\\u0226\": \"A\",\n \"\\u01E0\": \"A\",\n \"\\u00C4\": \"A\",\n \"\\u01DE\": \"A\",\n \"\\u1EA2\": \"A\",\n \"\\u00C5\": \"A\",\n \"\\u01FA\": \"A\",\n \"\\u01CD\": \"A\",\n \"\\u0200\": \"A\",\n \"\\u0202\": \"A\",\n \"\\u1EA0\": \"A\",\n \"\\u1EAC\": \"A\",\n \"\\u1EB6\": \"A\",\n \"\\u1E00\": \"A\",\n \"\\u0104\": \"A\",\n \"\\u023A\": \"A\",\n \"\\u2C6F\": \"A\",\n \"\\uA732\": \"AA\",\n \"\\u00C6\": \"AE\",\n \"\\u01FC\": \"AE\",\n \"\\u01E2\": \"AE\",\n \"\\uA734\": \"AO\",\n \"\\uA736\": \"AU\",\n \"\\uA738\": \"AV\",\n \"\\uA73A\": \"AV\",\n \"\\uA73C\": \"AY\",\n \"\\u24B7\": \"B\",\n \"\\uFF22\": \"B\",\n \"\\u1E02\": \"B\",\n \"\\u1E04\": \"B\",\n \"\\u1E06\": \"B\",\n \"\\u0243\": \"B\",\n \"\\u0182\": \"B\",\n \"\\u0181\": \"B\",\n \"\\u24B8\": \"C\",\n \"\\uFF23\": \"C\",\n \"\\u0106\": \"C\",\n \"\\u0108\": \"C\",\n \"\\u010A\": \"C\",\n \"\\u010C\": \"C\",\n \"\\u00C7\": \"C\",\n \"\\u1E08\": \"C\",\n \"\\u0187\": \"C\",\n \"\\u023B\": \"C\",\n \"\\uA73E\": \"C\",\n \"\\u24B9\": \"D\",\n \"\\uFF24\": \"D\",\n \"\\u1E0A\": \"D\",\n \"\\u010E\": \"D\",\n \"\\u1E0C\": \"D\",\n \"\\u1E10\": \"D\",\n \"\\u1E12\": \"D\",\n \"\\u1E0E\": \"D\",\n \"\\u0110\": \"D\",\n \"\\u018B\": \"D\",\n \"\\u018A\": \"D\",\n \"\\u0189\": \"D\",\n \"\\uA779\": \"D\",\n \"\\u01F1\": \"DZ\",\n \"\\u01C4\": \"DZ\",\n \"\\u01F2\": \"Dz\",\n \"\\u01C5\": \"Dz\",\n \"\\u24BA\": \"E\",\n \"\\uFF25\": \"E\",\n \"\\u00C8\": \"E\",\n \"\\u00C9\": \"E\",\n \"\\u00CA\": \"E\",\n \"\\u1EC0\": \"E\",\n \"\\u1EBE\": \"E\",\n \"\\u1EC4\": \"E\",\n \"\\u1EC2\": \"E\",\n \"\\u1EBC\": \"E\",\n \"\\u0112\": \"E\",\n \"\\u1E14\": \"E\",\n \"\\u1E16\": \"E\",\n \"\\u0114\": \"E\",\n \"\\u0116\": \"E\",\n \"\\u00CB\": \"E\",\n \"\\u1EBA\": \"E\",\n \"\\u011A\": \"E\",\n \"\\u0204\": \"E\",\n \"\\u0206\": \"E\",\n \"\\u1EB8\": \"E\",\n \"\\u1EC6\": \"E\",\n \"\\u0228\": \"E\",\n \"\\u1E1C\": \"E\",\n \"\\u0118\": \"E\",\n \"\\u1E18\": \"E\",\n \"\\u1E1A\": \"E\",\n \"\\u0190\": \"E\",\n \"\\u018E\": \"E\",\n \"\\u24BB\": \"F\",\n \"\\uFF26\": \"F\",\n \"\\u1E1E\": \"F\",\n \"\\u0191\": \"F\",\n \"\\uA77B\": \"F\",\n \"\\u24BC\": \"G\",\n \"\\uFF27\": \"G\",\n \"\\u01F4\": \"G\",\n \"\\u011C\": \"G\",\n \"\\u1E20\": \"G\",\n \"\\u011E\": \"G\",\n \"\\u0120\": \"G\",\n \"\\u01E6\": \"G\",\n \"\\u0122\": \"G\",\n \"\\u01E4\": \"G\",\n \"\\u0193\": \"G\",\n \"\\uA7A0\": \"G\",\n \"\\uA77D\": \"G\",\n \"\\uA77E\": \"G\",\n \"\\u24BD\": \"H\",\n \"\\uFF28\": \"H\",\n \"\\u0124\": \"H\",\n \"\\u1E22\": \"H\",\n \"\\u1E26\": \"H\",\n \"\\u021E\": \"H\",\n \"\\u1E24\": \"H\",\n \"\\u1E28\": \"H\",\n \"\\u1E2A\": \"H\",\n \"\\u0126\": \"H\",\n \"\\u2C67\": \"H\",\n \"\\u2C75\": \"H\",\n \"\\uA78D\": \"H\",\n \"\\u24BE\": \"I\",\n \"\\uFF29\": \"I\",\n \"\\u00CC\": \"I\",\n \"\\u00CD\": \"I\",\n \"\\u00CE\": \"I\",\n \"\\u0128\": \"I\",\n \"\\u012A\": \"I\",\n \"\\u012C\": \"I\",\n \"\\u0130\": \"I\",\n \"\\u00CF\": \"I\",\n \"\\u1E2E\": \"I\",\n \"\\u1EC8\": \"I\",\n \"\\u01CF\": \"I\",\n \"\\u0208\": \"I\",\n \"\\u020A\": \"I\",\n \"\\u1ECA\": \"I\",\n \"\\u012E\": \"I\",\n \"\\u1E2C\": \"I\",\n \"\\u0197\": \"I\",\n \"\\u24BF\": \"J\",\n \"\\uFF2A\": \"J\",\n \"\\u0134\": \"J\",\n \"\\u0248\": \"J\",\n \"\\u24C0\": \"K\",\n \"\\uFF2B\": \"K\",\n \"\\u1E30\": \"K\",\n \"\\u01E8\": \"K\",\n \"\\u1E32\": \"K\",\n \"\\u0136\": \"K\",\n \"\\u1E34\": \"K\",\n \"\\u0198\": \"K\",\n \"\\u2C69\": \"K\",\n \"\\uA740\": \"K\",\n \"\\uA742\": \"K\",\n \"\\uA744\": \"K\",\n \"\\uA7A2\": \"K\",\n \"\\u24C1\": \"L\",\n \"\\uFF2C\": \"L\",\n \"\\u013F\": \"L\",\n \"\\u0139\": \"L\",\n \"\\u013D\": \"L\",\n \"\\u1E36\": \"L\",\n \"\\u1E38\": \"L\",\n \"\\u013B\": \"L\",\n \"\\u1E3C\": \"L\",\n \"\\u1E3A\": \"L\",\n \"\\u0141\": \"L\",\n \"\\u023D\": \"L\",\n \"\\u2C62\": \"L\",\n \"\\u2C60\": \"L\",\n \"\\uA748\": \"L\",\n \"\\uA746\": \"L\",\n \"\\uA780\": \"L\",\n \"\\u01C7\": \"LJ\",\n \"\\u01C8\": \"Lj\",\n \"\\u24C2\": \"M\",\n \"\\uFF2D\": \"M\",\n \"\\u1E3E\": \"M\",\n \"\\u1E40\": \"M\",\n \"\\u1E42\": \"M\",\n \"\\u2C6E\": \"M\",\n \"\\u019C\": \"M\",\n \"\\u24C3\": \"N\",\n \"\\uFF2E\": \"N\",\n \"\\u01F8\": \"N\",\n \"\\u0143\": \"N\",\n \"\\u00D1\": \"N\",\n \"\\u1E44\": \"N\",\n \"\\u0147\": \"N\",\n \"\\u1E46\": \"N\",\n \"\\u0145\": \"N\",\n \"\\u1E4A\": \"N\",\n \"\\u1E48\": \"N\",\n \"\\u0220\": \"N\",\n \"\\u019D\": \"N\",\n \"\\uA790\": \"N\",\n \"\\uA7A4\": \"N\",\n \"\\u01CA\": \"NJ\",\n \"\\u01CB\": \"Nj\",\n \"\\u24C4\": \"O\",\n \"\\uFF2F\": \"O\",\n \"\\u00D2\": \"O\",\n \"\\u00D3\": \"O\",\n \"\\u00D4\": \"O\",\n \"\\u1ED2\": \"O\",\n \"\\u1ED0\": \"O\",\n \"\\u1ED6\": \"O\",\n \"\\u1ED4\": \"O\",\n \"\\u00D5\": \"O\",\n \"\\u1E4C\": \"O\",\n \"\\u022C\": \"O\",\n \"\\u1E4E\": \"O\",\n \"\\u014C\": \"O\",\n \"\\u1E50\": \"O\",\n \"\\u1E52\": \"O\",\n \"\\u014E\": \"O\",\n \"\\u022E\": \"O\",\n \"\\u0230\": \"O\",\n \"\\u00D6\": \"O\",\n \"\\u022A\": \"O\",\n \"\\u1ECE\": \"O\",\n \"\\u0150\": \"O\",\n \"\\u01D1\": \"O\",\n \"\\u020C\": \"O\",\n \"\\u020E\": \"O\",\n \"\\u01A0\": \"O\",\n \"\\u1EDC\": \"O\",\n \"\\u1EDA\": \"O\",\n \"\\u1EE0\": \"O\",\n \"\\u1EDE\": \"O\",\n \"\\u1EE2\": \"O\",\n \"\\u1ECC\": \"O\",\n \"\\u1ED8\": \"O\",\n \"\\u01EA\": \"O\",\n \"\\u01EC\": \"O\",\n \"\\u00D8\": \"O\",\n \"\\u01FE\": \"O\",\n \"\\u0186\": \"O\",\n \"\\u019F\": \"O\",\n \"\\uA74A\": \"O\",\n \"\\uA74C\": \"O\",\n \"\\u01A2\": \"OI\",\n \"\\uA74E\": \"OO\",\n \"\\u0222\": \"OU\",\n \"\\u24C5\": \"P\",\n \"\\uFF30\": \"P\",\n \"\\u1E54\": \"P\",\n \"\\u1E56\": \"P\",\n \"\\u01A4\": \"P\",\n \"\\u2C63\": \"P\",\n \"\\uA750\": \"P\",\n \"\\uA752\": \"P\",\n \"\\uA754\": \"P\",\n \"\\u24C6\": \"Q\",\n \"\\uFF31\": \"Q\",\n \"\\uA756\": \"Q\",\n \"\\uA758\": \"Q\",\n \"\\u024A\": \"Q\",\n \"\\u24C7\": \"R\",\n \"\\uFF32\": \"R\",\n \"\\u0154\": \"R\",\n \"\\u1E58\": \"R\",\n \"\\u0158\": \"R\",\n \"\\u0210\": \"R\",\n \"\\u0212\": \"R\",\n \"\\u1E5A\": \"R\",\n \"\\u1E5C\": \"R\",\n \"\\u0156\": \"R\",\n \"\\u1E5E\": \"R\",\n \"\\u024C\": \"R\",\n \"\\u2C64\": \"R\",\n \"\\uA75A\": \"R\",\n \"\\uA7A6\": \"R\",\n \"\\uA782\": \"R\",\n \"\\u24C8\": \"S\",\n \"\\uFF33\": \"S\",\n \"\\u1E9E\": \"S\",\n \"\\u015A\": \"S\",\n \"\\u1E64\": \"S\",\n \"\\u015C\": \"S\",\n \"\\u1E60\": \"S\",\n \"\\u0160\": \"S\",\n \"\\u1E66\": \"S\",\n \"\\u1E62\": \"S\",\n \"\\u1E68\": \"S\",\n \"\\u0218\": \"S\",\n \"\\u015E\": \"S\",\n \"\\u2C7E\": \"S\",\n \"\\uA7A8\": \"S\",\n \"\\uA784\": \"S\",\n \"\\u24C9\": \"T\",\n \"\\uFF34\": \"T\",\n \"\\u1E6A\": \"T\",\n \"\\u0164\": \"T\",\n \"\\u1E6C\": \"T\",\n \"\\u021A\": \"T\",\n \"\\u0162\": \"T\",\n \"\\u1E70\": \"T\",\n \"\\u1E6E\": \"T\",\n \"\\u0166\": \"T\",\n \"\\u01AC\": \"T\",\n \"\\u01AE\": \"T\",\n \"\\u023E\": \"T\",\n \"\\uA786\": \"T\",\n \"\\uA728\": \"TZ\",\n \"\\u24CA\": \"U\",\n \"\\uFF35\": \"U\",\n \"\\u00D9\": \"U\",\n \"\\u00DA\": \"U\",\n \"\\u00DB\": \"U\",\n \"\\u0168\": \"U\",\n \"\\u1E78\": \"U\",\n \"\\u016A\": \"U\",\n \"\\u1E7A\": \"U\",\n \"\\u016C\": \"U\",\n \"\\u00DC\": \"U\",\n \"\\u01DB\": \"U\",\n \"\\u01D7\": \"U\",\n \"\\u01D5\": \"U\",\n \"\\u01D9\": \"U\",\n \"\\u1EE6\": \"U\",\n \"\\u016E\": \"U\",\n \"\\u0170\": \"U\",\n \"\\u01D3\": \"U\",\n \"\\u0214\": \"U\",\n \"\\u0216\": \"U\",\n \"\\u01AF\": \"U\",\n \"\\u1EEA\": \"U\",\n \"\\u1EE8\": \"U\",\n \"\\u1EEE\": \"U\",\n \"\\u1EEC\": \"U\",\n \"\\u1EF0\": \"U\",\n \"\\u1EE4\": \"U\",\n \"\\u1E72\": \"U\",\n \"\\u0172\": \"U\",\n \"\\u1E76\": \"U\",\n \"\\u1E74\": \"U\",\n \"\\u0244\": \"U\",\n \"\\u24CB\": \"V\",\n \"\\uFF36\": \"V\",\n \"\\u1E7C\": \"V\",\n \"\\u1E7E\": \"V\",\n \"\\u01B2\": \"V\",\n \"\\uA75E\": \"V\",\n \"\\u0245\": \"V\",\n \"\\uA760\": \"VY\",\n \"\\u24CC\": \"W\",\n \"\\uFF37\": \"W\",\n \"\\u1E80\": \"W\",\n \"\\u1E82\": \"W\",\n \"\\u0174\": \"W\",\n \"\\u1E86\": \"W\",\n \"\\u1E84\": \"W\",\n \"\\u1E88\": \"W\",\n \"\\u2C72\": \"W\",\n \"\\u24CD\": \"X\",\n \"\\uFF38\": \"X\",\n \"\\u1E8A\": \"X\",\n \"\\u1E8C\": \"X\",\n \"\\u24CE\": \"Y\",\n \"\\uFF39\": \"Y\",\n \"\\u1EF2\": \"Y\",\n \"\\u00DD\": \"Y\",\n \"\\u0176\": \"Y\",\n \"\\u1EF8\": \"Y\",\n \"\\u0232\": \"Y\",\n \"\\u1E8E\": \"Y\",\n \"\\u0178\": \"Y\",\n \"\\u1EF6\": \"Y\",\n \"\\u1EF4\": \"Y\",\n \"\\u01B3\": \"Y\",\n \"\\u024E\": \"Y\",\n \"\\u1EFE\": \"Y\",\n \"\\u24CF\": \"Z\",\n \"\\uFF3A\": \"Z\",\n \"\\u0179\": \"Z\",\n \"\\u1E90\": \"Z\",\n \"\\u017B\": \"Z\",\n \"\\u017D\": \"Z\",\n \"\\u1E92\": \"Z\",\n \"\\u1E94\": \"Z\",\n \"\\u01B5\": \"Z\",\n \"\\u0224\": \"Z\",\n \"\\u2C7F\": \"Z\",\n \"\\u2C6B\": \"Z\",\n \"\\uA762\": \"Z\",\n \"\\u24D0\": \"a\",\n \"\\uFF41\": \"a\",\n \"\\u1E9A\": \"a\",\n \"\\u00E0\": \"a\",\n \"\\u00E1\": \"a\",\n \"\\u00E2\": \"a\",\n \"\\u1EA7\": \"a\",\n \"\\u1EA5\": \"a\",\n \"\\u1EAB\": \"a\",\n \"\\u1EA9\": \"a\",\n \"\\u00E3\": \"a\",\n \"\\u0101\": \"a\",\n \"\\u0103\": \"a\",\n \"\\u1EB1\": \"a\",\n \"\\u1EAF\": \"a\",\n \"\\u1EB5\": \"a\",\n \"\\u1EB3\": \"a\",\n \"\\u0227\": \"a\",\n \"\\u01E1\": \"a\",\n \"\\u00E4\": \"a\",\n \"\\u01DF\": \"a\",\n \"\\u1EA3\": \"a\",\n \"\\u00E5\": \"a\",\n \"\\u01FB\": \"a\",\n \"\\u01CE\": \"a\",\n \"\\u0201\": \"a\",\n \"\\u0203\": \"a\",\n \"\\u1EA1\": \"a\",\n \"\\u1EAD\": \"a\",\n \"\\u1EB7\": \"a\",\n \"\\u1E01\": \"a\",\n \"\\u0105\": \"a\",\n \"\\u2C65\": \"a\",\n \"\\u0250\": \"a\",\n \"\\uA733\": \"aa\",\n \"\\u00E6\": \"ae\",\n \"\\u01FD\": \"ae\",\n \"\\u01E3\": \"ae\",\n \"\\uA735\": \"ao\",\n \"\\uA737\": \"au\",\n \"\\uA739\": \"av\",\n \"\\uA73B\": \"av\",\n \"\\uA73D\": \"ay\",\n \"\\u24D1\": \"b\",\n \"\\uFF42\": \"b\",\n \"\\u1E03\": \"b\",\n \"\\u1E05\": \"b\",\n \"\\u1E07\": \"b\",\n \"\\u0180\": \"b\",\n \"\\u0183\": \"b\",\n \"\\u0253\": \"b\",\n \"\\u24D2\": \"c\",\n \"\\uFF43\": \"c\",\n \"\\u0107\": \"c\",\n \"\\u0109\": \"c\",\n \"\\u010B\": \"c\",\n \"\\u010D\": \"c\",\n \"\\u00E7\": \"c\",\n \"\\u1E09\": \"c\",\n \"\\u0188\": \"c\",\n \"\\u023C\": \"c\",\n \"\\uA73F\": \"c\",\n \"\\u2184\": \"c\",\n \"\\u24D3\": \"d\",\n \"\\uFF44\": \"d\",\n \"\\u1E0B\": \"d\",\n \"\\u010F\": \"d\",\n \"\\u1E0D\": \"d\",\n \"\\u1E11\": \"d\",\n \"\\u1E13\": \"d\",\n \"\\u1E0F\": \"d\",\n \"\\u0111\": \"d\",\n \"\\u018C\": \"d\",\n \"\\u0256\": \"d\",\n \"\\u0257\": \"d\",\n \"\\uA77A\": \"d\",\n \"\\u01F3\": \"dz\",\n \"\\u01C6\": \"dz\",\n \"\\u24D4\": \"e\",\n \"\\uFF45\": \"e\",\n \"\\u00E8\": \"e\",\n \"\\u00E9\": \"e\",\n \"\\u00EA\": \"e\",\n \"\\u1EC1\": \"e\",\n \"\\u1EBF\": \"e\",\n \"\\u1EC5\": \"e\",\n \"\\u1EC3\": \"e\",\n \"\\u1EBD\": \"e\",\n \"\\u0113\": \"e\",\n \"\\u1E15\": \"e\",\n \"\\u1E17\": \"e\",\n \"\\u0115\": \"e\",\n \"\\u0117\": \"e\",\n \"\\u00EB\": \"e\",\n \"\\u1EBB\": \"e\",\n \"\\u011B\": \"e\",\n \"\\u0205\": \"e\",\n \"\\u0207\": \"e\",\n \"\\u1EB9\": \"e\",\n \"\\u1EC7\": \"e\",\n \"\\u0229\": \"e\",\n \"\\u1E1D\": \"e\",\n \"\\u0119\": \"e\",\n \"\\u1E19\": \"e\",\n \"\\u1E1B\": \"e\",\n \"\\u0247\": \"e\",\n \"\\u025B\": \"e\",\n \"\\u01DD\": \"e\",\n \"\\u24D5\": \"f\",\n \"\\uFF46\": \"f\",\n \"\\u1E1F\": \"f\",\n \"\\u0192\": \"f\",\n \"\\uA77C\": \"f\",\n \"\\u24D6\": \"g\",\n \"\\uFF47\": \"g\",\n \"\\u01F5\": \"g\",\n \"\\u011D\": \"g\",\n \"\\u1E21\": \"g\",\n \"\\u011F\": \"g\",\n \"\\u0121\": \"g\",\n \"\\u01E7\": \"g\",\n \"\\u0123\": \"g\",\n \"\\u01E5\": \"g\",\n \"\\u0260\": \"g\",\n \"\\uA7A1\": \"g\",\n \"\\u1D79\": \"g\",\n \"\\uA77F\": \"g\",\n \"\\u24D7\": \"h\",\n \"\\uFF48\": \"h\",\n \"\\u0125\": \"h\",\n \"\\u1E23\": \"h\",\n \"\\u1E27\": \"h\",\n \"\\u021F\": \"h\",\n \"\\u1E25\": \"h\",\n \"\\u1E29\": \"h\",\n \"\\u1E2B\": \"h\",\n \"\\u1E96\": \"h\",\n \"\\u0127\": \"h\",\n \"\\u2C68\": \"h\",\n \"\\u2C76\": \"h\",\n \"\\u0265\": \"h\",\n \"\\u0195\": \"hv\",\n \"\\u24D8\": \"i\",\n \"\\uFF49\": \"i\",\n \"\\u00EC\": \"i\",\n \"\\u00ED\": \"i\",\n \"\\u00EE\": \"i\",\n \"\\u0129\": \"i\",\n \"\\u012B\": \"i\",\n \"\\u012D\": \"i\",\n \"\\u00EF\": \"i\",\n \"\\u1E2F\": \"i\",\n \"\\u1EC9\": \"i\",\n \"\\u01D0\": \"i\",\n \"\\u0209\": \"i\",\n \"\\u020B\": \"i\",\n \"\\u1ECB\": \"i\",\n \"\\u012F\": \"i\",\n \"\\u1E2D\": \"i\",\n \"\\u0268\": \"i\",\n \"\\u0131\": \"i\",\n \"\\u24D9\": \"j\",\n \"\\uFF4A\": \"j\",\n \"\\u0135\": \"j\",\n \"\\u01F0\": \"j\",\n \"\\u0249\": \"j\",\n \"\\u24DA\": \"k\",\n \"\\uFF4B\": \"k\",\n \"\\u1E31\": \"k\",\n \"\\u01E9\": \"k\",\n \"\\u1E33\": \"k\",\n \"\\u0137\": \"k\",\n \"\\u1E35\": \"k\",\n \"\\u0199\": \"k\",\n \"\\u2C6A\": \"k\",\n \"\\uA741\": \"k\",\n \"\\uA743\": \"k\",\n \"\\uA745\": \"k\",\n \"\\uA7A3\": \"k\",\n \"\\u24DB\": \"l\",\n \"\\uFF4C\": \"l\",\n \"\\u0140\": \"l\",\n \"\\u013A\": \"l\",\n \"\\u013E\": \"l\",\n \"\\u1E37\": \"l\",\n \"\\u1E39\": \"l\",\n \"\\u013C\": \"l\",\n \"\\u1E3D\": \"l\",\n \"\\u1E3B\": \"l\",\n \"\\u017F\": \"l\",\n \"\\u0142\": \"l\",\n \"\\u019A\": \"l\",\n \"\\u026B\": \"l\",\n \"\\u2C61\": \"l\",\n \"\\uA749\": \"l\",\n \"\\uA781\": \"l\",\n \"\\uA747\": \"l\",\n \"\\u01C9\": \"lj\",\n \"\\u24DC\": \"m\",\n \"\\uFF4D\": \"m\",\n \"\\u1E3F\": \"m\",\n \"\\u1E41\": \"m\",\n \"\\u1E43\": \"m\",\n \"\\u0271\": \"m\",\n \"\\u026F\": \"m\",\n \"\\u24DD\": \"n\",\n \"\\uFF4E\": \"n\",\n \"\\u01F9\": \"n\",\n \"\\u0144\": \"n\",\n \"\\u00F1\": \"n\",\n \"\\u1E45\": \"n\",\n \"\\u0148\": \"n\",\n \"\\u1E47\": \"n\",\n \"\\u0146\": \"n\",\n \"\\u1E4B\": \"n\",\n \"\\u1E49\": \"n\",\n \"\\u019E\": \"n\",\n \"\\u0272\": \"n\",\n \"\\u0149\": \"n\",\n \"\\uA791\": \"n\",\n \"\\uA7A5\": \"n\",\n \"\\u01CC\": \"nj\",\n \"\\u24DE\": \"o\",\n \"\\uFF4F\": \"o\",\n \"\\u00F2\": \"o\",\n \"\\u00F3\": \"o\",\n \"\\u00F4\": \"o\",\n \"\\u1ED3\": \"o\",\n \"\\u1ED1\": \"o\",\n \"\\u1ED7\": \"o\",\n \"\\u1ED5\": \"o\",\n \"\\u00F5\": \"o\",\n \"\\u1E4D\": \"o\",\n \"\\u022D\": \"o\",\n \"\\u1E4F\": \"o\",\n \"\\u014D\": \"o\",\n \"\\u1E51\": \"o\",\n \"\\u1E53\": \"o\",\n \"\\u014F\": \"o\",\n \"\\u022F\": \"o\",\n \"\\u0231\": \"o\",\n \"\\u00F6\": \"o\",\n \"\\u022B\": \"o\",\n \"\\u1ECF\": \"o\",\n \"\\u0151\": \"o\",\n \"\\u01D2\": \"o\",\n \"\\u020D\": \"o\",\n \"\\u020F\": \"o\",\n \"\\u01A1\": \"o\",\n \"\\u1EDD\": \"o\",\n \"\\u1EDB\": \"o\",\n \"\\u1EE1\": \"o\",\n \"\\u1EDF\": \"o\",\n \"\\u1EE3\": \"o\",\n \"\\u1ECD\": \"o\",\n \"\\u1ED9\": \"o\",\n \"\\u01EB\": \"o\",\n \"\\u01ED\": \"o\",\n \"\\u00F8\": \"o\",\n \"\\u01FF\": \"o\",\n \"\\u0254\": \"o\",\n \"\\uA74B\": \"o\",\n \"\\uA74D\": \"o\",\n \"\\u0275\": \"o\",\n \"\\u01A3\": \"oi\",\n \"\\u0223\": \"ou\",\n \"\\uA74F\": \"oo\",\n \"\\u24DF\": \"p\",\n \"\\uFF50\": \"p\",\n \"\\u1E55\": \"p\",\n \"\\u1E57\": \"p\",\n \"\\u01A5\": \"p\",\n \"\\u1D7D\": \"p\",\n \"\\uA751\": \"p\",\n \"\\uA753\": \"p\",\n \"\\uA755\": \"p\",\n \"\\u24E0\": \"q\",\n \"\\uFF51\": \"q\",\n \"\\u024B\": \"q\",\n \"\\uA757\": \"q\",\n \"\\uA759\": \"q\",\n \"\\u24E1\": \"r\",\n \"\\uFF52\": \"r\",\n \"\\u0155\": \"r\",\n \"\\u1E59\": \"r\",\n \"\\u0159\": \"r\",\n \"\\u0211\": \"r\",\n \"\\u0213\": \"r\",\n \"\\u1E5B\": \"r\",\n \"\\u1E5D\": \"r\",\n \"\\u0157\": \"r\",\n \"\\u1E5F\": \"r\",\n \"\\u024D\": \"r\",\n \"\\u027D\": \"r\",\n \"\\uA75B\": \"r\",\n \"\\uA7A7\": \"r\",\n \"\\uA783\": \"r\",\n \"\\u24E2\": \"s\",\n \"\\uFF53\": \"s\",\n \"\\u00DF\": \"s\",\n \"\\u015B\": \"s\",\n \"\\u1E65\": \"s\",\n \"\\u015D\": \"s\",\n \"\\u1E61\": \"s\",\n \"\\u0161\": \"s\",\n \"\\u1E67\": \"s\",\n \"\\u1E63\": \"s\",\n \"\\u1E69\": \"s\",\n \"\\u0219\": \"s\",\n \"\\u015F\": \"s\",\n \"\\u023F\": \"s\",\n \"\\uA7A9\": \"s\",\n \"\\uA785\": \"s\",\n \"\\u1E9B\": \"s\",\n \"\\u24E3\": \"t\",\n \"\\uFF54\": \"t\",\n \"\\u1E6B\": \"t\",\n \"\\u1E97\": \"t\",\n \"\\u0165\": \"t\",\n \"\\u1E6D\": \"t\",\n \"\\u021B\": \"t\",\n \"\\u0163\": \"t\",\n \"\\u1E71\": \"t\",\n \"\\u1E6F\": \"t\",\n \"\\u0167\": \"t\",\n \"\\u01AD\": \"t\",\n \"\\u0288\": \"t\",\n \"\\u2C66\": \"t\",\n \"\\uA787\": \"t\",\n \"\\uA729\": \"tz\",\n \"\\u24E4\": \"u\",\n \"\\uFF55\": \"u\",\n \"\\u00F9\": \"u\",\n \"\\u00FA\": \"u\",\n \"\\u00FB\": \"u\",\n \"\\u0169\": \"u\",\n \"\\u1E79\": \"u\",\n \"\\u016B\": \"u\",\n \"\\u1E7B\": \"u\",\n \"\\u016D\": \"u\",\n \"\\u00FC\": \"u\",\n \"\\u01DC\": \"u\",\n \"\\u01D8\": \"u\",\n \"\\u01D6\": \"u\",\n \"\\u01DA\": \"u\",\n \"\\u1EE7\": \"u\",\n \"\\u016F\": \"u\",\n \"\\u0171\": \"u\",\n \"\\u01D4\": \"u\",\n \"\\u0215\": \"u\",\n \"\\u0217\": \"u\",\n \"\\u01B0\": \"u\",\n \"\\u1EEB\": \"u\",\n \"\\u1EE9\": \"u\",\n \"\\u1EEF\": \"u\",\n \"\\u1EED\": \"u\",\n \"\\u1EF1\": \"u\",\n \"\\u1EE5\": \"u\",\n \"\\u1E73\": \"u\",\n \"\\u0173\": \"u\",\n \"\\u1E77\": \"u\",\n \"\\u1E75\": \"u\",\n \"\\u0289\": \"u\",\n \"\\u24E5\": \"v\",\n \"\\uFF56\": \"v\",\n \"\\u1E7D\": \"v\",\n \"\\u1E7F\": \"v\",\n \"\\u028B\": \"v\",\n \"\\uA75F\": \"v\",\n \"\\u028C\": \"v\",\n \"\\uA761\": \"vy\",\n \"\\u24E6\": \"w\",\n \"\\uFF57\": \"w\",\n \"\\u1E81\": \"w\",\n \"\\u1E83\": \"w\",\n \"\\u0175\": \"w\",\n \"\\u1E87\": \"w\",\n \"\\u1E85\": \"w\",\n \"\\u1E98\": \"w\",\n \"\\u1E89\": \"w\",\n \"\\u2C73\": \"w\",\n \"\\u24E7\": \"x\",\n \"\\uFF58\": \"x\",\n \"\\u1E8B\": \"x\",\n \"\\u1E8D\": \"x\",\n \"\\u24E8\": \"y\",\n \"\\uFF59\": \"y\",\n \"\\u1EF3\": \"y\",\n \"\\u00FD\": \"y\",\n \"\\u0177\": \"y\",\n \"\\u1EF9\": \"y\",\n \"\\u0233\": \"y\",\n \"\\u1E8F\": \"y\",\n \"\\u00FF\": \"y\",\n \"\\u1EF7\": \"y\",\n \"\\u1E99\": \"y\",\n \"\\u1EF5\": \"y\",\n \"\\u01B4\": \"y\",\n \"\\u024F\": \"y\",\n \"\\u1EFF\": \"y\",\n \"\\u24E9\": \"z\",\n \"\\uFF5A\": \"z\",\n \"\\u017A\": \"z\",\n \"\\u1E91\": \"z\",\n \"\\u017C\": \"z\",\n \"\\u017E\": \"z\",\n \"\\u1E93\": \"z\",\n \"\\u1E95\": \"z\",\n \"\\u01B6\": \"z\",\n \"\\u0225\": \"z\",\n \"\\u0240\": \"z\",\n \"\\u2C6C\": \"z\",\n \"\\uA763\": \"z\",\n \"\\u0386\": \"\\u0391\",\n \"\\u0388\": \"\\u0395\",\n \"\\u0389\": \"\\u0397\",\n \"\\u038A\": \"\\u0399\",\n \"\\u03AA\": \"\\u0399\",\n \"\\u038C\": \"\\u039F\",\n \"\\u038E\": \"\\u03A5\",\n \"\\u03AB\": \"\\u03A5\",\n \"\\u038F\": \"\\u03A9\",\n \"\\u03AC\": \"\\u03B1\",\n \"\\u03AD\": \"\\u03B5\",\n \"\\u03AE\": \"\\u03B7\",\n \"\\u03AF\": \"\\u03B9\",\n \"\\u03CA\": \"\\u03B9\",\n \"\\u0390\": \"\\u03B9\",\n \"\\u03CC\": \"\\u03BF\",\n \"\\u03CD\": \"\\u03C5\",\n \"\\u03CB\": \"\\u03C5\",\n \"\\u03B0\": \"\\u03C5\",\n \"\\u03C9\": \"\\u03C9\",\n \"\\u03C2\": \"\\u03C3\",\n};\n\n/**\n * Removes diacritics from a string for normalized searching\n * @param {string} str - String to normalize\n * @returns {string} Normalized string without diacritics\n */\nexport function removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007E]/g, (char) => diacritics[char] || char);\n}\n\nexport default diacritics;\n","/**\n * SearchManager - Manages search/filter functionality\n * Handles search logic and filtering results\n */\n\nimport { removeDiacritics } from \"../utils/diacritics.js\";\n\nclass SearchManager {\n constructor(options) {\n this.options = options;\n this.matcher = null;\n this._setupMatcher();\n }\n\n /**\n * Setup the matcher function\n * @private\n */\n _setupMatcher() {\n // Check if custom matcher is provided\n const customMatcher = this.options.get(\"matcher\");\n if (customMatcher && typeof customMatcher === \"function\") {\n this.matcher = customMatcher;\n } else {\n this.matcher = this._defaultMatcher.bind(this);\n }\n }\n\n /**\n * Default matcher function\n * Searches in text with diacritics support\n * @param {string} term - Search term\n * @param {Object} item - Item to match against\n * @returns {boolean} Whether item matches\n * @private\n */\n _defaultMatcher(term, item) {\n // Empty search matches everything\n if (!term || term.trim() === \"\") {\n return true;\n }\n\n // Don't search in disabled items\n if (item.disabled) {\n return false;\n }\n\n // Normalize search term and item text\n const normalizedTerm = removeDiacritics(term.toLowerCase());\n const normalizedText = removeDiacritics(item.text.toLowerCase());\n\n // Check matching strategy\n const matchStrategy = this.options.get(\"matchStrategy\") || \"contains\";\n\n switch (matchStrategy) {\n case \"startsWith\":\n return normalizedText.startsWith(normalizedTerm);\n\n case \"exact\":\n return normalizedText === normalizedTerm;\n\n case \"contains\":\n default:\n return normalizedText.includes(normalizedTerm);\n }\n }\n\n /**\n * Search items based on term\n * @param {Array} items - Items to search\n * @param {string} term - Search term\n * @returns {Array} Filtered items\n */\n search(items, term) {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n\n // If no search term, return all items\n if (!term || term.trim() === \"\") {\n return items;\n }\n\n const results = [];\n\n items.forEach((item) => {\n // Handle groups (optgroups)\n if (item.children && Array.isArray(item.children)) {\n const filteredChildren = item.children.filter((child) =>\n this.matcher(term, child),\n );\n\n // Include group if it has matching children\n if (filteredChildren.length > 0) {\n results.push({\n ...item,\n children: filteredChildren,\n });\n }\n } else {\n // Regular item\n if (this.matcher(term, item)) {\n results.push(item);\n }\n }\n });\n\n return results;\n }\n\n /**\n * Highlight matching text in results\n * @param {string} text - Original text\n * @param {string} term - Search term\n * @returns {string} HTML with highlighted text\n */\n highlight(text, term) {\n if (!term || term.trim() === \"\") {\n return text;\n }\n\n const normalizedTerm = removeDiacritics(term.toLowerCase());\n const normalizedText = removeDiacritics(text.toLowerCase());\n\n const index = normalizedText.indexOf(normalizedTerm);\n if (index === -1) {\n return text;\n }\n\n // Extract the actual matching substring from original text\n const before = text.substring(0, index);\n const match = text.substring(index, index + term.length);\n const after = text.substring(index + term.length);\n\n return `${before}<mark>${match}</mark>${after}`;\n }\n}\n\nexport default SearchManager;\n","/**\n * ResultsAdapter - Manages results display\n * Coordinates results rendering and selection\n */\n\nimport BaseAdapter from \"./BaseAdapter.js\";\nimport ResultsList from \"../components/ResultsList.js\";\nimport SearchManager from \"../managers/SearchManager.js\";\nimport { EVENTS } from \"../constants/events.js\";\n\nclass ResultsAdapter extends BaseAdapter {\n constructor(instance, options) {\n super(instance, options);\n\n this.results = new ResultsList(options);\n this.searchManager = new SearchManager(options);\n this.dataAdapter = null;\n this.dropdownAdapter = null;\n this.ajaxAdapter = null;\n this.currentSearchTerm = \"\";\n this.currentPage = 1;\n this.hasMore = false;\n this.isLoadingMore = false;\n this.accumulatedResults = [];\n this.currentSearchToken = null; // Token to prevent race conditions\n\n // Store timeout references for proper cleanup\n this._loadMoreTimeout = null;\n this._limitMessageTimeout = null;\n this._errorMessageTimeout = null;\n\n // Store event handler references for proper cleanup\n this._clickHandler = null;\n this._mouseoverHandler = null;\n this._scrollHandler = null;\n this.resultsContainer = null;\n }\n\n /**\n * Bind the adapter\n * @param {HTMLElement} dropdownContainer - Dropdown container\n * @param {DataAdapter} dataAdapter - Data adapter\n * @param {DropdownAdapter} dropdownAdapter - Dropdown adapter\n * @param {AjaxAdapter} ajaxAdapter - Optional AJAX adapter\n */\n bind(dropdownContainer, dataAdapter, dropdownAdapter, ajaxAdapter = null) {\n this.dataAdapter = dataAdapter;\n this.dropdownAdapter = dropdownAdapter;\n this.ajaxAdapter = ajaxAdapter;\n\n // Render results component\n const resultsElement = this.results.render();\n dropdownContainer.appendChild(resultsElement);\n\n // Bind events\n this._bindEvents();\n\n // Initial render\n this.update();\n }\n\n /**\n * Bind event listeners\n * @private\n */\n _bindEvents() {\n const resultsContainer = this.results.getContainer();\n this.resultsContainer = resultsContainer;\n\n // Listen to AJAX events\n this.instance.on(EVENTS.AJAX_LOADING, () => {\n this.showLoading();\n });\n\n this.instance.on(EVENTS.AJAX_SUCCESS, () => {\n this.hideLoading();\n });\n\n this.instance.on(EVENTS.AJAX_ERROR, (data) => {\n this.hideLoading();\n this.showError(data.error);\n });\n\n // Click on result item - store handler reference for cleanup\n this._clickHandler = (e) => {\n const resultEl = e.target.closest(\".vs-result\");\n if (!resultEl) return;\n\n const index = parseInt(resultEl.dataset.index, 10);\n const id = resultEl.dataset.id;\n\n // Don't select disabled items\n if (resultEl.classList.contains(\"vs-result--disabled\")) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n // Find the item (search recursively in groups)\n const allResults = this.dataAdapter.query({ term: \"\" });\n const item = this._findItemById(allResults, id);\n\n if (item) {\n // Prevent default to avoid any unwanted behavior\n e.preventDefault();\n e.stopPropagation();\n this.selectItem(item);\n }\n };\n resultsContainer.addEventListener(\"click\", this._clickHandler);\n\n // Hover on result item - store handler reference for cleanup\n this._mouseoverHandler = (e) => {\n const resultEl = e.target.closest(\".vs-result\");\n if (!resultEl) return;\n\n const index = parseInt(resultEl.dataset.index, 10);\n this.results.highlight(index);\n };\n resultsContainer.addEventListener(\"mouseover\", this._mouseoverHandler);\n\n // Listen to data changes\n this.instance.on(EVENTS.QUERY, (data) => {\n this.update(data.term);\n });\n\n this.instance.on(EVENTS.SELECT, () => {\n this.update();\n });\n\n this.instance.on(EVENTS.UNSELECT, () => {\n this.update();\n });\n\n // Listen to selection limit reached\n this.instance.on(EVENTS.SELECTION_LIMIT_REACHED, (data) => {\n this._showLimitMessage(data.message);\n });\n\n // Scroll detection for infinite scroll (AJAX only) - store handler reference for cleanup\n if (this.ajaxAdapter) {\n this._scrollHandler = () => {\n this._handleScroll();\n };\n resultsContainer.addEventListener(\"scroll\", this._scrollHandler);\n }\n }\n\n /**\n * Update results display\n * @param {string} term - Search term\n */\n update(term = \"\") {\n if (!this.dataAdapter) return;\n\n // If AJAX adapter is configured, use it for remote data\n if (this.ajaxAdapter) {\n this._updateWithAjax(term);\n } else {\n this._updateWithLocalData(term);\n }\n }\n\n /**\n * Update results with local data (no AJAX)\n * @param {string} term - Search term\n * @private\n */\n _updateWithLocalData(term) {\n this.currentSearchTerm = term;\n\n // Get all data\n const allData = this.dataAdapter.query({ term: \"\" });\n\n // Filter using SearchManager\n let filteredResults = this.searchManager.search(allData, term);\n\n // Check if tagging is enabled\n const tagsEnabled = this.options.get(\"tags\");\n\n // Add \"create tag\" option if enabled and term is not empty\n if (tagsEnabled && term && term.trim()) {\n const createTag = this.options.get(\"createTag\");\n const tag = createTag({ term: term.trim() });\n\n if (tag) {\n // Check if tag already exists in results\n const tagExists = filteredResults.some(\n (item) =>\n String(item.id).toLowerCase() === String(tag.id).toLowerCase(),\n );\n\n if (!tagExists) {\n const insertTag = this.options.get(\"insertTag\");\n // Create a copy to avoid mutating the original\n filteredResults = [...filteredResults];\n insertTag(filteredResults, tag);\n\n // Mark as tag for special rendering\n tag._isTag = true;\n }\n }\n }\n\n // Update results list\n this.results.update(filteredResults);\n\n // Auto-highlight first non-disabled item when there are results\n if (filteredResults && filteredResults.length > 0) {\n this._autoHighlightFirst(filteredResults);\n }\n\n // Emit results event for accessibility announcements\n this.instance.emit(EVENTS.RESULTS, { results: filteredResults });\n }\n\n /**\n * Update results with AJAX data\n * @param {string} term - Search term\n * @param {boolean} append - Whether to append results (pagination) or replace\n * @private\n */\n _updateWithAjax(term, append = false) {\n // Reset pagination if search term changed\n if (term !== this.currentSearchTerm) {\n this.currentPage = 1;\n this.accumulatedResults = [];\n append = false;\n }\n\n this.currentSearchTerm = term;\n\n // Generate unique token for this search to prevent race conditions\n // If a new search starts before this one completes, this token will be invalidated\n const searchToken = Symbol(\"search\");\n this.currentSearchToken = searchToken;\n\n // Query AJAX adapter (returns a promise)\n this.ajaxAdapter\n .query({ term, page: this.currentPage })\n .then((response) => {\n // Check if this search is still valid (not superseded by a newer search)\n if (this.currentSearchToken !== searchToken) {\n // This search has been superseded - ignore results\n return;\n }\n\n const { results, pagination } = response;\n\n // Update pagination state\n this.hasMore = pagination && pagination.more ? true : false;\n\n // Accumulate or replace results\n if (append && this.currentPage > 1) {\n this.accumulatedResults = [...this.accumulatedResults, ...results];\n } else {\n this.accumulatedResults = results;\n }\n\n // Update DataAdapter with all accumulated results (for selection tracking)\n this.dataAdapter.setData(this.accumulatedResults);\n\n // Update results list\n this.results.update(this.accumulatedResults);\n\n // Auto-highlight first non-disabled item when there are results\n if (\n this.accumulatedResults &&\n this.accumulatedResults.length > 0 &&\n !append\n ) {\n this._autoHighlightFirst(this.accumulatedResults);\n }\n\n // Emit results event for accessibility announcements\n this.instance.emit(EVENTS.RESULTS, {\n results: this.accumulatedResults,\n });\n })\n .catch((error) => {\n // Check if this search is still valid before showing error\n if (this.currentSearchToken !== searchToken) {\n // This search has been superseded - ignore error\n return;\n }\n\n console.error(\"AJAX query error:\", error);\n // On error, show empty results\n this.results.update([]);\n this.instance.emit(EVENTS.RESULTS, { results: [] });\n });\n }\n\n /**\n * Handle scroll event for infinite scroll\n * @private\n */\n _handleScroll() {\n if (!this.ajaxAdapter || !this.hasMore || this.isLoadingMore) {\n return;\n }\n\n const resultsContainer = this.results.getContainer();\n const scrollTop = resultsContainer.scrollTop;\n const scrollHeight = resultsContainer.scrollHeight;\n const clientHeight = resultsContainer.clientHeight;\n\n // Check if scrolled near bottom (within 50px)\n const threshold = 50;\n if (scrollTop + clientHeight >= scrollHeight - threshold) {\n this.loadMore();\n }\n }\n\n /**\n * Load more results (next page)\n */\n loadMore() {\n if (!this.ajaxAdapter || !this.hasMore || this.isLoadingMore) {\n return;\n }\n\n this.isLoadingMore = true;\n this.currentPage++;\n\n // Show loading more indicator\n this.showLoadingMore();\n\n // Update with append=true to add to existing results\n this._updateWithAjax(this.currentSearchTerm, true);\n\n // Clear any existing timeout\n if (this._loadMoreTimeout) {\n clearTimeout(this._loadMoreTimeout);\n }\n\n // Hide loading more indicator when done\n this._loadMoreTimeout = setTimeout(() => {\n this.hideLoadingMore();\n this.isLoadingMore = false;\n this._loadMoreTimeout = null;\n }, 500);\n }\n\n /**\n * Show \"loading more\" indicator\n */\n showLoadingMore() {\n const resultsContainer = this.results.getContainer();\n if (!resultsContainer) return;\n\n // Remove any existing indicator\n this.hideLoadingMore();\n\n const language = this.options.get(\"language\");\n const loadingMoreMessage =\n language.loadingMore || \"Loading more results...\";\n\n const loadingMoreEl = document.createElement(\"div\");\n loadingMoreEl.className = \"vs-results__loading-more\";\n loadingMoreEl.setAttribute(\"role\", \"status\");\n loadingMoreEl.setAttribute(\"aria-live\", \"polite\");\n loadingMoreEl.textContent = loadingMoreMessage;\n\n resultsContainer.appendChild(loadingMoreEl);\n }\n\n /**\n * Hide \"loading more\" indicator\n */\n hideLoadingMore() {\n const resultsContainer = this.results.getContainer();\n if (!resultsContainer) return;\n\n const loadingMoreEl = resultsContainer.querySelector(\n \".vs-results__loading-more\",\n );\n if (loadingMoreEl) {\n loadingMoreEl.remove();\n }\n }\n\n /**\n * Find item by ID, searching recursively in groups\n * @param {Array} items - Items to search\n * @param {string} id - Item ID to find\n * @returns {Object|null} Found item or null\n * @private\n */\n _findItemById(items, id) {\n for (const item of items) {\n // Check if this item matches (convert both to string for comparison)\n // This handles cases where item.id might be a number but dataset.id is always a string\n if (String(item.id) === String(id)) {\n return item;\n }\n\n // If it's a group, search in children\n if (item.children && Array.isArray(item.children)) {\n const found = this._findItemById(item.children, id);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Auto-highlight first non-disabled item\n * @param {Array} results - Filtered results\n * @private\n */\n _autoHighlightFirst(results) {\n // Find first non-disabled item\n for (let i = 0; i < results.length; i++) {\n const item = results[i];\n\n // Skip groups - look into children\n if (item.children && Array.isArray(item.children)) {\n // For groups, find first non-disabled child\n for (let j = 0; j < item.children.length; j++) {\n if (!item.children[j].disabled) {\n // Calculate the actual index in the flattened results\n const flatIndex = this._getFlatIndexForGroupChild(results, i, j);\n this.results.highlight(flatIndex);\n\n // Update ARIA activedescendant\n if (this.instance.accessibilityManager) {\n this.instance.accessibilityManager.updateActiveDescendant(\n flatIndex,\n );\n }\n return;\n }\n }\n } else {\n // Regular item - highlight if not disabled\n if (!item.disabled) {\n this.results.highlight(i);\n\n // Update ARIA activedescendant\n if (this.instance.accessibilityManager) {\n this.instance.accessibilityManager.updateActiveDescendant(i);\n }\n return;\n }\n }\n }\n }\n\n /**\n * Get flat index for a child within a group\n * @param {Array} results - All results\n * @param {number} groupIndex - Group index\n * @param {number} childIndex - Child index within group\n * @returns {number} Flat index\n * @private\n */\n _getFlatIndexForGroupChild(results, groupIndex, childIndex) {\n let flatIndex = 0;\n\n for (let i = 0; i < groupIndex; i++) {\n if (results[i].children) {\n flatIndex += results[i].children.length;\n } else {\n flatIndex++;\n }\n }\n\n flatIndex += childIndex;\n return flatIndex;\n }\n\n /**\n * Select an item\n * @param {Object} item - Item to select\n */\n selectItem(item) {\n if (!this.dataAdapter) return;\n\n // Try to select the item - returns false if limit reached or already selected\n const selectionSuccess = this.dataAdapter.select(item);\n\n const isMultiple = this.options.get(\"multiple\");\n\n // For multi-select: always manage focus and UI, even if selection failed\n if (isMultiple) {\n // If selection failed (limit reached or already selected), still return focus\n if (!selectionSuccess) {\n // Re-focus search input so ESC and other keyboard controls work\n if (this.dropdownAdapter && this.dropdownAdapter.searchBox) {\n setTimeout(() => {\n this.dropdownAdapter.searchBox.focus();\n }, 10);\n }\n return;\n }\n\n // Selection was successful - proceed with normal flow\n // Clear search box\n if (this.dropdownAdapter && this.dropdownAdapter.searchBox) {\n this.dropdownAdapter.searchBox.clear();\n }\n\n // Refresh results to show all items again\n this.update(\"\");\n\n // Re-focus search input for next selection\n if (this.dropdownAdapter && this.dropdownAdapter.searchBox) {\n setTimeout(() => {\n this.dropdownAdapter.searchBox.focus();\n }, 10);\n }\n } else {\n // Single select: only close if selection was successful\n if (selectionSuccess) {\n const closeOnSelect = this.options.get(\"closeOnSelect\");\n if (closeOnSelect) {\n this.instance.close();\n }\n }\n }\n }\n\n /**\n * Clear results\n */\n clear() {\n this.results.clear();\n }\n\n /**\n * Show selection limit message\n * @param {string} message - Message to display\n * @private\n */\n _showLimitMessage(message) {\n const resultsContainer = this.results.getContainer();\n\n // Clear any existing timeout\n if (this._limitMessageTimeout) {\n clearTimeout(this._limitMessageTimeout);\n this._limitMessageTimeout = null;\n }\n\n // Remove any existing message\n const existingMessage = resultsContainer.querySelector(\n \".vs-results__limit-message\",\n );\n if (existingMessage) {\n existingMessage.remove();\n }\n\n // Create message element\n const messageEl = document.createElement(\"div\");\n messageEl.className = \"vs-results__limit-message\";\n messageEl.textContent = message;\n messageEl.setAttribute(\"role\", \"alert\");\n\n // Insert at the top of results\n resultsContainer.insertBefore(messageEl, resultsContainer.firstChild);\n\n // Auto-remove after 3 seconds\n this._limitMessageTimeout = setTimeout(() => {\n if (messageEl.parentNode) {\n messageEl.remove();\n }\n this._limitMessageTimeout = null;\n }, 3000);\n }\n\n /**\n * Show loading state\n */\n showLoading() {\n const resultsContainer = this.results.getContainer();\n if (!resultsContainer) return;\n\n // Remove any existing loading message\n this.hideLoading();\n\n const language = this.options.get(\"language\");\n const loadingMessage = language.loading || \"Loading...\";\n\n // Create loading element\n const loadingEl = document.createElement(\"div\");\n loadingEl.className = \"vs-results__loading\";\n loadingEl.setAttribute(\"role\", \"status\");\n loadingEl.setAttribute(\"aria-live\", \"polite\");\n loadingEl.textContent = loadingMessage;\n\n resultsContainer.appendChild(loadingEl);\n }\n\n /**\n * Hide loading state\n */\n hideLoading() {\n const resultsContainer = this.results.getContainer();\n if (!resultsContainer) return;\n\n const loadingEl = resultsContainer.querySelector(\".vs-results__loading\");\n if (loadingEl) {\n loadingEl.remove();\n }\n }\n\n /**\n * Show error message\n * @param {Error} error - Error object\n */\n showError(error) {\n const resultsContainer = this.results.getContainer();\n if (!resultsContainer) return;\n\n // Clear any existing timeout\n if (this._errorMessageTimeout) {\n clearTimeout(this._errorMessageTimeout);\n this._errorMessageTimeout = null;\n }\n\n // Remove any existing error message\n const existingError = resultsContainer.querySelector(\".vs-results__error\");\n if (existingError) {\n existingError.remove();\n }\n\n const language = this.options.get(\"language\");\n const errorMessage =\n language.errorLoading || \"The results could not be loaded\";\n\n // Create error element\n const errorEl = document.createElement(\"div\");\n errorEl.className = \"vs-results__error\";\n errorEl.setAttribute(\"role\", \"alert\");\n errorEl.textContent = errorMessage;\n\n resultsContainer.appendChild(errorEl);\n\n // Auto-remove after 5 seconds\n this._errorMessageTimeout = setTimeout(() => {\n if (errorEl.parentNode) {\n errorEl.remove();\n }\n this._errorMessageTimeout = null;\n }, 5000);\n }\n\n /**\n * Destroy the adapter\n */\n destroy() {\n // Clear all pending timeouts to prevent memory leaks and errors\n if (this._loadMoreTimeout) {\n clearTimeout(this._loadMoreTimeout);\n this._loadMoreTimeout = null;\n }\n\n if (this._limitMessageTimeout) {\n clearTimeout(this._limitMessageTimeout);\n this._limitMessageTimeout = null;\n }\n\n if (this._errorMessageTimeout) {\n clearTimeout(this._errorMessageTimeout);\n this._errorMessageTimeout = null;\n }\n\n // Properly remove event listeners to prevent memory leaks\n if (this.resultsContainer) {\n if (this._clickHandler) {\n this.resultsContainer.removeEventListener(\"click\", this._clickHandler);\n this._clickHandler = null;\n }\n\n if (this._mouseoverHandler) {\n this.resultsContainer.removeEventListener(\n \"mouseover\",\n this._mouseoverHandler,\n );\n this._mouseoverHandler = null;\n }\n\n if (this._scrollHandler) {\n this.resultsContainer.removeEventListener(\n \"scroll\",\n this._scrollHandler,\n );\n this._scrollHandler = null;\n }\n\n this.resultsContainer = null;\n }\n\n this.results.destroy();\n }\n}\n\nexport default ResultsAdapter;\n","/**\n * Keyboard key codes for vanilla-smart-select\n */\n\nexport const KEYS = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n ESC: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46,\n};\n\nexport default KEYS;\n","/**\n * KeyboardManager - Manages keyboard navigation\n * Handles keyboard events for accessibility and navigation\n */\n\nimport { KEYS } from \"../constants/keys.js\";\n\nclass KeyboardManager {\n constructor(instance, options) {\n this.instance = instance;\n this.options = options;\n this.isEnabled = true;\n\n // Store event handler references for proper cleanup\n this._selectionKeydownHandler = null;\n this._searchKeydownHandler = null;\n }\n\n /**\n * Bind keyboard events\n * @param {HTMLElement} selectionElement - Selection container\n * @param {HTMLElement} searchInput - Search input (if searchable)\n * @param {Object} resultsAdapter - Results adapter\n */\n bind(selectionElement, searchInput, resultsAdapter) {\n this.selectionElement = selectionElement;\n this.searchInput = searchInput;\n this.resultsAdapter = resultsAdapter;\n\n // Bind events\n this._bindSelectionEvents();\n if (this.searchInput) {\n this._bindSearchEvents();\n }\n }\n\n /**\n * Bind keyboard events to selection element\n * @private\n */\n _bindSelectionEvents() {\n // Store handler reference for cleanup\n this._selectionKeydownHandler = (e) => {\n this._handleSelectionKeydown(e);\n };\n\n this.selectionElement.addEventListener(\n \"keydown\",\n this._selectionKeydownHandler,\n );\n }\n\n /**\n * Bind keyboard events to search input\n * @private\n */\n _bindSearchEvents() {\n // Store handler reference for cleanup\n this._searchKeydownHandler = (e) => {\n this._handleSearchKeydown(e);\n };\n\n this.searchInput.addEventListener(\"keydown\", this._searchKeydownHandler);\n }\n\n /**\n * Handle keydown on selection element\n * @param {KeyboardEvent} e - Keyboard event\n * @private\n */\n _handleSelectionKeydown(e) {\n if (!this.isEnabled) return;\n\n const key = e.which || e.keyCode;\n\n switch (key) {\n case KEYS.ENTER:\n case KEYS.SPACE:\n // Open dropdown\n e.preventDefault();\n this.instance.toggle();\n break;\n\n case KEYS.ESC:\n // Close dropdown\n e.preventDefault();\n this.instance.close();\n break;\n\n case KEYS.UP:\n case KEYS.DOWN:\n // Open dropdown and navigate\n e.preventDefault();\n if (!this.instance.isOpen()) {\n this.instance.open();\n } else {\n this._navigate(key === KEYS.UP ? -1 : 1);\n }\n break;\n\n case KEYS.TAB:\n // Allow Tab to work normally on selection element\n // (It will only trigger when dropdown is closed)\n // When dropdown is open, focus is in search input, not here\n break;\n }\n }\n\n /**\n * Handle keydown on search input\n * @param {KeyboardEvent} e - Keyboard event\n * @private\n */\n _handleSearchKeydown(e) {\n if (!this.isEnabled) return;\n\n const key = e.which || e.keyCode;\n\n switch (key) {\n case KEYS.ENTER:\n // Select highlighted item\n e.preventDefault();\n this._selectHighlighted();\n break;\n\n case KEYS.ESC:\n // Close dropdown\n e.preventDefault();\n this.instance.close();\n break;\n\n case KEYS.UP:\n // Navigate up\n e.preventDefault();\n this._navigate(-1);\n break;\n\n case KEYS.DOWN:\n // Navigate down\n e.preventDefault();\n this._navigate(1);\n break;\n\n case KEYS.TAB:\n // Prevent Tab from leaving dropdown when open\n // User must explicitly close with Enter (select) or ESC (cancel)\n e.preventDefault();\n break;\n\n case KEYS.HOME:\n // First item\n e.preventDefault();\n this._navigateToFirst();\n break;\n\n case KEYS.END:\n // Last item\n e.preventDefault();\n this._navigateToLast();\n break;\n }\n }\n\n /**\n * Count total rendered items (including items in groups)\n * @param {Array} items - Results array (may contain groups)\n * @returns {number} Total count of rendered items\n * @private\n */\n _countTotalItems(items) {\n let count = 0;\n for (const item of items) {\n if (item.children && Array.isArray(item.children)) {\n count += item.children.length; // Count children, not the group itself\n } else {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Navigate through results\n * @param {number} direction - Direction (-1 for up, 1 for down)\n * @private\n */\n _navigate(direction) {\n if (!this.resultsAdapter) return;\n\n const results = this.resultsAdapter.results;\n const currentIndex = results.highlightedIndex;\n const totalResults = this._countTotalItems(results.results);\n\n if (totalResults === 0) return;\n\n let newIndex = currentIndex + direction;\n\n // Wrap around\n if (newIndex < 0) {\n newIndex = totalResults - 1;\n } else if (newIndex >= totalResults) {\n newIndex = 0;\n }\n\n // Get flat list of rendered items for checking disabled state\n const renderedItems = this._getFlatRenderedItems(results.results);\n\n // Skip disabled items\n while (renderedItems[newIndex]?.disabled) {\n newIndex += direction;\n\n // Wrap around again if needed\n if (newIndex < 0) {\n newIndex = totalResults - 1;\n } else if (newIndex >= totalResults) {\n newIndex = 0;\n }\n\n // Prevent infinite loop if all items are disabled\n if (newIndex === currentIndex) {\n return;\n }\n }\n\n results.highlight(newIndex);\n\n // Update ARIA activedescendant for accessibility\n if (this.instance.accessibilityManager) {\n this.instance.accessibilityManager.updateActiveDescendant(newIndex);\n }\n }\n\n /**\n * Get flat list of rendered items (excluding group headers)\n * @param {Array} items - Results array (may contain groups)\n * @returns {Array} Flat array of items\n * @private\n */\n _getFlatRenderedItems(items) {\n const flat = [];\n for (const item of items) {\n if (item.children && Array.isArray(item.children)) {\n flat.push(...item.children); // Add children, not the group\n } else {\n flat.push(item);\n }\n }\n return flat;\n }\n\n /**\n * Navigate to first item\n * @private\n */\n _navigateToFirst() {\n if (!this.resultsAdapter) return;\n\n const results = this.resultsAdapter.results;\n const renderedItems = this._getFlatRenderedItems(results.results);\n const totalResults = renderedItems.length;\n\n if (totalResults === 0) return;\n\n // Find first non-disabled item\n for (let i = 0; i < totalResults; i++) {\n if (!renderedItems[i]?.disabled) {\n results.highlight(i);\n\n // Update ARIA activedescendant for accessibility\n if (this.instance.accessibilityManager) {\n this.instance.accessibilityManager.updateActiveDescendant(i);\n }\n break;\n }\n }\n }\n\n /**\n * Navigate to last item\n * @private\n */\n _navigateToLast() {\n if (!this.resultsAdapter) return;\n\n const results = this.resultsAdapter.results;\n const renderedItems = this._getFlatRenderedItems(results.results);\n const totalResults = renderedItems.length;\n\n if (totalResults === 0) return;\n\n // Find last non-disabled item\n for (let i = totalResults - 1; i >= 0; i--) {\n if (!renderedItems[i]?.disabled) {\n results.highlight(i);\n\n // Update ARIA activedescendant for accessibility\n if (this.instance.accessibilityManager) {\n this.instance.accessibilityManager.updateActiveDescendant(i);\n }\n break;\n }\n }\n }\n\n /**\n * Select currently highlighted item\n * @private\n */\n _selectHighlighted() {\n if (!this.resultsAdapter) return;\n\n const highlighted = this.resultsAdapter.results.getHighlighted();\n if (highlighted) {\n this.resultsAdapter.selectItem(highlighted);\n }\n }\n\n /**\n * Enable keyboard navigation\n */\n enable() {\n this.isEnabled = true;\n }\n\n /**\n * Disable keyboard navigation\n */\n disable() {\n this.isEnabled = false;\n }\n\n /**\n * Destroy the manager\n */\n destroy() {\n this.isEnabled = false;\n\n // Properly remove event listeners to prevent memory leaks\n if (this.selectionElement && this._selectionKeydownHandler) {\n this.selectionElement.removeEventListener(\n \"keydown\",\n this._selectionKeydownHandler,\n );\n this._selectionKeydownHandler = null;\n }\n\n if (this.searchInput && this._searchKeydownHandler) {\n this.searchInput.removeEventListener(\n \"keydown\",\n this._searchKeydownHandler,\n );\n this._searchKeydownHandler = null;\n }\n\n // Clear references\n this.selectionElement = null;\n this.searchInput = null;\n this.resultsAdapter = null;\n }\n}\n\nexport default KeyboardManager;\n","/**\n * AccessibilityManager - Manages ARIA attributes and screen reader support\n * Handles accessibility features for improved screen reader experience\n */\n\nclass AccessibilityManager {\n constructor(instance, options) {\n this.instance = instance;\n this.options = options;\n this.liveRegion = null;\n }\n\n /**\n * Initialize accessibility features\n * @param {HTMLElement} selectionElement - Selection container\n * @param {HTMLElement} dropdownElement - Dropdown container\n * @param {HTMLElement} resultsElement - Results container\n */\n bind(selectionElement, dropdownElement, resultsElement) {\n this.selectionElement = selectionElement;\n this.dropdownElement = dropdownElement;\n this.resultsElement = resultsElement;\n\n // Create live region for announcements\n this._createLiveRegion();\n\n // Setup ARIA attributes\n this._setupARIA();\n }\n\n /**\n * Create live region for screen reader announcements\n * @private\n */\n _createLiveRegion() {\n this.liveRegion = document.createElement(\"div\");\n this.liveRegion.setAttribute(\"role\", \"status\");\n this.liveRegion.setAttribute(\"aria-live\", \"polite\");\n this.liveRegion.setAttribute(\"aria-atomic\", \"true\");\n this.liveRegion.className = \"vs-sr-only\";\n document.body.appendChild(this.liveRegion);\n }\n\n /**\n * Setup initial ARIA attributes\n * @private\n */\n _setupARIA() {\n if (!this.selectionElement || !this.dropdownElement || !this.resultsElement)\n return;\n\n // Generate unique IDs\n const baseId = `vs-${Math.random().toString(36).substr(2, 9)}`;\n const resultsId = `${baseId}-results`;\n\n // Set IDs\n this.resultsElement.setAttribute(\"id\", resultsId);\n\n // Selection element ARIA\n this.selectionElement.setAttribute(\"role\", \"combobox\");\n this.selectionElement.setAttribute(\"aria-haspopup\", \"listbox\");\n this.selectionElement.setAttribute(\"aria-expanded\", \"false\");\n this.selectionElement.setAttribute(\"aria-owns\", resultsId);\n this.selectionElement.setAttribute(\"aria-controls\", resultsId);\n\n // Dropdown ARIA\n this.dropdownElement.setAttribute(\"role\", \"region\");\n const language = this.options.get(\"language\");\n this.dropdownElement.setAttribute(\n \"aria-label\",\n language.selectOptions || \"Select options\",\n );\n\n // Results ARIA\n this.resultsElement.setAttribute(\"role\", \"listbox\");\n }\n\n /**\n * Announce message to screen readers\n * @param {string} message - Message to announce\n */\n announce(message) {\n if (!this.liveRegion) return;\n\n // Clear previous message\n this.liveRegion.textContent = \"\";\n\n // Set new message with a small delay to ensure screen reader picks it up\n setTimeout(() => {\n this.liveRegion.textContent = message;\n }, 100);\n }\n\n /**\n * Announce results count\n * @param {number} count - Number of results\n */\n announceResultsCount(count) {\n const language = this.options.get(\"language\");\n\n if (count === 0) {\n this.announce(language.noResultsAvailable);\n } else if (count === 1) {\n this.announce(language.resultsAvailable?.one || \"1 result available\");\n } else {\n const message =\n typeof language.resultsAvailable?.other === \"function\"\n ? language.resultsAvailable.other({ count })\n : `${count} results available`;\n this.announce(message);\n }\n }\n\n /**\n * Announce selection\n * @param {Object} item - Selected item\n */\n announceSelection(item) {\n if (!item) return;\n\n const language = this.options.get(\"language\");\n const message =\n typeof language.selected === \"function\"\n ? language.selected({ text: item.text })\n : `Selected: ${item.text}`;\n\n this.announce(message);\n }\n\n /**\n * Update aria-activedescendant when navigating\n * @param {number} index - Index of highlighted item\n */\n updateActiveDescendant(index) {\n if (!this.selectionElement || !this.resultsElement) return;\n\n const results = this.resultsElement.querySelectorAll(\".vs-result\");\n\n if (index >= 0 && index < results.length) {\n const activeItem = results[index];\n\n // Ensure item has an ID\n if (!activeItem.id) {\n activeItem.id = `vs-result-${index}`;\n }\n\n this.selectionElement.setAttribute(\n \"aria-activedescendant\",\n activeItem.id,\n );\n } else {\n this.selectionElement.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n /**\n * Update ARIA when dropdown opens\n */\n onOpen() {\n if (this.selectionElement) {\n this.selectionElement.setAttribute(\"aria-expanded\", \"true\");\n }\n }\n\n /**\n * Update ARIA when dropdown closes\n */\n onClose() {\n if (this.selectionElement) {\n this.selectionElement.setAttribute(\"aria-expanded\", \"false\");\n this.selectionElement.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n /**\n * Destroy the manager\n */\n destroy() {\n if (this.liveRegion && this.liveRegion.parentNode) {\n this.liveRegion.parentNode.removeChild(this.liveRegion);\n }\n this.liveRegion = null;\n this.selectionElement = null;\n this.dropdownElement = null;\n this.resultsElement = null;\n }\n}\n\nexport default AccessibilityManager;\n","/**\n * VanillaSmartSelect - Main class and public API\n * Modern JavaScript dropdown enhancement without jQuery\n */\n\nimport EventEmitter from \"./EventEmitter.js\";\nimport Options from \"./Options.js\";\nimport { EVENTS } from \"../constants/events.js\";\nimport { querySelector } from \"../utils/dom.js\";\nimport DataAdapter from \"../adapters/DataAdapter.js\";\nimport AjaxAdapter from \"../adapters/AjaxAdapter.js\";\nimport SelectionAdapter from \"../adapters/SelectionAdapter.js\";\nimport DropdownAdapter from \"../adapters/DropdownAdapter.js\";\nimport ResultsAdapter from \"../adapters/ResultsAdapter.js\";\nimport KeyboardManager from \"../managers/KeyboardManager.js\";\nimport AccessibilityManager from \"../managers/AccessibilityManager.js\";\n\nclass VanillaSmartSelect extends EventEmitter {\n constructor(element, options = {}) {\n super();\n\n // Get the element\n this.element = this._getElement(element);\n if (!this.element) {\n throw new Error(\"Invalid element provided to VanillaSmartSelect\");\n }\n\n // Hide original select to prevent FOUC (Flash of Unstyled Content)\n this.element.setAttribute(\"data-vs-initializing\", \"true\");\n\n // Store reference to instance on element\n if (this.element._vanillaSmartSelect) {\n this.element._vanillaSmartSelect.destroy();\n }\n this.element._vanillaSmartSelect = this;\n\n // Initialize options\n this.options = new Options(options);\n\n // State\n this.isDisabled = false;\n this._isInitialized = false;\n\n // Containers (will be created during init)\n this.container = null;\n this.dropdown = null;\n\n // Adapters (will be initialized later)\n this.dataAdapter = null;\n this.ajaxAdapter = null;\n this.selectionAdapter = null;\n this.dropdownAdapter = null;\n this.resultsAdapter = null;\n\n // Managers (will be initialized later)\n this.keyboardManager = null;\n this.accessibilityManager = null;\n\n // Initialize\n this._init();\n }\n\n /**\n * Get HTML element from selector or element\n * @param {string|HTMLElement} element - Selector or element\n * @returns {HTMLElement|null} HTML element\n * @private\n */\n _getElement(element) {\n if (typeof element === \"string\") {\n return querySelector(element);\n }\n if (element instanceof HTMLElement) {\n return element;\n }\n return null;\n }\n\n /**\n * Initialize the select\n * @private\n */\n _init() {\n // Verify element is a select element\n if (this.element.tagName !== \"SELECT\") {\n throw new Error(\n \"VanillaSmartSelect must be initialized on a <select> element\",\n );\n }\n\n // Check if already initialized\n if (this._isInitialized) {\n return;\n }\n\n // Apply disabled state from element\n if (this.element.disabled) {\n this.options.set(\"disabled\", true);\n this.isDisabled = true;\n }\n\n // Apply multiple state from element\n if (this.element.multiple) {\n this.options.set(\"multiple\", true);\n }\n\n this._createContainers();\n this._initializeAdapters();\n this._initializeManagers();\n this._bindEvents();\n this._loadInitialData();\n\n // Mark as initialized\n this._isInitialized = true;\n\n // Remove initializing attribute - select is now fully transformed\n this.element.removeAttribute(\"data-vs-initializing\");\n\n // Emit init event\n this.emit(EVENTS.INIT, { instance: this });\n this.trigger(this.element, EVENTS.INIT, { instance: this });\n\n // Call onInit callback if provided\n const onInit = this.options.get(\"onInit\");\n if (typeof onInit === \"function\") {\n onInit.call(this);\n }\n }\n\n /**\n * Create container elements\n * @private\n */\n _createContainers() {\n // Create main container element\n this.container = document.createElement(\"div\");\n this.container.className = `vs-container vs-container--${this.options.get(\"theme\")}`;\n\n // Add custom CSS class if provided\n const customClass = this.options.get(\"containerCssClass\");\n if (customClass) {\n this.container.className += ` ${customClass}`;\n }\n\n // Set width\n this.container.style.width = this.options.get(\"width\");\n\n // Insert after original select\n this.element.parentNode.insertBefore(\n this.container,\n this.element.nextSibling,\n );\n\n // Hide original select\n this.element.style.display = \"none\";\n this.element.setAttribute(\"aria-hidden\", \"true\");\n }\n\n /**\n * Initialize adapters\n * @private\n */\n _initializeAdapters() {\n // Initialize DataAdapter\n this.dataAdapter = new DataAdapter(this, this.options);\n this.dataAdapter.init();\n\n // Initialize AjaxAdapter if ajax option is configured\n const ajaxConfig = this.options.get(\"ajax\");\n if (ajaxConfig) {\n this.ajaxAdapter = new AjaxAdapter(this, this.options, this.dataAdapter);\n }\n\n // Initialize SelectionAdapter\n this.selectionAdapter = new SelectionAdapter(this, this.options);\n this.selectionAdapter.bind(this.container, this.dataAdapter);\n\n // Get selection element AFTER binding (when it's rendered)\n const selectionElement = this.selectionAdapter.selection.getContainer();\n\n // Initialize DropdownAdapter\n this.dropdownAdapter = new DropdownAdapter(this, this.options);\n this.dropdownAdapter.bind(this.container, selectionElement);\n\n // Initialize ResultsAdapter\n this.resultsAdapter = new ResultsAdapter(this, this.options);\n const dropdownContainer = this.dropdownAdapter.getContainer();\n this.resultsAdapter.bind(\n dropdownContainer,\n this.dataAdapter,\n this.dropdownAdapter,\n this.ajaxAdapter,\n );\n }\n\n /**\n * Initialize managers\n * @private\n */\n _initializeManagers() {\n // Initialize KeyboardManager\n this.keyboardManager = new KeyboardManager(this, this.options);\n\n // Bind keyboard events\n const selectionElement = this.selectionAdapter.selection.getContainer();\n const searchInput = this.dropdownAdapter.searchBox?.getInput();\n this.keyboardManager.bind(\n selectionElement,\n searchInput,\n this.resultsAdapter,\n );\n\n // Initialize AccessibilityManager\n this.accessibilityManager = new AccessibilityManager(this, this.options);\n\n // Bind accessibility features\n const dropdownElement = this.dropdownAdapter.dropdown.getContainer();\n const resultsElement = this.resultsAdapter.results.getContainer();\n this.accessibilityManager.bind(\n selectionElement,\n dropdownElement,\n resultsElement,\n );\n }\n\n /**\n * Bind event listeners\n * @private\n */\n _bindEvents() {\n // Accessibility events\n this.on(EVENTS.OPENING, () => {\n if (this.accessibilityManager) {\n this.accessibilityManager.onOpen();\n }\n });\n\n this.on(EVENTS.CLOSING, () => {\n if (this.accessibilityManager) {\n this.accessibilityManager.onClose();\n }\n });\n\n this.on(EVENTS.SELECT, (data) => {\n if (this.accessibilityManager && data.data) {\n this.accessibilityManager.announceSelection(data.data);\n }\n });\n\n this.on(EVENTS.RESULTS, (data) => {\n if (this.accessibilityManager && data.results) {\n this.accessibilityManager.announceResultsCount(data.results.length);\n }\n });\n\n // HTML5 Validation events\n this.element.addEventListener(\"invalid\", (e) => {\n this._onInvalid(e);\n });\n\n // Update validation state on change\n this.on(EVENTS.CHANGE, () => {\n this._updateValidationState();\n });\n }\n\n /**\n * Handle invalid event from native select\n * @param {Event} e - Invalid event\n * @private\n */\n _onInvalid(e) {\n // Prevent default browser behavior (trying to focus hidden element)\n e.preventDefault();\n\n if (this.container) {\n // Add invalid class for visual feedback\n this.container.classList.add(\"vs-container--invalid\");\n\n // Focus on our custom selection element instead\n const selectionElement = this.container.querySelector(\".vs-selection\");\n if (selectionElement) {\n selectionElement.focus();\n }\n\n // Show validation message using custom container\n // (Browser can't show tooltip on hidden element)\n const validationMessage = this.element.validationMessage;\n if (validationMessage) {\n // Set custom title for tooltip on hover\n this.container.setAttribute(\"title\", validationMessage);\n }\n }\n }\n\n /**\n * Update validation state (check and update visual state)\n * @private\n */\n _updateValidationState() {\n if (!this.container) return;\n\n const isValid = this.element.checkValidity();\n if (isValid) {\n this.container.classList.remove(\"vs-container--invalid\");\n this.container.removeAttribute(\"title\"); // Remove validation tooltip\n } else {\n this.container.classList.add(\"vs-container--invalid\");\n // Set validation message as tooltip\n const validationMessage = this.element.validationMessage;\n if (validationMessage) {\n this.container.setAttribute(\"title\", validationMessage);\n }\n }\n }\n\n /**\n * Load initial data from element or options\n * @private\n */\n _loadInitialData() {\n // Data is loaded in DataAdapter.init()\n // Just update the selection display\n if (this.selectionAdapter) {\n this.selectionAdapter.update();\n }\n }\n\n /**\n * PUBLIC API METHODS\n */\n\n /**\n * Get or set the current value\n * @param {string|string[]|null} value - Value to set (optional)\n * @returns {string|string[]|VanillaSmartSelect} Current value or this for chaining\n */\n val(value) {\n if (value === undefined) {\n // Get current value\n if (this.dataAdapter) {\n const current = this.dataAdapter.current();\n if (this.options.get(\"multiple\")) {\n return current.map((item) => item.id);\n }\n return current.length > 0 ? current[0].id : null;\n }\n return this.element.value;\n }\n\n // Set value - use select() to properly update UI\n if (value === null || value === \"\") {\n // Clear selection\n return this.clear();\n }\n\n // For single select, use select() method\n if (!this.options.get(\"multiple\")) {\n return this.select(value);\n }\n\n // For multiple select, handle array of values\n if (Array.isArray(value)) {\n this.clear(); // Clear first\n value.forEach((id) => this.select(id));\n return this;\n }\n\n // Single value for multiple select\n return this.select(value);\n }\n\n /**\n * Get or set data\n * @param {Array|null} data - Data array to set (optional)\n * @returns {Array|VanillaSmartSelect} Current data or this for chaining\n */\n data(data) {\n if (data === undefined) {\n // Get current data\n if (this.dataAdapter) {\n return this.dataAdapter.query({ term: \"\" });\n }\n return [];\n }\n\n // Set data\n if (this.dataAdapter) {\n this.dataAdapter.setData(data);\n }\n return this;\n }\n\n /**\n * Open the dropdown\n */\n open() {\n if (this.isDisabled || this.isOpen()) {\n return;\n }\n\n // Emit opening event (preventable)\n const openingAllowed = this.trigger(\n this.element,\n EVENTS.OPENING,\n {},\n { cancelable: true },\n );\n if (!openingAllowed) {\n return;\n }\n\n this.emit(EVENTS.OPENING);\n\n // Emit opened event\n this.emit(EVENTS.OPEN);\n this.trigger(this.element, EVENTS.OPEN);\n\n // Call onOpen callback\n const onOpen = this.options.get(\"onOpen\");\n if (typeof onOpen === \"function\") {\n onOpen.call(this);\n }\n }\n\n /**\n * Close the dropdown\n */\n close() {\n if (!this.isOpen()) {\n return;\n }\n\n // Emit closing event (preventable)\n const closingAllowed = this.trigger(\n this.element,\n EVENTS.CLOSING,\n {},\n { cancelable: true },\n );\n if (!closingAllowed) {\n return;\n }\n\n this.emit(EVENTS.CLOSING);\n\n // Emit closed event\n this.emit(EVENTS.CLOSE);\n this.trigger(this.element, EVENTS.CLOSE);\n\n // Call onClose callback\n const onClose = this.options.get(\"onClose\");\n if (typeof onClose === \"function\") {\n onClose.call(this);\n }\n }\n\n /**\n * Toggle dropdown open/closed\n */\n toggle() {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Enable the select\n */\n enable() {\n if (!this.isDisabled) {\n return;\n }\n\n this.isDisabled = false;\n this.element.disabled = false;\n this.options.set(\"disabled\", false);\n\n if (this.container) {\n this.container.classList.remove(\"vs-container--disabled\");\n }\n }\n\n /**\n * Disable the select\n */\n disable() {\n if (this.isDisabled) {\n return;\n }\n\n this.isDisabled = true;\n this.element.disabled = true;\n this.options.set(\"disabled\", true);\n\n if (this.container) {\n this.container.classList.add(\"vs-container--disabled\");\n }\n\n // Close if open\n if (this.isOpen()) {\n this.close();\n }\n }\n\n /**\n * Check if dropdown is open\n * @returns {boolean} Whether dropdown is open\n */\n isOpen() {\n return this.dropdownAdapter ? this.dropdownAdapter.isOpen() : false;\n }\n\n /**\n * Clear the current selection\n * @returns {VanillaSmartSelect} this for chaining\n */\n clear() {\n if (!this.dataAdapter) {\n return this;\n }\n\n // Emit clearing event (preventable)\n const clearingAllowed = this.trigger(\n this.element,\n EVENTS.CLEARING,\n {},\n { cancelable: true },\n );\n\n if (!clearingAllowed) {\n return this;\n }\n\n this.emit(EVENTS.CLEARING);\n\n // Clear all selections using DataAdapter\n this.dataAdapter.clear();\n\n // Emit clear event (for adapters to update UI)\n this.emit(EVENTS.CLEAR);\n this.trigger(this.element, EVENTS.CLEAR);\n\n // Call onClear callback\n const onClear = this.options.get(\"onClear\");\n if (typeof onClear === \"function\") {\n onClear.call(this);\n }\n\n return this;\n }\n\n /**\n * Focus the select\n */\n focus() {\n if (this.container) {\n const focusTarget = this.container.querySelector(\".vs-selection\");\n if (focusTarget) {\n focusTarget.focus();\n }\n }\n }\n\n /**\n * Select an item by ID (programmatically)\n * @param {string|number} id - Item ID to select\n * @returns {VanillaSmartSelect} this for chaining\n */\n select(id) {\n if (!this.dataAdapter) {\n return this;\n }\n\n // Find item by ID in data\n const allData = this.dataAdapter.query({ term: \"\" });\n const item = this._findItemById(allData, id);\n\n if (item && !item.disabled) {\n this.dataAdapter.select(item);\n }\n\n return this;\n }\n\n /**\n * Unselect an item by ID (multi-select only)\n * @param {string|number} id - Item ID to unselect\n * @returns {VanillaSmartSelect} this for chaining\n */\n unselect(id) {\n if (!this.dataAdapter) {\n return this;\n }\n\n const isMultiple = this.options.get(\"multiple\");\n if (!isMultiple) {\n console.warn(\"unselect() only works with multiple select\");\n return this;\n }\n\n // Find item in current selection\n const current = this.dataAdapter.current();\n const item = current.find((i) => i.id === id);\n\n if (item) {\n this.dataAdapter.unselect(item);\n }\n\n return this;\n }\n\n /**\n * Get selected item(s) with full data\n * @returns {Object|Object[]|null} Selected item(s) or null\n */\n getSelected() {\n if (!this.dataAdapter) {\n return null;\n }\n\n const current = this.dataAdapter.current();\n const isMultiple = this.options.get(\"multiple\");\n\n if (isMultiple) {\n return current; // Array of selected items\n }\n\n return current.length > 0 ? current[0] : null; // Single item or null\n }\n\n /**\n * Add a new option dynamically\n * @param {Object} option - Option data {id, text, disabled?, selected?}\n * @returns {VanillaSmartSelect} this for chaining\n */\n addOption(option) {\n if (!this.dataAdapter || !option) {\n return this;\n }\n\n // Get current data\n const currentData = this.dataAdapter.query({ term: \"\" });\n\n // Add new option\n currentData.push(option);\n\n // Update data\n this.dataAdapter.setData(currentData);\n\n // Update results if dropdown is open\n if (this.resultsAdapter) {\n this.resultsAdapter.update();\n }\n\n return this;\n }\n\n /**\n * Remove an option by ID\n * @param {string|number} id - Option ID to remove\n * @returns {VanillaSmartSelect} this for chaining\n */\n removeOption(id) {\n if (!this.dataAdapter) {\n return this;\n }\n\n // Get current data\n let currentData = this.dataAdapter.query({ term: \"\" });\n\n // Remove item recursively (supports groups)\n currentData = this._removeItemById(currentData, id);\n\n // Update data\n this.dataAdapter.setData(currentData);\n\n // Update results if dropdown is open\n if (this.resultsAdapter) {\n this.resultsAdapter.update();\n }\n\n return this;\n }\n\n /**\n * Helper: Find item by ID recursively (supports groups)\n * @param {Array} items - Items to search\n * @param {string|number} id - Item ID\n * @returns {Object|null} Found item or null\n * @private\n */\n _findItemById(items, id) {\n for (const item of items) {\n // Convert both to string for comparison to handle string/number safely\n // This avoids issues with loose equality (e.g., \"0\" == 0 → true, but 0 == \"\" → false)\n if (String(item.id) === String(id)) {\n return item;\n }\n\n // Search in children (groups)\n if (item.children && Array.isArray(item.children)) {\n const found = this._findItemById(item.children, id);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Helper: Remove item by ID recursively (supports groups)\n * @param {Array} items - Items array\n * @param {string|number} id - Item ID to remove\n * @returns {Array} Filtered items\n * @private\n */\n _removeItemById(items, id) {\n return items.filter((item) => {\n // Remove if matches ID\n if (item.id == id) {\n return false;\n }\n\n // Filter children (groups)\n if (item.children && Array.isArray(item.children)) {\n item.children = this._removeItemById(item.children, id);\n }\n\n return true;\n });\n }\n\n /**\n * Check if the current selection is valid (HTML5 validation)\n * @returns {boolean} True if valid\n */\n checkValidity() {\n return this.element.checkValidity();\n }\n\n /**\n * Report validity (HTML5 validation) - shows browser validation message\n * @returns {boolean} True if valid\n */\n reportValidity() {\n return this.element.reportValidity();\n }\n\n /**\n * Set custom validity message (HTML5 validation)\n * @param {string} message - Validation message (empty string to clear)\n * @returns {VanillaSmartSelect} this for chaining\n */\n setCustomValidity(message) {\n this.element.setCustomValidity(message);\n return this;\n }\n\n /**\n * Get the validation message\n * @returns {string} Validation message\n */\n validationMessage() {\n return this.element.validationMessage;\n }\n\n /**\n * Check if the select will be validated\n * @returns {boolean} True if will validate\n */\n willValidate() {\n return this.element.willValidate;\n }\n\n /**\n * Update the language dynamically\n * @param {Object} language - Language object (use getLanguage('pt-BR') to get language object)\n * @returns {VanillaSmartSelect} this for chaining\n * @example\n * import { getLanguage } from './i18n/index.js';\n * select.updateLanguage(getLanguage('pt-BR'));\n */\n updateLanguage(language) {\n if (!language || typeof language !== \"object\") {\n console.warn(\n 'updateLanguage expects a language object. Use getLanguage(\"code\") to get one.',\n );\n return this;\n }\n\n // Update language option\n this.options.set(\"language\", language);\n\n // Update all components that display language-dependent text\n if (\n this.dropdownAdapter &&\n typeof this.dropdownAdapter.update === \"function\"\n ) {\n this.dropdownAdapter.update();\n }\n\n if (\n this.selectionAdapter &&\n typeof this.selectionAdapter.update === \"function\"\n ) {\n this.selectionAdapter.update();\n }\n\n return this;\n }\n\n /**\n * Destroy the select instance\n */\n destroy() {\n if (!this._isInitialized) {\n return;\n }\n\n // Emit destroy event\n this.emit(EVENTS.DESTROY);\n this.trigger(this.element, EVENTS.DESTROY);\n\n // Close dropdown if open\n if (this.isOpen()) {\n this.close();\n }\n\n // Destroy adapters\n if (this.dataAdapter && this.dataAdapter.destroy) {\n this.dataAdapter.destroy();\n }\n if (this.ajaxAdapter && this.ajaxAdapter.destroy) {\n this.ajaxAdapter.destroy();\n }\n if (this.selectionAdapter && this.selectionAdapter.destroy) {\n this.selectionAdapter.destroy();\n }\n if (this.dropdownAdapter && this.dropdownAdapter.destroy) {\n this.dropdownAdapter.destroy();\n }\n if (this.resultsAdapter && this.resultsAdapter.destroy) {\n this.resultsAdapter.destroy();\n }\n\n // Destroy managers\n if (this.keyboardManager && this.keyboardManager.destroy) {\n this.keyboardManager.destroy();\n }\n if (this.accessibilityManager && this.accessibilityManager.destroy) {\n this.accessibilityManager.destroy();\n }\n\n // Remove container\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n\n // Show original select\n this.element.style.display = \"\";\n this.element.removeAttribute(\"aria-hidden\");\n\n // Remove reference from element\n delete this.element._vanillaSmartSelect;\n\n // Remove all event listeners\n this.removeAllListeners();\n\n // Mark as not initialized\n this._isInitialized = false;\n }\n}\n\n// Factory function for easier initialization\nexport function vanillaSmartSelect(element, options) {\n return new VanillaSmartSelect(element, options);\n}\n\nexport default VanillaSmartSelect;\n","/**\n * ARIA (Accessible Rich Internet Applications) constants\n * Used for proper accessibility implementation\n */\n\nexport const ARIA = {\n // Roles\n COMBOBOX: \"combobox\",\n LISTBOX: \"listbox\",\n OPTION: \"option\",\n GROUP: \"group\",\n PRESENTATION: \"presentation\",\n\n // States and Properties\n EXPANDED: \"aria-expanded\",\n SELECTED: \"aria-selected\",\n DISABLED: \"aria-disabled\",\n ACTIVEDESCENDANT: \"aria-activedescendant\",\n HIDDEN: \"aria-hidden\",\n\n // Labels and Descriptions\n LABEL: \"aria-label\",\n LABELLEDBY: \"aria-labelledby\",\n DESCRIBEDBY: \"aria-describedby\",\n\n // Relationships\n CONTROLS: \"aria-controls\",\n OWNS: \"aria-owns\",\n\n // Widget Attributes\n HASPOPUP: \"aria-haspopup\",\n AUTOCOMPLETE: \"aria-autocomplete\",\n MULTISELECTABLE: \"aria-multiselectable\",\n\n // Live Region Attributes\n LIVE: \"aria-live\",\n ATOMIC: \"aria-atomic\",\n RELEVANT: \"aria-relevant\",\n BUSY: \"aria-busy\",\n\n // Values\n TRUE: \"true\",\n FALSE: \"false\",\n POLITE: \"polite\",\n ASSERTIVE: \"assertive\",\n LIST: \"list\",\n BOTH: \"both\",\n};\n\n/**\n * Helper function to set ARIA attributes\n * @param {HTMLElement} element - Element to set attributes on\n * @param {Object} attributes - Object with ARIA attribute key-value pairs\n */\nexport function setAriaAttributes(element, attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n element.removeAttribute(key);\n } else {\n element.setAttribute(key, value);\n }\n });\n}\n\n/**\n * Helper function to get unique ID for ARIA relationships\n * @param {string} prefix - Prefix for the ID\n * @returns {string} Unique ID\n */\nlet idCounter = 0;\nexport function generateAriaId(prefix = \"vs\") {\n return `${prefix}-${Date.now()}-${++idCounter}`;\n}\n\nexport default ARIA;\n","/**\n * Function decorators and utilities\n * Provides debounce, throttle, and other function modifiers\n */\n\n/**\n * Debounce function - delays execution until after wait time has elapsed\n * @param {Function} func - Function to debounce\n * @param {number} wait - Wait time in milliseconds\n * @param {boolean} immediate - Execute on leading edge instead of trailing\n * @returns {Function} Debounced function\n */\nexport function debounce(func, wait = 250, immediate = false) {\n let timeout;\n\n const debounced = function (...args) {\n const context = this;\n\n const later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n\n debounced.cancel = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n}\n\n/**\n * Throttle function - limits execution to once per time period\n * @param {Function} func - Function to throttle\n * @param {number} wait - Wait time in milliseconds\n * @returns {Function} Throttled function\n */\nexport function throttle(func, wait = 250) {\n let timeout;\n let previous = 0;\n\n const throttled = function (...args) {\n const context = this;\n const now = Date.now();\n\n const remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(() => {\n previous = Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n timeout = null;\n previous = 0;\n };\n\n return throttled;\n}\n\n/**\n * Once function - ensures function is only called once\n * @param {Function} func - Function to wrap\n * @returns {Function} Wrapped function\n */\nexport function once(func) {\n let called = false;\n let result;\n\n return function (...args) {\n if (!called) {\n called = true;\n result = func.apply(this, args);\n }\n return result;\n };\n}\n\n/**\n * Memoize function - caches function results\n * @param {Function} func - Function to memoize\n * @param {Function} resolver - Custom cache key resolver\n * @returns {Function} Memoized function\n */\nexport function memoize(func, resolver) {\n const cache = new Map();\n\n const memoized = function (...args) {\n const key = resolver ? resolver.apply(this, args) : args[0];\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n const result = func.apply(this, args);\n cache.set(key, result);\n return result;\n };\n\n memoized.cache = cache;\n\n return memoized;\n}\n\n/**\n * Delay function - delays execution by specified time\n * @param {Function} func - Function to delay\n * @param {number} wait - Delay time in milliseconds\n * @returns {Function} Delayed function\n */\nexport function delay(func, wait = 0) {\n return function (...args) {\n setTimeout(() => {\n func.apply(this, args);\n }, wait);\n };\n}\n\n/**\n * Negate function - returns opposite boolean result\n * @param {Function} predicate - Predicate function\n * @returns {Function} Negated function\n */\nexport function negate(predicate) {\n return function (...args) {\n return !predicate.apply(this, args);\n };\n}\n\nexport default {\n debounce,\n throttle,\n once,\n memoize,\n delay,\n negate,\n};\n","/**\n * Vanilla-Smart-Select\n * Modern JavaScript dropdown enhancement library without jQuery dependencies\n *\n * @version 1.0.1\n * @author Ailton Occhi <ailton.occhi@hotmail.com>\n * @license MIT\n */\n\nimport VanillaSmartSelect, {\n vanillaSmartSelect,\n} from \"./core/VanillaSmartSelect.js\";\nimport EventEmitter from \"./core/EventEmitter.js\";\nimport Options from \"./core/Options.js\";\n\n// Constants\nimport { EVENTS } from \"./constants/events.js\";\nimport { ARIA } from \"./constants/aria.js\";\nimport { KEYS } from \"./constants/keys.js\";\nimport { DEFAULTS } from \"./constants/defaults.js\";\n\n// Utils\nimport * as dom from \"./utils/dom.js\";\nimport * as decorators from \"./utils/decorators.js\";\nimport { removeDiacritics, diacritics } from \"./utils/diacritics.js\";\n\n// i18n\nimport * as i18n from \"./i18n/index.js\";\nimport {\n getLanguage,\n detectBrowserLanguage,\n getAvailableLanguages,\n} from \"./i18n/index.js\";\n\n// Export main class as default\nexport default VanillaSmartSelect;\n\n// Named exports\nexport {\n VanillaSmartSelect,\n vanillaSmartSelect,\n EventEmitter,\n Options,\n\n // Constants\n EVENTS,\n ARIA,\n KEYS,\n DEFAULTS,\n\n // Utils\n dom,\n decorators,\n removeDiacritics,\n diacritics,\n\n // i18n\n i18n,\n getLanguage,\n detectBrowserLanguage,\n getAvailableLanguages,\n};\n\n// UMD build global assignment\nif (typeof window !== \"undefined\") {\n window.VanillaSmartSelect = VanillaSmartSelect;\n window.vanillaSmartSelect = vanillaSmartSelect;\n}\n"],"names":["debounce"],"mappings":"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,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,QAAQ,EAAE,GAA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"}
|