net.wireservice.content
Schema Diff
+5 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 2 non-breaking changes.
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "net.wireservice.content#documentLayout.minimumColumnWidth" }
- AddedEdge AddedEdge { src: "net.wireservice.content#documentLayout", tgt: "net.wireservice.content#documentLayout.minimumColumnWidth", kind: "prop", name: Some("minimumColumnWidth") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "net.wireservice.content#documentLayout.minimumColumnWidth" }
Additional Notes
- Non-breaking: AddedEdge { src: "net.wireservice.content#documentLayout", tgt: "net.wireservice.content#documentLayout.minimumColumnWidth", kind: "prop", name: Some("minimumColumnWidth") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"border": {
5
5
"description": "Border definition. The stroke property defines the line style; the boolean flags control which sides are drawn (all true by default when omitted).",
6
6
"properties": {
7
7
"bottom": {
8
8
"type": "boolean"
9
9
},
10
10
"left": {
11
11
"type": "boolean"
12
12
},
13
13
"right": {
14
14
"type": "boolean"
15
15
},
16
16
"stroke": {
17
17
"ref": "net.wireservice.defs#strokeStyle",
18
18
"type": "ref"
19
19
},
20
20
"top": {
21
21
"type": "boolean"
22
22
}
23
23
},
24
24
"type": "object"
25
25
},
26
26
"componentLayoutValues": {
27
27
"description": "The actual layout values: column placement, margins, padding, alignment, sizing. Used as the values payload for both namedComponentLayout (defaults) and conditionalComponentLayout (overrides).",
28
28
"properties": {
29
29
"columnSpan": {
30
30
"description": "Number of columns this component spans.",
31
31
"minimum": 1,
32
32
"type": "integer"
33
33
},
34
34
"columnStart": {
35
35
"description": "Starting column index (zero-based).",
36
36
"minimum": 0,
37
37
"type": "integer"
38
38
},
39
39
"horizontalContentAlignment": {
40
40
"knownValues": [
41
41
"left",
42
42
"center",
43
43
"right"
44
44
],
45
45
"maxLength": 64,
46
46
"type": "string"
47
47
},
48
48
"ignoreDocumentGutter": {
49
49
"description": "Which sides should ignore the document gutter.",
50
50
"knownValues": [
51
51
"none",
52
52
"left",
53
53
"right",
54
54
"both"
55
55
],
56
56
"maxLength": 64,
57
57
"type": "string"
58
58
},
59
59
"ignoreDocumentMargin": {
60
60
"description": "Which sides should ignore the document margin.",
61
61
"knownValues": [
62
62
"none",
63
63
"left",
64
64
"right",
65
65
"both"
66
66
],
67
67
"maxLength": 64,
68
68
"type": "string"
69
69
},
70
70
"margin": {
71
71
"ref": "net.wireservice.defs#margin",
72
72
"type": "ref"
73
73
},
74
74
"maximumContentWidth": {
75
75
"ref": "net.wireservice.defs#measurement",
76
76
"type": "ref"
77
77
},
78
78
"minimumHeight": {
79
79
"ref": "net.wireservice.defs#measurement",
80
80
"type": "ref"
81
81
},
82
82
"padding": {
83
83
"ref": "net.wireservice.defs#padding",
84
84
"type": "ref"
85
85
}
86
86
},
87
87
"type": "object"
88
88
},
89
89
"componentStyleValues": {
90
90
"description": "The actual visual style values: background color, border, corner radius, opacity. Used as the values payload for both namedComponentStyle (defaults) and conditionalComponentStyle (overrides).",
91
91
"properties": {
92
92
"backgroundColor": {
93
93
"description": "Background color as hex string (e.g., '#F7F7F7').",
94
94
"maxLength": 64,
95
95
"type": "string"
96
96
},
97
97
"border": {
98
98
"ref": "#border",
99
99
"type": "ref"
100
100
},
101
101
"cornerRadius": {
102
102
"description": "Corner radius in points.",
103
103
"minimum": 0,
104
104
"type": "integer"
105
105
},
106
106
"opacity": {
107
107
"description": "Opacity as integer 0-100 (100 = fully opaque).",
108
108
"maximum": 100,
109
109
"minimum": 0,
110
110
"type": "integer"
111
111
}
112
112
},
113
113
"type": "object"
114
114
},
115
115
"conditionalComponentLayout": {
116
116
"description": "Conditional override for a named component layout. The values field carries the override payload; conditions describe when it applies.",
117
117
"properties": {
118
118
"conditions": {
119
119
"description": "Conditions that trigger this override. Multiple conditions combine as OR (any match applies). Combine criteria within a single condition object for AND.",
120
120
"items": {
121
121
"ref": "net.wireservice.defs#condition",
122
122
"type": "ref"
123
123
},
124
124
"type": "array"
125
125
},
126
126
"values": {
127
127
"description": "Override values. Fields not set here keep the parent's defaults.",
128
128
"ref": "#componentLayoutValues",
129
129
"type": "ref"
130
130
}
131
131
},
132
132
"required": [
133
133
"conditions"
134
134
],
135
135
"type": "object"
136
136
},
137
137
"conditionalComponentStyle": {
138
138
"description": "Conditional override for a named component style. The values field carries the override payload; conditions describe when it applies.",
139
139
"properties": {
140
140
"conditions": {
141
141
"description": "Conditions that trigger this override. Multiple conditions combine as OR (any match applies). Combine criteria within a single condition object for AND.",
142
142
"items": {
143
143
"ref": "net.wireservice.defs#condition",
144
144
"type": "ref"
145
145
},
146
146
"type": "array"
147
147
},
148
148
"values": {
149
149
"description": "Override values. Fields not set here keep the parent's defaults.",
150
150
"ref": "#componentStyleValues",
151
151
"type": "ref"
152
152
}
153
153
},
154
154
"required": [
155
155
"conditions"
156
156
],
157
157
"type": "object"
158
158
},
159
159
"conditionalTextStyle": {
160
160
"description": "Conditional override for a named text style. The values field carries the override payload; conditions describe when it applies.",
161
161
"properties": {
162
162
"conditions": {
163
163
"description": "Conditions that trigger this override. Multiple conditions combine as OR (any match applies). Combine criteria within a single condition object for AND.",
164
164
"items": {
165
165
"ref": "net.wireservice.defs#condition",
166
166
"type": "ref"
167
167
},
168
168
"type": "array"
169
169
},
170
170
"values": {
171
171
"description": "Override values. Fields not set here keep the parent's defaults.",
172
172
"ref": "#textStyleValues",
173
173
"type": "ref"
174
174
}
175
175
},
176
176
"required": [
177
177
"conditions"
178
178
],
179
179
"type": "object"
180
180
},
181
181
"correction": {
182
182
"description": "A notice appended to an article after publication.",
183
183
"properties": {
184
184
"createdAt": {
185
185
"format": "datetime",
186
186
"type": "string"
187
187
},
188
188
"kind": {
189
189
"knownValues": [
190
190
"correction",
191
191
"clarification",
192
192
"update",
193
193
"editorsNote"
194
194
],
195
195
"maxLength": 64,
196
196
"type": "string"
197
197
},
198
198
"text": {
199
199
"description": "Notice text as an array of text runs with optional formatting marks.",
200
200
"items": {
201
201
"ref": "net.wireservice.defs#textRun",
202
202
"type": "ref"
203
203
},
204
204
"type": "array"
205
205
}
206
206
},
207
207
"required": [
208
208
"kind",
209
209
"text",
210
210
"createdAt"
211
211
],
212
212
"type": "object"
213
213
},
214
214
"documentLayout": {
215
215
"description": "Document-level layout grid defining the column structure for component placement.",
216
216
"properties": {
217
217
"columns": {
218
218
"description": "Number of columns in the layout grid.",
219
219
"minimum": 1,
220
220
"type": "integer"
221
221
},
222
222
"gutter": {
223
223
"description": "Gutter width between columns in points.",
224
224
"minimum": 0,
225
225
"type": "integer"
226
226
},
227
227
"margin": {
228
228
"description": "Document margin in points.",
229
229
"minimum": 0,
230
230
"type": "integer"
231
231
},
232
+
"minimumColumnWidth": {
233
+
"description": "Narrowest a column may get, in points. Below the viewport width where columns would be narrower, the layout collapses to one column. Defaults to 40.",
234
+
"minimum": 1,
235
+
"type": "integer"
236
+
},
232
237
"width": {
233
238
"description": "Maximum layout width in points.",
234
239
"minimum": 1,
235
240
"type": "integer"
236
241
}
237
242
},
238
243
"required": [
239
244
"columns",
240
245
"width"
241
246
],
242
247
"type": "object"
243
248
},
244
249
"main": {
245
250
"description": "Apple News Format-derived rich article content for standard.site documents. Plugs into the open content union of site.standard.document.",
246
251
"properties": {
247
252
"blob": {
248
253
"description": "External JSON blob containing the components array. Used when content exceeds the record size limit. Mutually exclusive with the inline components array.",
249
254
"type": "blob"
250
255
},
251
256
"blobRefs": {
252
257
"description": "Blob references used within content. Required in blob mode to prevent garbage collection of image and media blobs.",
253
258
"items": {
254
259
"type": "blob"
255
260
},
256
261
"type": "array"
257
262
},
258
263
"componentLayouts": {
259
264
"description": "Named component layout definitions. Components reference these by name via their layout field.",
260
265
"items": {
261
266
"ref": "#namedComponentLayout",
262
267
"type": "ref"
263
268
},
264
269
"type": "array"
265
270
},
266
271
"componentStyles": {
267
272
"description": "Named component style definitions. Components reference these by name via their style field.",
268
273
"items": {
269
274
"ref": "#namedComponentStyle",
270
275
"type": "ref"
271
276
},
272
277
"type": "array"
273
278
},
274
279
"componentTextStyles": {
275
280
"description": "Named text style definitions. Text components reference these by name via their textStyle field.",
276
281
"items": {
277
282
"ref": "#namedTextStyle",
278
283
"type": "ref"
279
284
},
280
285
"type": "array"
281
286
},
282
287
"components": {
283
288
"description": "Inline component array. Used when content fits within the record size limit.",
284
289
"items": {
285
290
"closed": false,
286
291
"refs": [
287
292
"net.wireservice.component.body",
288
293
"net.wireservice.component.heading",
289
294
"net.wireservice.component.image",
290
295
"net.wireservice.component.photo",
291
296
"net.wireservice.component.video",
292
297
"net.wireservice.component.audio",
293
298
"net.wireservice.component.gallery",
294
299
"net.wireservice.component.container",
295
300
"net.wireservice.component.divider",
296
301
"net.wireservice.component.quote",
297
302
"net.wireservice.component.byline",
298
303
"net.wireservice.component.embed",
299
304
"net.wireservice.component.map",
300
305
"net.wireservice.component.linkButton",
301
306
"net.wireservice.component.adSlot"
302
307
],
303
308
"type": "union"
304
309
},
305
310
"type": "array"
306
311
},
307
312
"corrections": {
308
313
"description": "Published corrections, clarifications, and updates, oldest first. Entries are appended, never edited or removed.",
309
314
"items": {
310
315
"ref": "#correction",
311
316
"type": "ref"
312
317
},
313
318
"type": "array"
314
319
},
315
320
"language": {
316
321
"description": "BCP-47 language code for the article content.",
317
322
"format": "language",
318
323
"maxLength": 64,
319
324
"type": "string"
320
325
},
321
326
"layout": {
322
327
"description": "Document-level layout grid. Overrides the stylesheet's default grid if a stylesheet is referenced.",
323
328
"ref": "#documentLayout",
324
329
"type": "ref"
325
330
},
326
331
"stylesheet": {
327
332
"description": "AT URI of a net.wireservice.stylesheet record providing default named layouts, styles, and text styles. Document-level componentLayouts/componentStyles/componentTextStyles entries with the same name override the stylesheet's.",
328
333
"format": "at-uri",
329
334
"type": "string"
330
335
}
331
336
},
332
337
"type": "object"
333
338
},
334
339
"namedComponentLayout": {
335
340
"description": "A named component layout definition controlling column placement, margins, and sizing. Components reference these by the name field.",
336
341
"properties": {
337
342
"conditional": {
338
343
"description": "Conditional overrides. Each entry's values replace the layout's defaults when any of its conditions match the rendering context. Entries are evaluated in order; the first match wins.",
339
344
"items": {
340
345
"ref": "#conditionalComponentLayout",
341
346
"type": "ref"
342
347
},
343
348
"type": "array"
344
349
},
345
350
"name": {
346
351
"description": "Identifier for this layout, referenced by components.",
347
352
"maxLength": 256,
348
353
"type": "string"
349
354
},
350
355
"values": {
351
356
"description": "Default layout values. Conditional entries can override individual fields.",
352
357
"ref": "#componentLayoutValues",
353
358
"type": "ref"
354
359
}
355
360
},
356
361
"required": [
357
362
"name"
358
363
],
359
364
"type": "object"
360
365
},
361
366
"namedComponentStyle": {
362
367
"description": "A named component style definition controlling visual appearance. Components reference these by the name field.",
363
368
"properties": {
364
369
"conditional": {
365
370
"description": "Conditional overrides. Each entry's values replace the style's defaults when any of its conditions match the rendering context. Entries are evaluated in order; the first match wins.",
366
371
"items": {
367
372
"ref": "#conditionalComponentStyle",
368
373
"type": "ref"
369
374
},
370
375
"type": "array"
371
376
},
372
377
"name": {
373
378
"description": "Identifier for this style, referenced by components.",
374
379
"maxLength": 256,
375
380
"type": "string"
376
381
},
377
382
"values": {
378
383
"description": "Default style values. Conditional entries can override individual fields.",
379
384
"ref": "#componentStyleValues",
380
385
"type": "ref"
381
386
}
382
387
},
383
388
"required": [
384
389
"name"
385
390
],
386
391
"type": "object"
387
392
},
388
393
"namedTextStyle": {
389
394
"description": "A named text style definition. Text components reference these by the name field.",
390
395
"properties": {
391
396
"conditional": {
392
397
"description": "Conditional overrides. Each entry's values replace the text style's defaults when any of its conditions match the rendering context. Entries are evaluated in order; the first match wins.",
393
398
"items": {
394
399
"ref": "#conditionalTextStyle",
395
400
"type": "ref"
396
401
},
397
402
"type": "array"
398
403
},
399
404
"name": {
400
405
"description": "Identifier for this style, referenced by components.",
401
406
"maxLength": 256,
402
407
"type": "string"
403
408
},
404
409
"values": {
405
410
"description": "Default text style values. Conditional entries can override individual fields.",
406
411
"ref": "#textStyleValues",
407
412
"type": "ref"
408
413
}
409
414
},
410
415
"required": [
411
416
"name"
412
417
],
413
418
"type": "object"
414
419
},
415
420
"textStyleValues": {
416
421
"description": "The actual text style values: font, size, color, alignment, spacing, decoration. Used as the values payload for both namedTextStyle (defaults) and conditionalTextStyle (overrides).",
417
422
"properties": {
418
423
"backgroundColor": {
419
424
"description": "Text background color as hex string.",
420
425
"maxLength": 64,
421
426
"type": "string"
422
427
},
423
428
"firstLineIndent": {
424
429
"description": "First line indent in points.",
425
430
"minimum": 0,
426
431
"type": "integer"
427
432
},
428
433
"fontFamily": {
429
434
"description": "Font family name (e.g., 'Georgia', 'Helvetica Neue').",
430
435
"maxLength": 256,
431
436
"type": "string"
432
437
},
433
438
"fontName": {
434
439
"description": "PostScript font name for precise font selection.",
435
440
"maxLength": 256,
436
441
"type": "string"
437
442
},
438
443
"fontSize": {
439
444
"description": "Font size in points.",
440
445
"maximum": 500,
441
446
"minimum": 1,
442
447
"type": "integer"
443
448
},
444
449
"fontStyle": {
445
450
"knownValues": [
446
451
"normal",
447
452
"italic",
448
453
"oblique"
449
454
],
450
455
"maxLength": 64,
451
456
"type": "string"
452
457
},
453
458
"fontWeight": {
454
459
"description": "Font weight (100 = thin, 400 = normal, 700 = bold, 900 = black).",
455
460
"maximum": 900,
456
461
"minimum": 100,
457
462
"type": "integer"
458
463
},
459
464
"hyphenation": {
460
465
"description": "Whether to enable automatic hyphenation.",
461
466
"type": "boolean"
462
467
},
463
468
"lineHeight": {
464
469
"description": "Line height in points.",
465
470
"minimum": 1,
466
471
"type": "integer"
467
472
},
468
473
"paragraphSpacingAfter": {
469
474
"description": "Space after paragraphs in points.",
470
475
"minimum": 0,
471
476
"type": "integer"
472
477
},
473
478
"paragraphSpacingBefore": {
474
479
"description": "Space before paragraphs in points.",
475
480
"minimum": 0,
476
481
"type": "integer"
477
482
},
478
483
"strikethrough": {
479
484
"description": "Whether text has strikethrough decoration.",
480
485
"type": "boolean"
481
486
},
482
487
"textAlignment": {
483
488
"knownValues": [
484
489
"left",
485
490
"center",
486
491
"right",
487
492
"justified",
488
493
"none"
489
494
],
490
495
"maxLength": 64,
491
496
"type": "string"
492
497
},
493
498
"textColor": {
494
499
"description": "Text color as hex string (e.g., '#333333').",
495
500
"maxLength": 64,
496
501
"type": "string"
497
502
},
498
503
"textTransform": {
499
504
"knownValues": [
500
505
"uppercase",
501
506
"lowercase",
502
507
"capitalize",
503
508
"none"
504
509
],
505
510
"maxLength": 64,
506
511
"type": "string"
507
512
},
508
513
"tracking": {
509
514
"description": "Letter spacing in hundredths of a point.",
510
515
"type": "integer"
511
516
},
512
517
"underline": {
513
518
"description": "Whether text has underline decoration.",
514
519
"type": "boolean"
515
520
},
516
521
"verticalAlignment": {
517
522
"knownValues": [
518
523
"superscript",
519
524
"subscript",
520
525
"baseline"
521
526
],
522
527
"maxLength": 64,
523
528
"type": "string"
524
529
}
525
530
},
526
531
"type": "object"
527
532
}
528
533
},
529
534
"id": "net.wireservice.content",
530
535
"lexicon": 1
531
536
}