lustre

Types

pub type Attribute(action) =
  attribute.Attribute(action)
pub type Cmd(action) =
  cmd.Cmd(action)
pub type Element(action) =
  element.Element(action)
pub type Error {
  ElementNotFound
}

Constructors

  • ElementNotFound
pub opaque type Program(state, action)

Functions

pub fn application(init: #(a, Cmd(b)), update: fn(a, b) ->
    #(a, Cmd(b)), render: fn(a) -> Element(b)) -> Program(a, b)

Create a more complex application mimicing TEA – the Elm architecture. We start with some initial state, a function to update that state, and then a render function to derive our program’s view from that state.

Events produced by elements are passed a dispatch function that can be used to emit actions that trigger your update function to be called and trigger a rerender.

pub fn basic(element: Element(a)) -> Program(Nil, a)

Create a basic lustre program that just renders some element on the page. Note that this doesn’t mean the content is static! With element.stateful you can still create components with local state.

Basic lustre programs don’t have any global application state and so the plumbing is a lot simpler. If you find yourself passing lot’s state of state around, you might want to consider using application instead.

pub fn start(program: Program(a, b), selector: String) -> Result(
  fn(b) -> Nil,
  Error,
)

Once you have created a program with either basic or application, you need to actually start it! This function will mount your program to the DOM node that matches the query selector you provide.

If everything mounted OK, we’ll get back a dispatch function that you can call to send actions to your program and trigger an update.