Referencia
Operaciones de edición
apply_operations recibe una lista de operaciones y las aplica como una transacción: si una falla, no se aplica ninguna.
Ejemplo completo
{
"path": "~/proyecto/design.pen",
"label": "Botón principal en negro",
"operations": [
{ "op": "update", "id": "btn-primario", "props": { "fill": "#000000" } },
{ "op": "update", "id": "btn-primario/etiqueta", "props": { "content": "Empezar" } }
]
}En la CLI, las operaciones van en un archivo JSON, en línea o por stdin con -:
canvappen apply-operations design.pen --operations cambios.json
echo '[{"op":"delete","id":"nota"}]' | canvappen apply-operations design.pen --operations -Nodos
insert
Agrega un nodo dentro de parent (o en la raíz con null), opcionalmente en la posición index. Si insertas un frame raíz sin x/y, canvappen lo coloca a la derecha del contenido existente.
{ "op": "insert", "parent": "home", "index": 0, "node": { "type": "text", "content": "Hola" } }update
Cambia propiedades. null elimina una propiedad. No cambia id, type ni children.
{ "op": "update", "id": "titulo", "props": { "fontSize": 32, "letterSpacing": null } }delete
{ "op": "delete", "id": "nota" }move
{ "op": "move", "id": "tarjeta", "parent": "lista", "index": 2 }replace
Reemplaza el nodo completo, conservando su id.
{ "op": "replace", "id": "logo", "node": { "type": "icon", "library": "lucide", "icon": "star" } }copy
Duplica un nodo en otro lugar, con propiedades opcionales para la copia.
{ "op": "copy", "id": "tarjeta", "parent": "lista", "props": { "name": "Tarjeta 2" } }detach
Separa una instancia de su componente: la reemplaza por una copia editable con sus overrides y conserva el id.
{ "op": "detach", "id": "boton-compra" }Documento
set_variables
Crea, cambia o elimina (null) variables. Con replace: true reemplaza todas.
{ "op": "set_variables", "variables": { "primario": { "type": "color", "value": "#000000" }, "viejo": null } }set_themes
{ "op": "set_themes", "themes": { "modo": ["claro", "oscuro"] } }set_imports
Adjunta o quita librerías .lib.pen con un alias.
{ "op": "set_imports", "imports": { "ui": "librerias/ui.lib.pen" } }set_fonts
Reemplaza las fuentes propias del documento. Para agregar una sola, es más simple usar import_font.
{ "op": "set_fonts", "fonts": [{ "name": "Marca", "url": "fonts/marca.ttf", "weight": 400, "style": "normal" }] }Simular antes de aplicar
Con dryRun: true (en la CLI, --dry-run) canvappen valida y simula los cambios sin guardar nada.