# El modelo de nodos

> Qué tienen en común todos los nodos, en qué se diferencian y dónde está documentado cada uno.

Source: https://docxcelerate.com/es/docs/nodes/overview/

Un documento es un árbol de nodos. Todo nodo es tres cosas: un **id**, una
**clase** y una regla para producir contenido.

```tsx
<Paragraph          // the kind
  id="greeting"     // the address
>
  Dear {state.name},  {/* the rule */}
</Paragraph>
```

Resuelto con tus datos, se convierte en JSON puro:

```json
{ "id": "greeting", "kind": "paragraph", "mode": "static", "text": "Dear Adaeze Nkemelu," }
```

Sin estilos, sin maquetación. Eso le corresponde al renderizador.

## El catálogo

Cada tipo tiene una página propia, con todas las opciones que admite y una vista
previa de cada manera de escribirlo.

### Estructura

- **[Section](https://docxcelerate.com/es/docs/nodes/section/)** (`section`) — Groups nodes under a titled heading.
- **[Table of contents](https://docxcelerate.com/es/docs/nodes/table-of-contents/)** (`tableOfContents`) — A marker for a contents list, ahead of the renderers that build one.

### Texto

- **[Paragraph](https://docxcelerate.com/es/docs/nodes/paragraph/)** (`paragraph`) — A block of prose, written from your data or generated from prompts.

### Medios

- **[Image](https://docxcelerate.com/es/docs/nodes/image/)** (`image`) — A picture resolved from your data or described by a prompt.
- **[Shape](https://docxcelerate.com/es/docs/nodes/shape/)** (`shape`) — A drawn rectangle with the document's own words on top of it.
- **Clip art** (`clipArt`) _(Planeado)_ — Named visual blocks — rules, marks, callouts — drawn by the renderer.

### Datos

- **[Graph](https://docxcelerate.com/es/docs/nodes/graph/)** (`graph`) — A real Word chart, declared as data.
- **[Table](https://docxcelerate.com/es/docs/nodes/table/)** (`table`) — A grid of cells, with the columns declared once.

## Los ids son direcciones

El id de un nodo es la forma en que un endpoint de generación apunta a ese
párrafo, y la forma en que dos artefactos de compilación se alinean en un diff.
Renombrar uno rompe todo lo que lo señale desde fuera, igual que renombrar una
ruta de API.

Mantenlos únicos dentro del documento. No cuesta nada y hace legibles los logs.

## De dónde sale el contenido

Todo nodo o bien tiene su contenido o bien tiene prompts para producirlo, y eso lo
decide el componente en lugar de declararse en ninguna parte. Dale texto a un
párrafo — o un `src` a un `Image`, o sus `data` a un `Graph` — y se resuelve en tu
máquina. Dale prompts y un marcador de posición en su lugar, y se rellena en el
momento de la petición.

Ambos se resuelven al mismo `kind` y se diferencian por `mode` en el documento
compilado. `mode` es salida, no entrada: la compilación lo deriva de lo que aportó
el componente, y el paquete le dice a un motor qué nodos tiene que resolver.
Aportar los dos en un mismo elemento es un error, no un cara o cruz.

[Escribir nodos](/es/docs/writing-nodes/) cubre las ranuras de prompt y qué
muestran las vistas previas en su lugar.

## Anidamiento

[`section`](/es/docs/nodes/section/) es hoy el único nodo que contiene hijos, y
acepta cualquier clase, incluidas otras secciones. Un nodo de tabla con nodos en
sus celdas es lo siguiente, con el mismo principio: los contenedores contienen
los componentes que ya escribes, en lugar de un segundo modelo de contenido al
lado.

## Sobre estas vistas previas

Cada vista previa de aquí es una compilación real. `src/nodes/`, en el
repositorio de este sitio, guarda un archivo por variante, escrito contra el
paquete publicado; un paso de compilación resuelve cada uno mediante
`buildDocument` y lo renderiza con el renderizador que sirve `dxcl dev`. El
código que se muestra es el archivo que se ejecutó, y el JSON es lo que devolvió
— de modo que estas páginas se rompen a gritos en vez de quedarse
silenciosamente obsoletas.
