Author user id (whoever drew it). Used for per-author colour fallback when we wire that up; also enables "clear my strokes".
Unique stroke id — survives across all viewers' Fabric instances.
Top-left position of the stroke's bounding box, intrinsic units.
SVG-style path data, coordinates in intrinsic PDF points. Format:
[ ['M', x, y], ['Q', cx, cy, x, y], ... ]
which is exactly what Fabric Path serialises into.
Stroke colour as a CSS-compatible string (hex / rgb / rgba).
Stroke width, intrinsic units.
A single annotation stroke serialised for storage / sync transmission.
Coordinates and dimensions are stored in intrinsic PDF points (the page's
getViewport({ scale: 1 })dimensions) rather than canvas pixels — so the same stroke renders at the same position regardless of each viewer's zoom level. Each viewer multiplies by its currentdisplayWidth / intrinsicWidthratio when drawing.Shape is intentionally narrow (a path with
left/top/strokeWidthand a list of points) rather than full Fabric JSON, so: