net.atchan.richtext.facet

atchan.net

Schema Diff

+94 -1

From

CID
bafyreie6kmrim5d...
Indexed At
2026-07-18 01:38 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

5 breaking changes, 41 non-breaking changes.

Breaking Changes (5)
  • 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#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#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#font", src: "net.atchan.richtext.facet#font", tgt: "net.atchan.richtext.facet#font.name", kind: "prop", name: Some("name") }
  • 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") }
Non-Breaking Changes (41)
  • 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#font" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#font.name" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#kaomoji" }
  • 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:variant5" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant6" }
  • 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#font" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#font.name" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#kaomoji" }
  • 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:variant5" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant6" }
  • 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#link", src: "net.atchan.richtext.facet#link", tgt: "net.atchan.richtext.facet#link.uri", kind: "prop", name: Some("uri") }
  • 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#font", src: "net.atchan.richtext.facet#font", tgt: "net.atchan.richtext.facet#font.name", kind: "prop", name: Some("name") }
  • 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 +
    },
37 +
    "font": {
38 +
      "type": "object",
39 +
      "required": [
40 +
        "name"
41 +
      ],
42 +
      "properties": {
43 +
        "name": {
44 +
          "type": "string"
45 +
        }
46 +
      },
47 +
      "description": "Facet feature rendering the range in a named font"
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 +
    },
9 62
    "main": {
10 63
      "type": "object",
11 64
      "required": [
12 65
        "index",
13 66
        "features"
14 67
      ],
15 68
      "properties": {
16 69
        "index": {
17 70
          "ref": "#byteSlice",
18 71
          "type": "ref"
19 72
        },
20 73
        "features": {
21 74
          "type": "array",
22 75
          "items": {
23 76
            "refs": [
24 77
              "#bold",
25 78
              "#italic",
26 79
              "#underline",
27 80
              "#strikethrough",
28 -
              "#spoiler"
81 +
              "#spoiler",
82 +
              "#color",
83 +
              "#size",
84 +
              "#font",
85 +
              "#kaomoji",
86 +
              "#aa",
87 +
              "#code",
88 +
              "#pre",
89 +
              "#link",
90 +
              "#ref"
29 91
            ],
30 92
            "type": "union"
31 93
          },
32 94
          "minLength": 1
33 95
        }
34 96
      },
35 97
      "description": "A facet defines a range of rich text within a larger string."
36 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 +
    },
37 125
    "italic": {
38 126
      "type": "object",
39 127
      "properties": {},
40 128
      "description": "Facet feature marking the range as italic."
41 129
    },
130 +
    "kaomoji": {
131 +
      "type": "object",
132 +
      "properties": {},
133 +
      "description": "Facet feature marking the range as a kaomoji, ideally rendered in a Shift-JIS font."
134 +
    },
42 135
    "spoiler": {
43 136
      "type": "object",
44 137
      "properties": {},
45 138
      "description": "Facet feature marking the range as a spoiler, hidden until the reader interacts with it."
46 139
    },
47 140
    "byteSlice": {
48 141
      "type": "object",
49 142
      "required": [
50 143
        "byteStart",
51 144
        "byteEnd"
52 145
      ],
53 146
      "properties": {
54 147
        "byteEnd": {
55 148
          "type": "integer",
56 149
          "minimum": 0
57 150
        },
58 151
        "byteStart": {
59 152
          "type": "integer",
60 153
          "minimum": 0
61 154
        }
62 155
      },
63 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."
64 157
    },
65 158
    "underline": {
66 159
      "type": "object",
67 160
      "properties": {},
68 161
      "description": "Facet feature marking the range as underlined."
69 162
    },
70 163
    "strikethrough": {
71 164
      "type": "object",
72 165
      "properties": {},
73 166
      "description": "Facet feature marking the range as struck through."
74 167
    }
75 168
  },
76 169
  "$type": "com.atproto.lexicon.schema",
77 170
  "lexicon": 1
78 171
}

Compare Other Versions

Lexicon Garden

@