Packages
surface
0.3.2
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/input.ex
defmodule Surface.Components.Form.Input do
@moduledoc false
defmacro __using__(_) do
quote do
use Surface.Component
import unquote(__MODULE__)
alias Surface.Components.Form.Input.InputContext
@doc "An identifier for the form"
prop form, :form
@doc "An identifier for the input"
prop field, :atom
@doc "The id of the corresponding input field"
prop id, :string
@doc "The name of the corresponding input field"
prop name, :string
@doc "Value to pre-populated the input"
prop value, :string
@doc "Class or classes to apply to the input"
prop class, :css_class
@doc "Options list"
prop opts, :keyword, default: []
@doc "Triggered when the component loses focus"
prop blur, :event
@doc "Triggered when the component receives focus"
prop focus, :event
@doc "Triggered when the component receives click"
prop capture_click, :event
@doc "Triggered when a button on the keyboard is pressed"
prop keydown, :event
@doc "Triggered when a button on the keyboard is released"
prop keyup, :event
end
end
defmacro get_default_class() do
quote do
unquote(__MODULE__).get_default_class(__MODULE__)
end
end
def get_default_class(component) do
config = Surface.get_components_config()
config[component][:default_class] || config[__MODULE__][:default_class]
end
defmodule InputContext do
use Surface.Component
@doc "The assigns of the host component"
prop assigns, :map
slot default, props: [:form, :field]
def render(assigns) do
~H"""
<Context
get={{ Surface.Components.Form, form: form }}
get={{ Surface.Components.Form.Field, field: field }}>
<slot :props={{ form: @assigns[:form] || form, field: @assigns[:field] || field }}/>
</Context>
"""
end
end
end