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.
useLocalStorage, raw
encoding: "raw" stores a string as given, for a key older code wrote without quotesStored as the bare text prod under playground.env, not as "prod".
useSessionStorage
The per-tab sibling: same API over sessionStorageSame contract as useLocalStorage, scoped to this tab: reload keeps it, a new tab starts clean.
useAction
Pending, a success or error toast, and a Retry; run never throwsEach press shows a spinner toast, then a success or an error toast that replaces it. The error toast has a Retry button that runs the same call again.
ThemeToggle
Light by default, the choice stored by name, applied before paint by themeBootScriptWrites versable-light or versable-dark under pg-theme, the key the playground's own boot script reads.
useDisabledReason
Priority-ordered checks → { disabled, reason }; spread buttonProps to get a bricked Button that explains itself on hoverblocked: No template selected