net.wireservice.stylesheet

wireservice.net

Schema Diff

+51 -0

From

CID
bafyreigfwejcxvb...
Indexed At
2026-10-12 21:12 UTC
View this version

To

CID
bafyreif3xf345p6...
Indexed At
2026-10-12 22:50 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 15 non-breaking changes.

Breaking Changes (1)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.wireservice.stylesheet#fontFace", src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.family", kind: "prop", name: Some("family") }
Non-Breaking Changes (15)
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.blob" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.family" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.style" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.url" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.weight" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet:body.fonts" }
  • AddedVertex AddedVertex { vertex_id: "net.wireservice.stylesheet:body.fonts:items" }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.blob", kind: "prop", name: Some("blob") }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.style", kind: "prop", name: Some("style") }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.url", kind: "prop", name: Some("url") }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.weight", kind: "prop", name: Some("weight") }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet:body", tgt: "net.wireservice.stylesheet:body.fonts", kind: "prop", name: Some("fonts") }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet:body.fonts", tgt: "net.wireservice.stylesheet:body.fonts:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "net.wireservice.stylesheet:body.fonts:items", tgt: "net.wireservice.stylesheet#fontFace", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.blob" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.family" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.style" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.url" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet#fontFace.weight" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet:body.fonts" }
  • AddedVertex { vertex_id: "net.wireservice.stylesheet:body.fonts:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "net.wireservice.stylesheet#fontFace", src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.family", kind: "prop", name: Some("family") }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.blob", kind: "prop", name: Some("blob") }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.style", kind: "prop", name: Some("style") }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.url", kind: "prop", name: Some("url") }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet#fontFace", tgt: "net.wireservice.stylesheet#fontFace.weight", kind: "prop", name: Some("weight") }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet:body", tgt: "net.wireservice.stylesheet:body.fonts", kind: "prop", name: Some("fonts") }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet:body.fonts", tgt: "net.wireservice.stylesheet:body.fonts:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "net.wireservice.stylesheet:body.fonts:items", tgt: "net.wireservice.stylesheet#fontFace", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "colorScheme": {
5 5
      "description": "A set of color roles for a single color scheme (light or dark). Background, foreground, accent, and accentForeground are required and parallel site.standard.theme.basic; the remaining roles add richer vocabulary for editorial layouts.",
6 6
      "properties": {
7 7
        "accent": {
8 8
          "description": "Color for links and interactive elements.",
9 9
          "refs": [
10 10
            "site.standard.theme.color#rgb"
11 11
          ],
12 12
          "type": "union"
13 13
        },
14 14
        "accentForeground": {
15 15
          "description": "Text color on accent backgrounds.",
16 16
          "refs": [
17 17
            "site.standard.theme.color#rgb"
18 18
          ],
19 19
          "type": "union"
20 20
        },
21 21
        "background": {
22 22
          "description": "Primary background color.",
23 23
          "refs": [
24 24
            "site.standard.theme.color#rgb"
25 25
          ],
26 26
          "type": "union"
27 27
        },
28 28
        "border": {
29 29
          "description": "Color for borders and dividers.",
30 30
          "refs": [
31 31
            "site.standard.theme.color#rgb"
32 32
          ],
33 33
          "type": "union"
34 34
        },
35 35
        "foreground": {
36 36
          "description": "Primary text color.",
37 37
          "refs": [
38 38
            "site.standard.theme.color#rgb"
39 39
          ],
40 40
          "type": "union"
41 41
        },
42 42
        "muted": {
43 43
          "description": "Background color for muted/secondary areas.",
44 44
          "refs": [
45 45
            "site.standard.theme.color#rgb"
46 46
          ],
47 47
          "type": "union"
48 48
        },
49 49
        "mutedForeground": {
50 50
          "description": "Text color for captions, bylines, and secondary content.",
51 51
          "refs": [
52 52
            "site.standard.theme.color#rgb"
53 53
          ],
54 54
          "type": "union"
55 55
        },
56 56
        "surface": {
57 57
          "description": "Background color for cards and container surfaces.",
58 58
          "refs": [
59 59
            "site.standard.theme.color#rgb"
60 60
          ],
61 61
          "type": "union"
62 62
        }
63 63
      },
64 64
      "required": [
65 65
        "background",
66 66
        "foreground",
67 67
        "accent",
68 68
        "accentForeground"
69 69
      ],
70 70
      "type": "object"
71 71
    },
72 +
    "fontFace": {
73 +
      "description": "One font face (a family at one weight and style). Exactly one of url or blob should be set.",
74 +
      "properties": {
75 +
        "blob": {
76 +
          "accept": [
77 +
            "font/woff2",
78 +
            "font/woff",
79 +
            "font/ttf",
80 +
            "font/otf"
81 +
          ],
82 +
          "description": "The font file, for openly licensed fonts. WOFF2 is preferred.",
83 +
          "maxSize": 2000000,
84 +
          "type": "blob"
85 +
        },
86 +
        "family": {
87 +
          "description": "Family name, matched against fontFamily and fontSpec.family.",
88 +
          "maxLength": 256,
89 +
          "type": "string"
90 +
        },
91 +
        "style": {
92 +
          "knownValues": [
93 +
            "normal",
94 +
            "italic"
95 +
          ],
96 +
          "maxLength": 64,
97 +
          "type": "string"
98 +
        },
99 +
        "url": {
100 +
          "description": "URL of the font file, for licensed fonts served by a foundry or the publication (WOFF2 preferred).",
101 +
          "format": "uri",
102 +
          "type": "string"
103 +
        },
104 +
        "weight": {
105 +
          "maximum": 900,
106 +
          "minimum": 100,
107 +
          "type": "integer"
108 +
        }
109 +
      },
110 +
      "required": [
111 +
        "family"
112 +
      ],
113 +
      "type": "object"
114 +
    },
72 115
    "fontSpec": {
73 116
      "description": "A font specification with family, weight, and style.",
74 117
      "properties": {
75 118
        "family": {
76 119
          "description": "Font family name (e.g., 'Georgia', 'Helvetica Neue').",
77 120
          "maxLength": 256,
78 121
          "type": "string"
79 122
        },
80 123
        "style": {
81 124
          "knownValues": [
82 125
            "normal",
83 126
            "italic"
84 127
          ],
85 128
          "maxLength": 64,
86 129
          "type": "string"
87 130
        },
88 131
        "weight": {
89 132
          "description": "Font weight (100-900).",
90 133
          "maximum": 900,
91 134
          "minimum": 100,
92 135
          "type": "integer"
93 136
        }
94 137
      },
95 138
      "required": [
96 139
        "family"
97 140
      ],
98 141
      "type": "object"
99 142
    },
100 143
    "main": {
101 144
      "description": "A publication-level stylesheet record providing default named layouts, styles, and text styles, plus typography and color palette defaults. Documents reference a stylesheet by AT URI to inherit its named entries. Document-level entries with the same name override the stylesheet's entry wholesale (including its conditional overrides).",
102 145
      "key": "tid",
103 146
      "record": {
104 147
        "properties": {
105 148
          "componentLayouts": {
106 149
            "description": "Named layout definitions inherited by documents that reference this stylesheet.",
107 150
            "items": {
108 151
              "ref": "net.wireservice.content#namedComponentLayout",
109 152
              "type": "ref"
110 153
            },
111 154
            "type": "array"
112 155
          },
113 156
          "componentStyles": {
114 157
            "description": "Named style definitions inherited by documents that reference this stylesheet.",
115 158
            "items": {
116 159
              "ref": "net.wireservice.content#namedComponentStyle",
117 160
              "type": "ref"
118 161
            },
119 162
            "type": "array"
120 163
          },
121 164
          "componentTextStyles": {
122 165
            "description": "Named text style definitions inherited by documents that reference this stylesheet.",
123 166
            "items": {
124 167
              "ref": "net.wireservice.content#namedTextStyle",
125 168
              "type": "ref"
126 169
            },
127 170
            "type": "array"
128 171
          },
129 172
          "description": {
130 173
            "description": "Optional human-readable description of the stylesheet (e.g., 'Longform features', 'Daily news').",
131 174
            "maxGraphemes": 500,
132 175
            "maxLength": 5000,
133 176
            "type": "string"
134 177
          },
178 +
          "fonts": {
179 +
            "description": "Font faces this stylesheet uses. Renderers load them before falling back to locally installed fonts. Use a blob only for fonts whose license allows redistribution: PDS blobs are public.",
180 +
            "items": {
181 +
              "ref": "#fontFace",
182 +
              "type": "ref"
183 +
            },
184 +
            "type": "array"
185 +
          },
135 186
          "layout": {
136 187
            "description": "Default document grid for documents that don't define their own. The document-level layout overrides this if both are present.",
137 188
            "ref": "net.wireservice.content#documentLayout",
138 189
            "type": "ref"
139 190
          },
140 191
          "palette": {
141 192
            "description": "Color palette with light and (optionally) dark color schemes. Renderers use these for fallback colors in components that don't set explicit colors via componentStyles or componentTextStyles. Complements site.standard.theme.basic, which is the ecosystem-shared four-color brand palette and remains on the publication record.",
142 193
            "ref": "#palette",
143 194
            "type": "ref"
144 195
          },
145 196
          "typography": {
146 197
            "description": "Typography defaults: bodies, headings, captions, type scale. Renderers fall back to these for text components that don't reference an explicit textStyle, and for fields a textStyle leaves unset.",
147 198
            "ref": "#typography",
148 199
            "type": "ref"
149 200
          }
150 201
        },
151 202
        "type": "object"
152 203
      },
153 204
      "type": "record"
154 205
    },
155 206
    "palette": {
156 207
      "description": "Color palette with light and optionally dark schemes.",
157 208
      "properties": {
158 209
        "dark": {
159 210
          "description": "Color scheme for dark mode. When omitted, renderers may derive a dark scheme or fall back to the light scheme.",
160 211
          "ref": "#colorScheme",
161 212
          "type": "ref"
162 213
        },
163 214
        "light": {
164 215
          "description": "Color scheme for light mode.",
165 216
          "ref": "#colorScheme",
166 217
          "type": "ref"
167 218
        }
168 219
      },
169 220
      "required": [
170 221
        "light"
171 222
      ],
172 223
      "type": "object"
173 224
    },
174 225
    "typography": {
175 226
      "description": "Typography defaults for the publication.",
176 227
      "properties": {
177 228
        "bodyFont": {
178 229
          "description": "Default font for body text.",
179 230
          "ref": "#fontSpec",
180 231
          "type": "ref"
181 232
        },
182 233
        "bodyFontSize": {
183 234
          "description": "Default body font size in points.",
184 235
          "maximum": 72,
185 236
          "minimum": 8,
186 237
          "type": "integer"
187 238
        },
188 239
        "bodyLineHeight": {
189 240
          "description": "Default body line height in points.",
190 241
          "maximum": 120,
191 242
          "minimum": 8,
192 243
          "type": "integer"
193 244
        },
194 245
        "captionFont": {
195 246
          "description": "Default font for captions and secondary text.",
196 247
          "ref": "#fontSpec",
197 248
          "type": "ref"
198 249
        },
199 250
        "headingFont": {
200 251
          "description": "Default font for headings.",
201 252
          "ref": "#fontSpec",
202 253
          "type": "ref"
203 254
        },
204 255
        "headingScale": {
205 256
          "description": "Type scale ratio for heading sizes relative to body.",
206 257
          "knownValues": [
207 258
            "minor-third",
208 259
            "major-third",
209 260
            "perfect-fourth",
210 261
            "golden-ratio"
211 262
          ],
212 263
          "maxLength": 64,
213 264
          "type": "string"
214 265
        }
215 266
      },
216 267
      "type": "object"
217 268
    }
218 269
  },
219 270
  "id": "net.wireservice.stylesheet",
220 271
  "lexicon": 1
221 272
}

Compare Other Versions

Lexicon Garden

@