defmodule GitSyncWeb.CoreComponents do
@moduledoc """
Provides core UI components.
At first glance, this module may seem daunting, but its goal is to provide
core building blocks for your application, such as tables, forms, and
inputs. The components consist mostly of markup and are well-documented
with doc strings and declarative assigns. You may customize and style
them in any way you want, based on your application growth and needs.
Styling is hand-written CSS in `assets/css/app.css`; components carry
semantic class names rather than utility classes.
* [Phoenix.Component](https://phoenix-live-view.hexdocs.pm/Phoenix.Component.html) -
the component system used by Phoenix. Some components, such as `<.link>`
and `<.form>`, are defined there.
"""
use Phoenix.Component
@doc """
Renders flash notices.
## Examples
<.flash kind={:info} flash={@flash} />
<.flash id="welcome-back" kind={:info}>Welcome Back!
"""
attr :id, :string, doc: "the optional id of flash container"
attr :flash, :map, default: %{}, doc: "the map of flash messages to display"
attr :title, :string, default: nil
attr :kind, :atom, values: [:info, :error], doc: "used for styling and flash lookup"
attr :rest, :global, doc: "the arbitrary HTML attributes to add to the flash container"
slot :inner_block, doc: "the optional inner block that renders the flash message"
def flash(assigns) do
assigns = assign_new(assigns, :id, fn -> "flash-#{assigns.kind}" end)
~H"""
{@title}
{msg}
"""
end
@doc """
Renders a button with navigation support.
## Examples
<.button>Send!
<.button variant="secondary">Send!
<.button navigate={~p"/"}>Home
"""
attr :rest, :global, include: ~w(href navigate patch method download name value disabled type)
attr :class, :any
attr :variant, :string, values: ~w(primary secondary), default: "primary"
slot :inner_block, required: true
def button(%{rest: rest} = assigns) do
assigns = assign_new(assigns, :class, fn -> assigns.variant end)
if rest[:href] || rest[:navigate] || rest[:patch] do
~H"""
<.link class={["button", @class]} {@rest}>
{render_slot(@inner_block)}
"""
else
~H"""
"""
end
end
@doc """
Renders an input with label and error messages.
A `Phoenix.HTML.FormField` may be passed as argument,
which is used to retrieve the input name, id, and values.
Otherwise all attributes may be passed explicitly.
## Types
This function accepts all HTML input types, considering that:
* You may also set `type="select"` to render a `