Bosatsu packages

Yichus/UI

Builtin package (resource ui.bosatsu). This is the complete package source used by this build. The export list names its public API; definitions below give the types and behavior.

New to the API? Start with Make a calculator or Build an API, then use this page to look up a definition.

package Yichus/UI

from Bosatsu/Predef import String, Int, List, Unit
from Yichus/IO import IO, pure

export (
  VNode,
  State,
  ListState,
  h, text, fragment,
  state, read, write,
  list_state, list_read, list_append, list_remove_at, list_length, list_view, list_view_indexed, list_write,
  on_click, on_click_pos, on_input, on_change, on_keydown, on_keyup,
  on_dragstart, on_dragover, on_drop, on_dragleave,
  on_touchstart, on_touchmove, on_touchend,
  on_frame
)

exposes Yichus/IO

external type VNode

# Mutable handles both read and write a; their element type is invariant.
external type State[a: *]
external type ListState[a: *]

external def h(tag: String, props: List[(String, String)], children: List[VNode]) -> VNode
external def text(content: String) -> VNode
external def fragment(children: List[VNode]) -> VNode
external def state[a](initial: a) -> IO[State[a]]
external def read[a](state: State[a]) -> IO[a]
external def write[a](state: State[a], value: a) -> IO[Unit]
external def list_state[a](initial: List[a]) -> IO[ListState[a]]
external def list_read[a](state: ListState[a]) -> IO[List[a]]
external def list_append[a](state: ListState[a], value: a) -> IO[Unit]
external def list_remove_at[a](state: ListState[a], index: Int) -> IO[Unit]
external def list_length[a](state: ListState[a]) -> IO[Int]
external def list_view[a](state: ListState[a], render: a -> VNode) -> VNode
external def list_view_indexed[a](state: ListState[a], render: a -> Int -> VNode) -> VNode
external def list_write[a](state: ListState[a], value: List[a]) -> IO[Unit]
external def on_click(handler: IO[Unit]) -> (String, String)
external def on_click_pos(handler: String -> IO[Unit]) -> (String, String)
external def on_input(handler: String -> IO[Unit]) -> (String, String)
external def on_change(handler: String -> IO[Unit]) -> (String, String)
external def on_keydown(handler: String -> IO[Unit]) -> (String, String)
external def on_keyup(handler: String -> IO[Unit]) -> (String, String)
external def on_dragstart(handler: IO[Unit]) -> (String, String)
external def on_dragover(handler: IO[Unit]) -> (String, String)
external def on_drop(handler: IO[Unit]) -> (String, String)
external def on_dragleave(handler: IO[Unit]) -> (String, String)
external def on_touchstart(handler: String -> IO[Unit]) -> (String, String)
external def on_touchmove(handler: String -> IO[Unit]) -> (String, String)
external def on_touchend(handler: String -> IO[Unit]) -> (String, String)
external def on_frame(handler: IO[Unit]) -> (String, String)

# Keep Prog import live at term level to satisfy Bosatsu unused-import checks.
io_marker = pure(())