defmodule SigmaKit.Components.SideNav do
use Phoenix.LiveComponent
import SigmaKit.Components.Icons, only: [icon: 1]
slot :inner_block, required: true
slot :logo
def sidenav(assigns) do
~H"""
{render_slot(@logo)}
{render_slot(@inner_block)}
"""
end
attr :title, :string, required: true
slot :inner_block, required: true
def sidenav_section(assigns) do
~H"""
{@title}
{render_slot(@inner_block)}
"""
end
attr :title, :string, required: true
attr :icon, :string, required: true
attr :to, :string, required: true
attr :active, :boolean, default: false
attr :new, :boolean, default: false
def sidenav_item(assigns) when assigns.new == false do
~H"""
<.link
navigate={@to}
class={[
"flex items-center gap-2 py-2 px-3 text-sm cursor-pointer rounded font-medium transition-all duration-300 group",
!@active && "hover:bg-gray-100",
@active && "bg-primary-700"
]}
>
<.icon
:if={assigns[:icon]}
name={@icon}
class={[
"w-4 h-4 transition-colors duration-900 group-hover:transition-colors",
@active && "text-primary-100",
!@active && "text-primary-500 group-hover:text-secondary-500 "
]}
/>
{@title}
"""
end
def sidenav_item(assigns) when assigns.new == true do
~H"""
<.icon
:if={assigns[:icon]}
name={@icon}
class="w-4 h-4 text-zinc-400 group-hover:text-primary-500 transition-colors duration-900 group-hover:transition-colors "
/>
{@title}
"""
end
end