net.wireservice.stylesheet
Schema Diff
+51 -0
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
}