efe08f445f
## Changes 1. **Check beforeinput cancellation** - dispatchEvent returns false if canceled - Check defaultPrevented as well - Abort mutation if event was canceled by any listener 2. **Fix event order to match real user typing** - Before: beforeinput -> mutation -> input -> keydown -> keyup - After: keydown -> beforeinput -> mutation -> input -> keyup - This matches typical browser event sequence 3. **Fix blur event semantics** - blur doesn't bubble; focusout does - Call editableElement.blur() to actually change focus - Dispatch focusout with bubbles:true for listeners - Then refocus 4. **Keep single-character keyboard events** - Already fixed in previous commit - Maintained here with correct order All changes follow Copilot's suggested fixes.