Coloring's picture
feat: add Flow component
176823e
|
raw
history blame
8.12 kB

Flow

A Flow component implemented based on reactflow.

  • Supports customization of node rendering through a schema.
  • Allows for custom node render components with interaction from Python.

How to Use

Defining Schema Nodes (Important)

See: Define Schema

Basic Usage

Component Options

Custom Node Types (Advanced usage, requires frontend knowledge)

API and Parameter List

value

Interface definition:

class NodePosition(GradioModel):
    x: Optional[int] = 0
    y: Optional[int] = 0


class Node(GradioModel):
    id: Optional[str] = None
    name: str
    title: Optional[str] = None
    position: Optional[Union[NodePosition, dict]] = None
    data: Optional[dict] = None

class EdgePort(GradioModel):
    attr: Optional[str] = None
    attrItemIndex: Optional[int] = None
    handleIndex: Optional[int] = None

class Edge(GradioModel):
    id: Optional[str] = None
    source: str
    target: str
    sourcePort: Optional[Union[EdgePort, dict]] = None
    targetPort: Optional[Union[EdgePort, dict]] = None


class FlowData(GradioModel):
    nodes: Optional[List[Union[Node, dict]]] = []
    edges: Optional[List[Union[Edge, dict]]] = []

props

Property Type Default Description
height int | str 600 Height of the Flow component.
sync_on_data_change bool None Whether to sync the Python value only on data change (e.g., node attributes, node count, edge count, connection ports, not including node positions). If you want better page performance without full data sync, set this to True.
schema FlowSchemaDict | dict None Defines the nodes and edges of the Flow component.
show_sidebar bool True Whether to display the sidebar in the Flow component.
show_minimap bool True Whether to display the minimap in the Flow component.
show_controls bool True Whether to display the controls bar in the Flow component.
background_props BackgroundPropsDict | dict BackgroundPropsDict definition below None Modify the background of the Flow component, see the BackgroundPropsDict type.
min_zoom int 0.1 Minimum zoom level for the Flow component.
max_zoom int 2 Maximum zoom level for the Flow component.
custom_components dict[str, CustomComponentDict] CustomComponentDict definition below None Supports user-defined custom tags and controls tag rendering styles and triggers Python events through js.

BackgroundPropsDict definition:

class BackgroundPropsDict(TypedDict):
    color: Optional[str]
    className: Optional[str]
    # The gap between patterns. Passing in a tuple allows you to control the x and y gap independently.
    gap: Optional[Union[int, Tuple[int, int]]]
    # The radius of each dot or the size of each rectangle if BackgroundVariant.Dots or BackgroundVariant.Cross is used. This defaults to 1 or 6 respectively, or ignored if BackgroundVariant.Lines is used.
    size: Optional[int]
    offset: Optional[int]
    lineWidth: Optional[int]
    variant: Optional[Literal['dots', 'lines', 'cross']]

CustomComponentDict definition:

class CustomComponentDict(TypedDict):
    props: Optional[List[str]]
    template: Optional[str]
    js: Optional[str]

Event Listeners

Event Description
mgr.Flow.change(fn, ...) Triggers when the value updates. If sync_on_data_change is True, the actual data at this point might not be up-to-date; consider listening to the data_change event instead.
mgr.Flow.data_change(fn, ...) Triggers when there's a data change (e.g., node attributes, node count, edge count, connection ports), but not node positions.
mgr.Flow.custom(fn, ...) Triggers when a custom label event occurs. The EventData includes:
- id: ID of the currently triggered node.
- node: Type of the currently triggered node.
- attr: Attributes of the currently triggered node.
- index: Index of the attribute if it's a list.
- value: Custom passed-in value.