allow null and correct behavior

This commit is contained in:
Alessandro
2025-08-11 13:02:16 +02:00
parent d8808e09e6
commit 4c389117b7
4 changed files with 50 additions and 6 deletions
+39 -1
View File
@@ -82,6 +82,18 @@ const initialNodes: Node[] = [
data: { label: 'Output 12' }, data: { label: 'Output 12' },
position: { x: 825, y: 300 }, position: { x: 825, y: 300 },
}, },
{
id: '13',
type: 'output',
data: { label: 'Output 13' },
position: { x: 900, y: 200 },
},
{
id: '14',
type: 'output',
data: { label: 'Output 14' },
position: { x: 825, y: 100 },
},
]; ];
const initialEdges: Edge[] = [ const initialEdges: Edge[] = [
@@ -211,7 +223,7 @@ const initialEdges: Edge[] = [
id: 'e4-12', id: 'e4-12',
source: '4', source: '4',
target: '12', target: '12',
label: 'Marker No Prop Color (should use CSS variable)', label: 'Marker explicitly undefined Color (defaults to none)',
className: 'css-variable-edge', className: 'css-variable-edge',
markerEnd: { markerEnd: {
type: MarkerType.ArrowClosed, type: MarkerType.ArrowClosed,
@@ -220,6 +232,31 @@ const initialEdges: Edge[] = [
height: 40, height: 40,
}, },
}, },
{
id: 'e4-13',
source: '4',
target: '13',
label: 'Marker null Color (should use `--xy-edge-stroke` CSS variable)',
className: 'css-variable-edge',
markerEnd: {
type: MarkerType.ArrowClosed,
color: null,
width: 40,
height: 40,
},
},
{
id: 'e4-14',
source: '4',
target: '14',
label: 'Marker implicitly undefined Color (defaults to defaultMarkerColor)',
className: 'css-variable-edge',
markerEnd: {
type: MarkerType.ArrowClosed,
width: 40,
height: 40,
},
},
]; ];
const edgeTypes: EdgeTypes = { const edgeTypes: EdgeTypes = {
@@ -271,6 +308,7 @@ const EdgesFlow = () => {
onEdgeMouseLeave={onEdgeMouseLeave} onEdgeMouseLeave={onEdgeMouseLeave}
onDelete={console.log} onDelete={console.log}
defaultEdgeOptions={defaultEdgeOptions} defaultEdgeOptions={defaultEdgeOptions}
defaultMarkerColor={'purple'}
> >
<MiniMap /> <MiniMap />
<Controls /> <Controls />
@@ -8,7 +8,7 @@ type SymbolProps = Omit<EdgeMarker, 'type'>;
const ArrowSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => { const ArrowSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => {
const style = { const style = {
strokeWidth, strokeWidth,
...(color && color !== 'none' && { stroke: color, fill: color }), ...(color && { stroke: color }),
}; };
return <polyline style={style} strokeLinecap="round" strokeLinejoin="round" fill="none" points="-5,-4 0,0 -5,4" />; return <polyline style={style} strokeLinecap="round" strokeLinejoin="round" fill="none" points="-5,-4 0,0 -5,4" />;
@@ -17,7 +17,7 @@ const ArrowSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => {
const ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => { const ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }: SymbolProps) => {
const style = { const style = {
strokeWidth, strokeWidth,
...(color && color !== 'none' && { stroke: color, fill: color }), ...(color && { stroke: color, fill: color }),
}; };
return <polyline style={style} strokeLinecap="round" strokeLinejoin="round" points="-5,-4 0,0 -5,4 -5,-4" />; return <polyline style={style} strokeLinecap="round" strokeLinejoin="round" points="-5,-4 0,0 -5,4 -5,-4" />;
+8 -2
View File
@@ -139,7 +139,12 @@ export interface ReactFlowProps<NodeType extends Node = Node, EdgeType extends E
* This event fires when the user releases the source or target of an editable edge. It is called * This event fires when the user releases the source or target of an editable edge. It is called
* even if an edge update does not occur. * even if an edge update does not occur.
*/ */
onReconnectEnd?: (event: MouseEvent | TouchEvent, edge: EdgeType, handleType: HandleType, connectionState: FinalConnectionState) => void; onReconnectEnd?: (
event: MouseEvent | TouchEvent,
edge: EdgeType,
handleType: HandleType,
connectionState: FinalConnectionState
) => void;
/** /**
* Use this event handler to add interactivity to a controlled flow. * Use this event handler to add interactivity to a controlled flow.
* It is called on node drag, select, and move. * It is called on node drag, select, and move.
@@ -494,9 +499,10 @@ export interface ReactFlowProps<NodeType extends Node = Node, EdgeType extends E
nodeExtent?: CoordinateExtent; nodeExtent?: CoordinateExtent;
/** /**
* Color of edge markers. * Color of edge markers.
* You can pass `null` to use the CSS variable `--xy-edge-stroke` for the marker color.
* @default '#b1b1b7' * @default '#b1b1b7'
*/ */
defaultMarkerColor?: string; defaultMarkerColor?: string | null;
/** /**
* Controls if the viewport should zoom by scrolling inside the container. * Controls if the viewport should zoom by scrolling inside the container.
* @default true * @default true
+1 -1
View File
@@ -91,7 +91,7 @@ export enum ConnectionLineType {
*/ */
export type EdgeMarker = { export type EdgeMarker = {
type: MarkerType | `${MarkerType}`; type: MarkerType | `${MarkerType}`;
color?: string; color?: string | null;
width?: number; width?: number;
height?: number; height?: number;
markerUnits?: string; markerUnits?: string;