m3e is a set of Gleam/Lustre wrappers for M3E — Material 3 Expressive components
m3e provides Gleam functions for all of the M3E components
Each M3E component is represented by a Gleam type, has
- a constructor function new(...), or, in special cases, bespoke constructors (such as circular() and linear() in ProgressIndicator)
- a render() function which creates a Lustre Element from the Gleam type
- setter functions which return a new record with one of the fields of the input record updated. As such, these functions are designed to be used in the Builder Pattern with Gleam's pipe operator
- where there are 3 or more fields in the opaque record of each component (and hence 3 or more setter functions), support is provided for the Config Record pattern, i.e. a Config type, and default_config(), from_config(), and render_config() functions
import m3e/button
let b = button.new("Press me", button.Filled) |> button.shape(button.Square) import lustre/element
import m3e/card
card.render_config(
card.Config(..card.default_config(), variant: card.Outlined),
[card.slot(card.Content)],
[element.text("This is a card")],
)Further documentation can be found at https://hexdocs.pm/m3e.
gleam add m3e@1
mkdir -p dist
cd dist
npm i @m3e/allThe examples/ folder contains a showcase application which will eventually replicate each of the M3E demonstration cases in the Gleam/Lustre context.