From 8e5dd7e4c68418f9fe5d44d0fe0234261834b897 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 4 Jun 2026 16:40:05 +0200 Subject: [PATCH] feat(web): add chevron affordance and scope-badge slot to dropdown triggers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dropdown openers were visually indistinguishable from ordinary buttons. A trailing chevron now marks every dropdown trigger — both the shared dropdown_menu component and the bespoke member-filter trigger — and an optional badge slot lets a trigger show a status indicator beside its label. --- lib/mv_web/components/core_components.ex | 5 +++++ .../components/member_filter_component.ex | 1 + ...eld_visibility_dropdown_component_test.exs | 8 +++++++ .../member_filter_component_test.exs | 14 +++++++++++++ .../components/sort_header_component_test.exs | 21 +++++++++++++++---- 5 files changed, 45 insertions(+), 4 deletions(-) diff --git a/lib/mv_web/components/core_components.ex b/lib/mv_web/components/core_components.ex index 465d41a..13c69a8 100644 --- a/lib/mv_web/components/core_components.ex +++ b/lib/mv_web/components/core_components.ex @@ -464,6 +464,9 @@ defmodule MvWeb.CoreComponents do slot :inner_block, doc: "Custom content for the dropdown menu (e.g., forms)" + slot :trigger_badge, + doc: "Optional badge rendered in the trigger after the label (e.g. a scope badge)" + def dropdown_menu(assigns) do menu_testid = assigns.menu_testid || "#{assigns.testid}-menu" @@ -498,6 +501,8 @@ defmodule MvWeb.CoreComponents do <.icon name={@icon} /> <% end %> {@button_label} + {render_slot(@trigger_badge)} + <.icon name="hero-chevron-down" class="size-4" />