defmodule RiverConnectWeb.Components.UI.Sidebar do @moduledoc false use RiverConnectWeb.Components.UI, :component import RiverConnectWeb.Components.UI.Input import RiverConnectWeb.Components.UI.Separator import RiverConnectWeb.Components.UI.Sheet import RiverConnectWeb.Components.UI.Skeleton import RiverConnectWeb.Components.UI.Tooltip @sidebar_width "16rem" @sidebar_width_mobile "18rem" @sidebar_width_icon "3rem" @doc """ Render """ attr(:class, :string, default: nil) attr :style, :map, default: %{} attr(:rest, :global) slot(:inner_block, required: true) def sidebar_provider(assigns) do assigns = assign(assigns, %{sidebar_width: @sidebar_width, sidebar_width_icon: @sidebar_width_icon}) ~H"""
{render_slot(@inner_block)}
""" end @doc """ Render """ attr :id, :string, required: true, doc: "The id of the sidebar, used for the trigger to identify the target sidebar" attr :side, :string, values: ~w(left right), default: "left" attr :variant, :string, values: ~w(sidebar floating inset), default: "sidebar" attr :collapsible, :string, values: ~w(offcanvas icon none), default: "offcanvas" attr :is_mobile, :boolean, default: false attr :state, :string, values: ~w(expanded collapsed), default: "expanded" attr(:class, :string, default: nil) attr :style, :map, default: %{} attr(:rest, :global) slot(:inner_block, required: true) def sidebar(%{collapsible: "none"} = assigns) do ~H"""
{render_slot(@inner_block)}
""" end def sidebar(%{is_mobile: true} = assigns) do assigns = assign(assigns, :sidebar_width_mobile, @sidebar_width_mobile) ~H""" <.sheet id={@id}> <.sheet_content data-sidebar="sidebar" data-mobile="true" class="w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden" data-variant={@variant} style={ style([ %{ "--sidebar-width": @sidebar_width_mobile }, @style ]) } side={@side} >
{render_slot(@inner_block)}
""" end def sidebar(assigns) do ~H"""