# Kino UI widgets
```elixir
Mix.install([
{:kino, "~> 0.12.3"}
])
```
## Kino.Input
````elixir
defmodule Helpers do
def display_widget_demo(function_name) when function_name == "select" do
code =
quote do
Kino.Input.select(unquote(function_name), en: "English", fr: "Français")
end
markdown = build_code_sample(function_name, code)
render_input_demo(markdown, code)
end
def display_widget_demo(function_name) when function_name == "image" do
code =
quote do
Kino.Input.image(unquote(function_name), format: :png, width: 500, height: 500)
end
markdown = build_code_sample(function_name, code)
render_input_demo(markdown, code)
end
def display_widget_demo(function_name) do
code =
quote do
Kino.Input.unquote(String.to_atom(function_name))(unquote(function_name))
end
markdown = build_code_sample(function_name, code)
render_input_demo(markdown, code)
end
defp build_code_sample(title, code) do
Kino.Markdown.new("""
### #{title}
```elixir
#{Macro.to_string(code)}
```
""")
end
defp render_input_demo(code_sample_markdown, code) do
{result, _bindings} = Code.eval_quoted(code)
Kino.render(
Kino.Layout.grid([code_sample_markdown, result, Kino.HTML.new("
")], boxed: true)
)
Kino.render(Kino.HTML.new("
"))
end
end
````
```elixir
import Helpers
```
```elixir
Kino.Markdown.new("## Kino.input")
```
```elixir
kino_input_functions = ~w(
audio
checkbox
color
file
image
number
password
range
select
text
textarea
url
utc_datetime
utc_time
)
Enum.each(kino_input_functions, fn function_name ->
display_widget_demo(function_name)
end)
```