Merge pull request #428 from wbkd/develop
feat(edges): add labelBgBorderRadius option closes #421
This commit is contained in:
@@ -284,6 +284,7 @@ If you wanted to display this edge, you would need a node with id = 1 (source no
|
|||||||
- `labelShowBg`: boolean - default: `true`
|
- `labelShowBg`: boolean - default: `true`
|
||||||
- `labelBgStyle`: css properties for the text background
|
- `labelBgStyle`: css properties for the text background
|
||||||
- `labelBgPadding`: [number, number] background rectangle padding - default: `[2, 4]`
|
- `labelBgPadding`: [number, number] background rectangle padding - default: `[2, 4]`
|
||||||
|
- `labelBgBorderRadius`: number - default 2
|
||||||
- `arrowHeadType`: 'arrow' or 'arrowclosed' - defines the arrowhead of the edge
|
- `arrowHeadType`: 'arrow' or 'arrowclosed' - defines the arrowhead of the edge
|
||||||
- `markerEndId`: custom marker end url - if this is used `arrowHeadType` gets ignored
|
- `markerEndId`: custom marker end url - if this is used `arrowHeadType` gets ignored
|
||||||
- `isHidden`: if `true`, the edge will not be rendered
|
- `isHidden`: if `true`, the edge will not be rendered
|
||||||
|
|||||||
@@ -38,9 +38,10 @@ const initialElements = [
|
|||||||
source: '5',
|
source: '5',
|
||||||
target: '7',
|
target: '7',
|
||||||
label: 'label with styled bg',
|
label: 'label with styled bg',
|
||||||
labelBgStyle: { fill: '#555', color: '#fff', fillOpacity: 0.7 },
|
|
||||||
arrowHeadType: 'arrowclosed',
|
|
||||||
labelBgPadding: [8, 4],
|
labelBgPadding: [8, 4],
|
||||||
|
labelBgBorderRadius: 4,
|
||||||
|
labelBgStyle: { fill: '#FFCC00', color: '#fff', fillOpacity: 0.7 },
|
||||||
|
arrowHeadType: 'arrowclosed',
|
||||||
},
|
},
|
||||||
{ id: 'e5-8', source: '5', target: '8', type: 'custom', data: { text: 'custom edge' }, arrowHeadType: 'arrowclosed' },
|
{ id: 'e5-8', source: '5', target: '8', type: 'custom', data: { text: 'custom edge' }, arrowHeadType: 'arrowclosed' },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -50,10 +50,11 @@ export default memo(
|
|||||||
labelStyle,
|
labelStyle,
|
||||||
labelShowBg,
|
labelShowBg,
|
||||||
labelBgStyle,
|
labelBgStyle,
|
||||||
|
labelBgPadding,
|
||||||
|
labelBgBorderRadius,
|
||||||
style,
|
style,
|
||||||
arrowHeadType,
|
arrowHeadType,
|
||||||
markerEndId,
|
markerEndId,
|
||||||
labelBgPadding,
|
|
||||||
}: EdgeBezierProps) => {
|
}: EdgeBezierProps) => {
|
||||||
const [centerX, centerY] = getCenter({ sourceX, sourceY, targetX, targetY });
|
const [centerX, centerY] = getCenter({ sourceX, sourceY, targetX, targetY });
|
||||||
const path = getBezierPath({
|
const path = getBezierPath({
|
||||||
@@ -74,6 +75,7 @@ export default memo(
|
|||||||
labelShowBg={labelShowBg}
|
labelShowBg={labelShowBg}
|
||||||
labelBgStyle={labelBgStyle}
|
labelBgStyle={labelBgStyle}
|
||||||
labelBgPadding={labelBgPadding}
|
labelBgPadding={labelBgPadding}
|
||||||
|
labelBgBorderRadius={labelBgBorderRadius}
|
||||||
/>
|
/>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,16 @@ import React, { memo, useRef, useState, useEffect } from 'react';
|
|||||||
import { EdgeTextProps, Rect } from '../../types';
|
import { EdgeTextProps, Rect } from '../../types';
|
||||||
|
|
||||||
export default memo(
|
export default memo(
|
||||||
({ x, y, label, labelStyle = {}, labelShowBg = true, labelBgStyle = {}, labelBgPadding = [2, 4] }: EdgeTextProps) => {
|
({
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
label,
|
||||||
|
labelStyle = {},
|
||||||
|
labelShowBg = true,
|
||||||
|
labelBgStyle = {},
|
||||||
|
labelBgPadding = [2, 4],
|
||||||
|
labelBgBorderRadius = 2,
|
||||||
|
}: EdgeTextProps) => {
|
||||||
const edgeRef = useRef<SVGTextElement>(null);
|
const edgeRef = useRef<SVGTextElement>(null);
|
||||||
const [edgeTextBbox, setEdgeTextBbox] = useState<Rect>({ x: 0, y: 0, width: 0, height: 0 });
|
const [edgeTextBbox, setEdgeTextBbox] = useState<Rect>({ x: 0, y: 0, width: 0, height: 0 });
|
||||||
|
|
||||||
@@ -34,6 +43,8 @@ export default memo(
|
|||||||
height={edgeTextBbox.height + 2 * labelBgPadding[1]}
|
height={edgeTextBbox.height + 2 * labelBgPadding[1]}
|
||||||
className="react-flow__edge-textbg"
|
className="react-flow__edge-textbg"
|
||||||
style={labelBgStyle}
|
style={labelBgStyle}
|
||||||
|
rx={labelBgBorderRadius}
|
||||||
|
ry={labelBgBorderRadius}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<text className="react-flow__edge-text" y={edgeTextBbox.height / 2} dy="0.3em" ref={edgeRef} style={labelStyle}>
|
<text className="react-flow__edge-text" y={edgeTextBbox.height / 2} dy="0.3em" ref={edgeRef} style={labelStyle}>
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ export default memo(
|
|||||||
labelShowBg,
|
labelShowBg,
|
||||||
labelBgStyle,
|
labelBgStyle,
|
||||||
labelBgPadding,
|
labelBgPadding,
|
||||||
|
labelBgBorderRadius,
|
||||||
style,
|
style,
|
||||||
sourcePosition = Position.Bottom,
|
sourcePosition = Position.Bottom,
|
||||||
targetPosition = Position.Top,
|
targetPosition = Position.Top,
|
||||||
@@ -162,6 +163,7 @@ export default memo(
|
|||||||
labelShowBg={labelShowBg}
|
labelShowBg={labelShowBg}
|
||||||
labelBgStyle={labelBgStyle}
|
labelBgStyle={labelBgStyle}
|
||||||
labelBgPadding={labelBgPadding}
|
labelBgPadding={labelBgPadding}
|
||||||
|
labelBgBorderRadius={labelBgBorderRadius}
|
||||||
/>
|
/>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ export default memo(
|
|||||||
labelShowBg,
|
labelShowBg,
|
||||||
labelBgStyle,
|
labelBgStyle,
|
||||||
labelBgPadding,
|
labelBgPadding,
|
||||||
|
labelBgBorderRadius,
|
||||||
style,
|
style,
|
||||||
arrowHeadType,
|
arrowHeadType,
|
||||||
markerEndId,
|
markerEndId,
|
||||||
@@ -35,6 +36,7 @@ export default memo(
|
|||||||
labelShowBg={labelShowBg}
|
labelShowBg={labelShowBg}
|
||||||
labelBgStyle={labelBgStyle}
|
labelBgStyle={labelBgStyle}
|
||||||
labelBgPadding={labelBgPadding}
|
labelBgPadding={labelBgPadding}
|
||||||
|
labelBgBorderRadius={labelBgBorderRadius}
|
||||||
/>
|
/>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ interface EdgeWrapperProps {
|
|||||||
labelShowBg?: boolean;
|
labelShowBg?: boolean;
|
||||||
labelBgStyle?: CSSProperties;
|
labelBgStyle?: CSSProperties;
|
||||||
labelBgPadding?: [number, number];
|
labelBgPadding?: [number, number];
|
||||||
|
labelBgBorderRadius?: number;
|
||||||
className?: string;
|
className?: string;
|
||||||
onClick?: (event: React.MouseEvent, edge: Edge) => void;
|
onClick?: (event: React.MouseEvent, edge: Edge) => void;
|
||||||
animated?: boolean;
|
animated?: boolean;
|
||||||
@@ -38,6 +39,7 @@ export default (EdgeComponent: ComponentType<EdgeCompProps>) => {
|
|||||||
labelShowBg,
|
labelShowBg,
|
||||||
labelBgStyle,
|
labelBgStyle,
|
||||||
labelBgPadding,
|
labelBgPadding,
|
||||||
|
labelBgBorderRadius,
|
||||||
className,
|
className,
|
||||||
isHidden,
|
isHidden,
|
||||||
data,
|
data,
|
||||||
@@ -80,6 +82,7 @@ export default (EdgeComponent: ComponentType<EdgeCompProps>) => {
|
|||||||
labelShowBg={labelShowBg}
|
labelShowBg={labelShowBg}
|
||||||
labelBgStyle={labelBgStyle}
|
labelBgStyle={labelBgStyle}
|
||||||
labelBgPadding={labelBgPadding}
|
labelBgPadding={labelBgPadding}
|
||||||
|
labelBgBorderRadius={labelBgBorderRadius}
|
||||||
data={data}
|
data={data}
|
||||||
{...rest}
|
{...rest}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ function renderEdge(
|
|||||||
labelShowBg={edge.labelShowBg}
|
labelShowBg={edge.labelShowBg}
|
||||||
labelBgStyle={edge.labelBgStyle}
|
labelBgStyle={edge.labelBgStyle}
|
||||||
labelBgPadding={edge.labelBgPadding}
|
labelBgPadding={edge.labelBgPadding}
|
||||||
|
labelBgBorderRadius={edge.labelBgBorderRadius}
|
||||||
style={edge.style}
|
style={edge.style}
|
||||||
arrowHeadType={edge.arrowHeadType}
|
arrowHeadType={edge.arrowHeadType}
|
||||||
source={sourceId}
|
source={sourceId}
|
||||||
|
|||||||
@@ -98,6 +98,10 @@ const useElementUpdater = (propElements: Elements): void => {
|
|||||||
edgeProps.labelBgPadding = propEdge.labelBgPadding;
|
edgeProps.labelBgPadding = propEdge.labelBgPadding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeof propEdge.labelBgBorderRadius !== 'undefined') {
|
||||||
|
edgeProps.labelBgBorderRadius = propEdge.labelBgBorderRadius;
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof labelBgStyle !== 'undefined') {
|
if (typeof labelBgStyle !== 'undefined') {
|
||||||
edgeProps.labelBgStyle = labelBgStyle;
|
edgeProps.labelBgStyle = labelBgStyle;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ export interface Edge {
|
|||||||
labelShowBg?: boolean;
|
labelShowBg?: boolean;
|
||||||
labelBgStyle?: CSSProperties;
|
labelBgStyle?: CSSProperties;
|
||||||
labelBgPadding?: [number, number];
|
labelBgPadding?: [number, number];
|
||||||
|
labelBgBorderRadius?: number;
|
||||||
style?: CSSProperties;
|
style?: CSSProperties;
|
||||||
animated?: boolean;
|
animated?: boolean;
|
||||||
arrowHeadType?: ArrowHeadType;
|
arrowHeadType?: ArrowHeadType;
|
||||||
@@ -98,6 +99,7 @@ export interface EdgeProps {
|
|||||||
labelShowBg?: boolean;
|
labelShowBg?: boolean;
|
||||||
labelBgStyle?: CSSProperties;
|
labelBgStyle?: CSSProperties;
|
||||||
labelBgPadding?: [number, number];
|
labelBgPadding?: [number, number];
|
||||||
|
labelBgBorderRadius?: number;
|
||||||
style?: CSSProperties;
|
style?: CSSProperties;
|
||||||
arrowHeadType?: ArrowHeadType;
|
arrowHeadType?: ArrowHeadType;
|
||||||
markerEndId?: string;
|
markerEndId?: string;
|
||||||
@@ -238,6 +240,7 @@ export interface EdgeCompProps {
|
|||||||
labelShowBg?: boolean;
|
labelShowBg?: boolean;
|
||||||
labelBgStyle?: CSSProperties;
|
labelBgStyle?: CSSProperties;
|
||||||
labelBgPadding?: [number, number];
|
labelBgPadding?: [number, number];
|
||||||
|
labelBgBorderRadius?: number;
|
||||||
onClick?: (event: ReactMouseEvent, edge: Edge) => void;
|
onClick?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
animated?: boolean;
|
animated?: boolean;
|
||||||
selected?: boolean;
|
selected?: boolean;
|
||||||
@@ -252,6 +255,7 @@ export interface EdgeTextProps {
|
|||||||
labelShowBg?: boolean;
|
labelShowBg?: boolean;
|
||||||
labelBgStyle?: CSSProperties;
|
labelBgStyle?: CSSProperties;
|
||||||
labelBgPadding?: [number, number];
|
labelBgPadding?: [number, number];
|
||||||
|
labelBgBorderRadius?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type NodePosUpdate = {
|
export type NodePosUpdate = {
|
||||||
|
|||||||
Reference in New Issue
Block a user