Pular para o conteúdo

API: edit

@mosaicoo/svg-engine/edit é a camada de edição headless, entre o core (o modelo) e o ui (os widgets Material). Ela é dona da seleção, do sistema de tools, dos gestos interativos (mover/redimensionar/rotacionar/marquee/snap/alinhar), do sistema de plugins e dos registries de capacidades (menus, atalhos, efeitos, bibliotecas, páginas, animação). É headless: sem Angular Material/CDK.

É uma superfície grande — esta página é um mapa prático do que você realmente conecta. Tudo é signal-backed e com escopo por-editor.

import {
provideSvgEngineEditorScope, provideSvgEngineEditorBuiltins,
SelectionService, ToolHostService,
} from '@mosaicoo/svg-engine/edit';
APIDescrição
provideSvgEngineEditorScope()Registra os serviços por-editor (seleção, transform, snap, marquee, alinhamento, layers, pages, animação, workspace, …) num injector filho. Forneça uma vez por instância de editor — é o que habilita o isolamento multi-editor.
provideSvgEngineEditorBuiltins()Uma chamada que instala todo o conjunto de plugins headless (tools, libraries, IO, optimizers, efeitos, teclado, menus) em vez de registrar ~duas dúzias de plugins à mão. Combine com provideSvgeUiBuiltins() do ui para a camada Material.
provideSvgEnginePlugin(plugin)Faz bootstrap de um plugin no momento da config do app.
provideSvgeHelpLinks(links)Configura as URLs do menu Ajuda (docs, tutoriais, dev de plugins, reportar issue).
APIDescrição
SelectionServiceO estado de seleção: signals selectedIds, focusId, hoverId, count, hasSelection, isSingleSelection; métodos select, selectMany, addToSelection, removeFromSelection, toggle, clear, setHover, isSelected. Nós bloqueados são filtrados automaticamente.

O sistema de tools roteia eventos de ponteiro/teclado para a tool ativa.

APIDescrição
ToolRegistryRegistry das tools instaladas: register(tool) → Disposable, get(id), getByShortcut(key), signal tools.
ToolHostServiceEstado da tool ativa + roteador de eventos: signals activeId/activeTool; activate(id), deactivate(), e routePointerDown/Move/Up/Cancel, routeKeyDown. Encaminhe os eventos do canvas para cá.
ToolO contrato da tool: id, label, opcionais icon/cursor/shortcut/optionsComponent, e hooks de ciclo de vida opcionais (onActivate, onPointerDown, onKeyDown, …).
ToolContext / ToolPointerEventO contexto (injector) entregue a cada hook, e o wrapper de ponteiro (docPoint, coords de tela, flags de modificador).

As 15 tools built-in vêm como plugins; cada uma expõe uma constante de id:

ToolConstante de idFinalidade
SelectSELECT_TOOL_IDSelecionar & transformar (padrão).
Direct SelectDIRECT_SELECT_TOOL_IDEditar pontos de âncora individuais.
PenPEN_TOOL_IDDesenhar paths Bézier.
PencilPENCIL_TOOL_IDDesenho à mão livre.
Rectangle / Ellipse / PolygonRECTANGLE_TOOL_ID / ELLIPSE_TOOL_ID / POLYGON_TOOL_IDDesenhar formas.
TextTEXT_TOOL_IDCriar & editar texto.
EyedropperEYEDROPPER_TOOL_IDAmostrar cores.
KnifeKNIFE_TOOL_IDCortar paths.
SmoothSMOOTH_TOOL_IDSuavizar paths.
GradientGRADIENT_TOOL_IDEditar gradientes no canvas.
WidthWIDTH_TOOL_IDPerfis de largura de traço variável.
Symbol SprayerSYMBOL_SPRAYER_TOOL_IDPulverizar instâncias de símbolo.
PagePAGE_TOOL_IDCriar & editar páginas/artboards.

Esses serviços guardam o estado transitório do gesto e despacham o comando com undo correspondente ao confirmar. Você lê bounding boxes e alimenta deltas de ponteiro.

APIDescrição
TransformServiceGestos de mover/redimensionar/rotacionar com preview ao vivo: startMove/startResize/startRotate, updateDragDelta/updateRotateAngle, endDragAndCommit, cancelDrag; signals dragState/showPreview.
MarqueeServiceFaixa de seleção por arrasto: start/update/end/cancel, signals rect/isActive. Combine com nodesInsideMarquee(rect, nodes, mode) (MarqueeHitMode, MarqueeMode).
SnapServiceConfig de snap + guias ao vivo: alternâncias de enabled, mode (grid/objects/both), snapToGuides, gridSize, thresholdPx; resolveForMove(rect, candidates, zoom) retorna o delta com snap + guias.
AlignmentServiceAlinhar & distribuir como uma única entrada de undo: align(items, axis), alignToReference, distribute, distributeSpacing. Tipos AlignAxis, DistributeAxis, NodeBBox.
KeyObjectServiceLembra o alvo “alinhar ao objeto-chave” por editor.

Cada um tem componentes de overlay — SelectionOverlay, RotationPivot, Marquee, SnapGuides — que você pode acoplar ao canvas.

APIDescrição
WorkspaceServiceEstado de apresentação do editor: signals background, page, grid, guides, rulers, interaction com setters correspondentes. Tipos BackgroundConfig, PageConfig, GridConfig, Guide, RulersConfig, InteractionConfig.
LayersServiceVisibilidade & bloqueio por-nó (só do editor, não serializado): isVisible/isLocked, setVisible/toggleVisible, setLocked/toggleLocked, showAll/unlockAll.
IsolationServiceIsolamento de grupo + navegação por breadcrumb: enterIsolation, exitIsolation, toggleIsolation.
SvgeCanvasGesturesDiretiva para pan com botão do meio + zoom com a roda, dirigindo o ViewportService.
Formato de arquivo do workspaceserializeWorkspace(state) / parseWorkspace(json) e os tipos do envelope .svge/.svgez — persiste todo o estado do editor (config + viewport), não só o documento.

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

Tudo que é opcional no editor é um plugin. Construa o seu para adicionar tools, bibliotecas, menus, atalhos, efeitos ou formatos.

APIDescrição
EditorPluginO contrato de plugin: id, version, name, apiVersion, opcionais dependencies/category, e install(ctx) / uninstall(ctx) opcional.
PluginContextEntregue ao install: pluginId, injector, e track(disposable) para que toda contribuição seja removida automaticamente no uninstall.
PluginRegistryCiclo de vida install/uninstall: install, uninstall, has, get, list, signal installed.
PLUGIN_API_VERSION / PluginCategory / InstalledPluginA versão atual da API, a união de categorias e o tipo do registro instalado.

Para gerenciar e carregar plugins: PluginManagerService + PluginCatalog + PluginStateStore dão base à UI do gerenciador de plugins; PluginLoader + providePluginLoader(config) + validateExternalPluginManifest() carregam plugins externos de terceiros atrás de um allowlist + gate de versão da API (SVGE_PLUGIN_TRUSTED_ORIGINS, SVGE_PLUGIN_MODULE_LOADER).

APIDescrição
MenuContributionRegistryRegistry extensível de menu/toolbar/menu de contexto: register(contribution) → Disposable, bySlot(slot). Tipos MenuContribution, MenuSlot, MenuContributionContext. Slots: MENU_SLOT, TOOLBAR_SLOT, CONTEXT_MENU_SLOT.
ShortcutRegistry / ShortcutServiceRegistra atalhos (register → Disposable, findMatch(event)) e os dispara no keydown. Shortcut carrega combo, label, when opcional, handler.
KeybindingsServiceCustomização em runtime: listShortcuts, setOverride(id, combo), clearOverride, exportAsJson.
Helpers de comboparseCombo, comboMatches, formatCombo, comboFromEvent, validateCombo.

Plugins de contribuição built-in: builtinMenuContributionsPlugin, builtinInsertMenuPlugin, builtinAdvancedEditMenuPlugin, builtinEditorShortcutsPlugin.

Um LibraryRegistry<T> uniforme (register → Disposable, get, update, signal items) dá base a toda biblioteca de assets. Cada uma traz um plugin built-in.

ServiçoGuarda
ShapeLibraryServiceFormas reutilizáveis.
SymbolLibraryServiceSímbolos (master/instância via SymbolUseNode).
TemplateLibraryServiceTemplates de documento.
BrushLibraryServicePincéis (perfis de largura para o Pencil).
PatternLibraryService / GradientLibraryServicePatterns e gradientes.
GraphicStyleLibraryServiceEstilos gráficos reutilizáveis.
PaletteRegistryPaletas de cor (Palette = { id, name, colors }).
ClipPathLibraryService / MaskLibraryServiceClip paths e máscaras.

Serviços de apoio: AssetManagerService (arquivo → data URI) e ActiveDefsService / ActiveSymbolsService (compõem os defs/símbolos usados no <defs> para exportação).

APIDescrição
PagesServiceVisão derivada das páginas do documento: signals pages/count/hasPages, byId, nameOf, viewBoxOf.
ActivePageServiceQual página está sendo editada: signals activePageId/activePage/effectiveDrawTargetId, setActivePageId.
AnimationServiceEdita a animação da página via comandos com undo: addKeyframe, removeKeyframe, moveKeyframe, setKeyframeEasing, setDuration, setAnimatableProperty, sample(playhead); signals tracks/duration/hasAnimation.
PlaybackServiceDirige o playhead com requestAnimationFrame: play/pause/seek/step/setSpeed/setLoop; signals playhead/isPlaying.
APIDescrição
EffectRegistryRegistry de efeitos de filtro SVG: register → Disposable, get, byCategory, signal effects.
Effect / EffectParamO contrato do efeito (buildFilterMarkup()) e seus parâmetros tipados (EffectNumberParam, EffectColorParam, EffectSelectParam, EffectBooleanParam).
Helpers de parâmetroeffectDefaults, resolveEffectParams, nonDefaultParams, isNumberParam.
ParametricEffectRegistry / ChainFilterRegistryEfeitos paramétricos (reeditáveis) e encadeamento de efeitos, com helpers de encode/parse de id.
builtinEffectsPluginRegistra os presets de filtro built-in (blur, drop shadow, glow, bevel/emboss, ajustes de cor, …).
APIDescrição
ClipboardServiceCopy/cut/paste em memória, desacoplado do clipboard do navegador: copy, cut, paste, canPaste.
FindReplaceService / SelectSameServiceLocalizar & substituir em texto/propriedades de nós (find, replace, replaceAll; FindCriteria/FindMatch), e “selecionar igual” (fill/stroke/fonte/…).
AutoSaveServiceAutosave periódico em localStorage com recuperação.
RecentFilesServiceLista MRU por trás de “Abrir recente”.
SnapshotsPersistenceServicePersiste snapshots do editor em localStorage.
AssetExportRegistry / AssetExportRunnerExportação em lote: registra slots (alvo + formato + escala + nome) e os executa com desambiguação de nomes.
FullscreenServiceWrapper de tela cheia nativo.
ImportSettingsService / ImportPlacementServicePreferência de posicionamento do import de SVG e o gesto interativo de arrastar-para-posicionar (SvgeImportPlacementOverlay).
TraceImageServiceVetorização raster-para-vetor: traceImageToPaths(imageData, options) + o comando com undo TraceImageCommand.
SmartObjectActionsServiceAções de “substituir conteúdo” / rasterizar para smart objects.