{"success":true,"data":{"schema":{"$schema":"http://json-schema.org/draft-07/schema#","title":"Json2doc Section Schema","description":"JSON schema for section configuration (extracted from document schema)","oneOf":[{"type":"object","required":["type","content"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"page"},"align":{"type":"string","enum":["top","center","bottom"],"default":"top","description":"Vertical alignment of page content"},"startY":{"type":"number","minimum":0,"maximum":50,"description":"Y position in cm (overrides align)"},"content":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/definitions/element"},"description":"Page content elements"}},"description":"Styled single page with custom positioning"},{"type":"object","required":["type","content"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"flow"},"newPage":{"type":"boolean","default":true,"description":"Start this section on a new page (default: true)"},"content":{"type":"array","minItems":1,"maxItems":200,"items":{"$ref":"#/definitions/element"},"description":"Flow content elements"}},"description":"Flowing content across multiple pages"}],"definitions":{"element":{"oneOf":[{"type":"object","required":["type","text"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["h1","h2","h3","h4","h5","h6","text","text2"],"description":"Text element type"},"text":{"type":"string","minLength":1,"maxLength":5000,"description":"Text with markdown: **bold**, *italic*, [link](url)"},"fontFamily":{"type":"string","minLength":1,"maxLength":100,"description":"Font family for this specific element"},"fontSize":{"type":"number","minimum":6,"maximum":72,"description":"Font size in points"},"fontWeight":{"type":"string","enum":["normal","bold"],"description":"Font weight"},"align":{"type":"string","enum":["left","center","right","justify"],"description":"Text alignment"},"color":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Text color in hex format"},"spacing":{"$ref":"#/definitions/spacingOverride"}}},{"type":"object","required":["type","latex"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"math","description":"Math element type (block-level LaTeX formula)"},"latex":{"type":"string","minLength":1,"maxLength":5000,"description":"LaTeX formula string (e.g. E = mc^2)"},"align":{"type":"string","enum":["left","center","right"],"description":"Horizontal alignment of the math block"},"spacing":{"$ref":"#/definitions/spacingOverride"}}},{"type":"object","required":["type","src"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"image","description":"Image element type"},"src":{"type":"string","minLength":1,"maxLength":500,"oneOf":[{"pattern":"^/image/.*","description":"Storage image path (must start with /image/)"},{"pattern":"^https?://.*","description":"Public HTTP/HTTPS URL"}],"description":"Image file path (storage URL starting with /image/ or public HTTP/HTTPS URL)"},"alt":{"type":"string","maxLength":200,"description":"Alternative text for accessibility"},"width":{"type":"number","minimum":10,"maximum":2000,"description":"Image width in pixels"},"height":{"type":"number","minimum":10,"maximum":2000,"description":"Image height in pixels"},"align":{"type":"string","enum":["left","center","right"],"description":"Image alignment"},"spacing":{"$ref":"#/definitions/spacingOverride"}}},{"type":"object","required":["type","rows"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"table","description":"Table element type"},"headers":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":200},"description":"Table headers"},"rows":{"type":"array","maxItems":100,"items":{"type":"array","maxItems":20,"items":{"type":"string","minLength":0,"maxLength":1000}},"description":"Table data rows"},"caption":{"type":"string","maxLength":500,"description":"Table caption"},"spacing":{"$ref":"#/definitions/spacingOverride"},"style":{"type":"object","additionalProperties":false,"properties":{"borders":{"type":"object","additionalProperties":false,"properties":{"outer":{"type":"object","additionalProperties":false,"properties":{"width":{"type":"number","minimum":0,"maximum":10,"description":"Border width in pt"},"color":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Border color in hex"},"style":{"type":"string","enum":["solid","dashed","dotted"],"default":"solid","description":"Border style"}}},"inner":{"type":"object","additionalProperties":false,"properties":{"width":{"type":"number","minimum":0,"maximum":10,"description":"Border width in pt"},"color":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Border color in hex"},"style":{"type":"string","enum":["solid","dashed","dotted"],"default":"solid","description":"Border style"}}}}},"header":{"type":"object","additionalProperties":false,"properties":{"backgroundColor":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Header background color in hex"},"color":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Header text color in hex"},"fontSize":{"type":"number","minimum":6,"maximum":72,"description":"Header font size in pt"},"fontWeight":{"type":"string","enum":["normal","bold"],"default":"bold","description":"Header font weight"},"fontStyle":{"type":"string","enum":["normal","italic"],"default":"normal","description":"Header font style"},"align":{"type":"string","enum":["left","center","right"],"default":"center","description":"Header text alignment"}}},"rows":{"type":"object","additionalProperties":false,"properties":{"backgroundColor":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Row background color in hex"},"color":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Row text color in hex"},"fontSize":{"type":"number","minimum":6,"maximum":72,"description":"Row font size in pt"},"fontWeight":{"type":"string","enum":["normal","bold"],"default":"normal","description":"Row font weight"},"fontStyle":{"type":"string","enum":["normal","italic"],"default":"normal","description":"Row font style"},"align":{"type":"string","enum":["left","center","right"],"default":"left","description":"Row text alignment"},"alternateBackgroundColor":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Alternate row background color for striped tables"}}},"cellPadding":{"type":"object","additionalProperties":false,"properties":{"top":{"type":"number","minimum":0,"maximum":50,"default":8,"description":"Cell padding top in pt"},"right":{"type":"number","minimum":0,"maximum":50,"default":8,"description":"Cell padding right in pt"},"bottom":{"type":"number","minimum":0,"maximum":50,"default":8,"description":"Cell padding bottom in pt"},"left":{"type":"number","minimum":0,"maximum":50,"default":8,"description":"Cell padding left in pt"}}}}}}},{"type":"object","required":["type","items"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"list","description":"List element type"},"ordered":{"type":"boolean","default":false,"description":"true = ordered (1,2,3), false = unordered (bullets)"},"items":{"type":"array","minItems":1,"maxItems":50,"items":{"$ref":"#/definitions/listItem"},"description":"List items"},"spacing":{"$ref":"#/definitions/spacingOverride"}}},{"type":"object","required":["type","qrType","data"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"qrcode","description":"QR code element type"},"qrType":{"type":"string","enum":["url","wifi","vcard"],"description":"Type of QR code: url (link), wifi (WiFi credentials), vcard (contact card)"},"data":{"type":"object","description":"QR code data (structure depends on qrType)"},"size":{"type":"number","minimum":50,"maximum":1000,"default":200,"description":"QR code size in pixels (width and height, always 1:1 ratio)"},"errorCorrection":{"type":"string","enum":["L","M","Q","H"],"default":"M","description":"Error correction level: L (~7%), M (~15%), Q (~25%), H (~30%)"},"align":{"type":"string","enum":["left","center","right"],"default":"left","description":"QR code alignment"},"spacing":{"$ref":"#/definitions/spacingOverride"}},"allOf":[{"if":{"properties":{"qrType":{"const":"url"}}},"then":{"properties":{"data":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","minLength":1,"maxLength":2000,"description":"URL to encode in QR code"}}}}}},{"if":{"properties":{"qrType":{"const":"wifi"}}},"then":{"properties":{"data":{"type":"object","required":["ssid"],"additionalProperties":false,"properties":{"ssid":{"type":"string","minLength":1,"maxLength":32,"description":"WiFi network name (SSID)"},"password":{"type":"string","maxLength":63,"description":"WiFi password (optional for open networks)"},"encryption":{"type":"string","enum":["WPA","WEP","nopass"],"default":"WPA","description":"WiFi encryption type"},"hidden":{"type":"boolean","default":false,"description":"Whether the network is hidden"}}}}}},{"if":{"properties":{"qrType":{"const":"vcard"}}},"then":{"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"firstName":{"type":"string","maxLength":100,"description":"First name"},"lastName":{"type":"string","maxLength":100,"description":"Last name"},"organization":{"type":"string","maxLength":100,"description":"Organization/Company name"},"phone":{"type":"string","maxLength":50,"description":"Phone number"},"email":{"type":"string","format":"email","maxLength":100,"description":"Email address"},"url":{"type":"string","maxLength":200,"description":"Website URL"},"address":{"type":"string","maxLength":200,"description":"Physical address"},"note":{"type":"string","maxLength":500,"description":"Additional notes"}}}}}}]},{"type":"object","required":["type","config"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"chart","description":"Chart element type (rendered via internal Chart API)"},"config":{"$ref":"#/definitions/chartConfig"},"width":{"type":"number","minimum":10,"maximum":2000,"description":"Rendered chart image width in pixels"},"height":{"type":"number","minimum":10,"maximum":2000,"description":"Rendered chart image height in pixels"},"align":{"type":"string","enum":["left","center","right"],"description":"Chart alignment"},"spacing":{"$ref":"#/definitions/spacingOverride"}}},{"type":"object","required":["type","code"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"code","description":"Code block element (optionally rendered via internal render API as image)"},"code":{"type":"string","minLength":1,"maxLength":20000,"description":"Code content to render or display"},"language":{"type":"string","maxLength":50,"description":"Programming language key for syntax highlighting (highlight.js language id)"},"renderAsImage":{"type":"boolean","default":false,"description":"If true, the code block will be rendered as an image via the internal render API"},"backgroundColor":{"type":"string","pattern":"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","description":"Background color for rendered code image in hex format"},"width":{"type":"number","minimum":10,"maximum":2000,"description":"Rendered code image width in pixels (when renderAsImage=true)"},"align":{"type":"string","enum":["left","center","right"],"description":"Code block alignment (for rendered images)"},"spacing":{"$ref":"#/definitions/spacingOverride"}}},{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"type":"string","const":"pageBreak","description":"Page break element type"},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation after break"}}}]},"spacingOverride":{"type":"object","additionalProperties":false,"properties":{"before":{"type":"number","minimum":0,"maximum":100,"description":"Spacing before element in pt"},"after":{"type":"number","minimum":0,"maximum":100,"description":"Spacing after element in pt"}}},"listItem":{"oneOf":[{"type":"string","minLength":1,"maxLength":1000,"description":"Simple text item (supports markdown)"},{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":1000,"description":"Item text (supports markdown)"},"items":{"type":"array","maxItems":20,"items":{"$ref":"#/definitions/listItem"},"description":"Nested list items"}}}]},"chartConfig":{"type":"object","additionalProperties":false,"required":["type","data"],"properties":{"type":{"type":"string","enum":["line","bar","pie","doughnut","radar","polarArea","scatter","bubble"],"description":"Chart.js chart type"},"width":{"type":"number","minimum":50,"maximum":4000},"height":{"type":"number","minimum":50,"maximum":4000},"backgroundColor":{"type":"string","description":"Canvas background color (CSS color string)"},"data":{"type":"object","required":["datasets"],"additionalProperties":false,"properties":{"labels":{"type":"array","items":{"type":["string","number"]}},"datasets":{"type":"array","minItems":1,"items":{"$ref":"#/definitions/chartConfig/definitions/dataset"}}}},"options":{"type":"object","description":"Chart.js options object","additionalProperties":true}},"definitions":{"point":{"type":"object","required":["x","y"],"additionalProperties":false,"properties":{"x":{"type":["number","string"]},"y":{"type":["number","string"]},"r":{"type":"number"}}},"dataset":{"type":"object","required":["data"],"additionalProperties":true,"properties":{"label":{"type":"string"},"data":{"type":"array","items":{"oneOf":[{"type":["number","string"]},{"$ref":"#/definitions/chartConfig/definitions/point"}]}}}}}}}},"description":"JSON schema for section configuration (flow or page sections)","version":"1.0","type":"json"},"message":"Section schema retrieved successfully"}