UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 3.28 kB
{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-cursor/index.ts"],"sourcesContent":["import type { ShallowRef } from 'vue'\n\ninterface SelectionInfo {\n selectionStart?: number\n selectionEnd?: number\n value?: string\n beforeTxt?: string\n afterTxt?: string\n}\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 let selectionInfo: SelectionInfo\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 selectionInfo = {\n selectionStart,\n selectionEnd,\n value,\n beforeTxt,\n afterTxt,\n }\n }\n function setCursor() {\n if (input.value == undefined || selectionInfo == undefined) return\n\n const { value } = input.value\n const { beforeTxt, afterTxt, selectionStart } = selectionInfo\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":"AAWO,SAAS,UACd,KAAA,EAC0B;AAC1B,EAAA,IAAI,aAAA;AACJ,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAW;AAE9B,IAAA,MAAM,EAAE,cAAA,EAAgB,YAAA,EAAc,KAAA,KAAU,KAAA,CAAM,KAAA;AAEtD,IAAA,IAAI,cAAA,IAAkB,IAAA,IAAQ,YAAA,IAAgB,IAAA,EAAM;AAEpD,IAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAC,CAAA;AAC5D,IAAA,MAAM,WAAW,KAAA,CAAM,KAAA,CAAM,KAAK,GAAA,CAAI,CAAA,EAAG,YAAY,CAAC,CAAA;AAEtD,IAAA,aAAA,GAAgB;AAAA,MACd,cAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,SAAS,SAAA,GAAY;AACnB,IAAA,IAAI,KAAA,CAAM,KAAA,IAAS,MAAA,IAAa,aAAA,IAAiB,MAAA,EAAW;AAE5D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,KAAA,CAAM,KAAA;AACxB,IAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAU,cAAA,EAAe,GAAI,aAAA;AAEhD,IAAA,IACE,SAAA,IAAa,MAAA,IACb,QAAA,IAAY,MAAA,IACZ,cAAA,IAAkB,MAAA;AAElB,MAAA;AAEF,IAAA,IAAI,WAAW,KAAA,CAAM,MAAA;AAErB,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC5B,MAAA,QAAA,GAAW,KAAA,CAAM,SAAS,QAAA,CAAS,MAAA;AAAA,IACrC,CAAA,MAAA,IAAW,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,EAAG;AACtC,MAAA,QAAA,GAAW,SAAA,CAAU,MAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,cAAA,GAAiB,CAAC,CAAA;AACnD,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,cAAA,EAAgB,iBAAiB,CAAC,CAAA;AACjE,MAAA,IAAI,aAAa,EAAA,EAAI;AACnB,QAAA,QAAA,GAAW,QAAA,GAAW,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,KAAA,CAAM,iBAAA,CAAkB,QAAA,EAAU,QAAQ,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,CAAC,cAAc,SAAS,CAAA;AACjC;;;;"}