Ir al contenido

API: edit

@mosaicoo/svg-engine/edit es la capa de edición headless, entre core (el modelo) y ui (los widgets Material). Es dueña de la selección, el sistema de tools, los gestos interactivos (mover/redimensionar/rotar/marquee/snap/alinear), el sistema de plugins y los registries de capacidades (menús, atajos, efectos, bibliotecas, páginas, animación). Es headless: sin Angular Material/CDK.

Es una superficie grande — esta página es un mapa práctico de lo que realmente conectas. Todo es signal-backed y con scope por-editor.

import {
provideSvgEngineEditorScope, provideSvgEngineEditorBuiltins,
SelectionService, ToolHostService,
} from '@mosaicoo/svg-engine/edit';
APIDescripción
provideSvgEngineEditorScope()Registra los servicios por-editor (selección, transform, snap, marquee, alineación, layers, pages, animación, workspace, …) en un injector hijo. Provéelo una vez por instancia de editor — es lo que habilita el aislamiento multi-editor.
provideSvgEngineEditorBuiltins()Una llamada que instala todo el conjunto de plugins headless (tools, libraries, IO, optimizers, efectos, teclado, menús) en vez de registrar ~dos docenas de plugins a mano. Combínalo con provideSvgeUiBuiltins() de ui para la capa Material.
provideSvgEnginePlugin(plugin)Hace bootstrap de un plugin en el momento de la config de la app.
provideSvgeHelpLinks(links)Configura las URLs del menú Ayuda (docs, tutoriales, dev de plugins, reportar issue).
APIDescripción
SelectionServiceEl estado de selección: signals selectedIds, focusId, hoverId, count, hasSelection, isSingleSelection; métodos select, selectMany, addToSelection, removeFromSelection, toggle, clear, setHover, isSelected. Los nodos bloqueados se filtran automáticamente.

El sistema de tools enruta eventos de puntero/teclado a la tool activa.

APIDescripción
ToolRegistryRegistry de las tools instaladas: register(tool) → Disposable, get(id), getByShortcut(key), signal tools.
ToolHostServiceEstado de la tool activa + enrutador de eventos: signals activeId/activeTool; activate(id), deactivate(), y routePointerDown/Move/Up/Cancel, routeKeyDown. Reenvía aquí los eventos del canvas.
ToolEl contrato de la tool: id, label, opcionales icon/cursor/shortcut/optionsComponent, y hooks de ciclo de vida opcionales (onActivate, onPointerDown, onKeyDown, …).
ToolContext / ToolPointerEventEl contexto (injector) entregado a cada hook, y el wrapper de puntero (docPoint, coords de pantalla, flags de modificador).

Las 15 tools integradas vienen como plugins; cada una expone una constante de id:

ToolConstante de idFinalidad
SelectSELECT_TOOL_IDSeleccionar & transformar (por defecto).
Direct SelectDIRECT_SELECT_TOOL_IDEditar puntos de ancla individuales.
PenPEN_TOOL_IDDibujar paths Bézier.
PencilPENCIL_TOOL_IDDibujo a mano alzada.
Rectangle / Ellipse / PolygonRECTANGLE_TOOL_ID / ELLIPSE_TOOL_ID / POLYGON_TOOL_IDDibujar formas.
TextTEXT_TOOL_IDCrear & editar texto.
EyedropperEYEDROPPER_TOOL_IDMuestrear colores.
KnifeKNIFE_TOOL_IDCortar paths.
SmoothSMOOTH_TOOL_IDSuavizar paths.
GradientGRADIENT_TOOL_IDEditar gradientes en el canvas.
WidthWIDTH_TOOL_IDPerfiles de ancho de trazo variable.
Symbol SprayerSYMBOL_SPRAYER_TOOL_IDRociar instancias de símbolo.
PagePAGE_TOOL_IDCrear & editar páginas/artboards.

Estos servicios mantienen el estado transitorio del gesto y despachan el comando con undo correspondiente al confirmar. Tú lees bounding boxes y alimentas deltas de puntero.

APIDescripción
TransformServiceGestos de mover/redimensionar/rotar con preview en vivo: startMove/startResize/startRotate, updateDragDelta/updateRotateAngle, endDragAndCommit, cancelDrag; signals dragState/showPreview.
MarqueeServiceBanda de selección por arrastre: start/update/end/cancel, signals rect/isActive. Combina con nodesInsideMarquee(rect, nodes, mode) (MarqueeHitMode, MarqueeMode).
SnapServiceConfig de snap + guías en vivo: alternancias de enabled, mode (grid/objects/both), snapToGuides, gridSize, thresholdPx; resolveForMove(rect, candidates, zoom) devuelve el delta con snap + guías.
AlignmentServiceAlinear & distribuir como una sola entrada de undo: align(items, axis), alignToReference, distribute, distributeSpacing. Tipos AlignAxis, DistributeAxis, NodeBBox.
KeyObjectServiceRecuerda el objetivo “alinear al objeto clave” por editor.

Cada uno tiene componentes de overlay — SelectionOverlay, RotationPivot, Marquee, SnapGuides — que puedes acoplar al canvas.

APIDescripción
WorkspaceServiceEstado de presentación del editor: signals background, page, grid, guides, rulers, interaction con setters correspondientes. Tipos BackgroundConfig, PageConfig, GridConfig, Guide, RulersConfig, InteractionConfig.
LayersServiceVisibilidad & bloqueo por-nodo (solo del editor, no serializado): isVisible/isLocked, setVisible/toggleVisible, setLocked/toggleLocked, showAll/unlockAll.
IsolationServiceAislamiento de grupo + navegación por breadcrumb: enterIsolation, exitIsolation, toggleIsolation.
SvgeCanvasGesturesDirectiva para pan con botón central + zoom con la rueda, dirigiendo el ViewportService.
Formato de archivo del workspaceserializeWorkspace(state) / parseWorkspace(json) y los tipos del envelope .svge/.svgez — persiste todo el estado del editor (config + viewport), no solo el documento.

Componentes de overlay/filtro: WorkspaceBackground, GridOverlay, GuidesOverlay, PageOverlay, LayersFilter, IsolationFilter, AnchorOverlay.

Todo lo opcional en el editor es un plugin. Construye el tuyo para añadir tools, bibliotecas, menús, atajos, efectos o formatos.

APIDescripción
EditorPluginEl contrato de plugin: id, version, name, apiVersion, opcionales dependencies/category, y install(ctx) / uninstall(ctx) opcional.
PluginContextEntregado a install: pluginId, injector, y track(disposable) para que toda contribución se elimine automáticamente en el uninstall.
PluginRegistryCiclo de vida install/uninstall: install, uninstall, has, get, list, signal installed.
PLUGIN_API_VERSION / PluginCategory / InstalledPluginLa versión actual de la API, la unión de categorías y el tipo del registro instalado.

Para gestionar y cargar plugins: PluginManagerService + PluginCatalog + PluginStateStore dan base a la UI del gestor de plugins; PluginLoader + providePluginLoader(config) + validateExternalPluginManifest() cargan plugins externos de terceros tras un allowlist + gate de versión de la API (SVGE_PLUGIN_TRUSTED_ORIGINS, SVGE_PLUGIN_MODULE_LOADER).

APIDescripción
MenuContributionRegistryRegistry extensible de menú/toolbar/menú contextual: register(contribution) → Disposable, bySlot(slot). Tipos MenuContribution, MenuSlot, MenuContributionContext. Slots: MENU_SLOT, TOOLBAR_SLOT, CONTEXT_MENU_SLOT.
ShortcutRegistry / ShortcutServiceRegistra atajos (register → Disposable, findMatch(event)) y los dispara en el keydown. Shortcut lleva combo, label, when opcional, handler.
KeybindingsServicePersonalización en runtime: listShortcuts, setOverride(id, combo), clearOverride, exportAsJson.
Helpers de comboparseCombo, comboMatches, formatCombo, comboFromEvent, validateCombo.

Plugins de contribución integrados: builtinMenuContributionsPlugin, builtinInsertMenuPlugin, builtinAdvancedEditMenuPlugin, builtinEditorShortcutsPlugin.

Un LibraryRegistry<T> uniforme (register → Disposable, get, update, signal items) da base a toda biblioteca de assets. Cada una trae un plugin integrado.

ServicioGuarda
ShapeLibraryServiceFormas reutilizables.
SymbolLibraryServiceSímbolos (master/instancia vía SymbolUseNode).
TemplateLibraryServiceTemplates de documento.
BrushLibraryServicePinceles (perfiles de ancho para el Pencil).
PatternLibraryService / GradientLibraryServicePatterns y gradientes.
GraphicStyleLibraryServiceEstilos gráficos reutilizables.
PaletteRegistryPaletas de color (Palette = { id, name, colors }).
ClipPathLibraryService / MaskLibraryServiceClip paths y máscaras.

Servicios de apoyo: AssetManagerService (archivo → data URI) y ActiveDefsService / ActiveSymbolsService (componen los defs/símbolos usados en el <defs> para exportación).

APIDescripción
PagesServiceVista derivada de las páginas del documento: signals pages/count/hasPages, byId, nameOf, viewBoxOf.
ActivePageServiceQué página se está editando: signals activePageId/activePage/effectiveDrawTargetId, setActivePageId.
AnimationServiceEdita la animación de la página vía comandos con undo: addKeyframe, removeKeyframe, moveKeyframe, setKeyframeEasing, setDuration, setAnimatableProperty, sample(playhead); signals tracks/duration/hasAnimation.
PlaybackServiceDirige el playhead con requestAnimationFrame: play/pause/seek/step/setSpeed/setLoop; signals playhead/isPlaying.
APIDescripción
EffectRegistryRegistry de efectos de filtro SVG: register → Disposable, get, byCategory, signal effects.
Effect / EffectParamEl contrato del efecto (buildFilterMarkup()) y sus parámetros tipados (EffectNumberParam, EffectColorParam, EffectSelectParam, EffectBooleanParam).
Helpers de parámetroeffectDefaults, resolveEffectParams, nonDefaultParams, isNumberParam.
ParametricEffectRegistry / ChainFilterRegistryEfectos paramétricos (reeditables) y encadenamiento de efectos, con helpers de encode/parse de id.
builtinEffectsPluginRegistra los presets de filtro integrados (blur, drop shadow, glow, bevel/emboss, ajustes de color, …).
APIDescripción
ClipboardServiceCopy/cut/paste en memoria, desacoplado del clipboard del navegador: copy, cut, paste, canPaste.
FindReplaceService / SelectSameServiceBuscar & reemplazar en texto/propiedades de nodos (find, replace, replaceAll; FindCriteria/FindMatch), y “seleccionar igual” (fill/stroke/fuente/…).
AutoSaveServiceAutosave periódico en localStorage con recuperación.
RecentFilesServiceLista MRU detrás de “Abrir reciente”.
SnapshotsPersistenceServicePersiste snapshots del editor en localStorage.
AssetExportRegistry / AssetExportRunnerExportación por lotes: registra slots (objetivo + formato + escala + nombre) y los ejecuta con desambiguación de nombres.
FullscreenServiceWrapper de pantalla completa nativo.
ImportSettingsService / ImportPlacementServicePreferencia de colocación del import de SVG y el gesto interactivo de arrastrar-para-colocar (SvgeImportPlacementOverlay).
TraceImageServiceVectorización ráster-a-vector: traceImageToPaths(imageData, options) + el comando con undo TraceImageCommand.
SmartObjectActionsServiceAcciones de “reemplazar contenido” / rasterizar para smart objects.