Packages

phoenix_kit

1.7.177
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

10 files changed
+117 additions
-118 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.176">>}.
3 + {<<"version">>,<<"1.7.177">>}.
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,
  @@ -62,7 +62,10 @@ defmodule PhoenixKitWeb.Components.Core.Input do
62 62 multiple pattern placeholder readonly required rows size step)
63 63
64 64 slot :inner_block
65 - slot :icon, doc: "the icon to display next to the label"
65 +
66 + slot :icon,
67 + doc:
68 + "an icon rendered *inside* the field (daisyUI 5 `<label class=\"input\">` wrapper). Size it with `h-[1em] w-[1em] opacity-50` to match daisyUI."
66 69
67 70 def input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do
68 71 assigns
  @@ -77,13 +80,31 @@ defmodule PhoenixKitWeb.Components.Core.Input do
77 80 ~H"""
78 81 <div phx-feedback-for={@name} class={@wrapper_class}>
79 82 <label :if={@label && @label != ""} class="label mb-2" for={@id}>
80 - <span :if={@icon != []} class="label-text flex items-center">
81 - {render_slot(@icon)}
82 - {@label}
83 - </span>
84 - <span :if={@icon == []} class="label-text font-semibold">{@label}</span>
83 + <span class="label-text font-semibold">{@label}</span>
84 + </label>
85 + <%!-- Icon-inside variant: daisyUI 5 puts the `input` class on a <label>
86 + wrapper so the icon sits inside the field. Focus color comes from
87 + `focus-within` since the wrapping label never receives focus. --%>
88 + <label
89 + :if={@icon != []}
90 + class={[
91 + "input w-full transition-colors focus-within:input-primary",
92 + @errors != [] && "input-error",
93 + @class
94 + ]}
95 + >
96 + {render_slot(@icon)}
97 + <input
98 + type={@type}
99 + name={@name}
100 + id={@id}
101 + value={Phoenix.HTML.Form.normalize_value(@type, @value)}
102 + class="grow"
103 + {@rest}
104 + />
85 105 </label>
86 106 <input
107 + :if={@icon == []}
87 108 type={@type}
88 109 name={@name}
89 110 id={@id}
  @@ -34,6 +34,28 @@ defmodule PhoenixKitWeb.Router do
34 34 # PhoenixKit routes - main integration point
35 35 phoenix_kit_routes()
36 36
37 + # Test-only: a routable stand-in for a host app's own public LiveView,
38 + # backing test/phoenix_kit_web/users/auth_seo_no_index_test.exs. Needs a
39 + # real route (not live_isolated/3) because :phoenix_kit_mount_current_scope
40 + # attaches a :handle_params hook that requires a non-nil socket.router.
41 + #
42 + # Known, accepted trade-off: the Hex package doesn't ship test/, so a
43 + # consumer compiling this dep under MIX_ENV=test (e.g. their own `mix
44 + # test`) builds this block referencing a PublicHostAppLive module that
45 + # isn't present for them. This is inert, not a build failure — Phoenix's
46 + # `live` macro only stores the module as an atom and resolves it at
47 + # request time, and this router is never mounted by parent apps (see
48 + # moduledoc above) — but it is a latent dead reference. A dedicated
49 + # test-only Endpoint+Router pair under test/support/ would avoid it
50 + # entirely; not worth the extra scaffolding for a single probe route.
51 + if Mix.env() == :test do
52 + scope "/", PhoenixKitWeb.Test do
53 + pipe_through :browser
54 +
55 + live "/__test/seo-no-index-probe", PublicHostAppLive
56 + end
57 + end
58 +
37 59 defp ensure_session_uuid(conn, _opts) do
38 60 case Plug.Conn.get_session(conn, :phoenix_kit_session_uuid) do
39 61 nil ->
  @@ -20,36 +20,36 @@
20 20 <legend class="fieldset-legend sr-only">{gettext("Login with Password")}</legend>
21 21
22 22 <label class="label" for="user_email_or_username">
23 - <span class="label-text flex items-center">
24 - <PhoenixKitWeb.Components.Core.Icons.icon_user_profile class="w-4 h-4 mr-2" />
25 - {gettext("Email or Username")}
26 - </span>
23 + <span class="label-text">{gettext("Email or Username")}</span>
27 24 </label>
28 - <input
25 + <.input
26 + type="text"
29 27 id="user_email_or_username"
30 28 name="user[email_or_username]"
31 - type="text"
32 - class="input w-full transition-colors focus:input-primary"
33 29 value={@form.params["email_or_username"] || ""}
34 30 autocomplete="username"
35 31 required
36 - />
32 + >
33 + <:icon>
34 + <PhoenixKitWeb.Components.Core.Icons.icon_user_profile class="h-[1em] w-[1em] opacity-50" />
35 + </:icon>
36 + </.input>
37 37
38 38 <label class="label" for="user_password">
39 - <span class="label-text flex items-center">
40 - <PhoenixKitWeb.Components.Core.Icons.icon_lock class="w-4 h-4 mr-2" /> {gettext(
41 - "Password"
42 - )}
43 - </span>
39 + <span class="label-text">{gettext("Password")}</span>
44 40 </label>
45 - <input
41 + <.input
42 + type="password"
46 43 id="user_password"
47 44 name="user[password]"
48 - type="password"
49 - class="input w-full transition-colors focus:input-primary"
45 + value=""
50 46 autocomplete="current-password"
51 47 required
52 - />
48 + >
49 + <:icon>
50 + <PhoenixKitWeb.Components.Core.Icons.icon_lock class="h-[1em] w-[1em] opacity-50" />
51 + </:icon>
52 + </.input>
53 53
54 54 <div class="form-control mt-4">
55 55 <.checkbox
Loading more files…