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" },
    ],
  },
];