Packages

phoenix_kit

1.7.152
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

221 Versions

Jump to

Compare versions

4 files changed
+46 additions
-13 deletions
unknownCHANGELOG.md
File is too large to be displayed (100 KB limit).
  @@ -1,6 +1,6 @@
1 1 {<<"links">>,[{<<"GitHub">>,<<"https://github.com/BeamLabEU/phoenix_kit">>}]}.
2 2 {<<"name">>,<<"phoenix_kit">>}.
3 - {<<"version">>,<<"1.7.151">>}.
3 + {<<"version">>,<<"1.7.152">>}.
4 4 {<<"description">>,
5 5 <<65,32,102,111,117,110,100,97,116,105,111,110,32,102,111,114,32,98,117,105,
6 6 108,100,105,110,103,32,69,108,105,120,105,114,32,80,104,111,101,110,105,
  @@ -184,7 +184,15 @@ defmodule PhoenixKitWeb.Components.UserDashboardNav do
184 184 class="cursor-pointer hover:opacity-80 transition-opacity"
185 185 aria-label={gettext("Account menu")}
186 186 >
187 - <.icon name="hero-user-circle" class="w-10 h-10 text-base-content/70" />
187 + <%!--
188 + Rounded-rectangle placeholder matching the authenticated avatar shape
189 + (md = w-10 h-10, rounded-lg via its `!rounded-lg`), so the guest and
190 + signed-in triggers look consistent — a generic person silhouette
191 + signals "not signed in".
192 + --%>
193 + <div class="w-10 h-10 rounded-lg bg-base-300 flex items-center justify-center text-base-content/60">
194 + <.icon name="hero-user" class="w-6 h-6" />
195 + </div>
188 196 </div>
189 197
190 198 <ul
  @@ -224,7 +232,21 @@ defmodule PhoenixKitWeb.Components.UserDashboardNav do
224 232 attr(:current_locale, :string, required: true)
225 233
226 234 defp language_menu_section(assigns) do
227 - assigns = assign(assigns, :user_languages, get_user_languages())
235 + # Highlight by BASE code, not full-dialect equality. `@current_locale`
236 + # may be a base ("en", per the attr doc) or a resolved dialect that
237 + # differs from the enabled one (e.g. `resolve_dialect("en")` => "en-US"
238 + # while English is enabled as "en-GB"), so a raw `==` against the
239 + # enabled dialect never matched on the default locale. Comparing bases
240 + # makes en/en-GB/en-US all match and works whether the caller passes a
241 + # base or a dialect — same rule the standalone `Core.LanguageSwitcher` uses.
242 + current_base = DialectMapper.extract_base(assigns.current_locale)
243 +
244 + user_languages =
245 + Enum.map(get_user_languages(), fn language ->
246 + Map.put(language, :active?, DialectMapper.extract_base(language.code) == current_base)
247 + end)
248 +
249 + assigns = assign(assigns, :user_languages, user_languages)
228 250
229 251 ~H"""
230 252 <%= if length(@user_languages) > 1 do %>
  @@ -242,7 +264,7 @@ defmodule PhoenixKitWeb.Components.UserDashboardNav do
242 264 class={[
243 265 "w-full flex items-center gap-3 rounded-lg px-4 py-2 text-sm",
244 266 "focus:outline-none focus-visible:outline-none",
245 - if(language.code == @current_locale,
267 + if(language.active?,
246 268 do:
247 269 "bg-primary !text-primary-content hover:bg-primary hover:!text-primary-content active:!bg-primary/80",
248 270 else:
  @@ -252,7 +274,7 @@ defmodule PhoenixKitWeb.Components.UserDashboardNav do
252 274 >
253 275 <span class="text-lg">{get_language_flag(language.code)}</span>
254 276 <span>{language.name}</span>
255 - <%= if language.code == @current_locale do %>
277 + <%= if language.active? do %>
256 278 <PhoenixKitWeb.Components.Core.Icons.icon_check class="w-4 h-4 ml-auto" />
257 279 <% end %>
258 280 </a>
  @@ -388,20 +410,31 @@ defmodule PhoenixKitWeb.Components.UserDashboardNav do
388 410 Routes.path(clean_path, locale: base_code)
389 411 end
390 412
391 - # Remove locale from path
413 + # Remove locale from path.
414 + #
415 + # A path that is *only* a locale segment (e.g. "/ru", "/en-GB") reduces
416 + # to "/". The empty-`rest` guard matters: `Path.join([])` raises a
417 + # FunctionClauseError, which used to 500 a host's bare `/:locale` landing
418 + # route (e.g. a locale-prefixed landing page introduced in 1.7.150+).
392 419 defp remove_locale_from_path(path) do
393 420 case String.split(path, "/", trim: true) do
394 421 [segment | rest] when byte_size(segment) in [2, 5] ->
395 - # Check if segment looks like a locale
396 - if String.length(segment) == 2 or
397 - (String.length(segment) == 5 and String.contains?(segment, "-")) do
398 - "/" <> Path.join(rest)
399 - else
400 - path
422 + cond do
423 + not locale_segment?(segment) -> path
424 + rest == [] -> "/"
425 + true -> "/" <> Path.join(rest)
401 426 end
402 427
403 428 _ ->
404 429 path
405 430 end
406 431 end
432 +
433 + # A 2-char base code or a 5-char dialect ("en-GB"). Mirrors the original
434 + # inline guard; kept narrow on purpose so a real 3-char page segment
435 + # (e.g. "/faq") isn't mistaken for a locale.
436 + defp locale_segment?(segment) do
437 + String.length(segment) == 2 or
438 + (String.length(segment) == 5 and String.contains?(segment, "-"))
439 + end
407 440 end
  @@ -1,7 +1,7 @@
1 1 defmodule PhoenixKit.MixProject do
2 2 use Mix.Project
3 3
4 - @version "1.7.151"
4 + @version "1.7.152"
5 5 @description "A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more"
6 6 @source_url "https://github.com/BeamLabEU/phoenix_kit"