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.