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
https://community.openproject.org/wp/74555
- Use work_package variable name instead of story in Backlogs::WorkPackagesController
- Remove baclog_bucket flag from work packages controller spec
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 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
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
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
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
Adds the shared `WorkPackageCardBoxComponent` (with nested `Header`)
and `WorkPackageCardComponent` (with nested `Menu`), so
`SprintComponent`, `BucketComponent`, and the inbox can converge on
a single Primer `BorderBox` + card-row rendering path.
The box derives its DOM id, list id, drop-target id, and per-card URLs
from a single `container:` argument (`Sprint`, `BacklogBucket`, or
`nil` for the inbox). It exposes `header`, `empty_state`, and
`footer` slots; the header exposes `description`, `actions` (typed
`:button` slot), and `menu`.
Adds component specs for all four classes plus Lookbook previews for
the two top-level primitives. Consumers are migrated in follow-up
commits.
https://community.openproject.org/wp/73968
Passes an `UpdateRegistry` instance as a parameter to
`InplaceEditFieldComponent` and `InplaceEditFieldsController` instead of
referencing the global class directly. Updates both specs to inject a
dedicated `UpdateRegistry.new` instance rather than stubbing class-level
methods.
Support content block rather than `text:` param, thereby fixing calling
button methods (e.g. `with_leading_visual_icon`). from slots.
Also support overriding `scheme:` param.
Set the `aria-control` attribute server-side in `CheckAllComponent` and
client-side in `CheckAllController` (belt and braces approach).
Also introduces `attributeTokenList` helper function to ease working
with HTML attributes that accept a space-delimited list of tokens.
Resolves an issue when used inside collapsible section headers: clicking
"Check all"/"Uncheck all" should not toggle the collapsible section.
**Behavior**
Introduces `CheckableController` and `CheckAllController`, replacing
`GlobalHelpers` functions and `link_to_function` calls.
**Rendering**
Provides `OpenProject::Common::CheckAllComponent` to render a standard
UI and take care of connecting appropriate Stimulus controller/outlets,
actions.
Clean-up sass code
Avoid that the type selector in the WP from is scrolled two far when being activated. Currently, it is scrolled twice (one time when activating it and once again when selecting an item). Thus the dropdown overlaps the actual input
Move logo to the left side
Make naming consistent for MainMenuToggleComponent and add a component test
Let menu toggle button scroll with the rest of the page
Move modules menu to the left and show it on mobile