Ir al contenido

API: core

@mosaicoo/svg-engine/core es el engine headless. No depende de @angular/material ni de @angular/cdk, así que puedes usarlo en un editor completo, un visor de solo lectura, un pipeline Node/SSR o una CLI — donde necesites construir, mutar y consultar un documento SVG programáticamente.

import {
createEmptyDocument, createRect,
EditorStateService, CommandBus, InsertNodeCommand, AUTO_PARENT,
} from '@mosaicoo/svg-engine/core';

El modelo de datos es inmutable: las factories y las operaciones de árbol siempre devuelven objetos nuevos. Nunca mutas el documento directamente — en su lugar despachas comandos por el CommandBus, que aplica el cambio y lo registra para undo/redo. El documento actual vive en EditorStateService como signals de Angular.

const state = inject(EditorStateService);
const bus = inject(CommandBus);
state.resetDocument(createEmptyDocument({ width: 800, height: 600 }));
const rect = createRect({ x: 10, y: 10, width: 120, height: 80 });
bus.dispatch(new InsertNodeCommand(rect, AUTO_PARENT)); // con undo
bus.undo();

Los servicios son @Injectable de Angular — inyéctalos donde los necesites.

APIDescripciónÚsalo para
EditorStateServiceFuente única de verdad del documento editado, expuesta como signals de solo lectura (document, dirty, nodeCount, allNodes).Leer el documento actual de forma reactiva; sembrar/reemplazar con resetDocument() / setDocument(); markClean() tras guardar.
CommandBusEl único gateway para todas las mutaciones. dispatch(command) aplica el cambio y registra el historial; también undo(), redo(), goto(depth).Aplicar cualquier cambio al documento con soporte de undo/redo.
HistoryServiceLa contabilidad de undo/redo detrás del bus: undoStack, redoStack, canUndo, canRedo, setMaxSize().Alimentar la UI de undo/redo y limitar la profundidad del historial.
createEmptyDocument(options?)Construye un SvgDocument nuevo y vacío con un grupo raíz.Crear el documento inicial para sembrar el EditorStateService.
SvgDocumentEl contenedor inmutable de nivel superior: viewBox, width/height opcionales, el árbol editable root, defs, exportPreferences.El tipo que lees de state.document() y pasas a renderers/exporters.
CreateDocumentOptions / DEFAULT_VIEW_BOXOpciones (viewBox, width, height) de createEmptyDocument y el viewBox por defecto 800×600.Configurar el tamaño inicial del canvas.

Cada forma se crea con una factory. Todas aceptan un NodeFactoryOptions compartido (id?, transform?, style?, metadata?); las formas usan DEFAULT_STYLE por defecto, los grupos usan EMPTY_STYLE.

FactoryCrea
createRect({ x, y, width, height, rx?, ry? })Un rectángulo (opcionalmente redondeado).
createEllipse({ cx, cy, rx, ry })Una elipse / círculo.
createLine({ x1, y1, x2, y2 })Una línea recta.
createPolygon(points) / createPolyline(points)Un polígono cerrado / polilínea abierta a partir de una lista de Point.
createPath(d)Un path a partir de una cadena d de SVG.
createText({ x, y, content, fontSize?, fontFamily?, ... })Un elemento de texto.
createImage({ x, y, width, height, href })Una <image> ráster.
createGroup(children?)Un grupo contenedor (la base de layers, páginas y smart objects).
createSymbolUse({ symbolId, x, y })Una instancia de un símbolo registrado (<use href="#…">).
APIDescripción
SvgNodeUnión discriminada de todos los tipos de nodo; el campo type estrecha a la forma concreta (RectNode, PathNode, GroupNode, …).
SvgNodeBaseLos campos comunes a todo nodo: id, transform, style, metadata (todos readonly).
SvgNodeType / SVG_NODE_TYPESLa unión literal (y la tupla) de los discriminadores type válidos.
isGroupNode(node)Type guard que estrecha un nodo a GroupNode.

Funciones puras sobre el árbol inmutable — cada una devuelve una nueva raíz con compartición estructural (solo se reasigna el camino hasta el nodo cambiado).

APIDescripción
findNodeById(root, id)Encuentra un nodo por id, o null.
findParent(root, childId)Encuentra el grupo padre de un nodo, o null.
walk(root, visitor) / collectNodes(root) / countNodes(root)Recorre, aplana o cuenta el árbol.
insertNode(root, parentId, node, index?)Devuelve un árbol nuevo con node insertado (lanza error si el id está duplicado).
removeNode(root, id)Devuelve un árbol nuevo con el nodo eliminado.
updateNode(root, id, updater)Devuelve un árbol nuevo con el nodo reemplazado por updater(node) (mismo id/type exigido).
cloneNodeWithNewIds(node)Clona un subárbol en profundidad con ids nuevos (p. ej. para duplicación).
APIDescripción
Point / ORIGINUn punto 2D inmutable; {x:0, y:0}.
BoundingBox + bbox(x,y,w,h)Una caja alineada a los ejes y su constructor.
unionBBox(a,b) / intersectsBBox(a,b) / containsPoint(box,x,y)Combina cajas, prueba solapamiento, prueba contención de punto (usado p. ej. en hit-testing y culling de viewport).
getNodeBBox(node) / getNodesWorldBBox(nodes)Calcula el bounding box de un nodo (y la unión de una selección).
Transform / IDENTITY_TRANSFORMLa matriz afín inmutable de 6 elementos, correspondiente al matrix(a,b,c,d,e,f) de SVG.
translate / scale / rotate / skewX / skewYConstruyen los transforms comunes (rotación/skew en radianes).
multiply(a,b) / invert(m) / applyTransform(m,x,y)Compone, invierte y aplica un transform a un punto.
parseTransformAttr(attr)Parsea una cadena del atributo transform de SVG a un Transform.
APIDescripción
NodeId + toNodeId(s) / generateNodeId()El tipo branded de id de nodo; coacciona una cadena externa, o genera un id único nuevo.
SvgStyle / EMPTY_STYLE / DEFAULT_STYLEEl subconjunto de atributos de presentación de SVG tratados como estilo, más los presets vacío y de forma por defecto.
SvgMetadata / EMPTY_METADATAMetadatos por-nodo orientados al editor: name, locked, visible, customData.
DisposableEl contrato de limpieza devuelto por cada register*() de un registry, para que los plugins deshagan sus contribuciones.

Los comandos son clases simples: construye una con sus datos y haz bus.dispatch(). Cada uno es reversible (undo/redo). Command, CommandContext, CommandResult y los helpers ok() / fail() forman el contrato; AUTO_PARENT indica a los comandos de inserción que usen el padre implícito actual.

Estructura & orden

ComandoHace
InsertNodeCommand / RemoveNodeCommandAñade o elimina un nodo.
MoveNodeCommand / MoveNodeInTreeCommandMueve un nodo por offset, o lo reubica (re-parent) en el árbol.
ReorderNodeCommand (ReorderDirection)Cambia el orden z (subir/bajar/frente/fondo).
DuplicateNodeCommandDuplica un nodo con ids nuevos.
GroupSelectionCommand / UngroupCommandAgrupa una selección / desagrupa un grupo.
TranslateManyCommandMueve varios nodos a la vez.

Transform

ComandoHace
ResizeNodeCommand / ResizeNodesCommandRedimensiona uno o varios nodos (escala incrustada en la geometría).
RotateNodeCommand / RotateNodesCommandRota alrededor de un pivote.
SkewNodeCommand / SkewNodesCommandCizalla en X/Y alrededor de un pivote.
FlipNodeCommand (FlipAxis)Refleja horizontal/verticalmente.

Propiedades

ComandoHace
SetPropertyCommand / SetPropertyOnManyCommandDefine una propiedad de geometría/atributo en uno o varios nodos.
SetStylePropertyOnManyCommandDefine una propiedad de estilo (fill, stroke, …) en una selección.
SetCornerRadiusCommandDefine el radio de esquina viva (no destructivo) en un path.
SetCustomAttrCommand / RenameCustomAttrCommand / RemoveCustomAttrCommandCRUD con undo para atributos data-* personalizados.

Pathfinder (booleanos) & paths

ComandoHace
UnionCommand / SubtractCommand / IntersectCommand / ExcludeCommand / DivideCommandOperaciones booleanas entre formas.
MakeLiveBooleanCommand / RefreshLiveBooleanCommand / ReleaseLiveBooleanCommandBooleanos no destructivos (“live”) que puedes reeditar después.
MakeCompoundPathCommand / ReleaseCompoundPathCommandCombina/libera un path compuesto.
ConvertNodeToPathCommand / BatchConvertToPathCommandConvierte formas en paths editables.
ReversePathCommand / SimplifyPathCommand / CleanUpPathCommand / JoinPathsCommand / SplitPathCommand / OffsetPathCommand / OutlineStrokeCommandLas operaciones del menú Path.
KnifeCutPathCommandCorta un path/forma en dos a lo largo de un trazo de cuchillo.
RasterizeNodeCommandReemplaza un nodo vectorial por una <image> ráster.

Páginas, layers & smart objects

ComandoHace
CreatePageCommand / DeletePageCommand / RenamePageCommand / ResizePageCommand / MovePageCommand / SetPageOptionsCommand / EnsureDefaultPageCommandGestionan páginas / artboards.
CreateLayerCommand / MakeLayerCommand / UnmakeLayerCommandGestionan layers lógicas.
MakeSmartObjectCommand / ReleaseSmartObjectCommand / EditSmartObjectContentsCommand / ReplaceSmartObjectContentsCommandGestionan smart objects.
MakeClipMaskCommand / ReleaseClipMaskCommandAplica / libera un clip path o máscara de opacidad.

Animación (ver el modelo de animación abajo)

ComandoHace
AddKeyframeCommand / MoveKeyframeCommand / RemoveKeyframeCommand / SetKeyframeEasingCommandEditan keyframes en la animación de la página.
SetAnimationDurationCommand / RemoveTrackCommandDefine duración / elimina una track.
RestoreSnapshotCommandRestaura el documento a un snapshot guardado (ver abajo).

Checkpoints nombrados y restaurables del documento entero (piensa en el History & Snapshots de Photoshop). El servicio es por-editor, no global.

APIDescripción
SnapshotsServiceGestiona la colección de snapshots: take(), restore(), rename(), delete(), setLimits(), más los signals snapshots/count/currentSnapshotId.
Snapshot / SnapshotSourceUn checkpoint (name, createdAt, document clonado, thumbnail, source) y cómo se creó (manual, auto-open, …).
SnapshotsLimits / DEFAULT_SNAPSHOT_LIMITSLímites ajustables (maxCount, autoOnOpen, autoOnDestructive) y sus valores por defecto conservadores.

Un modelo de animación puro y headless (sin UI). Es el contrato compartido sobre el que se construyen tanto el preview de la timeline como la exportación SMIL.

APIDescripción
AnimationDoc / AnimationTrack / Keyframe / EasingSpecEl documento de animación inmutable, sus tracks, keyframes y easing.
emptyAnimationDoc() / readAnimationDoc(node) / isAnimationDoc(v)Crea, lee y comprueba el tipo de la animación adjunta a una página.
upsertKeyframe / moveKeyframe / removeKeyframe / removeTrack / setKeyframeEasing / setAnimationDurationHelpers de edición inmutables (los comandos de arriba los encapsulan).
sampleAnimation(doc, t) / sampleTrack / applyAnimationToTree(root, doc, t)Muestrean valores en un tiempo t y producen el árbol animado para el preview.
animatablePropertiesForNode(node) / findAnimatableProperty / readAnimatableValueEl catálogo de propiedades animables por tipo de nodo (las filas de la timeline).
animationToSmil(doc)Serializa la animación a elementos SMIL <animate> de SVG para exportación.
evalEasing / easingControlPoints / DEFAULT_EASINGEvaluación de easing y presets.