lib/phoenix/ui.ex

defmodule Phoenix.UI do
  @moduledoc """
  Documentation for `Phoenix.UI`.
  """

  defmacro __using__(which) when is_atom(which), do: apply(__MODULE__, which, [])

  defmacro __using__(_opts) do
    quote generated: true, location: :keep do
      alias Phoenix.UI.Components.{Autocomplete, Dropdown, SelectFilter, TextFilter}

      import Phoenix.UI.Components.{
        Accordion,
        Alert,
        Avatar,
        AvatarGroup,
        Backdrop,
        Badge,
        Breadcrumbs,
        Button,
        ButtonGroup,
        Card,
        Chip,
        Collapse,
        Container,
        DescriptionList,
        Divider,
        Drawer,
        Dropdown,
        ErrorTag,
        FormGroup,
        Grid,
        HelperText,
        Heroicon,
        HiddenInput,
        Label,
        Link,
        List,
        Menu,
        Modal,
        Paper,
        Progress,
        Select,
        Table,
        Textarea,
        TextField,
        Tooltip,
        Typography
      }
    end
  end

  @doc """
  Helper macro for creating a Phoenix.UI component.

  ## Examples

      use Phoenix.UI, :component

  """
  @spec component() :: Macro.t()
  def component do
    quote generated: true, location: :keep do
      alias Phoenix.LiveView.{JS, Rendered, Socket}
      alias Phoenix.UI.Theme

      import Phoenix.UI.Helpers

      use Phoenix.Component
    end
  end

  @doc """
  Helper macro for creating a Phoenix.UI live_component.

  ## Examples

      use Phoenix.UI, :live_component

  """
  @spec live_component() :: Macro.t()
  def live_component do
    quote generated: true, location: :keep do
      alias Phoenix.LiveView.{JS, Socket}

      import Phoenix.UI.Helpers

      use Phoenix.LiveComponent
    end
  end
end