OptionalclassName?: stringOptionalexercise?: ExerciseMappedReturnDtoOptionalfavourite?: booleanOptionalhideIcon?: booleanOptionalleadingIcon?: ReactNodeOptionalmuted?: booleanOptionalname?: stringOptionalonClick?: () => voidOptionalselected?: booleanOptionalshowSelectedCheck?: booleanOptionalshowTags?: booleanOptionalsubtitle?: string | nullOptionaltrailing?: ReactNodeOptionalvariant?: "card" | "row""card" (rounded, bordered) or "row" (flush table row). Default "card".
variant picks the surface: "card" (default) is the rounded, bordered
card used in grids/strips; "row" is a flush, un-bordered table row (tighter
icon, no rounded frame) so a divided list reads as the Exercises table. The
caller owns the row dividers + container border (see the Profiles axis).showTags hides the exercise tags (e.g. to keep a horizontal strip compact).showSelectedCheck toggles the trailing check shown when selected.trailing adds caller content before the check (e.g. a trend badge).hideIcon drops the animation icon, and name/subtitle override the
DTO-derived text — for entities that aren't full exercises (e.g. a migration
source exercise, which has a plain name and no media).leadingIcon renders a standalone icon in the icon slot (left, vertically
centered) in place of the animation icon — e.g. a status marker.
The shared exercise card used wherever an exercise is selected — the workout builder's exercise picker and the Performance matrix axes. Renders the exercise's animation icon, name (+ favourite star), subtitle and exercise tags inside a selectable rounded card.
Presentational + click-only: callers own what
selected/onClickmean. The card width is left to the caller (className) so it works both as a full-width list row and as a fixed-width item in a horizontal strip.