defmodule PhoenixKitWeb.Components.AuthPageWrapper do @moduledoc """ Wrapper component for all auth pages (login, registration, etc.). Reads branding settings (logo, background image/color) from Settings and renders a consistent layout with optional custom branding. Supports separate background images for desktop and mobile viewports. """ use Phoenix.Component import Phoenix.HTML, only: [raw: 1] alias PhoenixKit.Modules.Storage.URLSigner alias PhoenixKit.Settings alias PhoenixKitWeb.Components.LayoutWrapper attr :flash, :map, required: true attr :phoenix_kit_current_scope, :any, default: nil attr :page_title, :string, required: true slot :inner_block, required: true def auth_page_wrapper(assigns) do assigns = assigns |> assign_new(:auth_logo_url, fn -> case Settings.get_setting("auth_logo_file_uuid", "") do uuid when is_binary(uuid) and uuid != "" -> URLSigner.signed_url(uuid, "medium") _ -> "" end end) |> assign_new(:auth_bg_image, fn -> case Settings.get_setting("auth_background_image_file_uuid", "") do uuid when is_binary(uuid) and uuid != "" -> URLSigner.signed_url(uuid, "original") _ -> "" end end) |> assign_new(:auth_bg_image_mobile, fn -> case Settings.get_setting("auth_background_image_mobile_file_uuid", "") do uuid when is_binary(uuid) and uuid != "" -> URLSigner.signed_url(uuid, "original") _ -> "" end end) |> assign_new(:auth_bg_color, fn -> Settings.get_setting("auth_background_color", "") end) |> assign_new(:project_title, fn -> Settings.get_project_title() end) assigns = assign(assigns, :bg_style_tag, bg_style_tag(assigns)) ~H""" {raw(@bg_style_tag)} <%!-- z-10: above footer (z-auto/0) but below sticky header (z-50) in parent layouts --%> <%= if @auth_logo_url != "" do %> <% end %> {render_slot(@inner_block)} """ end defp bg_style_tag(assigns) do desktop = bg_css(assigns.auth_bg_image, assigns.auth_bg_color) mobile = if assigns.auth_bg_image_mobile != "" do "@media (max-width: 768px) { .auth-bg { background-image: url('#{assigns.auth_bg_image_mobile}'); } }" else "" end "" end defp bg_css("", ""), do: "" defp bg_css(image_url, _color) when image_url != "", do: "background-image: url('#{image_url}');" defp bg_css("", color), do: "background: #{color};" end