defmodule Corex.Avatar do @moduledoc ~S''' Phoenix implementation of [Zag.js Avatar](https://zagjs.com/components/react/avatar). ## Examples ### Basic ```heex <.avatar id="avatar" src="/me.jpg" class="avatar"> <:fallback>JD ``` ## Styling Use data attributes: `[data-scope="avatar"][data-part="root"]`, `image`, `fallback`, `skeleton`. ''' @doc type: :component use Phoenix.Component alias Corex.Avatar.Anatomy.{Props, Root, Image, Fallback, Skeleton} alias Corex.Avatar.Connect attr(:id, :string, required: false, doc: "The id of the avatar") attr(:src, :string, default: nil, doc: "Image source URL") attr(:alt, :string, default: "", doc: "Alternative text for the image") attr(:on_status_change, :string, default: nil, doc: "Server event when image load status changes" ) attr(:on_status_change_client, :string, default: nil, doc: "Client event when image load status changes" ) attr(:rest, :global) slot(:fallback, required: true) def avatar(assigns) do assigns = assigns |> assign_new(:id, fn -> "avatar-#{System.unique_integer([:positive])}" end) ~H"""