defmodule PlausibleWeb.Components.Layout do @moduledoc false use Phoenix.Component def favicon(assigns) do ~H""" """ end def theme_script(assigns) do ~H""" """ end attr(:selected_fn, :any, required: true) attr(:prefix, :string, default: "") attr(:options, :list, required: true) def settings_sidebar(assigns) do ~H"""
<.settings_top_tab :for={%{key: key, value: value, icon: icon} = opts <- @options} selected_fn={@selected_fn} prefix={@prefix} icon={icon} text={key} badge={opts[:badge]} value={value} />
""" end attr(:selected_fn, :any) attr(:prefix, :string, default: "") attr(:icon, :any, default: nil) attr(:text, :string, required: true) attr(:badge, :any, default: nil) attr(:value, :any, default: nil) defp settings_top_tab(assigns) do ~H""" <%= if is_binary(@value) do %> <.settings_tab selected_fn={@selected_fn} prefix={@prefix} icon={@icon} text={@text} badge={@badge} value={@value} /> <% else %> <.settings_tab icon={@icon} text={@text} />
<.settings_tab :for={%{key: key, value: value} = opts <- @value} selected_fn={@selected_fn} prefix={@prefix} icon={nil} text={key} badge={opts[:badge]} value={value} submenu?={true} />
<% end %> """ end attr(:selected_fn, :any, default: nil) attr(:prefix, :string, default: "") attr(:value, :any, default: nil) attr(:icon, :any, default: nil) attr(:submenu?, :boolean, default: false) attr(:text, :string, required: true) attr(:badge, :any, default: nil) defp settings_tab(assigns) do current_tab? = assigns[:selected_fn] != nil and assigns.selected_fn.(assigns[:value]) assigns = assign(assigns, :current_tab?, current_tab?) ~H""" "/settings/" <> @value} class={[ "text-sm flex items-center px-2 py-2 leading-5 font-medium rounded-md outline-none focus:outline-none transition ease-in-out duration-150", @current_tab? && "text-gray-900 dark:text-gray-100 bg-gray-150 font-semibold dark:bg-gray-850 hover:text-gray-900 dark:hover:text-gray-100 focus:bg-gray-200 dark:focus:bg-gray-800", @value && not @current_tab? && "text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-850 focus:text-gray-900 focus:bg-gray-50 dark:focus:text-gray-100 dark:focus:bg-gray-800", !@value && "text-gray-600 dark:text-gray-300" ]} > {@text} NEW 🔥 """ end defp theme_preference(%{theme: theme}) when not is_nil(theme), do: theme defp theme_preference(%{current_user: %Plausible.Auth.User{theme: theme}}) when not is_nil(theme) do theme end defp theme_preference(_assigns), do: "system" defdelegate logo_path(path), to: PlausibleWeb.LayoutView end