Merge remote-tracking branch 'origin/main' into issue/mitgliederverwaltung-547

# Conflicts:
#	lib/mv_web/live/member_live/index.html.heex
This commit is contained in:
Simon 2026-07-12 12:29:47 +02:00
commit fe6d1c52f9
9 changed files with 72 additions and 75 deletions

View file

@ -135,7 +135,7 @@ defmodule MvWeb.CoreComponents do
<.button variant="ghost" size="sm">Edit</.button>
<.button disabled={true}>Disabled</.button>
"""
attr :rest, :global, include: ~w(href navigate patch method data-testid form)
attr :rest, :global, include: ~w(href navigate patch method data-testid form type)
attr :variant, :string,
values: ~w(primary secondary neutral ghost outline danger link icon),

View file

@ -171,8 +171,8 @@ defmodule MvWeb.Layouts do
</label>
<span class="font-bold">{@club_name}</span>
</header>
<!-- Main Content (shared between mobile and desktop) -->
<!-- Main Content (shared between mobile and desktop) -->
<main class="px-4 py-8 sm:px-6 lg:px-8">
<div class="mx-auto space-y-4 max-full">
{render_slot(@inner_block)}

View file

@ -26,8 +26,7 @@ defmodule MvWeb.Layouts.Sidebar do
aria-label={gettext("Close sidebar")}
class="drawer-overlay lg:hidden focus:outline-none focus:ring-2 focus:ring-primary"
tabindex="-1"
>
</label>
></label>
<aside id="main-sidebar" class="sidebar" aria-label={gettext("Main navigation")}>
{sidebar_header(assigns)}
<%= if @current_user do %>
@ -174,8 +173,7 @@ defmodule MvWeb.Layouts.Sidebar do
<span
class="absolute -top-0.5 -right-0.5 size-2 rounded-full bg-primary"
aria-hidden="true"
>
</span>
></span>
<% end %>
</span>
<span class="menu-label">{@label}</span>

View file

@ -158,8 +158,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</.badge>
<.icon name="hero-chevron-down" class="size-4" />
</.button>
<!--
<!--
NOTE: We use a div panel instead of ul.menu/li structure to avoid DaisyUI menu styles
(padding, display, hover, font sizes) that would interfere with our form controls.
Filter controls are form elements (fieldset with legend, radio inputs), not menu items.
@ -232,8 +232,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</div>
</fieldset>
</div>
<!-- Groups: one row per group with All / Yes / No (like Custom Fields) -->
<!-- Groups: one row per group with All / Yes / No (like Custom Fields) -->
<div :if={length(@groups) > 0} class="mb-4">
<div class="text-xs font-semibold opacity-70 mb-2 uppercase tracking-wider">
{gettext("Groups")}
@ -299,8 +299,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</fieldset>
</div>
</div>
<!-- Fee Types: one row per fee type with All / Yes / No (same style as Groups) -->
<!-- Fee Types: one row per fee type with All / Yes / No (same style as Groups) -->
<div :if={length(@fee_types) > 0} class="mb-4">
<div class="text-xs font-semibold opacity-70 mb-2 uppercase tracking-wider">
{gettext("Fee types")}
@ -366,8 +366,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</fieldset>
</div>
</div>
<!-- Dates Group (built-in fields: exit_date with mode selector, join_date range) -->
<!-- Dates Group (built-in fields: exit_date with mode selector, join_date range) -->
<div class="mb-4">
<div class="text-xs font-semibold opacity-70 mb-2 uppercase tracking-wider">
{gettext("Dates")}
@ -484,8 +484,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</div>
</fieldset>
</div>
<!-- Custom Date Fields Group (in-memory filter; one row per :date custom field) -->
<!-- Custom Date Fields Group (in-memory filter; one row per :date custom field) -->
<div :if={length(@date_custom_fields) > 0} class="mb-4">
<div class="text-xs font-semibold opacity-70 mb-2 uppercase tracking-wider">
{gettext("Custom date fields")}
@ -523,8 +523,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</fieldset>
</div>
</div>
<!-- Custom Fields Group -->
<!-- Custom Fields Group -->
<div :if={length(@boolean_custom_fields) > 0} class="mb-2">
<div class="text-xs font-semibold opacity-70 mb-2 uppercase tracking-wider">
{gettext("Individual datafields")}
@ -590,8 +590,8 @@ defmodule MvWeb.Components.MemberFilterComponent do
</fieldset>
</div>
</div>
<!-- Footer -->
<!-- Footer -->
<div class="mt-4 flex justify-between pt-3 border-t border-base-200">
<.button
type="button"

View file

@ -152,11 +152,9 @@ defmodule MvWeb.StatisticsLive do
<p class="text-xs text-base-content/70 mt-2">
<span class="inline-block w-2 h-2 rounded-full bg-success align-middle mr-1"></span>
{gettext("Paid")}
<span class="inline-block w-2 h-2 rounded-full bg-warning align-middle mx-2 mr-1">
</span>
<span class="inline-block w-2 h-2 rounded-full bg-warning align-middle mx-2 mr-1"></span>
{gettext("Unpaid")}
<span class="inline-block w-2 h-2 rounded-full bg-base-content/20 align-middle mx-2 mr-1">
</span>
<span class="inline-block w-2 h-2 rounded-full bg-base-content/20 align-middle mx-2 mr-1"></span>
{gettext("Suspended")}
</p>
</div>
@ -271,8 +269,7 @@ defmodule MvWeb.StatisticsLive do
class="inline-block w-2 h-2 rounded-full bg-success shrink-0"
aria-hidden="true"
title={gettext("Joins")}
>
</span>
></span>
</span>
</td>
<td class="align-middle text-xs font-mono text-base-content whitespace-nowrap pt-0">
@ -282,8 +279,7 @@ defmodule MvWeb.StatisticsLive do
class="inline-block w-2 h-2 rounded-full bg-error shrink-0"
aria-hidden="true"
title={gettext("Exits")}
>
</span>
></span>
</span>
</td>
</tr>
@ -437,8 +433,7 @@ defmodule MvWeb.StatisticsLive do
class="inline-block w-2 h-2 rounded-full bg-success shrink-0"
aria-hidden="true"
title={gettext("Paid")}
>
</span>
></span>
</span>
</td>
<td class="align-middle text-xs font-mono text-base-content whitespace-nowrap pt-0">
@ -448,8 +443,7 @@ defmodule MvWeb.StatisticsLive do
class="inline-block w-2 h-2 rounded-full bg-warning shrink-0"
aria-hidden="true"
title={gettext("Unpaid")}
>
</span>
></span>
</span>
</td>
<td class="align-middle text-xs font-mono text-base-content whitespace-nowrap pt-0">
@ -459,8 +453,7 @@ defmodule MvWeb.StatisticsLive do
class="inline-block w-2 h-2 rounded-full bg-base-content/20 shrink-0"
aria-hidden="true"
title={gettext("Suspended")}
>
</span>
></span>
</span>
</td>
<td class="align-middle text-xs font-mono text-base-content whitespace-nowrap pt-0">

View file

@ -92,8 +92,8 @@ defmodule MvWeb.UserLive.Form do
/>
</div>
<% end %>
<!-- Password Section -->
<!-- Password Section -->
<div class="mt-6">
<label class="flex items-center space-x-2">
<input
@ -129,8 +129,8 @@ defmodule MvWeb.UserLive.Form do
required
autocomplete="new-password"
/>
<!-- Only show password confirmation for new users (register_with_password) -->
<!-- Only show password confirmation for new users (register_with_password) -->
<%= if !@user do %>
<.input
field={@form[:password_confirmation]}
@ -180,8 +180,8 @@ defmodule MvWeb.UserLive.Form do
<% end %>
<% end %>
</div>
<!-- Member Linking Section (admin only: only admins can link/unlink users to members) -->
<!-- Member Linking Section (admin only: only admins can link/unlink users to members) -->
<%= if @can_manage_member_linking do %>
<div class="mt-6">
<h2 class="mb-3 text-base font-semibold">{gettext("Linked Member")}</h2>