Connection
Linha de conexão em curva bezier para arrastes de edge em progresso. Passe para a prop connectionLineComponent do ReactFlow para previews no tema da Gremorie.
Visão geral
Connection é a linha de preview ao vivo que segue o cursor enquanto o usuário arrasta de um Handle de origem até um destino. É um ConnectionLineComponent de @xyflow/react, renderizado como uma curva bezier com um pequeno círculo no destino para que os usuários vejam exatamente onde o edge vai cair.
O path usa var(--color-ring) para o traço e um círculo preenchido de branco na ponta do cursor, então a conexão combina visualmente com os estados de focus da Gremorie. A classe animated no path habilita os traços fluindo do xyflow (sobrescreva ou remova via CSS se quiser uma linha estática).
Use-a passando o próprio componente (não uma instância) para o Canvas através da prop connectionLineComponent do ReactFlow.
Preview
'use client';import '@xyflow/react/dist/style.css';import { Canvas, Connection } from '@gremorie/rx-ai';import { type Node as FlowNode, ReactFlowProvider } from '@xyflow/react';const connectionNodes: FlowNode[] = [ { id: '1', position: { x: 0, y: 80 }, data: { label: 'Drag from me' } }, { id: '2', position: { x: 300, y: 0 }, data: { label: 'Drop here' } },];export function ConnectionPreview() { return ( <div className="h-[360px] w-full"> <ReactFlowProvider> <Canvas connectionLineComponent={Connection} edges={[]} nodes={connectionNodes} /> </ReactFlowProvider> </div> );}Anatomia
Connection provisional connection line — leaf (Canvas's connectionLineComponent)Instalação
bash npx gremorie@latest add rx-connection bash pnpm dlx gremorie@latest add rx-connection bash yarn dlx gremorie@latest add rx-connection bash bunx --bun gremorie@latest add rx-connection
Requer @xyflow/react.
Uso
import { Canvas, Connection } from "@gremorie/rx-ai";
export function Workflow() {
return (
<Canvas
nodes={nodes}
edges={edges}
connectionLineComponent={Connection}
onConnect={onConnect}
>
{/* ... */}
</Canvas>
);
}A edição Angular deste componente está planejada; a edição React está production-ready hoje.
API
<Connection>
Um ConnectionLineComponent de @xyflow/react. O xyflow passa as props automaticamente quando o usuário começa a arrastar de um handle.
| Prop | Type | Description |
|---|---|---|
fromX | number | Coordenada X de origem (a posição do handle). |
fromY | number | Coordenada Y de origem. |
toX | number | Coordenada X do cursor. |
toY | number | Coordenada Y do cursor. |
Renderiza:
- Um
<path>comclass="animated",stroke="var(--color-ring)"e uma curva bezier cujos pontos de controle ficam no ponto médio entre origem e destino. - Um
<circle>no cursor (fill="#fff",stroke="var(--color-ring)",r={3}) para que a ponta fique visível contra qualquer fundo.
Constante interna: HALF = 0.5 (a razão do ponto de controle ao longo do eixo X).
Composição
<Canvas>declara a superfície e aceitaconnectionLineComponentcomo prop. Passe o próprioConnection(não JSX) - o xyflow o instancia durante um arraste.- Componentes
<Handle>em cadaNodedefinem os pontos de conexão. O xyflow renderizaConnectionautomaticamente sempre que um arraste começa a partir de um deles. - O arraste é confirmado via
onConnect, momento em que você normalmente dispara uma ação que adiciona um novo edge ao estadoedges.
Variações
Linha animada padrão
O visual out-of-the-box: traço animado, ponta com círculo branco.
<Canvas connectionLineComponent={Connection} />Linha estática via override de CSS
Remova a animação de traço se preferir um visual mais calmo.
.react-flow__connectionline .animated {
animation: none;
stroke-dasharray: none;
}Linha com tema custom
Se você precisa de uma cor de traço diferente (por exemplo, destructive ao passar por cima de uma zona de "deletar edge"), envolva Connection no seu próprio componente.
import type { ConnectionLineComponent } from '@xyflow/react';
const DestructiveConnection: ConnectionLineComponent = (props) => (
<g style={{ filter: 'drop-shadow(0 0 4px var(--color-destructive))' }}>
<Connection {...props} />
</g>
);
<Canvas connectionLineComponent={DestructiveConnection} />;Acessibilidade
-
Somente ponteiro por design: a renderização de Connection está vinculada a um arraste de mouse / toque. O xyflow atualmente não expõe um modo de criação de edge por teclado.
-
Reduced motion: a classe
animatedadiciona um efeito de marching-ants via CSS. Respeite as preferências do usuário desabilitando a animação:@media (prefers-reduced-motion: reduce) { .react-flow__connectionline .animated { animation: none; } } -
Contraste de cor:
var(--color-ring)contra o fundo do canvas deve atingir 3:1 para componentes de UI não textuais. O token da Gremorie já cumpre isso, mas verifique se você trocar de tema. -
Anúncio do alvo de soltura: para ajudar usuários de leitor de tela a entender onde uma conexão cairia, adicione
aria-labela cadaHandlede destino descrevendo que tipo de conexão ele aceita.