{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-cursor/index.ts"],"sourcesContent":["import { ref } from 'vue'\n\nimport type { ShallowRef } from 'vue'\n\n// Keep input cursor in the correct position when we use formatter.\nexport function useCursor(\n  input: ShallowRef<HTMLInputElement | undefined>\n): [() => void, () => void] {\n  const selectionRef = ref<{\n    selectionStart?: number\n    selectionEnd?: number\n    value?: string\n    beforeTxt?: string\n    afterTxt?: string\n  }>()\n\n  function recordCursor() {\n    if (input.value == undefined) return\n\n    const { selectionStart, selectionEnd, value } = input.value\n\n    if (selectionStart == null || selectionEnd == null) return\n\n    const beforeTxt = value.slice(0, Math.max(0, selectionStart))\n    const afterTxt = value.slice(Math.max(0, selectionEnd))\n\n    selectionRef.value = {\n      selectionStart,\n      selectionEnd,\n      value,\n      beforeTxt,\n      afterTxt,\n    }\n  }\n  function setCursor() {\n    if (input.value == undefined || selectionRef.value == undefined) return\n\n    const { value } = input.value\n    const { beforeTxt, afterTxt, selectionStart } = selectionRef.value\n\n    if (\n      beforeTxt == undefined ||\n      afterTxt == undefined ||\n      selectionStart == undefined\n    )\n      return\n\n    let startPos = value.length\n\n    if (value.endsWith(afterTxt)) {\n      startPos = value.length - afterTxt.length\n    } else if (value.startsWith(beforeTxt)) {\n      startPos = beforeTxt.length\n    } else {\n      const beforeLastChar = beforeTxt[selectionStart - 1]\n      const newIndex = value.indexOf(beforeLastChar, selectionStart - 1)\n      if (newIndex !== -1) {\n        startPos = newIndex + 1\n      }\n    }\n\n    input.value.setSelectionRange(startPos, startPos)\n  }\n\n  return [recordCursor, setCursor]\n}\n"],"names":[],"mappings":";;AAKO,SAAS,UACd,KAC0B,EAAA;AAC1B,EAAA,MAAM,eAAe,GAMlB,EAAA,CAAA;AAEH,EAAA,SAAS,YAAe,GAAA;AACtB,IAAA,IAAI,MAAM,KAAS,IAAA,KAAA,CAAA;AAAW,MAAA,OAAA;AAE9B,IAAA,MAAM,EAAE,cAAA,EAAgB,YAAc,EAAA,KAAA,KAAU,KAAM,CAAA,KAAA,CAAA;AAEtD,IAAI,IAAA,cAAA,IAAkB,QAAQ,YAAgB,IAAA,IAAA;AAAM,MAAA,OAAA;AAEpD,IAAM,MAAA,SAAA,GAAY,MAAM,KAAM,CAAA,CAAA,EAAG,KAAK,GAAI,CAAA,CAAA,EAAG,cAAc,CAAC,CAAA,CAAA;AAC5D,IAAA,MAAM,WAAW,KAAM,CAAA,KAAA,CAAM,KAAK,GAAI,CAAA,CAAA,EAAG,YAAY,CAAC,CAAA,CAAA;AAEtD,IAAA,YAAA,CAAa,KAAQ,GAAA;AAAA,MACnB,cAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAA,SAAS,SAAY,GAAA;AACnB,IAAA,IAAI,KAAM,CAAA,KAAA,IAAS,KAAa,CAAA,IAAA,YAAA,CAAa,KAAS,IAAA,KAAA,CAAA;AAAW,MAAA,OAAA;AAEjE,IAAM,MAAA,EAAE,KAAM,EAAA,GAAI,KAAM,CAAA,KAAA,CAAA;AACxB,IAAA,MAAM,EAAE,SAAA,EAAW,QAAU,EAAA,cAAA,KAAmB,YAAa,CAAA,KAAA,CAAA;AAE7D,IAAA,IACE,SAAa,IAAA,KAAA,CAAA,IACb,QAAY,IAAA,KAAA,CAAA,IACZ,cAAkB,IAAA,KAAA,CAAA;AAElB,MAAA,OAAA;AAEF,IAAA,IAAI,WAAW,KAAM,CAAA,MAAA,CAAA;AAErB,IAAI,IAAA,KAAA,CAAM,QAAS,CAAA,QAAQ,CAAG,EAAA;AAC5B,MAAW,QAAA,GAAA,KAAA,CAAM,SAAS,QAAS,CAAA,MAAA,CAAA;AAAA,KAC1B,MAAA,IAAA,KAAA,CAAM,UAAW,CAAA,SAAS,CAAG,EAAA;AACtC,MAAA,QAAA,GAAW,SAAU,CAAA,MAAA,CAAA;AAAA,KAChB,MAAA;AACL,MAAM,MAAA,cAAA,GAAiB,UAAU,cAAiB,GAAA,CAAA,CAAA,CAAA;AAClD,MAAA,MAAM,QAAW,GAAA,KAAA,CAAM,OAAQ,CAAA,cAAA,EAAgB,iBAAiB,CAAC,CAAA,CAAA;AACjE,MAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACnB,QAAA,QAAA,GAAW,QAAW,GAAA,CAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAEA,IAAM,KAAA,CAAA,KAAA,CAAM,iBAAkB,CAAA,QAAA,EAAU,QAAQ,CAAA,CAAA;AAAA,GAClD;AAEA,EAAO,OAAA,CAAC,cAAc,SAAS,CAAA,CAAA;AACjC;;;;"}