pub.leaflet.pages.canvas

leaflet.pub

Schema Diff

+46 -1

From

CID
bafyreifidxorq5x...
Indexed At
2026-09-29 04:39 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, 31 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 (31)
  • 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.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.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.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.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": {
6 32
        "alignment": {
7 33
          "description": "Alignment of a single block's content. A linear document's blocks carry their own.",
8 34
          "knownValues": [
9 35
            "lex:pub.leaflet.pages.linearDocument#textAlignLeft",
10 36
            "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
11 37
            "lex:pub.leaflet.pages.linearDocument#textAlignRight",
12 38
            "lex:pub.leaflet.pages.linearDocument#textAlignJustify"
13 39
          ],
14 40
          "type": "string"
15 41
        },
16 42
        "block": {
17 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.",
18 44
          "refs": [
19 45
            "pub.leaflet.blocks.iframe",
20 46
            "pub.leaflet.blocks.html",
21 47
            "pub.leaflet.blocks.text",
22 48
            "pub.leaflet.blocks.blockquote",
23 49
            "pub.leaflet.blocks.header",
24 50
            "pub.leaflet.blocks.image",
25 51
            "pub.leaflet.blocks.imageGallery",
26 52
            "pub.leaflet.blocks.unorderedList",
27 53
            "pub.leaflet.blocks.orderedList",
28 54
            "pub.leaflet.blocks.website",
29 55
            "pub.leaflet.blocks.math",
30 56
            "pub.leaflet.blocks.code",
31 57
            "pub.leaflet.blocks.horizontalRule",
32 58
            "pub.leaflet.blocks.bskyPost",
33 59
            "pub.leaflet.blocks.standardSitePost",
34 60
            "pub.leaflet.blocks.standardSitePublication",
35 61
            "pub.leaflet.blocks.page",
36 62
            "pub.leaflet.blocks.embeddedCanvas",
37 63
            "pub.leaflet.blocks.poll",
38 64
            "pub.leaflet.blocks.button",
39 65
            "pub.leaflet.blocks.postsList",
40 66
            "pub.leaflet.blocks.signup",
41 67
            "pub.leaflet.blocks.recommendedPubs",
68 +
            "pub.leaflet.blocks.reply",
69 +
            "pub.leaflet.blocks.questions",
42 70
            "pub.leaflet.blocks.membersOnlyDelimiter",
43 71
            "pub.leaflet.blocks.postHeader",
44 72
            "pub.leaflet.blocks.drawing",
45 73
            "pub.leaflet.pages.linearDocument"
46 74
          ],
47 75
          "type": "union"
48 76
        },
49 77
        "height": {
50 78
          "type": "integer"
51 79
        },
52 80
        "rotation": {
53 81
          "description": "The rotation of the block in degrees",
54 82
          "type": "integer"
55 83
        },
56 84
        "stackOrder": {
57 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.",
58 86
          "type": "string"
59 87
        },
60 88
        "width": {
61 89
          "type": "integer"
62 90
        },
63 91
        "x": {
64 92
          "type": "integer"
65 93
        },
66 94
        "y": {
67 95
          "type": "integer"
68 96
        }
69 97
      },
70 98
      "required": [
71 99
        "block",
72 100
        "x",
73 101
        "y",
74 102
        "width"
75 103
      ],
76 104
      "type": "object"
77 105
    },
78 106
    "main": {
79 107
      "properties": {
108 +
        "background": {
109 +
          "ref": "#background",
110 +
          "type": "ref"
111 +
        },
80 112
        "blocks": {
81 113
          "items": {
82 114
            "ref": "#block",
83 115
            "type": "ref"
84 116
          },
85 117
          "type": "array"
86 118
        },
87 119
        "height": {
88 120
          "description": "Fixed canvas height in canvas px; see width.",
89 121
          "type": "integer"
90 122
        },
91 123
        "id": {
92 124
          "type": "string"
93 125
        },
94 126
        "lockViewerZoom": {
95 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.",
96 128
          "type": "boolean"
97 129
        },
98 130
        "mobileView": {
99 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.",
100 132
          "knownValues": [
101 133
            "unconstrained",
102 134
            "left",
103 135
            "center"
104 136
          ],
105 137
          "type": "string"
106 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 +
        },
107 152
        "width": {
108 -
          "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.",
109 154
          "type": "integer"
110 155
        }
111 156
      },
112 157
      "required": [
113 158
        "blocks"
114 159
      ],
115 160
      "type": "object"
116 161
    },
117 162
    "position": {
118 163
      "properties": {
119 164
        "block": {
120 165
          "items": {
121 166
            "type": "integer"
122 167
          },
123 168
          "type": "array"
124 169
        },
125 170
        "offset": {
126 171
          "type": "integer"
127 172
        }
128 173
      },
129 174
      "required": [
130 175
        "block",
131 176
        "offset"
132 177
      ],
133 178
      "type": "object"
134 179
    },
135 180
    "quote": {
136 181
      "properties": {
137 182
        "end": {
138 183
          "ref": "#position",
139 184
          "type": "ref"
140 185
        },
141 186
        "start": {
142 187
          "ref": "#position",
143 188
          "type": "ref"
144 189
        }
145 190
      },
146 191
      "required": [
147 192
        "start",
148 193
        "end"
149 194
      ],
150 195
      "type": "object"
151 196
    },
152 197
    "textAlignCenter": {
153 198
      "type": "token"
154 199
    },
155 200
    "textAlignLeft": {
156 201
      "type": "token"
157 202
    },
158 203
    "textAlignRight": {
159 204
      "type": "token"
160 205
    }
161 206
  },
162 207
  "id": "pub.leaflet.pages.canvas",
163 208
  "lexicon": 1
164 209
}

Compare Other Versions

Lexicon Garden

@