Packages

phoenix_kit

1.2.2
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit_web components layouts root.html.heex
Raw

lib/phoenix_kit_web/components/layouts/root.html.heex

<!DOCTYPE html>
<html
lang="en"
class="[scrollbar-gutter:stable]"
data-theme="light"
>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="csrf-token" content={get_csrf_token()} />
<.live_title default="PhoenixKit" suffix=" · Phoenix Framework">
{assigns[:page_title]}
</.live_title>
<link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} />
<script defer phx-track-static type="text/javascript" src={~p"/assets/app.js"}>
</script>
</head>
<body class="bg-gray-50">
<nav class="navbar bg-base-100 shadow-sm">
<div class="navbar-start">
<a class="btn btn-ghost normal-case text-xl" href="/">PhoenixKit</a>
</div>
<div class="navbar-end">
<div class="flex-none gap-2">
<%= if assigns[:phoenix_kit_current_scope] && PhoenixKit.Users.Auth.Scope.authenticated?(@phoenix_kit_current_scope) do %>
<%!--
Scope-based authentication (recommended approach)
Better encapsulation and ready for future extensions
--%>
<div class="dropdown dropdown-end">
<label tabindex="0" class="btn btn-ghost btn-circle avatar">
<div class="w-10 rounded-full">
<img src="https://ui-avatars.com/api/?name={PhoenixKit.Users.Auth.Scope.user_email(@phoenix_kit_current_scope)}&background=random" />
</div>
</label>
<ul
tabindex="0"
class="mt-3 z-[1] p-2 shadow menu menu-sm dropdown-content bg-base-100 rounded-box w-52"
>
<li><.link href="/phoenix_kit/users/settings">Settings</.link></li>
<li>
<.link
href="/phoenix_kit/users/log-out"
method="delete"
class="flex items-center px-4 py-2 hover:bg-base-200"
>
Logout
</.link>
</li>
</ul>
</div>
<% else %>
<.link href="/phoenix_kit/register" class="btn btn-primary btn-sm">Sign Up</.link>
<.link href="/phoenix_kit/log_in" class="btn btn-ghost btn-sm">Login</.link>
<% end %>
</div>
</div>
</nav>
<!--
Legacy approach (for backwards compatibility):
If you're still using :phoenix_kit_mount_current_user, this approach works:
<%= if @phoenix_kit_current_user do %>
<div class="dropdown dropdown-end">
<label tabindex="0" class="btn btn-ghost btn-circle avatar">
<div class="w-10 rounded-full">
<img src="https://ui-avatars.com/api/?name={@phoenix_kit_current_user.email}&background=random" />
</div>
</label>
<ul tabindex="0" class="mt-3 z-[1] p-2 shadow menu menu-sm dropdown-content bg-base-100 rounded-box w-52">
<li><.link href="/phoenix_kit/users/settings">Settings</.link></li>
<li><.link href="/phoenix_kit/users/log-out" method="delete">Logout</.link></li>
</ul>
</div>
<% else %>
<.link href="/phoenix_kit/register" class="btn btn-primary btn-sm">Sign Up</.link>
<.link href="/phoenix_kit/log_in" class="btn btn-ghost btn-sm">Login</.link>
<% end %>
To use scope approach, update your router:
live_session :default,
layout: {MyAppWeb.Layouts, :app},
on_mount: [{PhoenixKitWeb.Users.Auth, :phoenix_kit_mount_current_scope}] do
# your routes
end
Additional scope-based examples -->
<!-- Check if user is authenticated -->
<%!-- <%= if assigns[:phoenix_kit_current_scope] && PhoenixKit.Users.Auth.Scope.authenticated?(@phoenix_kit_current_scope) do %>
<p>Welcome back, {PhoenixKit.Users.Auth.Scope.user_email(@phoenix_kit_current_scope)}!</p>
<% end %> --%>
<%!-- Access user ID for database queries or links --%>
<%!-- <%= if assigns[:phoenix_kit_current_scope] do %>
<%= if user_id = PhoenixKit.Users.Auth.Scope.user_id(@phoenix_kit_current_scope) do %>
<.link href={"/users/#{user_id}"}>View Profile</.link>
<% end %>
<% end %> --%>
<%!-- Safe scope access with fallback --%>
<%!-- <%= if PhoenixKit.Users.Auth.Scope.anonymous?(assigns[:phoenix_kit_current_scope] || PhoenixKit.Users.Auth.Scope.for_user(nil)) do %>
<p>You are browsing as a guest.</p>
<.link href="/phoenix_kit/register">Create an account</.link>
<% end %> --%>
<main class="py-8">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<.flash_group flash={@flash} />
{@inner_content}
</div>
</main>
</body>
</html>