41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { ref, nextTick } from 'vue';
 | |
| import { isKorean } from '../../utils/i18n.mjs';
 | |
| 
 | |
| function useComposition({
 | |
|   afterComposition,
 | |
|   emit
 | |
| }) {
 | |
|   const isComposing = ref(false);
 | |
|   const handleCompositionStart = (event) => {
 | |
|     emit == null ? void 0 : emit("compositionstart", event);
 | |
|     isComposing.value = true;
 | |
|   };
 | |
|   const handleCompositionUpdate = (event) => {
 | |
|     var _a;
 | |
|     emit == null ? void 0 : emit("compositionupdate", event);
 | |
|     const text = (_a = event.target) == null ? void 0 : _a.value;
 | |
|     const lastCharacter = text[text.length - 1] || "";
 | |
|     isComposing.value = !isKorean(lastCharacter);
 | |
|   };
 | |
|   const handleCompositionEnd = (event) => {
 | |
|     emit == null ? void 0 : emit("compositionend", event);
 | |
|     if (isComposing.value) {
 | |
|       isComposing.value = false;
 | |
|       nextTick(() => afterComposition(event));
 | |
|     }
 | |
|   };
 | |
|   const handleComposition = (event) => {
 | |
|     event.type === "compositionend" ? handleCompositionEnd(event) : handleCompositionUpdate(event);
 | |
|   };
 | |
|   return {
 | |
|     isComposing,
 | |
|     handleComposition,
 | |
|     handleCompositionStart,
 | |
|     handleCompositionUpdate,
 | |
|     handleCompositionEnd
 | |
|   };
 | |
| }
 | |
| 
 | |
| export { useComposition };
 | |
| //# sourceMappingURL=index.mjs.map
 |