Packages
moon
2.72.2
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon/parts/sidebar/menu_link.ex
defmodule Moon.Parts.Sidebar.MenuLink do
@moduledoc false
use Moon.StatelessComponent
alias Moon.Design.MenuItem
defstruct key: "", page: "", icon: "", children: []
@doc "Id attribute for DOM element"
prop(id, :string)
@doc "Data-testid attribute for DOM element"
prop(testid, :string)
@doc "Additional Tailwind classes"
prop(class, :css_class)
@doc "Route to redirect to"
prop(route, :any)
@doc "Additional attributes set for the tag a"
prop(attrs, :map, default: %{})
@doc "Active page"
prop(active_page, :string, from_context: :active_page)
@doc "Default slot"
slot(default)
def render(assigns) do
~F"""
<MenuItem
as="a"
class={merge([
[
"text-bulma justify-start hover:bg-gohan rounded-full p-3 gap-3 h-12",
"bg-gohan": @active_page == @route
],
@class
])}
attrs={Map.merge(
%{
"data-phx-link": "redirect",
"data-phx-link-state": "push",
route: @route
},
@attrs
)}
is_active={@active_page == @route}
href={@route}
{=@id}
{=@testid}
>
<#slot />
</MenuItem>
"""
end
end