Accessibility
Button from @prepared911/ui/button always renders a <button>. Navigation is Link from @prepared911/ui/link. The element semantics do the heavy lifting; your job is to name the button clearly, pick the right element for the interaction, and keep disabled state honest.
<button> for actions. Link is the anchor for navigation.Enter and Space activate buttons. Enter activates links.disabled attribute, removing the element from the tab order.Link, set external and newTabLabel. The label is rendered for assistive tech and names the new tab.icon and label. The label is visually hidden. Do not render an icon as children with no name.aria-pressed; disclosure triggers expose aria-expanded with aria-controls.Link to navigate and Button to run an action.
<button> with type="button" by default, or type="submit" / type="reset" for those actions. There is no html-type enum.Link for navigation. external sets target="_blank" and rel="noopener noreferrer" and requires newTabLabel.aria-pressed on non-exclusive toggle buttons; aria-expanded + aria-controls on disclosure triggers.disabled attribute; it removes the button from the tab order and announces as "dimmed / disabled". Use aria-disabled="true" only when the control must remain focusable for a future tooltip-driven explanation.
aria-label that names the target ("Delete incident ABC-123") when the row isn't part of the accessible name.