image.png

  const handleCompositionEnd = (block: CRDTBlock, e: React.CompositionEvent<HTMLDivElement>) => {
    const event = e.nativeEvent as CompositionEvent;
    const characters = [...event.data]; 
    const selection = window.getSelection();
    const caretPosition = selection?.focusOffset || 0;
    const startPosition = caretPosition - characters.length;

    characters.forEach((char, index) => {
      const insertPosition = startPosition + index;
      const charNode = block.crdt.localInsert(insertPosition, char, block.id, pageId);

      sendCharInsertOperation({
        node: charNode.node,
        blockId: block.id,
        pageId,
      });
    });

    block.crdt.currentCaret = caretPosition;
  };