File size: 2,991 Bytes
d15d7f7 7843436 d15d7f7 0c69852 d15d7f7 7843436 d15d7f7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | // ---------------------------------------------------------------------------
// Shared component definitions
//
// Single source of truth for the MDX component registry.
// Both the frontend editor and the backend publisher import this file.
// ---------------------------------------------------------------------------
export interface SharedField {
name: string;
type: "string" | "boolean" | "select";
default?: unknown;
options?: string[];
}
export interface SharedComponentDef {
name: string;
kind: "wrapper" | "atomic";
fields: SharedField[];
/** ProseMirror content expression (wrapper only, defaults to "block+") */
content?: string;
}
export const SHARED_COMPONENT_DEFS: SharedComponentDef[] = [
{
name: "accordion",
kind: "wrapper",
fields: [
{ name: "title", type: "string", default: "Details" },
{ name: "open", type: "boolean", default: false },
],
},
{
name: "note",
kind: "wrapper",
fields: [
{ name: "title", type: "string", default: "" },
{ name: "emoji", type: "string", default: "" },
{ name: "variant", type: "select", default: "neutral", options: ["neutral", "info", "success", "danger"] },
],
},
{
name: "quoteBlock",
kind: "wrapper",
fields: [
{ name: "author", type: "string", default: "" },
{ name: "source", type: "string", default: "" },
],
},
{ name: "wide", kind: "wrapper", fields: [] },
{ name: "fullWidth", kind: "wrapper", fields: [] },
{ name: "sidenote", kind: "wrapper", fields: [] },
{
name: "reference",
kind: "wrapper",
fields: [
{ name: "id", type: "string", default: "" },
{ name: "caption", type: "string", default: "" },
],
},
{
name: "htmlEmbed",
kind: "atomic",
fields: [
{ name: "src", type: "string", default: "" },
{ name: "title", type: "string", default: "" },
{ name: "desc", type: "string", default: "" },
{ name: "wide", type: "boolean", default: false },
{ name: "downloadable", type: "boolean", default: false },
{ name: "height", type: "string", default: "400" },
],
},
{
name: "hfUser",
kind: "atomic",
fields: [
{ name: "username", type: "string", default: "" },
{ name: "name", type: "string", default: "" },
{ name: "url", type: "string", default: "" },
],
},
{
name: "iframe",
kind: "atomic",
fields: [
{ name: "src", type: "string", default: "" },
{ name: "title", type: "string", default: "" },
{ name: "desc", type: "string", default: "" },
{ name: "height", type: "string", default: "600" },
{ name: "wide", type: "boolean", default: false },
],
},
{
name: "rawHtml",
kind: "atomic",
fields: [
{ name: "html", type: "string", default: "" },
],
},
{
name: "mermaid",
kind: "atomic",
fields: [
{ name: "code", type: "string", default: "graph LR\n A --> B" },
],
},
];
|