pub.leaflet.pages.canvas

leaflet.pub

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "block": {
      "properties": {
        "alignment": {
          "description": "Alignment of a single block's content. A linear document's blocks carry their own.",
          "knownValues": [
            "lex:pub.leaflet.pages.linearDocument#textAlignLeft",
            "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
            "lex:pub.leaflet.pages.linearDocument#textAlignRight",
            "lex:pub.leaflet.pages.linearDocument#textAlignJustify"
          ],
          "type": "string"
        },
        "block": {
          "description": "A single block, or a linear document: blocks grouped in reading order that are positioned, sized and rotated on the canvas as one.",
          "refs": [
            "pub.leaflet.blocks.iframe",
            "pub.leaflet.blocks.html",
            "pub.leaflet.blocks.text",
            "pub.leaflet.blocks.blockquote",
            "pub.leaflet.blocks.header",
            "pub.leaflet.blocks.image",
            "pub.leaflet.blocks.imageGallery",
            "pub.leaflet.blocks.unorderedList",
            "pub.leaflet.blocks.orderedList",
            "pub.leaflet.blocks.website",
            "pub.leaflet.blocks.math",
            "pub.leaflet.blocks.code",
            "pub.leaflet.blocks.horizontalRule",
            "pub.leaflet.blocks.bskyPost",
            "pub.leaflet.blocks.standardSitePost",
            "pub.leaflet.blocks.standardSitePublication",
            "pub.leaflet.blocks.page",
            "pub.leaflet.blocks.embeddedCanvas",
            "pub.leaflet.blocks.poll",
            "pub.leaflet.blocks.button",
            "pub.leaflet.blocks.postsList",
            "pub.leaflet.blocks.signup",
            "pub.leaflet.blocks.recommendedPubs",
            "pub.leaflet.blocks.membersOnlyDelimiter",
            "pub.leaflet.blocks.postHeader",
            "pub.leaflet.blocks.drawing",
            "pub.leaflet.pages.linearDocument"
          ],
          "type": "union"
        },
        "height": {
          "type": "integer"
        },
        "rotation": {
          "description": "The rotation of the block in degrees",
          "type": "integer"
        },
        "stackOrder": {
          "description": "Fractional index ordering this block against its siblings on the z axis. Blocks without one stack below every block with one, ordered by position.",
          "type": "string"
        },
        "width": {
          "type": "integer"
        },
        "x": {
          "type": "integer"
        },
        "y": {
          "type": "integer"
        }
      },
      "required": [
        "block",
        "x",
        "y",
        "width"
      ],
      "type": "object"
    },
    "main": {
      "properties": {
        "blocks": {
          "items": {
            "ref": "#block",
            "type": "ref"
          },
          "type": "array"
        },
        "height": {
          "description": "Fixed canvas height in canvas px; see width.",
          "type": "integer"
        },
        "id": {
          "type": "string"
        },
        "lockViewerZoom": {
          "description": "Viewers cannot zoom the canvas or scroll it sideways: no wheel, pinch, double-tap or zoom controls, and the initial framing (see mobileView) stays. Vertical scrolling is unaffected.",
          "type": "boolean"
        },
        "mobileView": {
          "description": "How a narrow viewport frames the canvas: the whole canvas scaled to fit the width (unconstrained, the default), or a phone-width area anchored to the canvas's left edge or centered on it, shown at up to 1:1.",
          "knownValues": [
            "unconstrained",
            "left",
            "center"
          ],
          "type": "string"
        },
        "width": {
          "description": "Fixed canvas width in canvas px. With height, bounds the canvas: blocks are clipped to the area. Absent, the canvas grows with its content and is 1272px wide, or as wide as the inside of the publication's page (its theme's pageWidth) when it is one of a publication's pages.",
          "type": "integer"
        }
      },
      "required": [
        "blocks"
      ],
      "type": "object"
    },
    "position": {
      "properties": {
        "block": {
          "items": {
            "type": "integer"
          },
          "type": "array"
        },
        "offset": {
          "type": "integer"
        }
      },
      "required": [
        "block",
        "offset"
      ],
      "type": "object"
    },
    "quote": {
      "properties": {
        "end": {
          "ref": "#position",
          "type": "ref"
        },
        "start": {
          "ref": "#position",
          "type": "ref"
        }
      },
      "required": [
        "start",
        "end"
      ],
      "type": "object"
    },
    "textAlignCenter": {
      "type": "token"
    },
    "textAlignLeft": {
      "type": "token"
    },
    "textAlignRight": {
      "type": "token"
    }
  },
  "id": "pub.leaflet.pages.canvas",
  "lexicon": 1
}

Validate Record

Validate a record against pub.leaflet.pages.canvas

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:btxrwcaeyodrap5mnjw2fvmz
CID
bafyreieujs5jjk6w65bwo7y53vl3kvoiqueqdwji43ddnu3tz26mo226aa
Indexed At
2026-09-29 05:17 UTC
AT-URI
at://did:plc:btxrwcaeyodrap5mnjw2fvmz/com.atproto.lexicon.schema/pub.leaflet.pages.canvas

Version History (15 versions)

Referenced Schemas (27)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

Lexicon Garden

@