Upgrade daisyUI to current 5.x, remove v4 leftovers and add the UI CI guard #597
Labels
No labels
bug
duplicate
enhancement
help wanted
high priority
invalid
L
low priority
M
medium priority
needs refinement
optional
question
S
security
technical improvement
UX Improvement
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
local-it/mitgliederverwaltung#597
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivation
daisyUI is vendored at 5.0.8 (July 2025). Since then the dropdown opens on focus (5.2), button styles were rewritten (5.6), the modal supports
popoverandaria-current/aria-pressedget styling (5.7). Every component issue of the UI standard (#402) should be built once, against the current version. The codebase also carries 49 daisyUI 4 classes that do nothing in v5, dead CSS and code, and nine icon-size variants. Without a guard, these patterns come back.Visible improvement
Controls that silently lost their v4 styling look as intended again; the file input gets a hover state; icons have consistent sizes.
Scope (ordered steps,
just ci-devgreen after each)assets/vendor/daisyui.jsanddaisyui-theme.jsto the current 5.x release. Compare buttons, dropdowns and modals before/after in both themes (5.6 rewrote buttons); fix regressions.:hoveron the file input's selector button; if not, add one commented local rule (DESIGN_GUIDELINES §1.5).form-control,label-text,label-text-alt,*-bordered,tabs-bordered, avatarplaceholder) per the table in DESIGN_GUIDELINES §1.5..member-filter-dropdownrules, the unusedgeneric_listcomponent (inMvWeb.CoreComponents; also drop it from the pinned surface intest/mv_web/components/import_surface_test.exs, which fails on purpose until the pin list matches),assets/tailwind.config.js(not loaded under Tailwind 4), translate German comments inapp.css.size-4/size-5(DESIGN_GUIDELINES §3.2), including the 12 legacyh-4 w-4; replace the search bar's inline SVG with<.icon>. Replacez-[100]withz-100.just ci-devand fails on daisyUI 4 classes, Tailwind palette colors,data-confirmand raw modal markup inlib/mv_web/live/**(matched by the class tokensmodal/modal-openinside aclassattribute, independent of the<dialogline: 12 of the 13 dialogs are formatted multi-line), with an exception list of today's remaining occurrences. Document how to remove entries, and the one way to add one: until U4, a new dialog that cannot wait for the components copies the legacy pattern exactly and the same change adds it with an entry naming U4 as the issue that removes it (DESIGN_GUIDELINES §10.3, CODE_GUIDELINES §8.11, adoption plan (g)). Decide whether the guard also scans the component modules (lib/mv_web/components/**:CoreComponentsplusMvWeb.Components.Table,.Form,.Overlay,.Feedbacksince #539) for v4 classes and palette colors (today twotext-zinc-*sit in thelistcomponent incore_components.ex). Decide the guard's form: a source-scanning ExUnit test next to the guards #539 added (test/mv_web/components/component_layering_test.exs,import_surface_test.exs, modeled ontest/mv/architecture/layering_test.exs) runs insideci-devand keeps the exception list in the test; a separatejustrecipe is the alternative. Other raw daisyUI classes are out of the guard's scope; document that review covers them.<.button>,<.badge>,<.input>,<.table>,<.header>) in both themes, with one section per component module (Core, Table, Form, Overlay, Feedback — the split from #539), so each later issue adds its components to the section of the module that owns them.Out of scope
Acceptance criteria
label-text, palette color,data-confirmor raw modal in a LiveView, including a multi-line<dialogwhoseclass="modal modal-open"sits on its own line; the exception list is in the repo.just ci-devgreen after every step.Dependencies
core_components.ex) merged first, so the showcase and later components use the split modules.member_live/index.ex) merged first: most v4 classes and the.member-filter-dropdownmarkup sit in the member overview, which #535 moves into new modules.Anchors (verified against
main@d9093a1fand against the #539 branch; re-check file:line againstmainafter #535 is merged, before filing)assets/vendor/daisyui.js(version 5.0.8),assets/css/app.css:16,24,59(plugin blocks).member-filter-dropdown:assets/css/app.css:260assets/tailwind.config.js(no@config, no--configinconfig/config.exs:131)label-text|form-control|-bordered|tabs-borderedunderlib/mv_web(unchanged by #539; none in the component modules)generic_list:lib/mv_web/components/core_components.ex, pinned attest/mv_web/components/import_surface_test.exs:37(#539 branch)core_components.ex:502–503(list,text-zinc-500/text-zinc-700, #539 branch)Caution
ui-tagged browser tests should run once before merging.