agnostic/runtime/headless

Types

pub type Config(message) {
  Config(
    open_shadow_root: Bool,
    adopt_styles: Bool,
    attributes: dict.Dict(
      String,
      fn(String) -> Result(message, Nil),
    ),
    properties: dict.Dict(String, decode.Decoder(message)),
    contexts: dict.Dict(String, decode.Decoder(message)),
    on_connect: option.Option(message),
    on_disconnect: option.Option(message),
  )
}

Constructors

pub type Message(message) {
  ClientDispatchedMessage(message: transport.ServerMessage)
  ClientRegisteredSubject(
    client: process.Subject(transport.ClientMessage(message)),
  )
  ClientDeregisteredSubject(
    client: process.Subject(transport.ClientMessage(message)),
  )
  ClientRegisteredCallback(
    callback: fn(transport.ClientMessage(message)) -> Nil,
  )
  ClientDeregisteredCallback(
    callback: fn(transport.ClientMessage(message)) -> Nil,
  )
  EffectAddedSelector(
    selector: process.Selector(Message(message)),
  )
  EffectDispatchedMessage(message: message)
  EffectEmitEvent(name: String, data: json.Json)
  EffectProvidedValue(key: String, value: json.Json)
  EffectRequestedContextSubscription(
    key: String,
    decoder: decode.Decoder(message),
  )
  EffectRemovedContextSubscription(key: String)
  MonitorReportedDown(monitor: process.Monitor)
  SystemRequestedShutdown
}

Constructors

pub type ServerComponent(message) =
  process.Subject(Message(message))
pub type State(model, message) {
  State(
    self: process.Subject(Message(message)),
    selector: process.Selector(Message(message)),
    base_selector: process.Selector(Message(message)),
    model: model,
    update: fn(model, message) -> #(model, effect.Effect(message)),
    view: fn(model) -> vnode.Element(message),
    config: Config(message),
    vdom: vnode.Element(message),
    cache: cache.Cache(message),
    providers: dict.Dict(String, json.Json),
    subscribers: dict.Dict(
      process.Subject(transport.ClientMessage(message)),
      process.Monitor,
    ),
    callbacks: set.Set(
      fn(transport.ClientMessage(message)) -> Nil,
    ),
  )
}

Constructors

Values

pub fn start(
  name: option.Option(process.Name(Message(message))),
  init: fn(arguments) -> #(model, effect.Effect(message)),
  update: fn(model, message) -> #(model, effect.Effect(message)),
  view: fn(model) -> vnode.Element(message),
  config: Config(message),
  arguments: arguments,
) -> Result(
  actor.Started(process.Subject(Message(message))),
  actor.StartError,
)
Search Document