FlowChart builder in elm.
elm install vernacular-ai/elm-flow-chart
- BasicExample [Minimal setup required to use the lib]
- MultipleNodeTypesExample [Configure different node types and link or port properties]
- EventListenerExample [Subscribing to flowchart events]
- AddNodesExample [Add or Remove Nodes]
- SaveLoadFlowChartExample [Save or load Flowchart state as json]
Its an easy to use library to build flow charts or state diagrams in elm.
1. Import this library
import FlowChart
import FlowChart.Types as FCTypes2. Define Model
type alias Model =
{ fcModel : FlowChart.Model }3. Some Initialization
type Msg
= CanvasMsg FlowChart.Msg
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.map CanvasMsg (FlowChart.subscriptions model)
init : () -> ( Model, Cmd Msg )
init _ =
( { fcModel =
FlowChart.init
{ nodes =
[ createNode "node-0" (FCTypes.Vector2 10 10)
, createNode "node-1" (FCTypes.Vector2 100 200)
]
, position = FCTypes.Vector2 0 0
, links = []
, portConfig = FlowChart.defaultPortConfig
, linkConfig = FlowChart.defaultLinkConfig
}
CanvasMsg
}
, Cmd.none
)
{-| Defines how a node should look. Map a string node type to html.
-}
nodeToHtml : FCNode -> Model -> Html FlowChart.Msg
nodeToHtml node model =
div
[ A.style "width" "100%"
, A.style "height" "100%"
, A.style "background-color" "white"
]
[ text nodeType ]
createNode : String -> FCTypes.Vector2 -> FCTypes.FCNode
createNode id position =
{ position = position
, id = id
, dim = FCTypes.Vector2 130 100
, nodeType = "default"
, ports =
[ { id = "port-" ++ id ++ "-0", position = FCTypes.Vector2 0 0.42 }
]
}FlowChart init takes nodes, position, links and some configs for initial state. See FCTypes to understand types used in the library.
4. Update
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
CanvasMsg cMsg ->
FlowChart.update flowChartEvent cMsg model5. View
view : Model -> Html Msg
view model =
div []
[ FlowChart.view model
nodeToHtml
[ A.style "height" "600px"
, A.style "width" "85%"
, A.style "background-color" "lightgrey"
]
]See examples to understand all the features and how to use them.
Visit here for docs and more information.