EXEPERTAI LAB

Research alpha

Time Machine
EXEPERTAI LAB
GALLERY / COLLECTION
← Browse Astryx gallery
hooks·hook·@astryxdesign/core

useClickableContainer

Makes a container element clickable while preserving nested interactive element behavior. Solves the "nested interactive elements" problem: when a card is clickable but contains buttons/links, clicking those should NOT trigger the card's action. Detects interactive ancestors between the click target and the container, and ignores text selections. Supports href navigation (including middle-click and Ctrl/Cmd+click for new tabs).

@astryxdesign/core/hooks

Signature

Call shape
useClickableContainer({ containerRef, interactiveRef, onClick: onClickProp, href, target, disabled = false, }: UseClickableContainerOptions): ClickableContainerResult
Parameters
NameType and behavior
optionsUseClickableContainerOptions · required
Configuration object for the clickable container.
options.containerRefRefObject<HTMLElement | null> · required
Ref to the outer container element.
options.interactiveRefRefObject<HTMLElement | null> · optional
Ref to the primary interactive element inside (link, button). If no onClick or href is provided, clicks are proxied to this element.
options.onClick(event: MouseEvent<HTMLElement>) => void · optional
Click handler fired when the container surface (not a nested interactive element) is clicked.
options.hrefstring · optional
Navigation URL. When provided, clicking the container navigates to this URL.
options.targetstring · optional
Link target (e.g., '_blank'). Used with href for navigation behavior.
options.disabledboolean · optional · default false
Whether the container is disabled.
Returns
NameType and behavior
onClick(event: MouseEvent<HTMLElement>) => void
Click handler to attach to the container element.
onMouseUp(event: MouseEvent<HTMLElement>) => void
Mouse up handler to attach to the container (handles middle-click navigation for href).

Usage

Makes a container element clickable while preserving nested interactive element behavior. Solves the "nested interactive elements" problem: when a card is clickable but contains buttons/links, clicking those should NOT trigger the card's action. Detects interactive ancestors between the click target and the container, and ignores text selections. Supports href navigation (including middle-click and Ctrl/Cmd+click for new tabs).

  • Attach both onClick and onMouseUp to the container element for full click handling including middle-click.
  • Use inside ClickableCard or SelectableCard for the standard card interaction pattern.
  • Use when the entire container is a single interactive element; just use a <button> or <a> directly.