Dala.Renderer (dala v0.1.2)

Copy Markdown View Source

Serializes a component tree to a binary command stream and passes it to the platform NIF in a single call. Compose (Android) and SwiftUI (iOS) handle diffing and rendering internally.

Node format

%{
  type: :column,
  props: %{padding: :space_md, background: :surface},
  children: [
    %{type: :text,   props: %{text: "Hello", text_size: :xl, text_color: :on_surface}, children: []},
    %{type: :button, props: %{text: "Tap", on_tap: self()},    children: []}
  ]
}

Token resolution

Atom values for color props, spacing props, radius props, and text sizes are resolved at render time through the active Dala.Theme and the base palette.

Component defaults

When a component's props omit styling keys, the renderer injects sensible defaults from the active theme. Explicit props always win over defaults.

Platform blocks

Props scoped to one platform are silently ignored on the other:

props: %{padding: 12, ios: %{padding: 20}}
# iOS sees padding: 20; Android sees padding: 12

Injecting a mock NIF

Dala.Renderer.render(tree, :android, MockNIF)

Binary protocol

See Dala.Renderer module docs and guides/binary_protocol.md for the full binary protocol specification (v3).

Summary

Functions

Get available colors from theme.

Encode patches to binary frame format for the native side.

Get text sizes from theme.

Functions

colors()

@spec colors() :: map()

Get available colors from theme.

encode_frame(patches)

@spec encode_frame([Dala.Diff.patch()]) :: binary()

Encode patches to binary frame format for the native side.

render(tree, platform, nif \\ Dala.Platform.Native, transition \\ :none)

@spec render(Dala.Node.t() | map(), atom(), term(), atom()) ::
  {:ok, :binary_tree} | {:error, term()}

Render a UI tree for the given platform.

render_fast(tree, platform, nif \\ Dala.Platform.Native, transition \\ :none)

@spec render_fast(Dala.Node.t() | map(), atom(), term(), atom()) ::
  {:ok, :binary_tree} | {:error, term()}

Fast render path for simple updates.

render_patches(old_tree, new_tree, platform, nif \\ Dala.Platform.Native, transition \\ :none)

@spec render_patches(
  Dala.Node.t() | map() | nil,
  Dala.Node.t() | map(),
  atom(),
  term(),
  atom()
) ::
  {:ok, [Dala.Diff.patch()]} | {:error, term()}

Compute patches between old and new trees.

text_sizes()

@spec text_sizes() :: map()

Get text sizes from theme.