(function (root, factory) { const filterCommands = factory(); if (typeof module === 'object' && module.exports) module.exports = filterCommands; if (root) root.filterCommands = filterCommands; })(typeof globalThis !== 'undefined' ? globalThis : this, function () { function filterCommands(commands, filter) { const term = String(filter || '').toLowerCase(); return commands.filter(command => command.name.toLowerCase().includes(term)); } filterCommands.nextSelection = function nextSelection(current, key, count) { if (count < 1) return -1; if (key === 'ArrowDown') return (current + 1 + count) % count; if (key === 'ArrowUp') return (current - 1 + count) % count; return current; }; filterCommands.createGlobalSearchController = function createGlobalSearchController(options) { const search = options.search; const onState = options.onState; const delay = options.delay === undefined ? 250 : options.delay; let timer = null; let generation = 0; let activeController = null; return { setQuery(value) { const query = String(value || '').trim(); generation += 1; const current = generation; if (timer !== null) clearTimeout(timer); if (activeController !== null) activeController.abort(); activeController = null; if (query.length < 2) { onState({ status: 'idle', query, items: [] }); return; } onState({ status: 'loading', query, items: [] }); timer = setTimeout(async () => { const requestController = new AbortController(); activeController = requestController; try { const result = await search(query, requestController.signal); const items = Array.isArray(result) ? result : result.items; const partial = !Array.isArray(result) && result.partial === true; if (current === generation) onState({ status: 'ready', query, items, partial }); } catch (error) { if (error && error.name === 'AbortError') return; if (current === generation) onState({ status: 'error', query, items: [], error }); } finally { if (activeController === requestController) activeController = null; } }, delay); }, }; }; return filterCommands; });