Packages
surface
0.9.5
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/surface/components/form/textarea.ex
defmodule Surface.Components.Form.TextArea do
@moduledoc """
An input field that let the user enter a **multi-line** text.
Provides a wrapper for Phoenix.HTML.Form's `textarea/3` function.
All options passed via `opts` will be sent to `textarea/3`. Explicitly
defined properties like `value` and `class` can be set directly and will
override anything in `opts`.
## Examples
```
<TextArea form="user" field="summary" cols="5" rows="10" opts={autofocus: "autofocus"} />
```
"""
use Surface.Components.Form.Input
import Phoenix.HTML.Form, only: [textarea: 3]
import Surface.Components.Utils, only: [events_to_opts: 1]
import Surface.Components.Form.Utils
@doc "Specifies the visible number of lines in a text area"
prop rows, :string
@doc "Specifies the visible width of a text area"
prop cols, :string
def render(assigns) do
helper_opts = props_to_opts(assigns)
attr_opts = props_to_attr_opts(assigns, [:value, :rows, :cols, class: get_default_class()])
event_opts = events_to_opts(assigns)
opts =
assigns.opts
|> Keyword.merge(helper_opts)
|> Keyword.merge(attr_opts)
|> Keyword.merge(event_opts)
assigns = assign(assigns, opts: opts)
~F[{textarea(@form, @field, @opts)}]
end
end