React Flow interop
@ponchia/ui does not wrap or depend on React Flow / Xyflow. Use React Flow as
the renderer and keep graph state, layout, hit-testing, and node components in
the host application.
The one Bronto-specific gotcha is the base media reset:
img,
svg {
display: block;
max-inline-size: 100%;
}
That reset is correct for normal inline SVGs, report figures, icons, and rendered
diagrams. React Flow edge SVGs are different: the edge layer uses absolutely
positioned SVG wrappers that paint by overflow. If max-inline-size: 100% is
allowed to constrain those wrappers, edges can disappear or clip.
Edge SVG escape hatch
Scope the escape hatch to the React Flow surface in your app stylesheet. Keep it
un-layered, or place it in an app layer declared after bronto.
/* app.css */
@import '@ponchia/ui';
.flow-surface .react-flow__edges svg,
.flow-surface .react-flow__edge svg {
display: initial;
max-inline-size: none;
overflow: visible;
}
import { ReactFlow } from '@xyflow/react';
import '@xyflow/react/dist/style.css';
export function GraphView() {
return (
<div className="flow-surface">
<ReactFlow nodes={nodes} edges={edges} />
</div>
);
}
Do not remove Bronto's global SVG reset to fix this. The incompatibility is specific to React Flow's edge-layer geometry, so the override should stay scoped to the canvas.
HTML edge labels
If you use React Flow's EdgeLabelRenderer, remember that labels are HTML
overlays, not SVG text. Container/group nodes can paint over them. Lift the label
overlay only inside the graph surface, and keep labels pointer-transparent unless
they are deliberately interactive:
.flow-surface .react-flow__edgelabel-renderer {
z-index: var(--z-raised, 10);
}
.flow-surface .flow-edge-label {
pointer-events: none;
}
For dense operational diagrams, prefer sparse edge labels plus a side inspector
for detail. Use Bronto primitives inside nodes or inspectors (ui-badge,
ui-dot, ui-property, ui-legend) rather than adding a Bronto graph-node
component before a second consumer proves the pattern repeats.
What belongs in the app
Keep these outside @ponchia/ui:
- authored or automatic node placement;
- graph data models and domain status names;
- brand/product icons;
- animation semantics, such as travelling reconciliation dots;
- click/hover selection behavior.
Bronto should provide the visual vocabulary and interop recipe. The graph renderer and product meaning remain the host application's job.