useKeyPress
Key name, array, or a predicate for modifier combos: callback held in a refPress ↑ / ↓ anywhere: 0
Predicate combo Ctrl+Shift+K: off
useDebounce
Follows a value but only settles after it stops changingDebounced (300ms): -
useLocalStorage
Reload-safe state; the key-name union is the consumer's to ownComponent A
Component B
Both fields are separate components bound to playground.note: typing in one updates the other (same tab via a sync event, other tabs via the native storage event), and either clear resets both. Reload the page: the value is read synchronously, no default-value flash.
useSessionStorage
The per-tab sibling: same API over sessionStorageSame contract as useLocalStorage, scoped to this tab: reload keeps it, a new tab starts clean.
useDisabledReason
Priority-ordered checks → { disabled, reason }; spread buttonProps to get a bricked Button that explains itself on hoverblocked: No template selected