{"version":3,"sources":["../../src/core/search-match-sorter.ts"],"names":[],"mappings":";;;AAYO,SAAS,wBAAwB,OAAA,EAA4C;AAGlF,EAAA,IAAI,aAAA,GAAsC,IAAA;AAE1C,EAAA,eAAe,eAAA,GAAkB;AAC/B,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,cAAc,CAAA;AACvC,MAAA,aAAA,GAAgB,GAAA,CAAI,WAAA;AAAA,IACtB;AACA,IAAA,OAAO,aAAA;AAAA,EACT;AAGA,EAAc,eAAA;AAEd,EAAA,OAAO;AAAA,IACL,MAAA,CAAO,OAAe,KAAA,EAAoC;AACxD,MAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,KAAK,MAAM,CAAA;AAEnD,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACjC,QAAA,OAAO,OAAA,CACJ,IAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAM,KAAA,EAAO,GAAE,CAAE,CAAA,CAClC,KAAK,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,QAAA,IAAY,CAAA,CAAE,CAAA;AAAA,MACnE;AAEA,MAAA,IAAI,CAAC,aAAA,EAAe;AAElB,QAAA,MAAM,CAAA,GAAI,MAAM,WAAA,EAAY;AAC5B,QAAA,OAAO,OAAA,CACJ,MAAA;AAAA,UACC,CAAC,IAAA,KACC,IAAA,CAAK,MAAM,WAAA,EAAY,CAAE,SAAS,CAAC,CAAA,IACnC,KAAK,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAY,CAAE,QAAA,CAAS,CAAC,CAAC;AAAA,SAC1D,CACC,IAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAM,KAAA,EAAO,KAAI,CAAE,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,IAAA,GAAiB;AAAA,QACrB,OAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,GAAI,OAAA,EAAS,IAAA,IAAQ;AAAC,OACxB;AAEA,MAAA,MAAM,UAAU,aAAA,CAAc,OAAA,EAAS,KAAA,EAAO,EAAE,MAAM,CAAA;AAGtD,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,MAAW;AAAA,QACnC,IAAA;AAAA,QACA,OAAO,CAAA,GAAI,KAAA,GAAQ,KAAK,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAC;AAAA,OAC/C,CAAE,CAAA;AAAA,IACJ;AAAA,GACF;AAIF","file":"search-match-sorter.cjs","sourcesContent":["import type { CommandItem, SearchEngine, ScoredItem } from './types'\n\n/**\n * Create a search engine backed by match-sorter.\n * Requires `match-sorter` as a peer dependency.\n *\n * match-sorter provides excellent ranking for \"type what you remember\" UX,\n * with configurable thresholds and multi-key support.\n *\n * @param options.threshold - match-sorter threshold (default: CONTAINS)\n * @param options.keys - Additional keys to search beyond defaults\n */\nexport function createMatchSorterSearch(options?: MatchSorterOptions): SearchEngine {\n  // Lazy import to avoid bundling match-sorter in core\n  type MatchSorterFn = <T>(items: T[], value: string, options?: { keys?: string[] }) => T[]\n  let matchSorterFn: MatchSorterFn | null = null\n\n  async function loadMatchSorter() {\n    if (!matchSorterFn) {\n      const mod = await import('match-sorter')\n      matchSorterFn = mod.matchSorter\n    }\n    return matchSorterFn\n  }\n\n  // Pre-load on creation\n  const ready = loadMatchSorter()\n\n  return {\n    search(query: string, items: CommandItem[]): ScoredItem[] {\n      const visible = items.filter((item) => !item.hidden)\n\n      if (!query || query.trim() === '') {\n        return visible\n          .map((item) => ({ item, score: 1 }))\n          .sort((a, b) => (b.item.priority ?? 0) - (a.item.priority ?? 0))\n      }\n\n      if (!matchSorterFn) {\n        // Fallback: if match-sorter hasn't loaded yet, basic filter\n        const q = query.toLowerCase()\n        return visible\n          .filter(\n            (item) =>\n              item.label.toLowerCase().includes(q) ||\n              item.keywords?.some((k) => k.toLowerCase().includes(q)),\n          )\n          .map((item) => ({ item, score: 0.5 }))\n      }\n\n      const keys: string[] = [\n        'label',\n        'description',\n        'keywords',\n        ...(options?.keys ?? []),\n      ]\n\n      const matched = matchSorterFn(visible, query, { keys })\n\n      // Convert to scored items (position-based scoring)\n      return matched.map((item, index) => ({\n        item,\n        score: 1 - index / Math.max(matched.length, 1),\n      }))\n    },\n  }\n\n  // Trigger eager load\n  void ready\n}\n\nexport interface MatchSorterOptions {\n  /** match-sorter ranking threshold */\n  threshold?: number\n  /** Additional keys to search */\n  keys?: string[]\n}\n"]}