<details
class="relative hidden lg:block"
data-controller="dashboard-widget-size"
data-dashboard-widget-size-section-key-value="<%= section[:key] %>"
data-action="keydown->dashboard-widget-size#stopKeydown">
<summary
class="focus-ring list-none cursor-pointer text-secondary hover:text-primary transition-colors p-0.5 opacity-0 group-hover:opacity-100 [&::-webkit-details-marker]:hidden"
aria-label="<%= t("pages.dashboard.widget_size.label") %>">
<%= icon("sliders-horizontal", size: "sm", class: "!w-3.5 !h-3.5") %>
</summary>
<div class="absolute right-0 top-full mt-1.5 z-10 w-48 p-2.5 space-y-2.5 bg-surface rounded-xl shadow-border-xs border border-primary">
...
</div>
</details>
<%= render DS::Disclosure.new(
body_class: nil,
data: {
controller: "dashboard-widget-size",
dashboard_widget_size_section_key_value: section[:key],
action: "keydown->dashboard-widget-size#stopKeydown"
}) do |disclosure| %>
<% disclosure.with_summary_content do %>
<span class="sr-only"><%= t("pages.dashboard.widget_size.label") %></span>
<%= icon("sliders-horizontal", size: "sm", class: "!w-3.5 !h-3.5") %>
<% end %>
<div class="absolute right-0 top-full mt-1.5 z-10 w-48 p-2.5 space-y-2.5 bg-surface rounded-xl shadow-border-xs border border-primary">
...
</div>
<% end %>
DS Drift Patrol — 1 finding
Scan period: 2026-06-11 → 2026-06-18 (commits merged to
main)Open PRs scanned: 20 open PRs — all CLEAN
Merged commits scanned: 9 UI-relevant commits — 1 violation
Finding 1 — Rule 1: Raw
<details>bypassesDS::DisclosureCommit:
c29380ce— feat(dashboard): masonry packing + per-widget size controls (#2328) (merged 2026-06-15)File:
app/views/pages/dashboard.html.erbIntroduced
+lines:Rule broken: Raw
<details>/<summary>element used instead ofDS::Disclosure.Good news — the fix is already available: Commit
beec50b4(merged the same day, 2026-06-15) added abody_class:option toDS::Disclosurespecifically to handle this pattern — passbody_class: nilto suppress themt-2body wrapper for absolutely-positioned popovers. This is exactly the mechanism needed for the size menu.Suggested fix:
The
summarycan be made accessible either viaaria-labelon the<summary>element or ansr-onlyspan in the summary content (the same approach used ingoals/_color_picker.html.erbafterbeec50b4).Scan coverage
c29380ce(dashboard masonry),007f84db(settings debugs refactor),6ea931f3(YNAB import),09dc4281(rules re-apply),d908560e(cashflow deep-link),e342ac4a(accounts subtype),beec50b4(DS goals color picker fix),2d3d9744(DS tokens in rules/llm tables),59b2e59a(DS focus ring dashboard)+diff lines only; DS source files, tests, locales, migrations, and generated assets excluded./cc @gariasf