You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 lines
4.9 KiB

{"ast":null,"code":"function useCursor(input) {\n let selectionInfo;\n function recordCursor() {\n if (input.value == void 0) return;\n const {\n selectionStart,\n selectionEnd,\n value\n } = input.value;\n if (selectionStart == null || selectionEnd == null) return;\n const beforeTxt = value.slice(0, Math.max(0, selectionStart));\n const afterTxt = value.slice(Math.max(0, selectionEnd));\n selectionInfo = {\n selectionStart,\n selectionEnd,\n value,\n beforeTxt,\n afterTxt\n };\n }\n function setCursor() {\n if (input.value == void 0 || selectionInfo == void 0) return;\n const {\n value\n } = input.value;\n const {\n beforeTxt,\n afterTxt,\n selectionStart\n } = selectionInfo;\n if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) return;\n let startPos = value.length;\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 input.value.setSelectionRange(startPos, startPos);\n }\n return [recordCursor, setCursor];\n}\nexport { useCursor };","map":{"version":3,"names":["useCursor","input","selectionInfo","recordCursor","value","selectionStart","selectionEnd","beforeTxt","slice","Math","max","afterTxt","setCursor","startPos","length","endsWith","startsWith","beforeLastChar","newIndex","indexOf","setSelectionRange"],"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"],"mappings":"AAAO,SAASA,SAASA,CAACC,KAAK,EAAE;EAC/B,IAAIC,aAAa;EACjB,SAASC,YAAYA,CAAA,EAAG;IACtB,IAAIF,KAAK,CAACG,KAAK,IAAI,KAAK,CAAC,EACvB;IACF,MAAM;MAAEC,cAAc;MAAEC,YAAY;MAAEF;IAAK,CAAE,GAAGH,KAAK,CAACG,KAAK;IAC3D,IAAIC,cAAc,IAAI,IAAI,IAAIC,YAAY,IAAI,IAAI,EAChD;IACF,MAAMC,SAAS,GAAGH,KAAK,CAACI,KAAK,CAAC,CAAC,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEL,cAAc,CAAC,CAAC;IAC7D,MAAMM,QAAQ,GAAGP,KAAK,CAACI,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,YAAY,CAAC,CAAC;IACvDJ,aAAa,GAAG;MACdG,cAAc;MACdC,YAAY;MACZF,KAAK;MACLG,SAAS;MACTI;IACN,CAAK;EACL;EACE,SAASC,SAASA,CAAA,EAAG;IACnB,IAAIX,KAAK,CAACG,KAAK,IAAI,KAAK,CAAC,IAAIF,aAAa,IAAI,KAAK,CAAC,EAClD;IACF,MAAM;MAAEE;IAAK,CAAE,GAAGH,KAAK,CAACG,KAAK;IAC7B,MAAM;MAAEG,SAAS;MAAEI,QAAQ;MAAEN;IAAc,CAAE,GAAGH,aAAa;IAC7D,IAAIK,SAAS,IAAI,KAAK,CAAC,IAAII,QAAQ,IAAI,KAAK,CAAC,IAAIN,cAAc,IAAI,KAAK,CAAC,EACvE;IACF,IAAIQ,QAAQ,GAAGT,KAAK,CAACU,MAAM;IAC3B,IAAIV,KAAK,CAACW,QAAQ,CAACJ,QAAQ,CAAC,EAAE;MAC5BE,QAAQ,GAAGT,KAAK,CAACU,MAAM,GAAGH,QAAQ,CAACG,MAAM;IAC/C,CAAK,MAAM,IAAIV,KAAK,CAACY,UAAU,CAACT,SAAS,CAAC,EAAE;MACtCM,QAAQ,GAAGN,SAAS,CAACO,MAAM;IACjC,CAAK,MAAM;MACL,MAAMG,cAAc,GAAGV,SAAS,CAACF,cAAc,GAAG,CAAC,CAAC;MACpD,MAAMa,QAAQ,GAAGd,KAAK,CAACe,OAAO,CAACF,cAAc,EAAEZ,cAAc,GAAG,CAAC,CAAC;MAClE,IAAIa,QAAQ,KAAK,CAAC,CAAC,EAAE;QACnBL,QAAQ,GAAGK,QAAQ,GAAG,CAAC;MAC/B;IACA;IACIjB,KAAK,CAACG,KAAK,CAACgB,iBAAiB,CAACP,QAAQ,EAAEA,QAAQ,CAAC;EACrD;EACE,OAAO,CAACV,YAAY,EAAES,SAAS,CAAC;AAClC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}