Packages
surface
0.1.0
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/link.ex
defmodule Surface.Components.Link do
@moduledoc """
Defines a hyperlink.
Provides a wrapper for Phoenix.HTML.Link's `link/2` function.
All options passed via `opts` will be sent to `link/2`, `label` and `class` can
be set directly and will override anything in `opts`.
## Examples
```
<Link
label="user"
to="/users/1"
class="is-danger"
opts={{ method: :delete, data: [confirm: "Really?"] }}
/>
<Link
to="/users/1"
class="is-link"
>
<span>user</span>
</Link>
```
"""
use Surface.Component
import Phoenix.HTML.Link, only: [link: 2]
@doc "Place to link to"
prop to, :string, required: true
@doc "Class or classes to apply to the link"
prop class, :css_class
@doc "Keyword with options to be passed down to `link/2`"
prop opts, :keyword, default: []
@doc """
The label for the generated `<a>` alement, if no content (default slot) is
provided.
"""
prop label, :string
@doc "Triggered on click"
prop click, :event
@doc """
The content of the generated `<a>` element. If no content is provided,
the value of property `label` is used instead.
"""
slot default
def render(assigns) do
children = ~H"<slot>{{ @label }}</slot>"
~H"""
{{ link [to: @to] ++ prop_to_opts(@class, :class) ++ @opts ++ event_to_opts(@click, :phx_click), do: children }}
"""
end
end