# Mobile & touch support
> How the editor adapts to phones and tablets - the responsive shell and touch interactions.
Source: https://docs.docmosaic.com/docs/examples/mobile
`@docmosaic/react` 2.0 ships a **responsive, touch-first** editor. Below the desktop breakpoint (1024px), `Editor.Root` automatically swaps its three-pane app-shell for a phone/tablet layout - no configuration needed. The same component is the full editor on desktop and a touch editor on mobile, and the PDF output is identical on every device.
## The responsive shell
Below 1024px the editor renders:
- A **compact top bar** - document name, undo / redo, download, and theme toggle. Page size, orientation, preview, and print move into a slide-up **"Doc"** sheet.
- A **full-bleed canvas** that fills the viewport.
- A horizontally-scrollable **tool strip** (select, image, text, shape, frame, image-frame, draw).
- **Pages / Layers / Edit / Doc** panels surfaced as slide-up bottom sheets instead of side rails.
The desktop three-pane layout (left rail · canvas · inspector) is unchanged at 1024px and up.
## Touch interactions
| Surface | Touch behavior |
| -------------------------------------- | ------------------------------------------------------------------------ |
| Canvas pan / zoom | Two-finger pan and pinch-to-zoom. |
| Section drag | Drag a selected section with one finger. |
| Section resize / image crop | Finger-sized hit targets (28px) over the 12px visual handles. |
| Layer + page reorder | Drag via react-dnd's `MultiBackend` (HTML5 on desktop, touch on mobile). |
| Floating section toolbar | Appears on tap-select and clamps horizontally to stay on-screen. |
| Add image / preview / download / print | Fire from touch; the PDF generator is the same code path as desktop. |
Every touch path is gated on multi-pointer / `isPrimary`, so the desktop mouse experience is unchanged.
## Usage
There is nothing to configure - the default editor is responsive:
```tsx
'use client';
import { Editor } from '@docmosaic/react';
import '@docmosaic/react/styles.css';
export default function MyEditor() {
return ;
}
```
`Editor.Root` reads the viewport internally and renders the desktop or mobile shell accordingly. Resize the window across 1024px to watch it switch.
## View-only on small screens (optional)
If your product only wants **viewing** on phones (no editing), pass `readOnly` below a breakpoint. Selection, zoom, preview, print, and download still work from touch; the tool strip and editing affordances hide.
```tsx
'use client';
import { Editor } from '@docmosaic/react';
import { type Document } from '@docmosaic/core';
import '@docmosaic/react/styles.css';
export default function ResponsiveEditor({
document,
isMobile,
}: {
document: Document;
isMobile: boolean;
}) {
return ;
}
```
`isMobile` would come from a media-query hook (or `useSyncExternalStore` against `matchMedia`).
## Related
- [Editor.Root](/docs/primitives/root) - the responsive shell and the `readOnly` prop
- [Read-only viewer](/docs/examples/read-only) - the view-only pattern