hunk.code_window:     offset = node.textContent.length
     }
     // COMPAT: If the parent node is a Slate zero-width space, this is because the
     // text node has no characters, so the offset can only be zero.
     if (offset != 0 && parentNode.getAttribute('data-slate-zero-width')) {
       offset = 0
     }
     // Get the string value of the offset key attribute.
     const offsetKey = rangeNode.getAttribute(OFFSET_KEY_ATTRIBUTE)
     if (!offsetKey) return null
  
hunk.labels: keep keep keep keep replace replace replace keep keep keep keep keep
hunk.after_edit:   // text node should have no characters. However, during IME composition the
     // ASCII characters will be prepended to the zero-width space, so subtract 1
     // from the offset to account for the zero-width space character.
     if (
       offset == node.textContent.length &&
       parentNode.hasAttribute('data-slate-zero-width')
     ) {
       offset--
  
hunk.file_path: packages/slate-react/src/utils/find-point.js
hunk.type: replace
file: 
  /** @jsx h */
  
  import React from 'react'
  import h from '../helpers/h'
  
  export const rules = [
    {
      serialize(obj, children) {
        if (obj.kind == 'block' && obj.type == 'paragraph') {
          return React.createElement('p', {}, children)
        }
  
        if (obj.kind == 'inline' && obj.type == 'emoji') {
          return React.createElement('img')
        }
      }
    }
  ]
  
  export const input = (
    <value>
      <document>
        <paragraph>
          <emoji />
        </paragraph>
      </document>
    </value>
  )
  
  export const output = `
  <p><img/></p>
  `.trim()
  