EXEPERTAI LAB

Research alpha

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

useInputContainer

Makes an input container wrapper clickable, delegating focus to the inner input/textarea when the user clicks non-interactive areas (icons, padding, status indicators). Built on top of useClickableContainer, so nested interactive elements (clear buttons, calendar toggles, links) are handled safely; clicking them does NOT steal focus from the input. Automatically detects input type: text-like inputs receive .focus(), while other types (checkbox, radio, file) receive .click().

@astryxdesign/core/hooks

Signature

Call shape
useInputContainer({ containerRef, inputRef, disabled = false, }: UseInputContainerOptions)
Parameters
NameType and behavior
optionsUseInputContainerOptions · required
Configuration object for the input container.
options.containerRefRefObject<HTMLElement | null> · required
Ref to the outer container/wrapper element.
options.inputRefRefObject<HTMLInputElement | HTMLTextAreaElement | HTMLElement | null> · required
Ref to the inner input or textarea element.
options.disabledboolean · optional · default false
Whether the input is disabled.
Returns
NameType and behavior
onClick(event: MouseEvent<HTMLElement>) => void
Click handler to attach to the container wrapper.
onMouseUp(event: MouseEvent<HTMLElement>) => void
Mouse up handler to attach to the container wrapper.

Usage

Makes an input container wrapper clickable, delegating focus to the inner input/textarea when the user clicks non-interactive areas (icons, padding, status indicators). Built on top of useClickableContainer, so nested interactive elements (clear buttons, calendar toggles, links) are handled safely; clicking them does NOT steal focus from the input. Automatically detects input type: text-like inputs receive .focus(), while other types (checkbox, radio, file) receive .click().

  • Use inside input wrapper components (TextInput, NumberInput, TimeInput, TextArea) to make the full container area clickable.
  • Attach both onClick and onMouseUp to the wrapper div for full interaction handling.
  • Use on bare inputs without a wrapper; there is no benefit if the input already fills the full clickable area.