# Artefactos para herramientas y agentes
Esta página es para quien construye una herramienta, un generador de código o un agente que trabaja con Dynamic UI y necesita leer su API, sus ejemplos o sus tokens de forma programática. Describe qué archivos publica cada versión de Dynamic UI, dónde están y qué contiene cada uno. Si construyes widgets a mano no la necesitas: lo que estos archivos describen está explicado para personas en Componentes y en Sistema de temas.
Los ejemplos y recuentos de esta página corresponden a Dynamic UI 2.12.1.
# Artefactos publicados
La base de todas las rutas es https://cdn.dynamicframework.dev/assets/.
| Artefacto | Ruta en el CDN | En el paquete npm | Para qué sirve |
|---|---|---|---|
api.json | {version}/ui-react/api.json | dist/api.json | Componentes, contextos y hooks con sus props, firmas y tipos |
components.json | {version}/ui-react/manifests/components.json | No | Stories de Storybook con su import y el código de cada ejemplo |
docs.json | {version}/ui-react/manifests/docs.json | No | Páginas de documentación de Storybook en MDX |
token-overrides.json | {version}/ui-react/tokens/token-overrides.json | No | Qué variables de theme se pueden sobrescribir y cómo |
known-tokens.json | No | scripts/theme/known-tokens.json | Inventario de todas las custom properties del CSS de la versión |
icons-core.json | {version}/ui-react/icons-core.json | dist/icons-core.json | Iconos de Lucide que la librería usa internamente |
dynamic-ui.css | {version}/ui-react/css/dynamic-ui.css | dist/css/dynamic-ui.css | CSS compilado |
dynamic-ui.min.css | {version}/ui-react/css/dynamic-ui.min.css | dist/css/dynamic-ui.min.css | CSS compilado y minificado |
manifest.json | manifest.json (fuera de {version}) | No | Índice de versiones publicadas |
Las rutas del paquete son relativas a node_modules/@dynamic-framework/ui-react/.
# Versiones
Usa siempre la ruta versionada, con la misma versión del CSS que carga la aplicación. La ruta latest/ui-react/ existe, pero su contenido cambia con cada publicación.
Para conocer la versión más reciente, lee el campo latest de https://cdn.dynamicframework.dev/assets/manifest.json. No uses el orden de las claves de versions: no es un orden de versiones.
// jq '{latest}' manifest.json
{
"latest": "2.12.1"
}
Cada entrada de versions apunta al api.json de esa versión e indica su fecha de publicación y si está deprecada:
// jq '.versions["2.12.1"]' manifest.json
{
"ui-react": "https://cdn.dynamicframework.dev/assets/2.12.1/ui-react/api.json",
"publishedAt": "2026-10-26T19:46:17Z",
"deprecated": false
}
# api.json
api.json se genera a partir de los tipos del paquete; ante una diferencia entre api.json y los tipos de dist/types/, mandan los tipos.
Campos de primer nivel:
| Campo | Contenido |
|---|---|
$schema | URL del esquema JSON del archivo |
schemaVersion | Versión de la estructura del archivo, independiente de la del paquete (1.2.0 en 2.12.1) |
packageVersion | Versión de Dynamic UI |
repository | Enlace a la release |
generatedAt | Fecha de generación |
components | Componentes, por nombre |
contexts | Contextos, por nombre |
hooks | Hooks, por nombre |
# Componentes, contextos y hooks
components, contexts y hooks son objetos cuyas claves son los nombres que se usan en el código. En 2.12.1 hay 81 entradas en components, 1 en contexts (DContextProvider) y 25 en hooks. Los tipos de TypeScript se leen del paquete npm, en dist/types/.
Cada componente tiene description, sourcePath, props, forwardedProps y types. Cada prop indica su tipo, si es obligatoria, su valor por defecto y su descripción:
// jq '.components.DButton.props.variant' api.json
{
"type": "undefined | \"solid\" | \"outline\" | \"link\" | \"soft\"",
"required": false,
"defaultValue": "solid",
"description": ""
}
Cada hook tiene name, kind, source, description, signature, parameters, returns, returnType, requires y types. requires lista lo que debe estar montado para que el hook funcione:
// jq '.hooks.useCountdown | {name, signature, returnType, requires}' api.json
{
"name": "useCountdown",
"signature": "useCountdown(seconds: number) => { secondsLeft, restartCountdown }",
"returnType": "{ secondsLeft: number; restartCountdown: () => void; }",
"requires": []
}
// jq -c '.hooks.useDPortalContext.requires' api.json
["DContextProvider"]
Los contextos tienen la misma forma que los hooks, con props en lugar de parameters y returns.
# Subcomponentes
Un subcomponente es una entrada de components con parent y accessor. Un subcomponente se usa con su accessor y no se importa por su nombre:
// jq '.components.DCardHeader | {parent, accessor}' api.json
{
"parent": "DCard",
"accessor": "DCard.Header"
}
En el código, DCardHeader se escribe <DCard.Header>.
# forwardedProps y types
forwardedProps indica a qué elemento o componente pasa el componente las props que no declara, y con qué tipo. Esas props no se listan en props. Vale null cuando el componente no reenvía props.
// jq '.components.DButton.forwardedProps' api.json
{
"target": "button",
"type": "ButtonHTMLAttributes<HTMLButtonElement>"
}
types define los tipos con nombre que aparecen en las props, los parámetros o el retorno, para que no haga falta resolverlos en otro archivo. Cada entrada tiene description y type; los tipos de objeto describen además cada campo en fields, y en los componentes las uniones de literales listan sus valores en values:
// jq '.components.DButton.types.IconValue' api.json
{
"description": "",
"type": "string | IconComponent"
}
Un campo de fields, en un tipo de DContextProvider:
// jq '.contexts.DContextProvider.types.CurrencyProps.fields.symbol' api.json
{
"type": "string",
"required": true,
"description": "Currency symbol (e.g. `\"$\"`, `\"€\"`)."
}
# manifests/components.json
Índice de las stories de Storybook. Tiene dos campos de primer nivel: v, la versión del formato, y components, un objeto cuyas claves son ids de story. En 2.12.1 tiene 73 entradas: 52 de componentes (design-system-*) y 21 de patrones (patterns-*).
Cada entrada tiene:
| Campo | Contenido |
|---|---|
id | Id de la story |
name | Componente principal de la story |
path | Archivo de la story |
import | Línea de import que usan los ejemplos |
stories | Ejemplos, cada uno con id, name y snippet (código JSX) |
jsDocTags | Etiquetas JSDoc del componente |
reactDocgen | Props del componente según react-docgen |
Algunas entradas de patrones no tienen reactDocgen y traen un campo error, porque la story no declara un componente.
// jq '.components["design-system-components-box"]' manifests/components.json
{
"id": "design-system-components-box",
"name": "DBox",
"path": "./stories/components/DBox.stories.tsx",
"stories": [
{
"id": "design-system-components-box--default",
"name": "Default",
"snippet": "const Default = () => <DBox>(<>\n <h4>Hello world</h4>\n <p className=\"m-0\">Loren ipsum dolor</p>\n </>)</DBox>;"
},
{
"id": "design-system-components-box--custom-padding",
"name": "Custom Padding",
"snippet": "const CustomPadding = () => <DBox className=\"p-8\">(<>\n <h4>Hello world</h4>\n <p className=\"m-0\">Lorem ipsum dolor</p>\n </>)</DBox>;"
}
],
"import": "import { DBox } from \"@dynamic-framework/ui-react\";",
"jsDocTags": {},
"reactDocgen": {
"description": "",
"methods": [],
"displayName": "DBox",
"definedInFile": "src/components/DBox/DBox.tsx",
"actualName": "DBox",
"exportName": "default",
"props": {
"style": {
"required": false,
"tsType": {
"name": "CSSProperties | undefined"
}
},
"className": {
"required": false,
"tsType": {
"name": "string | undefined"
}
},
"dataAttributes": {
"required": false,
"tsType": {
"name": "DataAttributes | undefined"
}
},
"children": {
"required": false,
"tsType": {
"name": "ReactNode"
}
}
}
}
}
# manifests/docs.json
Páginas de documentación de Storybook: guías de uso, fundamentos, hooks y utilidades. Tiene dos campos de primer nivel: v y docs, un objeto cuyas claves son ids de página. En 2.12.1 tiene 32 páginas.
Cada página tiene id, name, path, title y content, que es el MDX completo:
// jq '.docs["design-system-utils-formatcurrency--docs"] | {id, name, path, title}' manifests/docs.json
{
"id": "design-system-utils-formatcurrency--docs",
"name": "Docs",
"path": "./stories/utils/formatCurrency.mdx",
"title": "Design System/Utils/formatCurrency"
}
# tokens/token-overrides.json
Describe qué variables de theme se pueden sobrescribir, cómo se comportan al hacerlo y qué no conviene tocar. Es la versión para máquinas del Sistema de temas, que es el contrato de theming para personas.
Campos de primer nivel:
| Campo | Contenido |
|---|---|
$schema | URL del esquema JSON del archivo |
dynamicUi | Versión de Dynamic UI a la que corresponde |
generatedFrom, generatedAt | Origen y fecha de generación |
consumption | Selector de anclaje, cómo ganar la cascada con y sin @layer, formato de color y cómo enlazar variables propias |
behaviorClasses | Las cuatro clases de comportamiento al sobrescribir una variable |
color | Grupos de tono, rampas y alcance de un rebrand |
typography, spacing, radius, shadow | Variables de cada fundamento |
slots | Variables que el CSS referencia y no declara |
gaps | Limitaciones conocidas al tematizar con variables, con su estado y la alternativa |
componentTokens | Estado de las variables de componente |
Las clases de comportamiento:
// jq '.behaviorClasses' tokens/token-overrides.json
{
"override-base": "Override the base --bs-X-rgb. Drags --bs-X and --bs-X-500-rgb along. Does NOT recolor the rest of the ramp.",
"override-leaf": "Baked literal. Override one by one; does not follow the base.",
"follows": "Auto-derived (alias/wrapper). Do NOT override; it recolors itself.",
"not-overridable": "Baked value outside var() (data-URI). Replace the whole variable or treat as a gap."
}
Cobertura en 2.12.1: el archivo nombra 281 de las 1.215 custom properties que el CSS compilado declara en :root, [data-bs-theme="dynamic"], las variables de theme. Se cuentan los nombres de variable que aparecen en el archivo y que también se declaran en ese selector. Las variables de componente (--bs-{componente}-*) no están enumeradas: componentTokens indica que están diferidas y cuántas son.
// jq '.componentTokens | {status, deferredCount}' tokens/token-overrides.json
{
"status": "deferred",
"deferredCount": 703
}
Lee el archivo de la misma versión que el CSS que carga la aplicación.
# known-tokens.json
Inventario completo de las custom properties --bs-* que declara el CSS compilado de la versión, en orden alfabético. Solo viene en el paquete npm, en node_modules/@dynamic-framework/ui-react/scripts/theme/known-tokens.json. Sirve para validar que una variable existe antes de sobrescribirla o referenciarla.
// jq '{dynamicUi, count}' scripts/theme/known-tokens.json
{
"dynamicUi": "2.12.1",
"count": 1908
}
tokens es el array con los nombres.
# icons-core.json
Los iconos de lucide-react que la librería usa internamente: chevrons, cierre, estados de alerta, adornos de input y acciones de archivo. Sirve a quien recorta lucide-react en su build: estos iconos tienen que quedar incluidos aunque la aplicación no los use directamente. En 2.12.1 son 27.
// jq '.' icons-core.json
{
"dynamicUi": "2.12.1",
"lucideReact": "^0.553.0",
"icons": [
"AlertCircle",
"AlertTriangle",
"Calendar",
"Check",
"CheckCircle",
"ChevronDown",
"ChevronLeft",
"ChevronRight",
"ChevronUp",
"Eye",
"EyeOff",
"Info",
"Minus",
"Plus",
"Search",
"Upload",
"X",
"Circle",
"CircleCheck",
"CircleCheckBig",
"Download",
"FileText",
"MoreVertical",
"Paperclip",
"RefreshCw",
"Share2",
"Trash"
]
}
# Esquemas
api.json y token-overrides.json declaran su esquema JSON (draft 2020-12) en el campo $schema:
| Artefacto | Esquema |
|---|---|
api.json | https://cdn.dynamicframework.dev/assets/schema/v1.json |
token-overrides.json | https://cdn.dynamicframework.dev/assets/schema/token-overrides.v1.json |
components.json y docs.json no tienen esquema publicado.
# Qué rutas no existen
Estas rutas responden con error. No hay listado de directorios.
| Ruta | Usa en su lugar |
|---|---|
{version}/ui-react/token-overrides.json | {version}/ui-react/tokens/token-overrides.json |
{version}/ui-react/tokens-overrides.json | {version}/ui-react/tokens/token-overrides.json |
{version}/ui-react/dynamic-ui.css | {version}/ui-react/css/dynamic-ui.css |
{version}/ui-react/dynamic-ui.min.css | {version}/ui-react/css/dynamic-ui.min.css |
{version}/ui-react/known-tokens.json | scripts/theme/known-tokens.json del paquete npm |
{version}/ui-react/ | Las rutas de la tabla de artefactos |
schema/ | Las URL de $schema |