The enum-over-boolean-flags swap is the strongest part, isSmall plus isLarge lets you represent both true which is meaningless. Two things on the clean version though. Making the whole card clickable by putting onClick on the div is a step back from a real button for a11y and keyboard, and since actionSlot renders inside that div, clicking Edit or Delete also fires onSelect unless you stopPropagation, which is easy to miss. And fully flattening the domain model works for three fields but if the card needs eight you have traded one prop for a wide order-sensitive call site. The middle ground is a narrow view-model type the card owns and the parent maps into, you get the decoupling from UserDomainModel without the prop explosion.
The enum-over-boolean-flags swap is the strongest part, isSmall plus isLarge lets you represent both true which is meaningless. Two things on the clean version though. Making the whole card clickable by putting onClick on the div is a step back from a real button for a11y and keyboard, and since actionSlot renders inside that div, clicking Edit or Delete also fires onSelect unless you stopPropagation, which is easy to miss. And fully flattening the domain model works for three fields but if the card needs eight you have traded one prop for a wide order-sensitive call site. The middle ground is a narrow view-model type the card owns and the parent maps into, you get the decoupling from UserDomainModel without the prop explosion.