diff --git a/packages/client/composables/useIME.ts b/packages/client/composables/useIME.ts new file mode 100644 index 0000000000..52f60822aa --- /dev/null +++ b/packages/client/composables/useIME.ts @@ -0,0 +1,30 @@ +import type { ModelRef } from 'vue' +import { ref, watch } from 'vue' + +export function useIME(content: ModelRef) { + const composingContent = ref(content.value) + watch(content, (v) => { + if (v !== composingContent.value) { + composingContent.value = v + } + }) + + function onInput(e: Event) { + if (!(e instanceof InputEvent) || !(e.target instanceof HTMLTextAreaElement)) { + return + } + + if (e.isComposing) { + composingContent.value = e.target.value + } + else { + content.value = e.target.value + } + } + + function onCompositionEnd() { + content.value = composingContent.value + } + + return { composingContent, onInput, onCompositionEnd } +} diff --git a/packages/client/internals/ShikiEditor.vue b/packages/client/internals/ShikiEditor.vue index 75734508f6..ffbc946e0c 100644 --- a/packages/client/internals/ShikiEditor.vue +++ b/packages/client/internals/ShikiEditor.vue @@ -1,11 +1,13 @@