Initial commit with Phase 0 Scaffolding
This commit is contained in:
parent
b393607602
commit
c545d4b17d
51 changed files with 7064 additions and 4 deletions
112
shared/annotation-schema.json
Normal file
112
shared/annotation-schema.json
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "PaperJet Annotation Schema",
|
||||
"definitions": {
|
||||
"Rect": {
|
||||
"type": "object",
|
||||
"description": "Bounding rectangle in canonical PDF-point space (top-left origin).",
|
||||
"properties": {
|
||||
"x": { "type": "number", "description": "X position in PDF points from the left edge of the page CropBox" },
|
||||
"y": { "type": "number", "description": "Y position in PDF points from the top edge of the page CropBox" },
|
||||
"width": { "type": "number", "minimum": 0 },
|
||||
"height": { "type": "number", "minimum": 0 }
|
||||
},
|
||||
"required": ["x", "y", "width", "height"]
|
||||
},
|
||||
"AnnotationBase": {
|
||||
"type": "object",
|
||||
"description": "Common envelope for all annotation types.",
|
||||
"properties": {
|
||||
"id": { "type": "string", "format": "uuid" },
|
||||
"page": { "type": "integer", "minimum": 0, "description": "0-indexed page number" },
|
||||
"type": { "type": "string", "description": "Discriminator — drives the tool/handler registries" },
|
||||
"rect": { "$ref": "#/definitions/Rect" },
|
||||
"rotation": { "type": "number", "default": 0, "description": "Degrees clockwise about rect center" },
|
||||
"z": { "type": "integer", "default": 0, "description": "Z-order within the page" },
|
||||
"props": { "type": "object", "description": "Type-specific properties, opaque to the server" },
|
||||
"createdAt": { "type": "string", "format": "date-time" },
|
||||
"updatedAt": { "type": "string", "format": "date-time" }
|
||||
},
|
||||
"required": ["id", "page", "type", "rect", "props", "createdAt", "updatedAt"]
|
||||
},
|
||||
"TextProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": { "type": "string" },
|
||||
"fontFamily": { "type": "string", "default": "Liberation Sans" },
|
||||
"fontSize": { "type": "number", "default": 14 },
|
||||
"color": { "type": "string", "default": "#000000" },
|
||||
"align": { "type": "string", "enum": ["left", "center", "right"], "default": "left" },
|
||||
"bold": { "type": "boolean", "default": false },
|
||||
"italic": { "type": "boolean", "default": false },
|
||||
"lineHeight": { "type": "number", "default": 1.2 }
|
||||
},
|
||||
"required": ["text"]
|
||||
},
|
||||
"DrawProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"paths": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": { "type": "number" },
|
||||
"minItems": 2,
|
||||
"maxItems": 2
|
||||
},
|
||||
"description": "Array of [x, y] points in rect-local space"
|
||||
},
|
||||
"strokeColor": { "type": "string", "default": "#000000" },
|
||||
"strokeWidth": { "type": "number", "default": 2 },
|
||||
"opacity": { "type": "number", "minimum": 0, "maximum": 1, "default": 1 }
|
||||
},
|
||||
"required": ["paths"]
|
||||
},
|
||||
"SignatureDrawProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"mode": { "type": "string", "const": "draw" },
|
||||
"ref": { "type": "string", "description": "Asset reference for the rasterized signature" },
|
||||
"strokeColor": { "type": "string", "default": "#000000" }
|
||||
},
|
||||
"required": ["mode", "ref"]
|
||||
},
|
||||
"SignatureTypeProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"mode": { "type": "string", "const": "type" },
|
||||
"text": { "type": "string" },
|
||||
"fontFamily": { "type": "string" },
|
||||
"color": { "type": "string", "default": "#000000" }
|
||||
},
|
||||
"required": ["mode", "text", "fontFamily"]
|
||||
},
|
||||
"ImageProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"ref": { "type": "string", "description": "Asset reference for the uploaded image" },
|
||||
"naturalWidth": { "type": "number" },
|
||||
"naturalHeight": { "type": "number" }
|
||||
},
|
||||
"required": ["ref", "naturalWidth", "naturalHeight"]
|
||||
},
|
||||
"HighlightProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"color": { "type": "string", "default": "#FFEB3B" },
|
||||
"opacity": { "type": "number", "minimum": 0, "maximum": 1, "default": 0.3 }
|
||||
}
|
||||
},
|
||||
"ShapeProps": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"kind": { "type": "string", "enum": ["rect", "ellipse", "line", "arrow"] },
|
||||
"strokeColor": { "type": "string", "default": "#000000" },
|
||||
"fillColor": { "type": "string", "default": "transparent" },
|
||||
"strokeWidth": { "type": "number", "default": 2 }
|
||||
},
|
||||
"required": ["kind"]
|
||||
}
|
||||
},
|
||||
"allOf": [{ "$ref": "#/definitions/AnnotationBase" }]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue