Switches from custom CSS implementation to `Primer::Beta::Counter` for
rendering counters in menu on Notifications page. Fixes clipping of
larger notification numbers (≥ 3 digits), including applying rounding
of very large numbers (e.g. `4k+`).
https://community.openproject.org/wp/OP-19459
Allows headers to receive title arguments so callers can pass system
arguments (including semantic attributes) to rendered headings.
https://community.openproject.org/wp/72945
Wraps header descriptions in Primer text so callers can pass system
arguments for layout while keeping muted text as the default.
https://community.openproject.org/wp/72945
Keep transparent BorderBoxList headers condensed on the bottom side
when default or spacious header padding is applied. This lets those
variants add breathing room above the header content without increasing
the gap to the first row.
https://community.openproject.org/wp/72945
Allow BorderBoxList headers to override their vertical padding while
keeping row padding inherited from the underlying BorderBox.
Use spacious header padding for Backlogs lists that keep condensed rows,
and expose the option in Lookbook previews for review.
https://community.openproject.org/wp/72945
Adds `scheme: :transparent` to BorderBoxListComponent with CSS overrides
for transparent header background and no separator line. Backlogs
callers adopt the transparent scheme.
https://community.openproject.org/wp/72945
Render plain BorderBoxList headers by default while keeping the
CollapsibleHeader toggle available behind an explicit option. Align the
plain header branch with CollapsibleHeader markup so later Backlogs
header restyling can reuse the same structure.
Add interactive mode for dynamic BorderBox lists and enable it for
Backlogs lists. Generic lists stay quiet by default while Backlogs
updates remain announced.
Adds `DEFAULT_ACTION_SCHEME` (`:default`) to `Header` so callers
no longer need to pass `scheme:` for standard header buttons.
Updates Lookbook preview and Backlogs sprint component to use the
new default.
https://community.openproject.org/wp/72945
Adds a `count_label:` keyword to `Header` that defaults to
`I18n.t(:label_x_items, count:)` and always sets `aria-live:
polite` on the counter badge. Callers no longer need to wire
up aria attributes manually. Uses `merge_aria` so additional
caller-provided aria attributes are preserved.
https://community.openproject.org/wp/74684
Introduces a shared BorderBox-backed list component and moves the
Backlogs-specific work package card list into the Backlogs module.
Wires Backlogs callers to the new component API, keeps specialized
card rendering behind an item factory hook, and replaces old OpPrimer
work-package card list coverage with focused component specs.
https://community.openproject.org/wp/74684
Centralizes the `#content:has(#content-bodyRight > *)` selector
into a `split-pane-active` mixin so it is defined in one place.
Purely mechanical — no behavioral change.
Render story point card metrics as numeric-only text while keeping the
full localized story point label available to assistive technology.
Remove the Backlogs-specific container query from the generic work
package card styles and cover the accessible metric behavior in
component specs.
https://community.openproject.org/wp/74683
The common card box now exposes a generic `item` slot via `with_item`
for manually composed rows. Automatic rendering still only builds
work package items from the `work_packages:` argument.
The Backlogs inbox now owns the truncate-middle show-more row, its
route, Turbo frame, and draggable marker.
https://community.openproject.org/wp/73968
Marks the hard-coded `InfoLineComponent.new(work_package:)` call in
the common card template as the integration point for InfoLine
variants and status presentation requested by WP 73089. Defers the
actual argument forwarding so this PR keeps a narrow scope.
https://community.openproject.org/wp/73968
Forward metric slot calls from the Backlogs card wrapper to the wrapped
common card so Backlogs card box items keep the same customization
surface as generic items. Keep story points as the default metric when
callers do not provide their own metric slot.
https://community.openproject.org/wp/73968
Expose a top-level menu slot on the common work package card so card
and card-box callers can configure action menus in the same style. Keep
menu_src as a compatibility shortcut for existing deferred Backlogs
menus while allowing inline non-deferred menu items through the slot.
https://community.openproject.org/wp/73968
Move Backlogs-specific item/card concerns behind Backlogs components
while keeping the common card box API focused on generic item
rendering. The common item keeps generic draggability hooks, while
Backlogs owns story points, menu URLs, and story controller row data.
https://community.openproject.org/wp/73968
Remove the story-points display from the shared work package card and
expose a generic metric slot instead. Backlogs now opts into that slot
with a small story-points component when rendering sprint, bucket, and
inbox cards.
https://community.openproject.org/wp/73968
Extracts the BorderBox row arguments into a row-bridge object
(`WorkPackageCardBoxComponent::Item`) so the box can build rows without
forcing the visual card to render row-level concerns. The visual
`WorkPackageCardComponent` constructor narrows to
`(work_package:, menu_src:)`; in-repo callers updated.
Adds a polymorphic slot API (`with_work_package_item`,
`with_empty_item`) modeled on `Primer::Alpha::FileTreeView`, plus a
public `#build_item` for off-box callers. Renames the URL pass-through
to a generic `params:` kwarg, leaving Backlogs all-state handling at the
call sites.
https://community.openproject.org/wp/73968
Treat card box containers as Rails dom_target sources so shared card
boxes can accept symbols, strings, model classes, and model instances
without Backlogs-specific ID branching.
Move Backlogs drag-and-drop target IDs into explicit caller-provided
configuration, keeping the existing controller protocol while omitting
generic DnD data for consumers that do not opt in.
https://community.openproject.org/wp/73968
Treat the work package card menu source as optional so the shared
card component can render inline menus as well as deferred menus.
Honor caller-provided menu IDs and use the header reader when
deriving the default card box header menu ID.
https://community.openproject.org/wp/73968
Adds YARDoc to `WorkPackageCardComponent#initialize` and to
`WorkPackageCardBoxComponent` (constructor and the four slots:
`header`, `empty_state`, `footer`, `show_more`), so consumers can
read the API surface without reading the lambda bodies.
https://community.openproject.org/wp/73968
Teaches `WorkPackageCardBoxComponent` an optional
`with_show_more(truncate_middle:, text:)` slot. When set, the box
truncates `work_packages` to the first `truncate_middle` rows plus
a derived tail (20% of first page, min 1) and emits a
`Box-row scheme: :neutral` between them advertising the omitted
middle. The slot is also the toggle — leaving it unset means no
truncation, preserving sprint and bucket behaviour.
Default copy is sourced from the new
`work_package_card_box_component.show_more` locale key with
`one`/`other` plurals; consumers can override via `text:` (with a
`%{count}` placeholder). Adds a Lookbook preview for the slot.
https://community.openproject.org/wp/73968