Packages
kino
0.2.0
0.19.0
0.18.0
0.17.0
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.2
0.6.1
0.6.0
retired
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Interactive widgets for Livebook
Current section
Files
Jump to
Current section
Files
lib/kino/render.ex
defprotocol Kino.Render do
@moduledoc """
Protocol defining term formatting in the context of Livebook.
"""
@fallback_to_any true
@doc """
Transforms the given value into a Livebook-compatible output.
"""
@spec to_livebook(t()) :: Kino.Output.t()
def to_livebook(value)
end
defimpl Kino.Render, for: Any do
def to_livebook(term) do
Kino.Output.inspect(term)
end
end
# Kino widgets
defimpl Kino.Render, for: Kino.VegaLite do
def to_livebook(widget) do
Kino.Output.vega_lite_dynamic(widget.pid)
end
end
defimpl Kino.Render, for: Kino.ETS do
def to_livebook(widget) do
Kino.Output.table_dynamic(widget.pid)
end
end
defimpl Kino.Render, for: Kino.DataTable do
def to_livebook(widget) do
Kino.Output.table_dynamic(widget.pid)
end
end
defimpl Kino.Render, for: Kino.Image do
def to_livebook(image) do
Kino.Output.image(image.content, image.mime_type)
end
end
# Elixir built-ins
defimpl Kino.Render, for: Reference do
def to_livebook(reference) do
cond do
accessible_ets_table?(reference) ->
reference |> Kino.ETS.new() |> Kino.Render.to_livebook()
true ->
Kino.Output.inspect(reference)
end
end
defp accessible_ets_table?(reference) when is_reference(reference) do
try do
case :ets.info(reference, :protection) do
:undefined -> false
:private -> false
_ -> true
end
rescue
# When the reference is not a valid table identifier
ArgumentError -> false
end
end
end
# External packages
defimpl Kino.Render, for: VegaLite do
def to_livebook(vl) do
spec = VegaLite.to_spec(vl)
Kino.Output.vega_lite_static(spec)
end
end