KDS
Workflow

Toolbar

Toolbar contextual que aparece quando um Node está selecionado.

Overview

Toolbar é a toolbar contextual de um Node — aparece quando o node está selecionado. Wrapper sobre <NodeToolbar> do ReactFlow, posicionado abaixo do node por default.

Use pra ações relacionadas ao node específico (delete, duplicate, edit) sem ocupar espaço permanente no card.

Preview
Toolbar visível com node selecionado.

Usage

import { Toolbar } from "@kalvner/kds/ai/toolbar";
import { Button } from "@kalvner/kds/forms/button";
import { Copy, Trash } from "lucide-react";

function MyNode({ data, selected }) {
  return (
    <Node handles={{ target: true, source: true }}>
      <Toolbar isVisible={selected} nodeId={data.id}>
        <Button variant="ghost" size="icon"><Copy /></Button>
        <Button variant="ghost" size="icon"><Trash /></Button>
      </Toolbar>
      ...
    </Node>
  );
}

Props

Aceita todos os props de <NodeToolbar> do ReactFlow:

PropTipoDefaultDescrição
nodeIdstring | string[]ID do node alvo (ou array de IDs).
isVisibleboolean(auto pelo selected)Override de visibilidade.
positionPositionPosition.Bottom (KDS)Lado do node onde aparece.
offsetnumber10Distância em pixels do node.
align'start' | 'center' | 'end''center'Alinhamento.
classNamestringKDS aplica flex gap-1 rounded-sm border bg-background p-1.5.Override.

Subcomponents

Toolbar é monolítico — children são botões livres.

States

EstadoComportamento
isVisible=true ou node selectedRenderiza.
Caso contrárioNão renderiza.

ReactFlow trata visibilidade automática quando você omite isVisible e usa selected no Node.

When to use

  • Actions contextuais por node (delete, copy, edit, configure).
  • UI que precisa ser descoberta on-demand sem ocupar permanente.

When not to use

  • Actions globais — use Panel.
  • Actions sempre visíveis — coloque dentro de NodeAction (na header).

Best practices

  • Limite a 3-4 actions. Mais que isso, mova pra DropdownMenu acionado de um botão na Toolbar.
  • Tooltip em ícone-only. Ícone sem texto precisa de Tooltip.
  • Position consistente. Defina position uma vez no projeto, não troque por node.

Accessibility

ConcernComportamento
VisibilityToolbar entra/sai do DOM dinamicamente — leitores anunciam mudança via aria-live automático do ReactFlow.
ButtonsCada botão precisa de aria-label ou Tooltip.
KeyboardQuando node selecionado, Tab navega pra Toolbar.

On this page