Context
First render adapter over the headless core (~700 LOC of JSX in v1 — the replaceable
part). The bootstrap's <AnnotatorCanvas> placeholder becomes real.
Deliverables
<AnnotatorCanvas>: asset image + SVG annotation layer + transient interaction layer;
props: asset (url/bitmap + dimensions), schema, initial annotations, event callbacks
(annotations changed, selection changed).
- Zoom (wheel, pinch) + pan with screen↔image transform owned by the adapter; renders
subscribe to store slices so drags repaint only the transient layer.
- No HTTP, no routing, no fetching — everything by props/callbacks (embeddable contract).
Acceptance criteria
Context
First render adapter over the headless core (~700 LOC of JSX in v1 — the replaceable
part). The bootstrap's
<AnnotatorCanvas>placeholder becomes real.Deliverables
<AnnotatorCanvas>: asset image + SVG annotation layer + transient interaction layer;props: asset (url/bitmap + dimensions), schema, initial annotations, event callbacks
(annotations changed, selection changed).
subscribe to store slices so drags repaint only the transient layer.
Acceptance criteria
frontend/app(dev route) drives the full tool set on a sample image