defmodule Shino.UI.Menu do @moduledoc """ Provides menu related components. > Wanna `DropdownMenu`? `Popover` + `Menu` = `DropdownMenu` ## Examples ```heex My Account Profile ⌘P Billing ⌘B Settings ⌘S Logout ``` ## References * [shadcn/ui - Dropdown Menu](https://ui.shadcn.com/docs/components/dropdown-menu) * [@radix-ui/primitives - Dropdown Menu](https://www.radix-ui.com/primitives/docs/components/dropdown-menu) """ use Shino.UI, :component @doc """ The root contains all the parts of a menu. """ attr :class, :any, default: nil attr :rest, :global slot :inner_block, required: true def root(assigns) do ~H"""
<%= render_slot(@inner_block) %>
""" end @doc """ Renders a menu item. """ attr :class, :any, default: nil attr :disabled, :boolean, default: false attr :rest, :global slot :inner_block, required: true def item(assigns) do ~H"""
<%= render_slot(@inner_block) %>
""" end @doc """ Renders a menu plain. """ attr :class, :any, default: nil attr :rest, :global, include: ~w(href navigate patch) slot :inner_block, required: true def plain(assigns) do ~H"""
<%= render_slot(@inner_block) %>
""" end @doc """ Renders a menu anchor. """ attr :class, :any, default: nil attr :rest, :global, include: ~w(href navigate patch method) slot :inner_block, required: true def anchor(assigns) do ~H""" <.link class={mc(["px-2 py-1.5 flex items-center cursor-pointer", @class])} {@rest}> <%= render_slot(@inner_block) %> """ end @doc """ Renders a menu label. """ attr :class, :any, default: nil attr :inset, :boolean, default: false attr :rest, :global slot :inner_block, required: true def label(assigns) do ~H"""
<%= render_slot(@inner_block) %>
""" end attr :class, :any, default: nil slot :inner_block, required: true attr :rest, :global @doc """ Renders a menu shortcut. """ def shortcut(assigns) do ~H""" <%= render_slot(@inner_block) %> """ end @doc """ Renders a menu separator. """ attr :class, :any, default: nil slot :inner_block def separator(assigns) do ~H""" """ end @doc """ Renders a menu group. """ attr :class, :any, default: nil slot :inner_block, required: true attr :rest, :global def group(assigns) do ~H"""
<%= render_slot(@inner_block) %>
""" end end