Formats

Lexical JSON

Format for integrating with Lexical-based editors

Introduction

Facebook's Lexical editor is a modern, extensible text editor framework designed for building interactive web applications with rich text capabilities. Lexical JSON is a serialization format for documents written using Lexical.

Stencila supports conversion to/from Lexical JSON as a way of integrating with Lexical and editors built on in.

Usage

Use the .lexical file extension, or the --to lexical or --from lexical options, when converting to/from Lexical JSON e.g.

stencila convert doc.smd doc.lexical

Implementation

Stencila supports bi-directional conversion between Stencila documents and Lexical JSON. This is built on top of serde_json with transformer functions to transform between Lexical node types and Stencila nde types.

Support

Stencila supports these operations for Lexical JSON:

  • decoding from a file
  • decoding from a string
  • encoding to a file
  • encoding to a string

Support and degree of loss by node type:

Node type Encoding Decoding Notes
Works
Article 🔷 Low loss 🔷 Low loss
AudioObject 🔷 Low loss 🔷 Low loss
AuthorRole 🔷 Low loss 🔷 Low loss
Chat 🔷 Low loss 🔷 Low loss
ChatMessage 🔷 Low loss 🔷 Low loss
ChatMessageGroup 🔷 Low loss 🔷 Low loss
Claim 🔷 Low loss 🔷 Low loss
Collection 🔷 Low loss 🔷 Low loss
Comment 🔷 Low loss 🔷 Low loss
CreativeWork 🔷 Low loss 🔷 Low loss
Directory 🔷 Low loss 🔷 Low loss
Figure 🔷 Low loss 🔷 Low loss
File 🔷 Low loss 🔷 Low loss
ImageObject 🔷 Low loss 🔷 Low loss
MediaObject 🔷 Low loss 🔷 Low loss
Periodical 🔷 Low loss 🔷 Low loss
Prompt 🔷 Low loss 🔷 Low loss
PublicationIssue 🔷 Low loss 🔷 Low loss
PublicationVolume 🔷 Low loss 🔷 Low loss
Review 🔷 Low loss 🔷 Low loss
SoftwareApplication 🔷 Low loss 🔷 Low loss
SoftwareSourceCode 🔷 Low loss 🔷 Low loss
Table 🔷 Low loss 🔷 Low loss
TableCell 🔷 Low loss 🔷 Low loss
TableRow 🔷 Low loss 🔷 Low loss
VideoObject 🔷 Low loss 🔷 Low loss
Prose
Admonition 🔷 Low loss 🔷 Low loss
Annotation 🔷 Low loss 🔷 Low loss
Cite 🔷 Low loss 🔷 Low loss
CiteGroup 🔷 Low loss 🔷 Low loss
DefinedTerm 🔷 Low loss 🔷 Low loss
Emphasis 🔷 Low loss 🔷 Low loss
Heading 🔷 Low loss 🔷 Low loss
Link 🔷 Low loss 🔷 Low loss
List 🔷 Low loss 🔷 Low loss
ListItem 🔷 Low loss 🔷 Low loss
Note 🔷 Low loss 🔷 Low loss
Paragraph 🔷 Low loss 🔷 Low loss
QuoteBlock 🔷 Low loss 🔷 Low loss
QuoteInline 🔷 Low loss 🔷 Low loss
Section 🔷 Low loss 🔷 Low loss
Strikeout 🔷 Low loss 🔷 Low loss
Strong 🔷 Low loss 🔷 Low loss
Subscript 🔷 Low loss 🔷 Low loss
Superscript 🔷 Low loss 🔷 Low loss
Text 🔷 Low loss 🔷 Low loss
ThematicBreak 🔷 Low loss 🔷 Low loss
Underline 🔷 Low loss 🔷 Low loss
Math
MathBlock 🔷 Low loss 🔷 Low loss
MathInline 🔷 Low loss 🔷 Low loss
Code
CodeBlock 🔷 Low loss 🔷 Low loss
CodeChunk 🔷 Low loss 🔷 Low loss
CodeExpression 🔷 Low loss 🔷 Low loss
CodeInline 🔷 Low loss 🔷 Low loss
CompilationMessage 🔷 Low loss 🔷 Low loss
ExecutionMessage 🔷 Low loss 🔷 Low loss
Data
Array 🔷 Low loss 🔷 Low loss
ArrayHint 🔷 Low loss 🔷 Low loss
ArrayValidator 🔷 Low loss 🔷 Low loss
Boolean 🔷 Low loss 🔷 Low loss
BooleanValidator 🔷 Low loss 🔷 Low loss
ConstantValidator 🔷 Low loss 🔷 Low loss
Cord 🔷 Low loss 🔷 Low loss
Datatable 🔷 Low loss 🔷 Low loss
DatatableColumn 🔷 Low loss 🔷 Low loss
DatatableColumnHint 🔷 Low loss 🔷 Low loss
DatatableHint 🔷 Low loss 🔷 Low loss
Date 🔷 Low loss 🔷 Low loss
DateTime 🔷 Low loss 🔷 Low loss
DateTimeValidator 🔷 Low loss 🔷 Low loss
DateValidator 🔷 Low loss 🔷 Low loss
Duration 🔷 Low loss 🔷 Low loss
DurationValidator 🔷 Low loss 🔷 Low loss
EnumValidator 🔷 Low loss 🔷 Low loss
Integer 🔷 Low loss 🔷 Low loss
IntegerValidator 🔷 Low loss 🔷 Low loss
Null 🔷 Low loss 🔷 Low loss
Number 🔷 Low loss 🔷 Low loss
NumberValidator 🔷 Low loss 🔷 Low loss
Object 🔷 Low loss 🔷 Low loss
ObjectHint 🔷 Low loss 🔷 Low loss
String 🔷 Low loss 🔷 Low loss
StringHint 🔷 Low loss 🔷 Low loss
StringValidator 🔷 Low loss 🔷 Low loss
Time 🔷 Low loss 🔷 Low loss
TimeValidator 🔷 Low loss 🔷 Low loss
Timestamp 🔷 Low loss 🔷 Low loss
TimestampValidator 🔷 Low loss 🔷 Low loss
TupleValidator 🔷 Low loss 🔷 Low loss
Unknown 🔷 Low loss 🔷 Low loss
UnsignedInteger 🔷 Low loss 🔷 Low loss
Flow
Button 🔷 Low loss 🔷 Low loss
CallArgument 🔷 Low loss 🔷 Low loss
CallBlock 🔷 Low loss 🔷 Low loss
CodeLocation 🔷 Low loss 🔷 Low loss
CompilationDigest 🔷 Low loss 🔷 Low loss
ExecutionDependant 🔷 Low loss 🔷 Low loss
ExecutionDependency 🔷 Low loss 🔷 Low loss
ExecutionTag 🔷 Low loss 🔷 Low loss
ForBlock 🔷 Low loss 🔷 Low loss
Form 🔷 Low loss 🔷 Low loss
Function 🔷 Low loss 🔷 Low loss
IfBlock 🔷 Low loss 🔷 Low loss
IfBlockClause 🔷 Low loss 🔷 Low loss
IncludeBlock 🔷 Low loss 🔷 Low loss
Parameter 🔷 Low loss 🔷 Low loss
Variable 🔷 Low loss 🔷 Low loss
Walkthrough 🔷 Low loss 🔷 Low loss
WalkthroughStep 🔷 Low loss 🔷 Low loss
Style
StyledBlock 🔷 Low loss 🔷 Low loss
StyledInline 🔷 Low loss 🔷 Low loss
Edits
InstructionBlock 🔷 Low loss 🔷 Low loss
InstructionInline 🔷 Low loss 🔷 Low loss
InstructionMessage 🔷 Low loss 🔷 Low loss
PromptBlock 🔷 Low loss 🔷 Low loss
SuggestionBlock 🔷 Low loss 🔷 Low loss
SuggestionInline 🔷 Low loss 🔷 Low loss
Config
Config 🔷 Low loss 🔷 Low loss
Other
Brand 🔷 Low loss 🔷 Low loss
ContactPoint 🔷 Low loss 🔷 Low loss
Enumeration 🔷 Low loss 🔷 Low loss
Grant 🔷 Low loss 🔷 Low loss
ModelParameters 🔷 Low loss 🔷 Low loss
MonetaryGrant 🔷 Low loss 🔷 Low loss
Organization 🔷 Low loss 🔷 Low loss
Person 🔷 Low loss 🔷 Low loss
PostalAddress 🔷 Low loss 🔷 Low loss
Product 🔷 Low loss 🔷 Low loss
PropertyValue 🔷 Low loss 🔷 Low loss
ProvenanceCount 🔷 Low loss 🔷 Low loss
RawBlock 🔷 Low loss 🔷 Low loss
Thing 🔷 Low loss 🔷 Low loss

See the Rust crate codec-lexical for more details.