pub.leaflet.pages.canvas

leaflet.pub

Schema Diff

+57 -2

From

CID
bafyreifgilfuk7y...
Indexed At
2026-09-26 03:40 UTC
View this version

To

CID
bafyreihkazfrkgp...
Indexed At
2026-10-07 19:26 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

9 breaking changes, 33 non-breaking changes.

Breaking Changes (9)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "pub.leaflet.pages.canvas#background", src: "pub.leaflet.pages.canvas#background", tgt: "pub.leaflet.pages.canvas#background.image", kind: "prop", name: Some("image") }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant23", kind: "variant", name: Some("pub.leaflet.blocks.membersOnlyDelimiter") }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant24", kind: "variant", name: Some("pub.leaflet.blocks.postHeader") }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant25", kind: "variant", name: Some("pub.leaflet.blocks.drawing") }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant26", kind: "variant", name: Some("pub.leaflet.pages.linearDocument") }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant23", tgt: "pub.leaflet.blocks.membersOnlyDelimiter", kind: "ref", name: None }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant24", tgt: "pub.leaflet.blocks.postHeader", kind: "ref", name: None }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant25", tgt: "pub.leaflet.blocks.drawing", kind: "ref", name: None }
  • RemovedEdge RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant26", tgt: "pub.leaflet.pages.linearDocument", kind: "ref", name: None }
Non-Breaking Changes (33)
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.blocks.questions" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.blocks.reply" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background.image" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background.opacity" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background.width" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#block.alignment" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#block.block:variant27" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas#block.block:variant28" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas.background" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas.pattern" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.canvas.theme" }
  • AddedVertex AddedVertex { vertex_id: "pub.leaflet.theme.page" }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas", tgt: "pub.leaflet.pages.canvas.background", kind: "prop", name: Some("background") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas", tgt: "pub.leaflet.pages.canvas.pattern", kind: "prop", name: Some("pattern") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas", tgt: "pub.leaflet.pages.canvas.theme", kind: "prop", name: Some("theme") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#background", tgt: "pub.leaflet.pages.canvas#background.opacity", kind: "prop", name: Some("opacity") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#background", tgt: "pub.leaflet.pages.canvas#background.width", kind: "prop", name: Some("width") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block", tgt: "pub.leaflet.pages.canvas#block.alignment", kind: "prop", name: Some("alignment") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant23", kind: "variant", name: Some("pub.leaflet.blocks.reply") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant24", kind: "variant", name: Some("pub.leaflet.blocks.questions") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant25", kind: "variant", name: Some("pub.leaflet.blocks.membersOnlyDelimiter") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant26", kind: "variant", name: Some("pub.leaflet.blocks.postHeader") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant27", kind: "variant", name: Some("pub.leaflet.blocks.drawing") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant28", kind: "variant", name: Some("pub.leaflet.pages.linearDocument") }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant23", tgt: "pub.leaflet.blocks.reply", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant24", tgt: "pub.leaflet.blocks.questions", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant25", tgt: "pub.leaflet.blocks.membersOnlyDelimiter", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant26", tgt: "pub.leaflet.blocks.postHeader", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant27", tgt: "pub.leaflet.blocks.drawing", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant28", tgt: "pub.leaflet.pages.linearDocument", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas.background", tgt: "pub.leaflet.pages.canvas#background", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "pub.leaflet.pages.canvas.theme", tgt: "pub.leaflet.theme.page", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "pub.leaflet.blocks.questions" }
  • AddedVertex { vertex_id: "pub.leaflet.blocks.reply" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background.image" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background.opacity" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#background.width" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#block.alignment" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#block.block:variant27" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas#block.block:variant28" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas.background" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas.pattern" }
  • AddedVertex { vertex_id: "pub.leaflet.pages.canvas.theme" }
  • AddedVertex { vertex_id: "pub.leaflet.theme.page" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "pub.leaflet.pages.canvas#background", src: "pub.leaflet.pages.canvas#background", tgt: "pub.leaflet.pages.canvas#background.image", kind: "prop", name: Some("image") }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant23", kind: "variant", name: Some("pub.leaflet.blocks.membersOnlyDelimiter") }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant24", kind: "variant", name: Some("pub.leaflet.blocks.postHeader") }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant25", kind: "variant", name: Some("pub.leaflet.blocks.drawing") }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant26", kind: "variant", name: Some("pub.leaflet.pages.linearDocument") }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant23", tgt: "pub.leaflet.blocks.membersOnlyDelimiter", kind: "ref", name: None }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant24", tgt: "pub.leaflet.blocks.postHeader", kind: "ref", name: None }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant25", tgt: "pub.leaflet.blocks.drawing", kind: "ref", name: None }
  • Breaking: RemovedEdge { src: "pub.leaflet.pages.canvas#block.block:variant26", tgt: "pub.leaflet.pages.linearDocument", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas", tgt: "pub.leaflet.pages.canvas.background", kind: "prop", name: Some("background") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas", tgt: "pub.leaflet.pages.canvas.pattern", kind: "prop", name: Some("pattern") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas", tgt: "pub.leaflet.pages.canvas.theme", kind: "prop", name: Some("theme") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#background", tgt: "pub.leaflet.pages.canvas#background.opacity", kind: "prop", name: Some("opacity") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#background", tgt: "pub.leaflet.pages.canvas#background.width", kind: "prop", name: Some("width") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block", tgt: "pub.leaflet.pages.canvas#block.alignment", kind: "prop", name: Some("alignment") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant23", kind: "variant", name: Some("pub.leaflet.blocks.reply") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant24", kind: "variant", name: Some("pub.leaflet.blocks.questions") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant25", kind: "variant", name: Some("pub.leaflet.blocks.membersOnlyDelimiter") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant26", kind: "variant", name: Some("pub.leaflet.blocks.postHeader") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant27", kind: "variant", name: Some("pub.leaflet.blocks.drawing") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block", tgt: "pub.leaflet.pages.canvas#block.block:variant28", kind: "variant", name: Some("pub.leaflet.pages.linearDocument") }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant23", tgt: "pub.leaflet.blocks.reply", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant24", tgt: "pub.leaflet.blocks.questions", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant25", tgt: "pub.leaflet.blocks.membersOnlyDelimiter", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant26", tgt: "pub.leaflet.blocks.postHeader", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant27", tgt: "pub.leaflet.blocks.drawing", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas#block.block:variant28", tgt: "pub.leaflet.pages.linearDocument", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas.background", tgt: "pub.leaflet.pages.canvas#background", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "pub.leaflet.pages.canvas.theme", tgt: "pub.leaflet.theme.page", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 +
    "background": {
5 +
      "description": "An image tiled across the canvas, under its guide pattern and blocks.",
6 +
      "properties": {
7 +
        "image": {
8 +
          "accept": [
9 +
            "image/*"
10 +
          ],
11 +
          "maxSize": 1000000,
12 +
          "type": "blob"
13 +
        },
14 +
        "opacity": {
15 +
          "description": "Opacity of the image as a percentage. Defaults to 100.",
16 +
          "maximum": 100,
17 +
          "minimum": 0,
18 +
          "type": "integer"
19 +
        },
20 +
        "width": {
21 +
          "description": "Width of each tile in canvas px. Defaults to 500.",
22 +
          "type": "integer"
23 +
        }
24 +
      },
25 +
      "required": [
26 +
        "image"
27 +
      ],
28 +
      "type": "object"
29 +
    },
4 30
    "block": {
5 31
      "properties": {
32 +
        "alignment": {
33 +
          "description": "Alignment of a single block's content. A linear document's blocks carry their own.",
34 +
          "knownValues": [
35 +
            "lex:pub.leaflet.pages.linearDocument#textAlignLeft",
36 +
            "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
37 +
            "lex:pub.leaflet.pages.linearDocument#textAlignRight",
38 +
            "lex:pub.leaflet.pages.linearDocument#textAlignJustify"
39 +
          ],
40 +
          "type": "string"
41 +
        },
6 42
        "block": {
7 43
          "description": "A single block, or a linear document: blocks grouped in reading order that are positioned, sized and rotated on the canvas as one.",
8 44
          "refs": [
9 45
            "pub.leaflet.blocks.iframe",
10 46
            "pub.leaflet.blocks.html",
11 47
            "pub.leaflet.blocks.text",
12 48
            "pub.leaflet.blocks.blockquote",
13 49
            "pub.leaflet.blocks.header",
14 50
            "pub.leaflet.blocks.image",
15 51
            "pub.leaflet.blocks.imageGallery",
16 52
            "pub.leaflet.blocks.unorderedList",
17 53
            "pub.leaflet.blocks.orderedList",
18 54
            "pub.leaflet.blocks.website",
19 55
            "pub.leaflet.blocks.math",
20 56
            "pub.leaflet.blocks.code",
21 57
            "pub.leaflet.blocks.horizontalRule",
22 58
            "pub.leaflet.blocks.bskyPost",
23 59
            "pub.leaflet.blocks.standardSitePost",
24 60
            "pub.leaflet.blocks.standardSitePublication",
25 61
            "pub.leaflet.blocks.page",
26 62
            "pub.leaflet.blocks.embeddedCanvas",
27 63
            "pub.leaflet.blocks.poll",
28 64
            "pub.leaflet.blocks.button",
29 65
            "pub.leaflet.blocks.postsList",
30 66
            "pub.leaflet.blocks.signup",
31 67
            "pub.leaflet.blocks.recommendedPubs",
68 +
            "pub.leaflet.blocks.reply",
69 +
            "pub.leaflet.blocks.questions",
32 70
            "pub.leaflet.blocks.membersOnlyDelimiter",
33 71
            "pub.leaflet.blocks.postHeader",
34 72
            "pub.leaflet.blocks.drawing",
35 73
            "pub.leaflet.pages.linearDocument"
36 74
          ],
37 75
          "type": "union"
38 76
        },
39 77
        "height": {
40 78
          "type": "integer"
41 79
        },
42 80
        "rotation": {
43 81
          "description": "The rotation of the block in degrees",
44 82
          "type": "integer"
45 83
        },
46 84
        "stackOrder": {
47 85
          "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.",
48 86
          "type": "string"
49 87
        },
50 88
        "width": {
51 89
          "type": "integer"
52 90
        },
53 91
        "x": {
54 92
          "type": "integer"
55 93
        },
56 94
        "y": {
57 95
          "type": "integer"
58 96
        }
59 97
      },
60 98
      "required": [
61 99
        "block",
62 100
        "x",
63 101
        "y",
64 102
        "width"
65 103
      ],
66 104
      "type": "object"
67 105
    },
68 106
    "main": {
69 107
      "properties": {
108 +
        "background": {
109 +
          "ref": "#background",
110 +
          "type": "ref"
111 +
        },
70 112
        "blocks": {
71 113
          "items": {
72 114
            "ref": "#block",
73 115
            "type": "ref"
74 116
          },
75 117
          "type": "array"
76 118
        },
77 119
        "height": {
78 120
          "description": "Fixed canvas height in canvas px; see width.",
79 121
          "type": "integer"
80 122
        },
81 123
        "id": {
82 124
          "type": "string"
83 125
        },
84 126
        "lockViewerZoom": {
85 -
          "description": "Viewers cannot zoom the canvas: no wheel, pinch, double-tap or zoom controls.",
127 +
          "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.",
86 128
          "type": "boolean"
87 129
        },
88 130
        "mobileView": {
89 131
          "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.",
90 132
          "knownValues": [
91 133
            "unconstrained",
92 134
            "left",
93 135
            "center"
94 136
          ],
95 137
          "type": "string"
96 138
        },
139 +
        "pattern": {
140 +
          "description": "The guide pattern drawn over the canvas's background, under its blocks. Absent, a canvas that grows with its content shows the grid and a fixed-size canvas is plain.",
141 +
          "knownValues": [
142 +
            "grid",
143 +
            "dot",
144 +
            "plain"
145 +
          ],
146 +
          "type": "string"
147 +
        },
148 +
        "theme": {
149 +
          "ref": "pub.leaflet.theme.page",
150 +
          "type": "ref"
151 +
        },
97 152
        "width": {
98 -
          "description": "Fixed canvas width in canvas px. With height, bounds the canvas: blocks are clipped to the area. Absent, the canvas is 1272px wide and grows with its content.",
153 +
          "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.",
99 154
          "type": "integer"
100 155
        }
101 156
      },
102 157
      "required": [
103 158
        "blocks"
104 159
      ],
105 160
      "type": "object"
106 161
    },
107 162
    "position": {
108 163
      "properties": {
109 164
        "block": {
110 165
          "items": {
111 166
            "type": "integer"
112 167
          },
113 168
          "type": "array"
114 169
        },
115 170
        "offset": {
116 171
          "type": "integer"
117 172
        }
118 173
      },
119 174
      "required": [
120 175
        "block",
121 176
        "offset"
122 177
      ],
123 178
      "type": "object"
124 179
    },
125 180
    "quote": {
126 181
      "properties": {
127 182
        "end": {
128 183
          "ref": "#position",
129 184
          "type": "ref"
130 185
        },
131 186
        "start": {
132 187
          "ref": "#position",
133 188
          "type": "ref"
134 189
        }
135 190
      },
136 191
      "required": [
137 192
        "start",
138 193
        "end"
139 194
      ],
140 195
      "type": "object"
141 196
    },
142 197
    "textAlignCenter": {
143 198
      "type": "token"
144 199
    },
145 200
    "textAlignLeft": {
146 201
      "type": "token"
147 202
    },
148 203
    "textAlignRight": {
149 204
      "type": "token"
150 205
    }
151 206
  },
152 207
  "id": "pub.leaflet.pages.canvas",
153 208
  "lexicon": 1
154 209
}

Compare Other Versions

Lexicon Garden

@