noteloom
← Back to blogMobile React editor UX: touch-first editing in noteloom

13 July 2026

Noteloom on mobile: a touch-first editing experience

Typing "/" for the block menu works on a phone keyboard, technically. In practice, autocorrect fights it, the key is awkward to reach, and there's nothing on screen suggesting it exists. So on a touch device, noteloom swaps in a different primary interface entirely.

One component, mounted next to your other hooks

MobileActionBar renders nothing on a mouse/trackpad and nothing until focus is inside the editor. Once it's visible, it sits pinned above the on-screen keyboard and its contents change based on exactly where your cursor or selection is.

Context-aware, not one fixed toolbar

The same bar becomes a different tool depending on what you tapped into:

ContextThe bar shows
Caret/selection in any blockDuplicate / Move up / Move down / Hide / Delete
Text selectedBold / italic / underline / link
Caret in a table cell or code blockInsert row/column, or a language picker

The desktop block gutter — the hover-revealed "+" and drag handle down the left margin — is hidden entirely on touch. There's no hover state to reveal it by, and its position sits in page margin that doesn't exist on a narrow screen, so both of its jobs move into this bar instead.


Telling a touchscreen laptop from a real mouse

A static matchMedia('(pointer: coarse)') check is the obvious first instinct, and the wrong one: it reports a device's primary pointer, a fixed hardware classification. A touchscreen laptop — a 2-in-1, plenty of ordinary Windows machines — has a trackpad as "primary" even though the touchscreen sitting right there can be tapped at any moment.

So the media query only supplies an initial, pre-interaction guess. Every real pointerdown afterward overrides it with that event's own pointerType — live, no reload. The same laptop shows desktop UI while you're using the trackpad and mobile UI the instant you tap the screen.

📱

This same signal is mirrored onto <html class="be-touch-input">, so plain CSS reacts to it too — not just the React component.

What's still desktop-only

Dragging in the block gutter to select a range of blocks stays a mouse gesture — Notion, TipTap, and Editor.js all make the same call, and a touch equivalent (long-press-and-drag conflicts with scrolling) is a harder problem than it looks.

Open the demo above on your phone to feel the difference, or read the full guide for the exact hook APIs.

Read the Mobile & voice typing guide
noteloom.qusere.in/playground

A real, live noteloom instance embedded inside the article. Want the full thing? Open the Playground.