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