Ahora con creación de páginas por IA vía el servidor MCP
Documentation

Esquema de bloques y tipos de campo

Todos los tipos de campo, el builder defineBlock + fields, opciones de campo, repeaters y opciones de select.

Last updated: 20 de marzo de 2026

Todos los tipos de campo

Define las props editables de un bloque con el builder fields.*() dentro de defineBlock. Cada builder devuelve una definición de campo; la clave que le das en props se convierte en la clave del contenido.

BuilderDescripciónTipo de valor
fields.singleLine()Campo de texto de una líneastring
fields.multiLine()Área de texto multilíneastring
fields.richText()Editor WYSIWYG (Tiptap)string (HTML)
fields.numeric()Campo numériconumber
fields.boolean()Interruptorboolean
fields.date()Selector de fechastring (ISO)
fields.color()Selector de colorstring (hex)
fields.media()Subida de imagen/vídeostring (URL)
fields.link()URL interna/externastring
fields.select()Desplegable (selección única)string
fields.multiselect()Selección múltiplestring[]
fields.repeater()Array de objetosArray<object>

Definir un bloque

Un bloque se declara con defineBlock. Sus campos editables viven bajo props:

import type { ComponentType } from "react";
import { defineBlock, fields } from "@cmssy/react";
import Component from "./src";

export const heroBlock = defineBlock({
  type: "hero",
  label: "Hero",
  component: Component as unknown as ComponentType<{ content: Record<string, unknown> }>,
  props: {
    heading: fields.singleLine({ label: "Heading", required: true, defaultValue: "Welcome" }),
    description: fields.multiLine({ label: "Description" }),
  },
});

Opciones de campo

Todos los builders fields.*() aceptan las mismas opciones base:

fields.singleLine({
  label: "Heading",
  required: true,
  defaultValue: "Welcome",
  placeholder: "Enter text",
  helperText: "Main heading",
})

Claves disponibles: label, required, defaultValue, placeholder, helperText. Los campos select y repeater añaden algunas más (abajo).


Select y Multiselect

Las opciones son un simple array de strings:

props: {
  layout: fields.select({
    label: "Layout",
    options: ["grid", "list", "carousel"],
    defaultValue: "grid",
  }),
  tags: fields.multiselect({
    label: "Tags",
    options: ["featured", "new"],
  }),
}

Repeater (arrays)

Usa itemSchema — un mapa de fields.*() anidados — para describir cada fila:

props: {
  features: fields.repeater({
    label: "Features",
    maxItems: 6,
    itemSchema: {
      icon: fields.singleLine({ label: "Icon Name", defaultValue: "Star" }),
      title: fields.singleLine({ label: "Title", required: true }),
      description: fields.multiLine({ label: "Description" }),
    },
  }),
}

En tu componente:

export default function Features({ content }) {
  return (
    <div className="grid grid-cols-3 gap-6">
      {(content.features ?? []).map((f, i) => (
        <div key={i}><h3>{f.title}</h3><p>{f.description}</p></div>
      ))}
    </div>
  );
}

El repeater también admite itemLabel, addButtonLabel, minItems, maxItems y collapsible.

Block Schema & Field Types — Cmssy CLI