{"version":3,"file":"get-match-range.mjs","sources":["../../../src/slate/utils/get-match-range.ts"],"sourcesContent":["import type { Point as SlatePoint } from \"slate\";\nimport { Editor as SlateEditor, Range as SlateRange } from \"slate\";\n\ninterface Options {\n  include?: boolean;\n  direction?: \"before\" | \"after\" | \"both\";\n}\n\nconst defaultOptions: Options = {\n  direction: \"before\",\n};\n\nexport function getMatchRange(\n  editor: SlateEditor,\n  at: SlateRange,\n  terminators: string[] = [\" \"],\n  options: Options = defaultOptions\n): SlateRange | undefined {\n  const { include, direction } = { ...defaultOptions, ...options };\n  let [start, end] = SlateRange.edges(at);\n  let point: SlatePoint = start;\n\n  function move(direction: \"before\" | \"after\"): boolean {\n    const next =\n      direction === \"after\"\n        ? SlateEditor.after(editor, point, {\n            unit: \"character\",\n          })\n        : SlateEditor.before(editor, point, { unit: \"character\" });\n    const nextWord =\n      next &&\n      SlateEditor.string(\n        editor,\n        direction === \"after\"\n          ? { anchor: point, focus: next }\n          : { anchor: next, focus: point }\n      );\n    const lastWord =\n      nextWord && nextWord[direction === \"after\" ? 0 : nextWord.length - 1];\n\n    if (next && lastWord && !terminators.includes(lastWord)) {\n      point = next;\n\n      if (point.offset === 0) {\n        return false;\n      }\n    } else {\n      return false;\n    }\n\n    return true;\n  }\n\n  if (direction !== \"before\") {\n    point = end;\n\n    while (move(\"after\"));\n\n    end = point;\n  }\n\n  if (direction !== \"after\") {\n    point = start;\n\n    while (move(\"before\"));\n\n    start = point;\n  }\n\n  if (include) {\n    return {\n      anchor: SlateEditor.before(editor, start, { unit: \"offset\" }) ?? start,\n      focus: SlateEditor.after(editor, end, { unit: \"offset\" }) ?? end,\n    };\n  }\n\n  return { anchor: start, focus: end };\n}\n"],"names":["SlateRange","direction","SlateEditor"],"mappings":";;AAQA,MAAM,cAA0B,GAAA;AAAA,EAC9B,SAAW,EAAA,QAAA;AACb,CAAA,CAAA;AAEgB,SAAA,aAAA,CACd,QACA,EACA,EAAA,WAAA,GAAwB,CAAC,GAAG,CAAA,EAC5B,UAAmB,cACK,EAAA;AACxB,EAAM,MAAA,EAAE,SAAS,SAAU,EAAA,GAAI,EAAE,GAAG,cAAA,EAAgB,GAAG,OAAQ,EAAA,CAAA;AAC/D,EAAA,IAAI,CAAC,KAAO,EAAA,GAAG,CAAI,GAAAA,KAAA,CAAW,MAAM,EAAE,CAAA,CAAA;AACtC,EAAA,IAAI,KAAoB,GAAA,KAAA,CAAA;AAExB,EAAA,SAAS,KAAKC,UAAwC,EAAA;AACpD,IAAA,MAAM,OACJA,UAAc,KAAA,OAAA,GACVC,MAAY,CAAA,KAAA,CAAM,QAAQ,KAAO,EAAA;AAAA,MAC/B,IAAM,EAAA,WAAA;AAAA,KACP,IACDA,MAAY,CAAA,MAAA,CAAO,QAAQ,KAAO,EAAA,EAAE,IAAM,EAAA,WAAA,EAAa,CAAA,CAAA;AAC7D,IAAM,MAAA,QAAA,GACJ,QACAA,MAAY,CAAA,MAAA;AAAA,MACV,MAAA;AAAA,MACAD,UAAc,KAAA,OAAA,GACV,EAAE,MAAA,EAAQ,KAAO,EAAA,KAAA,EAAO,IAAK,EAAA,GAC7B,EAAE,MAAA,EAAQ,IAAM,EAAA,KAAA,EAAO,KAAM,EAAA;AAAA,KACnC,CAAA;AACF,IAAA,MAAM,WACJ,QAAY,IAAA,QAAA,CAASA,eAAc,OAAU,GAAA,CAAA,GAAI,SAAS,MAAS,GAAA,CAAA,CAAA,CAAA;AAErE,IAAA,IAAI,QAAQ,QAAY,IAAA,CAAC,WAAY,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA;AACvD,MAAQ,KAAA,GAAA,IAAA,CAAA;AAER,MAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,IAAQ,KAAA,GAAA,GAAA,CAAA;AAER,IAAA,OAAO,KAAK,OAAO,CAAA;AAAE,MAAA,CAAA;AAErB,IAAM,GAAA,GAAA,KAAA,CAAA;AAAA,GACR;AAEA,EAAA,IAAI,cAAc,OAAS,EAAA;AACzB,IAAQ,KAAA,GAAA,KAAA,CAAA;AAER,IAAA,OAAO,KAAK,QAAQ,CAAA;AAAE,MAAA,CAAA;AAEtB,IAAQ,KAAA,GAAA,KAAA,CAAA;AAAA,GACV;AAEA,EAAA,IAAI,OAAS,EAAA;AACX,IAAO,OAAA;AAAA,MACL,MAAA,EAAQC,OAAY,MAAO,CAAA,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,QAAS,EAAC,CAAK,IAAA,KAAA;AAAA,MACjE,KAAA,EAAOA,OAAY,KAAM,CAAA,MAAA,EAAQ,KAAK,EAAE,IAAA,EAAM,QAAS,EAAC,CAAK,IAAA,GAAA;AAAA,KAC/D,CAAA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAO,EAAA,KAAA,EAAO,GAAI,EAAA,CAAA;AACrC;;;;"}