# Editor.Section > One section on the canvas - image, text, shape, drawing, or frame. Handles drag, resize, image upload, and the hover/selected toolbar. Source: https://docs.docmosaic.com/docs/primitives/section `Editor.Section` is the unit of content. Mount it once inside `Editor.Canvas`; the editor iterates every `Section` on the active page and renders one per entry. ## Usage ```tsx ``` That single mount renders every section on the current page. The component reads from context - no `sectionId` prop, no manual iteration. ## What it does Per section, `Editor.Section` wires up: - **Drag** - pointer down + move. Dispatches `UPDATE_SECTION` with new `(x, y)`. - **Resize** - three handles (right, bottom, bottom-right). Dispatches incremental `UPDATE_SECTION` calls. - **Image upload** - drop a file or click the empty state. The reader produces a data URL, which becomes `section.imageUrl`. - **Selection** - click to select; click the canvas background to deselect. - **Floating toolbar** - fit, duplicate, delete, layer-order buttons appear on hover and stay visible while selected. - **Snap** - drag respects the snap engine (page margins, section edges, page guides). All gestures are suppressed in `readOnly` mode. ## Examples ### Custom renderer per section type The default `Editor.Section` ships with image / text / shape / drawing / frame renderers (an image with a `maskShape` renders as a shaped placeholder slot, and a `frame` draws behind its children). If you need a custom variant, render your own component inside the canvas and skip `Editor.Section`: ```tsx {sections.map((s) => s.type === 'custom' ? ( ) : ( ), )} ``` This is rarely needed - most extensions are better expressed as a new section type with an `ImageRenderer` override (see [custom image renderer](/docs/recipes/custom-image-renderer)). ## API Reference ## Related - [Canvas](/docs/primitives/canvas) - the parent surface - [SelectionBounds](/docs/primitives/selection-bounds) - multi-select rectangle - [Layers](/docs/concepts/layers) - z-index actions