net.atchan.richtext.facet

atchan.net

Schema Diff

+75 -1

From

CID
bafyreiaxrrcypox...
Indexed At
2026-07-18 17:07 UTC
View this version

To

CID
bafyreigyzjg7i6m...
Indexed At
2026-08-15 17:10 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

8 breaking changes, 36 non-breaking changes.

Breaking Changes (8)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#ref", src: "net.atchan.richtext.facet#ref", tgt: "net.atchan.richtext.facet#ref.rkey", kind: "prop", name: Some("rkey") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#color", src: "net.atchan.richtext.facet#color", tgt: "net.atchan.richtext.facet#color.value", kind: "prop", name: Some("value") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#size", src: "net.atchan.richtext.facet#size", tgt: "net.atchan.richtext.facet#size.value", kind: "prop", name: Some("value") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#link", src: "net.atchan.richtext.facet#link", tgt: "net.atchan.richtext.facet#link.uri", kind: "prop", name: Some("uri") }
  • RemovedEdge RemovedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#font") }
  • RemovedEdge RemovedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant6", kind: "variant", name: Some("#kaomoji") }
  • RemovedEdge RemovedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • RemovedEdge RemovedEdge { src: "net.atchan.richtext.facet.features:items:variant6", tgt: "net.atchan.richtext.facet#kaomoji", kind: "ref", name: None }
Non-Breaking Changes (36)
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#aa" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#code" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#color" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#color.value" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#link" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#link.uri" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#pre" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#ref" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#ref.rkey" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#size" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#size.value" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant10" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant11" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant12" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant13" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant7" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant8" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant9" }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant10", kind: "variant", name: Some("#code") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant11", kind: "variant", name: Some("#pre") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant12", kind: "variant", name: Some("#link") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant13", kind: "variant", name: Some("#ref") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#color") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant6", kind: "variant", name: Some("#size") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant7", kind: "variant", name: Some("#font") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant8", kind: "variant", name: Some("#kaomoji") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant9", kind: "variant", name: Some("#aa") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant10", tgt: "net.atchan.richtext.facet#code", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant11", tgt: "net.atchan.richtext.facet#pre", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant12", tgt: "net.atchan.richtext.facet#link", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant13", tgt: "net.atchan.richtext.facet#ref", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#color", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant6", tgt: "net.atchan.richtext.facet#size", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant7", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant8", tgt: "net.atchan.richtext.facet#kaomoji", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant9", tgt: "net.atchan.richtext.facet#aa", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "net.atchan.richtext.facet#aa" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#code" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#color" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#color.value" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#link" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#link.uri" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#pre" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#ref" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#ref.rkey" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#size" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#size.value" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant10" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant11" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant12" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant13" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant7" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant8" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant9" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#color", src: "net.atchan.richtext.facet#color", tgt: "net.atchan.richtext.facet#color.value", kind: "prop", name: Some("value") }
  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#ref", src: "net.atchan.richtext.facet#ref", tgt: "net.atchan.richtext.facet#ref.rkey", kind: "prop", name: Some("rkey") }
  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#size", src: "net.atchan.richtext.facet#size", tgt: "net.atchan.richtext.facet#size.value", kind: "prop", name: Some("value") }
  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#link", src: "net.atchan.richtext.facet#link", tgt: "net.atchan.richtext.facet#link.uri", kind: "prop", name: Some("uri") }
  • Breaking: RemovedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#font") }
  • Breaking: RemovedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant6", kind: "variant", name: Some("#kaomoji") }
  • Breaking: RemovedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • Breaking: RemovedEdge { src: "net.atchan.richtext.facet.features:items:variant6", tgt: "net.atchan.richtext.facet#kaomoji", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant10", kind: "variant", name: Some("#code") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant11", kind: "variant", name: Some("#pre") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant12", kind: "variant", name: Some("#link") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant13", kind: "variant", name: Some("#ref") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#color") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant6", kind: "variant", name: Some("#size") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant7", kind: "variant", name: Some("#font") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant8", kind: "variant", name: Some("#kaomoji") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant9", kind: "variant", name: Some("#aa") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant10", tgt: "net.atchan.richtext.facet#code", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant11", tgt: "net.atchan.richtext.facet#pre", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant12", tgt: "net.atchan.richtext.facet#link", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant13", tgt: "net.atchan.richtext.facet#ref", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#color", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant6", tgt: "net.atchan.richtext.facet#size", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant7", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant8", tgt: "net.atchan.richtext.facet#kaomoji", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant9", tgt: "net.atchan.richtext.facet#aa", kind: "ref", name: None }
1 1
{
2 2
  "id": "net.atchan.richtext.facet",
3 3
  "defs": {
4 +
    "aa": {
5 +
      "type": "object",
6 +
      "properties": {},
7 +
      "description": "Facet feature rendering the range in a Shift_JIS art font, as a block with whitespace preserved. This is a choice of typeface, not a claim about what the range says: it is the font ASCII art (AA) is drawn against, and only in it does the art keep its intended proportions. No other facet is valid inside it."
8 +
    },
9 +
    "pre": {
10 +
      "type": "object",
11 +
      "properties": {},
12 +
      "description": "Facet feature marking the range as preformatted text, rendered as a block in a monospace font with whitespace preserved. No other facet is valid inside it."
13 +
    },
14 +
    "ref": {
15 +
      "type": "object",
16 +
      "required": [
17 +
        "rkey"
18 +
      ],
19 +
      "properties": {
20 +
        "rkey": {
21 +
          "type": "string",
22 +
          "format": "record-key"
23 +
        }
24 +
      },
25 +
      "description": "Facet feature marking the range as a quote-link to another post, given by its record key. The range covers the \">>rkey\" the author typed."
26 +
    },
4 27
    "bold": {
5 28
      "type": "object",
6 29
      "properties": {},
7 30
      "description": "Facet feature marking the range as bold."
8 31
    },
32 +
    "code": {
33 +
      "type": "object",
34 +
      "properties": {},
35 +
      "description": "Facet feature marking the range as inline code, rendered in a monospace font. No other facet is valid inside it."
36 +
    },
9 37
    "font": {
10 38
      "type": "object",
11 39
      "required": [
12 40
        "name"
13 41
      ],
14 42
      "properties": {
15 43
        "name": {
16 44
          "type": "string"
17 45
        }
18 46
      },
19 47
      "description": "Facet feature rendering the range in a named font"
20 48
    },
49 +
    "link": {
50 +
      "type": "object",
51 +
      "required": [
52 +
        "uri"
53 +
      ],
54 +
      "properties": {
55 +
        "uri": {
56 +
          "type": "string",
57 +
          "format": "uri"
58 +
        }
59 +
      },
60 +
      "description": "Facet feature marking the range as a link to a uri"
61 +
    },
21 62
    "main": {
22 63
      "type": "object",
23 64
      "required": [
24 65
        "index",
25 66
        "features"
26 67
      ],
27 68
      "properties": {
28 69
        "index": {
29 70
          "ref": "#byteSlice",
30 71
          "type": "ref"
31 72
        },
32 73
        "features": {
33 74
          "type": "array",
34 75
          "items": {
35 76
            "refs": [
36 77
              "#bold",
37 78
              "#italic",
38 79
              "#underline",
39 80
              "#strikethrough",
40 81
              "#spoiler",
82 +
              "#color",
83 +
              "#size",
41 84
              "#font",
42 -
              "#kaomoji"
85 +
              "#kaomoji",
86 +
              "#aa",
87 +
              "#code",
88 +
              "#pre",
89 +
              "#link",
90 +
              "#ref"
43 91
            ],
44 92
            "type": "union"
45 93
          },
46 94
          "minLength": 1
47 95
        }
48 96
      },
49 97
      "description": "A facet defines a range of rich text within a larger string."
50 98
    },
99 +
    "size": {
100 +
      "type": "object",
101 +
      "required": [
102 +
        "value"
103 +
      ],
104 +
      "properties": {
105 +
        "value": {
106 +
          "type": "integer",
107 +
          "maximum": 5,
108 +
          "minimum": 1
109 +
        }
110 +
      },
111 +
      "description": "Facet feature rendering the range at a relative text size from 1 (smallest) to 5 (largest), with 3 being the default."
112 +
    },
113 +
    "color": {
114 +
      "type": "object",
115 +
      "required": [
116 +
        "value"
117 +
      ],
118 +
      "properties": {
119 +
        "value": {
120 +
          "type": "string"
121 +
        }
122 +
      },
123 +
      "description": "Facet feature rendering the range in a color, given as a CSS hex color such as \"#ff0000\"."
124 +
    },
51 125
    "italic": {
52 126
      "type": "object",
53 127
      "properties": {},
54 128
      "description": "Facet feature marking the range as italic."
55 129
    },
56 130
    "kaomoji": {
57 131
      "type": "object",
58 132
      "properties": {},
59 133
      "description": "Facet feature marking the range as a kaomoji, ideally rendered in a Shift-JIS font."
60 134
    },
61 135
    "spoiler": {
62 136
      "type": "object",
63 137
      "properties": {},
64 138
      "description": "Facet feature marking the range as a spoiler, hidden until the reader interacts with it."
65 139
    },
66 140
    "byteSlice": {
67 141
      "type": "object",
68 142
      "required": [
69 143
        "byteStart",
70 144
        "byteEnd"
71 145
      ],
72 146
      "properties": {
73 147
        "byteEnd": {
74 148
          "type": "integer",
75 149
          "minimum": 0
76 150
        },
77 151
        "byteStart": {
78 152
          "type": "integer",
79 153
          "minimum": 0
80 154
        }
81 155
      },
82 156
      "description": "Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets."
83 157
    },
84 158
    "underline": {
85 159
      "type": "object",
86 160
      "properties": {},
87 161
      "description": "Facet feature marking the range as underlined."
88 162
    },
89 163
    "strikethrough": {
90 164
      "type": "object",
91 165
      "properties": {},
92 166
      "description": "Facet feature marking the range as struck through."
93 167
    }
94 168
  },
95 169
  "$type": "com.atproto.lexicon.schema",
96 170
  "lexicon": 1
97 171
}

Compare Other Versions

Lexicon Garden

@