carbon-tokenization / backend /src /shared /component-defs.ts
tfrere's picture
tfrere HF Staff
feat(editor): Iframe embed component for remote URLs
0c69852
// ---------------------------------------------------------------------------
// 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" },
],
},
];