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
Current section
221 Versions
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…