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
-
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), ) -
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
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 memo(
key key: String,
dependencies dependencies: List(ref.Ref),
view view: fn() -> Element(message),
) -> Element(message)
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 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_raw_content(value: a) -> RawContent
Convert any value to a RawContent. This is the hack that make this work