agnostic/vdom/vnode

Types

pub type Element(message) {
  Fragment(
    kind: Int,
    key: String,
    children: List(Element(message)),
    keyed_children: mutable_map.MutableMap(
      String,
      Element(message),
    ),
  )
  Element(
    kind: Int,
    key: String,
    namespace: String,
    tag: String,
    attributes: List(vattr.Attribute(message)),
    children: List(Element(message)),
    keyed_children: mutable_map.MutableMap(
      String,
      Element(message),
    ),
  )
  Text(kind: Int, key: String, content: String)
  RawContainer(
    kind: Int,
    key: String,
    namespace: String,
    tag: String,
    attributes: List(vattr.Attribute(message)),
    content: RawContent,
    compare: option.Option(fn(RawContent, RawContent) -> Bool),
  )
  RawNode(
    kind: Int,
    key: String,
    content: RawContent,
    compare: option.Option(fn(RawContent, RawContent) -> Bool),
  )
  Map(
    kind: Int,
    key: String,
    mapper: fn(dynamic.Dynamic) -> dynamic.Dynamic,
    child: Element(message),
  )
  Memo(
    kind: Int,
    key: String,
    dependencies: List(ref.Ref),
    view: fn() -> Element(message),
  )
}

Constructors

pub type Memos(message) =
  mutable_map.MutableMap(
    fn() -> Element(message),
    Element(message),
  )

An external type for storing platform-specific raw content. For DOM platforms, this holds HTML strings. For other platforms (like OpenTUI), this can hold raw platform nodes. It’s defined as external to avoid polluting the Element type with another generic

pub type RawContent

A comparator function for raw content. Used by the diff algorithm to determine if raw content has changed when reference equality isn’t sufficient.

pub type RawContentComparator =
  fn(RawContent, RawContent) -> Bool
pub type RawContentSerializer =
  fn(RawContent) -> String
pub type View(message) =
  fn() -> Element(message)

Values

pub fn element(
  key key: String,
  namespace namespace: String,
  tag tag: String,
  attributes attributes: List(vattr.Attribute(message)),
  children children: List(Element(message)),
  keyed_children keyed_children: mutable_map.MutableMap(
    String,
    Element(message),
  ),
) -> Element(message)
pub const element_kind: Int
pub fn empty_keyed_children() -> mutable_map.MutableMap(
  String,
  Element(message),
)

Create an empty keyed children map. Used internally when constructing elements without keyed children.

pub fn fragment(
  key key: String,
  children children: List(Element(message)),
  keyed_children keyed_children: mutable_map.MutableMap(
    String,
    Element(message),
  ),
) -> Element(message)
pub const fragment_kind: Int
pub fn map(element: Element(a), mapper: fn(a) -> b) -> Element(b)
pub const map_kind: Int
pub fn memo(
  key key: String,
  dependencies dependencies: List(ref.Ref),
  view view: fn() -> Element(message),
) -> Element(message)
pub const memo_kind: Int
pub fn raw_container(
  key key: String,
  namespace namespace: String,
  tag tag: String,
  attributes attributes: List(vattr.Attribute(message)),
  content content: a,
  compare compare: option.Option(fn(a, a) -> Bool),
) -> Element(message)
pub const raw_container_kind: Int
pub fn raw_content_to_string(content: RawContent) -> String

Convert RawContent back to a String. This should only be used when you know the content is a String (e.g., in server-side HTML rendering).

pub fn raw_node(
  key key: String,
  content content: a,
  compare compare: option.Option(fn(a, a) -> Bool),
) -> Element(message)
pub const raw_node_kind: Int
pub fn text(
  key key: String,
  content content: String,
) -> Element(message)
pub const text_kind: Int
pub fn to_json(
  node: Element(message),
  memos: mutable_map.MutableMap(
    fn() -> Element(message),
    Element(message),
  ),
  serialize_raw_content: fn(RawContent) -> String,
) -> json.Json
pub fn to_keyed(
  key: String,
  node: Element(message),
) -> Element(message)
pub fn to_raw_content(value: a) -> RawContent

Convert any value to a RawContent. This is the hack that make this work

Search Document