From 1f773bdb079a78f8aa80169e76ee16b9b100614c Mon Sep 17 00:00:00 2001 From: Sanne de Vries Date: Fri, 14 Nov 2025 12:50:14 +0100 Subject: [PATCH 01/11] Update goal settings design - Replace the `Add goal` button in goal settings with a dropdown button to directly select the goal type. This way, a modal opens with the correct form for the selected goal type. The tabs in the modal have been removed. - Add a new `pill` component to show the goal type in the table in a more distinct way. The `settings_badge` component is replaced with the `pill` component. The `pill` component that was used in `plan_box.ex` is renamed to `highlight_pill`. - Replaced `Belongs to funnel` text with a funnel icon in the goal settings list. - Some small tweaks like increasing the search bar width, the padding of the table cells, and adding a header to the goal settings list. --- .../components/billing/plan_box.ex | 4 +- lib/plausible_web/components/generic.ex | 53 +++++-- lib/plausible_web/components/layout.ex | 4 +- .../components/prima_dropdown.ex | 2 +- lib/plausible_web/live/goal_settings.ex | 15 +- lib/plausible_web/live/goal_settings/form.ex | 136 ++++-------------- lib/plausible_web/live/goal_settings/list.ex | 73 +++++++--- 7 files changed, 140 insertions(+), 147 deletions(-) diff --git a/lib/plausible_web/components/billing/plan_box.ex b/lib/plausible_web/components/billing/plan_box.ex index c9fb44c071d2..c649fc722f46 100644 --- a/lib/plausible_web/components/billing/plan_box.ex +++ b/lib/plausible_web/components/billing/plan_box.ex @@ -39,7 +39,7 @@ defmodule PlausibleWeb.Components.Billing.PlanBox do ]}> {String.capitalize(to_string(@kind))} - <.pill :if={@highlight} text={@highlight} /> + <.highlight_pill :if={@highlight} text={@highlight} />
@@ -95,7 +95,7 @@ defmodule PlausibleWeb.Components.Billing.PlanBox do """ end - defp pill(assigns) do + defp highlight_pill(assigns) do ~H"""

-

-
-
+
+
+ +
@@ -1038,7 +1043,7 @@ defmodule PlausibleWeb.Components.Generic do type="text" name="filter-text" id="filter-text" - class="w-full max-w-64 pl-8 text-sm dark:bg-gray-750 dark:text-gray-300 focus:ring-indigo-500 focus:border-indigo-500 block border-gray-300 dark:border-gray-750 rounded-md dark:placeholder:text-gray-400 focus:outline-none focus:ring-3 focus:ring-indigo-500/20 dark:focus:ring-indigo-500/25 focus:border-indigo-500" + class="w-full max-w-80 pl-8 text-sm dark:bg-gray-750 dark:text-gray-300 focus:ring-indigo-500 focus:border-indigo-500 block border-gray-300 dark:border-gray-750 rounded-md dark:placeholder:text-gray-400 focus:outline-none focus:ring-3 focus:ring-indigo-500/20 dark:focus:ring-indigo-500/25 focus:border-indigo-500" placeholder="Press / to search" x-ref="filter_text" phx-debounce={200} @@ -1140,13 +1145,41 @@ defmodule PlausibleWeb.Components.Generic do """ end - def settings_badge(%{type: :new} = assigns) do + attr(:class, :string, default: "") + attr(:color, :atom, default: :gray, values: [:gray, :indigo, :yellow, :green]) + attr(:rest, :global) + slot(:inner_block, required: true) + + def pill(assigns) do + assigns = assign(assigns, :color_classes, get_pill_color_classes(assigns.color)) + ~H""" - - NEW 🔥 + + {render_slot(@inner_block)} """ end - def settings_badge(assigns), do: ~H"" + defp get_pill_color_classes(:gray) do + "bg-gray-100 text-gray-800 dark:bg-gray-750 dark:text-gray-200" + end + + defp get_pill_color_classes(:indigo) do + "bg-indigo-100/60 text-indigo-600 dark:bg-indigo-900/50 dark:text-indigo-300" + end + + defp get_pill_color_classes(:yellow) do + "bg-yellow-100/80 text-yellow-800 dark:bg-yellow-900/40 dark:text-yellow-300" + end + + defp get_pill_color_classes(:green) do + "bg-green-100/70 text-green-800 dark:bg-green-900/40 dark:text-green-300" + end end diff --git a/lib/plausible_web/components/layout.ex b/lib/plausible_web/components/layout.ex index db5505c93475..89075d6d1b89 100644 --- a/lib/plausible_web/components/layout.ex +++ b/lib/plausible_web/components/layout.ex @@ -140,7 +140,9 @@ defmodule PlausibleWeb.Components.Layout do class="size-5 mr-2" /> {@text} - + + NEW 🔥 + {render_slot(@inner_block)} diff --git a/lib/plausible_web/live/goal_settings.ex b/lib/plausible_web/live/goal_settings.ex index 8e8212b3f1db..fc168888b88f 100644 --- a/lib/plausible_web/live/goal_settings.ex +++ b/lib/plausible_web/live/goal_settings.ex @@ -43,7 +43,8 @@ defmodule PlausibleWeb.Live.GoalSettings do domain: domain, displayed_goals: socket.assigns.all_goals, filter_text: "", - form_goal: nil + form_goal: nil, + goal_type: nil )} end @@ -88,6 +89,7 @@ defmodule PlausibleWeb.Live.GoalSettings do site_team={@site_team} existing_goals={@all_goals} goal={@form_goal} + goal_type={@goal_type} on_save_goal={ fn goal, socket -> send(self(), {:goal_added, goal}) @@ -137,8 +139,12 @@ defmodule PlausibleWeb.Live.GoalSettings do {:noreply, socket} end - def handle_event("add-goal", _, socket) do - socket = socket |> assign(form_goal: nil) |> Modal.open("goals-form-modal") + def handle_event("add-goal", %{"goal-type" => goal_type}, socket) do + socket = + socket + |> assign(form_goal: nil, goal_type: goal_type) + |> Modal.open("goals-form-modal") + {:noreply, socket} end @@ -181,7 +187,8 @@ defmodule PlausibleWeb.Live.GoalSettings do event_name_options: Enum.reject(socket.assigns.event_name_options, &(&1 == goal.event_name)), displayed_goals: all_goals, - form_goal: nil + form_goal: nil, + goal_type: nil ) |> put_live_flash(:success, "Goal saved successfully") diff --git a/lib/plausible_web/live/goal_settings/form.ex b/lib/plausible_web/live/goal_settings/form.ex index 1871bf0cc33a..435bd829fc28 100644 --- a/lib/plausible_web/live/goal_settings/form.ex +++ b/lib/plausible_web/live/goal_settings/form.ex @@ -19,11 +19,15 @@ defmodule PlausibleWeb.Live.GoalSettings.Form do |> Plausible.Goal.changeset() |> to_form() - selected_tab = - case assigns.goal do - %{page_path: p, scroll_threshold: s} when not is_nil(p) and s > -1 -> "scroll" - %{page_path: p} when not is_nil(p) -> "pageviews" - _goal_or_nil -> "custom_events" + form_type = + if assigns.goal do + case assigns.goal do + %{page_path: p, scroll_threshold: s} when not is_nil(p) and s > -1 -> "scroll" + %{page_path: p} when not is_nil(p) -> "pageviews" + _ -> "custom_events" + end + else + assigns[:goal_type] || "custom_events" end socket = @@ -37,14 +41,14 @@ defmodule PlausibleWeb.Live.GoalSettings.Form do current_user: assigns.current_user, site_team: assigns.site_team, domain: assigns.domain, - selected_tab: selected_tab, - tab_sequence_id: 0, + form_type: form_type, site: site, has_access_to_revenue_goals?: has_access_to_revenue_goals?, existing_goals: assigns.existing_goals, on_save_goal: assigns.on_save_goal, on_autoconfigure: assigns.on_autoconfigure, - goal: assigns.goal + goal: assigns.goal, + goal_type: assigns[:goal_type] ) {:ok, socket} @@ -68,7 +72,7 @@ defmodule PlausibleWeb.Live.GoalSettings.Form do <.title>Edit goal for {@domain} <.custom_event_fields - :if={@selected_tab == "custom_events"} + :if={@form_type == "custom_events"} f={f} suffix={@context_unique_id} current_user={@current_user} @@ -80,14 +84,14 @@ defmodule PlausibleWeb.Live.GoalSettings.Form do has_access_to_revenue_goals?={@has_access_to_revenue_goals?} /> <.pageview_fields - :if={@selected_tab == "pageviews"} + :if={@form_type == "pageviews"} f={f} goal={@goal} suffix={@context_unique_id} site={@site} /> <.scroll_fields - :if={@selected_tab == "scroll"} + :if={@form_type == "scroll"} f={f} goal={@goal} suffix={@context_unique_id} @@ -103,58 +107,41 @@ defmodule PlausibleWeb.Live.GoalSettings.Form do def create_form(assigns) do ~H""" - <.form - :let={f} - x-data="{ tabSelectionInProgress: false }" - for={@form} - phx-submit="save-goal" - phx-target={@myself} - > + <.form :let={f} for={@form} phx-submit="save-goal" phx-target={@myself}> <.title> Add goal for {Plausible.Sites.display_name(@site)} - <.tabs current_user={@current_user} site={@site} selected_tab={@selected_tab} myself={@myself} /> - <.custom_event_fields - :if={@selected_tab == "custom_events"} - x-show="!tabSelectionInProgress" + :if={@form_type == "custom_events"} f={f} - suffix={suffix(@context_unique_id, @tab_sequence_id)} + suffix={@context_unique_id} current_user={@current_user} site_team={@site_team} site={@site} existing_goals={@existing_goals} goal_options={@event_name_options} has_access_to_revenue_goals?={@has_access_to_revenue_goals?} - x-init="tabSelectionInProgress = false" /> <.pageview_fields - :if={@selected_tab == "pageviews"} - x-show="!tabSelectionInProgress" + :if={@form_type == "pageviews"} f={f} - suffix={suffix(@context_unique_id, @tab_sequence_id)} + suffix={@context_unique_id} site={@site} - x-init="tabSelectionInProgress = false" /> <.scroll_fields - :if={@selected_tab == "scroll"} - x-show="!tabSelectionInProgress" + :if={@form_type == "scroll"} f={f} - suffix={suffix(@context_unique_id, @tab_sequence_id)} + suffix={@context_unique_id} site={@site} - x-init="tabSelectionInProgress = false" /> -
- <.button type="submit" class="w-full"> - Add goal - -
+ <.button type="submit" class="w-full"> + Add goal +
From 45a8c68e178ea5c57bec3e20ffd124260dfd49a6 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Tue, 18 Nov 2025 11:30:28 +0100 Subject: [PATCH 04/11] Temporary: bump prima to exercise prima dropdown LV re-render fix --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index ccee086569e4..ed524d945c53 100644 --- a/mix.exs +++ b/mix.exs @@ -114,7 +114,7 @@ defmodule Plausible.MixProject do {:phoenix_live_view, "~> 1.1"}, {:php_serializer, "~> 2.0"}, {:plug, "~> 1.13", override: true}, - {:prima, "~> 0.1.8"}, + {:prima, git: "https://github.com/aerosol/prima/", branch: "updated-hooks"}, {:plug_cowboy, "~> 2.3"}, {:polymorphic_embed, "~> 5.0"}, {:postgrex, "~> 0.19.0"}, diff --git a/mix.lock b/mix.lock index 523ec8712d57..e4dee2054c0d 100644 --- a/mix.lock +++ b/mix.lock @@ -135,7 +135,7 @@ "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "polymorphic_embed": {:hex, :polymorphic_embed, "5.0.3", "37444e0af941026a2c29b0539b6471bdd6737a6492a19264bf2bb0118e3ac242", [:mix], [{:attrs, "~> 0.6", [hex: :attrs, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}], "hexpm", "2fed44f57abf0a0fc7642e0eb0807a55b65de1562712cc0620772cbbb80e49c1"}, "postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"}, - "prima": {:hex, :prima, "0.1.8", "1f57fb7000046bb463b2a31200b138dd10c86fd78a289f1e947a970f740b68e0", [:mix], [{:esbuild, "~> 0.7", [hex: :esbuild, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.1", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}], "hexpm", "b559ee8213a8302fd40520cc55b0fcafbc884d471d198b262dd1e0a10170de17"}, + "prima": {:git, "https://github.com/aerosol/prima/", "4eece05da49ee714a1c58282c090bcca696cf5c7", [branch: "updated-hooks"]}, "prom_ex": {:hex, :prom_ex, "1.11.0", "1f6d67f2dead92224cb4f59beb3e4d319257c5728d9638b4a5e8ceb51a4f9c7e", [:mix], [{:absinthe, ">= 1.7.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.1.0", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.11.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.18", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.10.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.4", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:peep, "~> 3.0", [hex: :peep, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.16.0", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 2.6.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.1", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "76b074bc3730f0802978a7eb5c7091a65473eaaf07e99ec9e933138dcc327805"}, "public_suffix": {:git, "https://github.com/axelson/publicsuffix-elixir", "fa40c243d4b5d8598b90cff268bc4e33f3bb63f1", []}, "ranch": {:hex, :ranch, "1.8.1", "208169e65292ac5d333d6cdbad49388c1ae198136e4697ae2f474697140f201c", [:make, :rebar3], [], "hexpm", "aed58910f4e21deea992a67bf51632b6d60114895eb03bb392bb733064594dd0"}, From a97f52f3a0b26fde02db1cf7d42187280d9b25e4 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Wed, 19 Nov 2025 13:01:47 +0100 Subject: [PATCH 05/11] Temporary: Bump prima again --- mix.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.lock b/mix.lock index e4dee2054c0d..c886564213d4 100644 --- a/mix.lock +++ b/mix.lock @@ -135,7 +135,7 @@ "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "polymorphic_embed": {:hex, :polymorphic_embed, "5.0.3", "37444e0af941026a2c29b0539b6471bdd6737a6492a19264bf2bb0118e3ac242", [:mix], [{:attrs, "~> 0.6", [hex: :attrs, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}], "hexpm", "2fed44f57abf0a0fc7642e0eb0807a55b65de1562712cc0620772cbbb80e49c1"}, "postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"}, - "prima": {:git, "https://github.com/aerosol/prima/", "4eece05da49ee714a1c58282c090bcca696cf5c7", [branch: "updated-hooks"]}, + "prima": {:git, "https://github.com/aerosol/prima/", "d9d5b987505c2100c081a53018bd6af9fad043af", [branch: "updated-hooks"]}, "prom_ex": {:hex, :prom_ex, "1.11.0", "1f6d67f2dead92224cb4f59beb3e4d319257c5728d9638b4a5e8ceb51a4f9c7e", [:mix], [{:absinthe, ">= 1.7.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.1.0", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.11.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.18", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.10.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.4", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:peep, "~> 3.0", [hex: :peep, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.16.0", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 2.6.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.1", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "76b074bc3730f0802978a7eb5c7091a65473eaaf07e99ec9e933138dcc327805"}, "public_suffix": {:git, "https://github.com/axelson/publicsuffix-elixir", "fa40c243d4b5d8598b90cff268bc4e33f3bb63f1", []}, "ranch": {:hex, :ranch, "1.8.1", "208169e65292ac5d333d6cdbad49388c1ae198136e4697ae2f474697140f201c", [:make, :rebar3], [], "hexpm", "aed58910f4e21deea992a67bf51632b6d60114895eb03bb392bb733064594dd0"}, From f81f603741121adfdec80bf566aa482095b4c8d6 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Thu, 20 Nov 2025 13:33:09 +0100 Subject: [PATCH 06/11] Revert "Temporary: Bump prima again" This reverts commit 024b34a6e94d7e9441b32467ee281f48d9c0f394. --- mix.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.lock b/mix.lock index c886564213d4..e4dee2054c0d 100644 --- a/mix.lock +++ b/mix.lock @@ -135,7 +135,7 @@ "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "polymorphic_embed": {:hex, :polymorphic_embed, "5.0.3", "37444e0af941026a2c29b0539b6471bdd6737a6492a19264bf2bb0118e3ac242", [:mix], [{:attrs, "~> 0.6", [hex: :attrs, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}], "hexpm", "2fed44f57abf0a0fc7642e0eb0807a55b65de1562712cc0620772cbbb80e49c1"}, "postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"}, - "prima": {:git, "https://github.com/aerosol/prima/", "d9d5b987505c2100c081a53018bd6af9fad043af", [branch: "updated-hooks"]}, + "prima": {:git, "https://github.com/aerosol/prima/", "4eece05da49ee714a1c58282c090bcca696cf5c7", [branch: "updated-hooks"]}, "prom_ex": {:hex, :prom_ex, "1.11.0", "1f6d67f2dead92224cb4f59beb3e4d319257c5728d9638b4a5e8ceb51a4f9c7e", [:mix], [{:absinthe, ">= 1.7.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.1.0", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.11.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.18", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.10.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.4", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:peep, "~> 3.0", [hex: :peep, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.16.0", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 2.6.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.1", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "76b074bc3730f0802978a7eb5c7091a65473eaaf07e99ec9e933138dcc327805"}, "public_suffix": {:git, "https://github.com/axelson/publicsuffix-elixir", "fa40c243d4b5d8598b90cff268bc4e33f3bb63f1", []}, "ranch": {:hex, :ranch, "1.8.1", "208169e65292ac5d333d6cdbad49388c1ae198136e4697ae2f474697140f201c", [:make, :rebar3], [], "hexpm", "aed58910f4e21deea992a67bf51632b6d60114895eb03bb392bb733064594dd0"}, From eca7ed377c8027b366c1da3a805cc7357485a0e5 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Thu, 20 Nov 2025 13:33:15 +0100 Subject: [PATCH 07/11] Revert "Temporary: bump prima to exercise prima dropdown LV re-render fix" This reverts commit a6eabb73d0c13371651b766c571d83b37bc446ef. --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index ed524d945c53..ccee086569e4 100644 --- a/mix.exs +++ b/mix.exs @@ -114,7 +114,7 @@ defmodule Plausible.MixProject do {:phoenix_live_view, "~> 1.1"}, {:php_serializer, "~> 2.0"}, {:plug, "~> 1.13", override: true}, - {:prima, git: "https://github.com/aerosol/prima/", branch: "updated-hooks"}, + {:prima, "~> 0.1.8"}, {:plug_cowboy, "~> 2.3"}, {:polymorphic_embed, "~> 5.0"}, {:postgrex, "~> 0.19.0"}, diff --git a/mix.lock b/mix.lock index e4dee2054c0d..523ec8712d57 100644 --- a/mix.lock +++ b/mix.lock @@ -135,7 +135,7 @@ "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "polymorphic_embed": {:hex, :polymorphic_embed, "5.0.3", "37444e0af941026a2c29b0539b6471bdd6737a6492a19264bf2bb0118e3ac242", [:mix], [{:attrs, "~> 0.6", [hex: :attrs, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}], "hexpm", "2fed44f57abf0a0fc7642e0eb0807a55b65de1562712cc0620772cbbb80e49c1"}, "postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"}, - "prima": {:git, "https://github.com/aerosol/prima/", "4eece05da49ee714a1c58282c090bcca696cf5c7", [branch: "updated-hooks"]}, + "prima": {:hex, :prima, "0.1.8", "1f57fb7000046bb463b2a31200b138dd10c86fd78a289f1e947a970f740b68e0", [:mix], [{:esbuild, "~> 0.7", [hex: :esbuild, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.1", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}], "hexpm", "b559ee8213a8302fd40520cc55b0fcafbc884d471d198b262dd1e0a10170de17"}, "prom_ex": {:hex, :prom_ex, "1.11.0", "1f6d67f2dead92224cb4f59beb3e4d319257c5728d9638b4a5e8ceb51a4f9c7e", [:mix], [{:absinthe, ">= 1.7.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.1.0", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.11.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.18", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.10.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.4", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:peep, "~> 3.0", [hex: :peep, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.16.0", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 2.6.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.1", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "76b074bc3730f0802978a7eb5c7091a65473eaaf07e99ec9e933138dcc327805"}, "public_suffix": {:git, "https://github.com/axelson/publicsuffix-elixir", "fa40c243d4b5d8598b90cff268bc4e33f3bb63f1", []}, "ranch": {:hex, :ranch, "1.8.1", "208169e65292ac5d333d6cdbad49388c1ae198136e4697ae2f474697140f201c", [:make, :rebar3], [], "hexpm", "aed58910f4e21deea992a67bf51632b6d60114895eb03bb392bb733064594dd0"}, From 946ae50688c4af03d35d507c8e4dff22708c9895 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Thu, 20 Nov 2025 13:33:26 +0100 Subject: [PATCH 08/11] Update prima --- mix.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.lock b/mix.lock index 523ec8712d57..eb03596902e7 100644 --- a/mix.lock +++ b/mix.lock @@ -131,11 +131,11 @@ "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, "php_serializer": {:hex, :php_serializer, "2.0.0", "b43f31aca22ed7321f32da2b94fe2ddf9b6739a965cb51541969119e572e821d", [:mix], [], "hexpm", "61e402e99d9062c0225a3f4fcf7e43b4cba1b8654944c0e7c139c3ca9de481da"}, "plug": {:hex, :plug, "1.18.1", "5067f26f7745b7e31bc3368bc1a2b818b9779faa959b49c934c17730efc911cf", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "57a57db70df2b422b564437d2d33cf8d33cd16339c1edb190cd11b1a3a546cc2"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.7.4", "729c752d17cf364e2b8da5bdb34fb5804f56251e88bb602aff48ae0bd8673d11", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "9b85632bd7012615bae0a5d70084deb1b25d2bcbb32cab82d1e9a1e023168aa3"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.7.5", "261f21b67aea8162239b2d6d3b4c31efde4daa22a20d80b19c2c0f21b34b270e", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "20884bf58a90ff5a5663420f5d2c368e9e15ed1ad5e911daf0916ea3c57f77ac"}, "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "polymorphic_embed": {:hex, :polymorphic_embed, "5.0.3", "37444e0af941026a2c29b0539b6471bdd6737a6492a19264bf2bb0118e3ac242", [:mix], [{:attrs, "~> 0.6", [hex: :attrs, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}], "hexpm", "2fed44f57abf0a0fc7642e0eb0807a55b65de1562712cc0620772cbbb80e49c1"}, "postgrex": {:hex, :postgrex, "0.19.3", "a0bda6e3bc75ec07fca5b0a89bffd242ca209a4822a9533e7d3e84ee80707e19", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d31c28053655b78f47f948c85bb1cf86a9c1f8ead346ba1aa0d0df017fa05b61"}, - "prima": {:hex, :prima, "0.1.8", "1f57fb7000046bb463b2a31200b138dd10c86fd78a289f1e947a970f740b68e0", [:mix], [{:esbuild, "~> 0.7", [hex: :esbuild, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.1", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}], "hexpm", "b559ee8213a8302fd40520cc55b0fcafbc884d471d198b262dd1e0a10170de17"}, + "prima": {:hex, :prima, "0.1.9", "34868e3570cf2c4fac42d6254e33678e9d75a8fe3d3253a38ee437f6481a2896", [:mix], [{:esbuild, "~> 0.7", [hex: :esbuild, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.1", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}], "hexpm", "7f24efb617dd94da867bf2d362eeab846897270eff989aeaa261f04590feae3f"}, "prom_ex": {:hex, :prom_ex, "1.11.0", "1f6d67f2dead92224cb4f59beb3e4d319257c5728d9638b4a5e8ceb51a4f9c7e", [:mix], [{:absinthe, ">= 1.7.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.1.0", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.11.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.18", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.10.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.4", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:peep, "~> 3.0", [hex: :peep, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.7.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.16.0", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 2.6.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.2", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.1", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "76b074bc3730f0802978a7eb5c7091a65473eaaf07e99ec9e933138dcc327805"}, "public_suffix": {:git, "https://github.com/axelson/publicsuffix-elixir", "fa40c243d4b5d8598b90cff268bc4e33f3bb63f1", []}, "ranch": {:hex, :ranch, "1.8.1", "208169e65292ac5d333d6cdbad49388c1ae198136e4697ae2f474697140f201c", [:make, :rebar3], [], "hexpm", "aed58910f4e21deea992a67bf51632b6d60114895eb03bb392bb733064594dd0"}, From 1940ee26cbbbafd9fcc1b36eb0d927a78cedfcf9 Mon Sep 17 00:00:00 2001 From: Sanne de Vries Date: Mon, 24 Nov 2025 10:01:16 +0100 Subject: [PATCH 09/11] Replace `Add goal` button with dropdown button in goal settings empty state --- lib/plausible_web/live/goal_settings/list.ex | 41 ++++++-- .../live/shared_link_settings.ex | 94 ++++++++++--------- 2 files changed, 80 insertions(+), 55 deletions(-) diff --git a/lib/plausible_web/live/goal_settings/list.ex b/lib/plausible_web/live/goal_settings/list.ex index 18c081ae7eff..1a6b62c6a8ec 100644 --- a/lib/plausible_web/live/goal_settings/list.ex +++ b/lib/plausible_web/live/goal_settings/list.ex @@ -160,15 +160,38 @@ defmodule PlausibleWeb.Live.GoalSettings.List do Learn more

- <.button - id="add-goal-button" - phx-click="add-goal" - x-data - x-on:click={Modal.JS.preopen("goals-form-modal")} - class="mt-4" - > - Add goal - + + + Add goal + + + + + Pageview + + + Custom event + + + Scroll depth + + +
""" end diff --git a/lib/plausible_web/live/shared_link_settings.ex b/lib/plausible_web/live/shared_link_settings.ex index 110d12bcef77..3b923fc56598 100644 --- a/lib/plausible_web/live/shared_link_settings.ex +++ b/lib/plausible_web/live/shared_link_settings.ex @@ -98,52 +98,54 @@ defmodule PlausibleWeb.Live.SharedLinkSettings do
<% else %> - <.filter_bar filtering_enabled?={false}> - <.button - id="add-shared-link-button" - phx-click="add-shared-link" - mt?={false} - x-data - x-on:click={Modal.JS.preopen("shared-links-form-modal")} - > - Add shared link - - - - <.table rows={@shared_links} id="shared-links-table"> - <:thead> - <.th hide_on_mobile>Name - <.th>Link - <.th invisible>Actions - - <:tbody :let={link}> - <.td truncate hide_on_mobile> - {link.name} - - - - <.td> - <.input_with_clipboard - name={link.slug} - id={link.slug} - value={Plausible.Sites.shared_link_url(@site, link)} - /> - - <.td actions> - <.edit_button - class="mt-1" - phx-click="edit-shared-link" - phx-value-slug={link.slug} - /> - <.delete_button - class="mt-1" - phx-click="delete-shared-link" - phx-value-slug={link.slug} - data-confirm="Are you sure you want to delete this shared link? The stats will not be accessible with this link anymore." - /> - - - +
+ <.filter_bar filtering_enabled?={false}> + <.button + id="add-shared-link-button" + phx-click="add-shared-link" + mt?={false} + x-data + x-on:click={Modal.JS.preopen("shared-links-form-modal")} + > + Add shared link + + + + <.table rows={@shared_links} id="shared-links-table"> + <:thead> + <.th hide_on_mobile>Name + <.th>Link + <.th invisible>Actions + + <:tbody :let={link}> + <.td truncate hide_on_mobile> + {link.name} + + + + <.td> + <.input_with_clipboard + name={link.slug} + id={link.slug} + value={Plausible.Sites.shared_link_url(@site, link)} + /> + + <.td actions> + <.edit_button + class="mt-1" + phx-click="edit-shared-link" + phx-value-slug={link.slug} + /> + <.delete_button + class="mt-1" + phx-click="delete-shared-link" + phx-value-slug={link.slug} + data-confirm="Are you sure you want to delete this shared link? The stats will not be accessible with this link anymore." + /> + + + +
<% end %>
From efbe695f39033837b545f26496d30c5e25f1e76b Mon Sep 17 00:00:00 2001 From: Sanne de Vries Date: Mon, 24 Nov 2025 11:38:22 +0100 Subject: [PATCH 10/11] Update test to check both empty and non-empty states of the add goal dropdown --- test/plausible_web/live/goal_settings_test.exs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/plausible_web/live/goal_settings_test.exs b/test/plausible_web/live/goal_settings_test.exs index 43d33bfee75d..de71b98177d9 100644 --- a/test/plausible_web/live/goal_settings_test.exs +++ b/test/plausible_web/live/goal_settings_test.exs @@ -89,7 +89,22 @@ defmodule PlausibleWeb.Live.GoalSettingsTest do refute resp =~ "Create your first goal" end - test "add goal dropdown is rendered", %{conn: conn, site: site} do + test "add goal dropdown is rendered in empty state", %{conn: conn, site: site} do + conn = get(conn, "/#{site.domain}/settings/goals") + resp = html_response(conn, 200) + assert element_exists?(resp, ~s/[id="add-goal-dropdown-empty"]/) + + assert element_exists?( + resp, + ~s/[phx-click="add-goal"][phx-value-goal-type="custom_events"]/ + ) + + assert element_exists?(resp, ~s/[phx-click="add-goal"][phx-value-goal-type="pageviews"]/) + assert element_exists?(resp, ~s/[phx-click="add-goal"][phx-value-goal-type="scroll"]/) + end + + test "add goal dropdown is rendered in non-empty state", %{conn: conn, site: site} do + {:ok, _goals} = setup_goals(site) conn = get(conn, "/#{site.domain}/settings/goals") resp = html_response(conn, 200) assert element_exists?(resp, ~s/[id="add-goal-dropdown"]/) From a1b4666687e7b06bcac38a50b82a77010969dfe0 Mon Sep 17 00:00:00 2001 From: Sanne de Vries Date: Mon, 24 Nov 2025 11:43:10 +0100 Subject: [PATCH 11/11] Remove pb-14 from feature gate --- lib/plausible_web/components/generic.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plausible_web/components/generic.ex b/lib/plausible_web/components/generic.ex index 7499d4712e28..a1aac36cdffa 100644 --- a/lib/plausible_web/components/generic.ex +++ b/lib/plausible_web/components/generic.ex @@ -522,7 +522,7 @@ defmodule PlausibleWeb.Components.Generic do current_team={@current_team} site={@site} > -
+
{render_slot(@inner_block)}