defmodule Phoenix.UI.Components.Dropdown do @moduledoc """ Provides dropdown component. """ import Phoenix.UI.Components.Menu use Phoenix.UI, :component @default_variant "elevated" @doc """ Renders dropdown component. ## Examples ``` <.dropdown id="basic_dropdown"> <:toggle> Toggle Dropdown content ``` """ @spec dropdown(Socket.assigns()) :: Rendered.t() def dropdown(raw_assigns) do assigns = assign_new(raw_assigns, :variant, fn -> @default_variant end) ~H""" """ end ############################################################################################# ### Actions ############################################################################################# @doc """ Closes dropdown matching selector. ## Examples iex> hide_drawer(selector) %JS{} iex> hide_drawer(js, selector) %JS{} """ @spec close_dropdown(String.t()) :: struct() def close_dropdown(id), do: JS.hide(%JS{}, to: "##{id} .dropdown-menu") @doc """ Toggles dropdown matching selector. ## Examples iex> hide_drawer(selector) %JS{} iex> hide_drawer(js, selector) %JS{} """ @spec toggle_dropdown(String.t()) :: struct() def toggle_dropdown(id), do: JS.toggle(%JS{}, to: "##{id} .dropdown-menu") end