Coordinate shared UI interaction locks across complex React forms and workflows: duplicate-submit protection, conflicting actions, and navigation-sensitive state, all resolved through shared scopes with automatic lifecycle cleanup.
This is a pnpm workspace monorepo. Each package below still ships and versions independently on npm.
| Package | Version | Description |
|---|---|---|
@okyrychenko-dev/react-action-guard |
Core: UI blocking with priorities, scopes, and automatic cleanup | |
@okyrychenko-dev/react-action-guard-ui |
UI-agnostic guarded control primitives (buttons, links, fields, groups) | |
@okyrychenko-dev/react-action-guard-tanstack |
TanStack Query integration: automatic blocking during queries/mutations | |
@okyrychenko-dev/react-action-guard-router |
Navigation blocking for React Router, TanStack Router, and Next.js | |
@okyrychenko-dev/react-action-guard-devtools |
Visualization and debugging of blocking state |
See each package's own README for installation and usage. Full docs: react-action-guard-docs.
react-zustand-toolkit (separate repo, foundation)
↓
react-action-guard (packages/core)
↓
├─ react-action-guard-ui (packages/ui)
├─ react-action-guard-tanstack (packages/tanstack)
├─ react-action-guard-router (packages/router)
└─ react-action-guard-devtools (packages/devtools)
pnpm install # install all workspace packages
pnpm run build # build all packages (topological order)
pnpm run test # run all test suites
pnpm run typecheck
pnpm run lint
pnpm run check # lint + typecheck + test + buildScope a command to one package with pnpm's --filter, e.g. pnpm --filter @okyrychenko-dev/react-action-guard run test.
This repo uses Changesets for independent per-package
versioning. Run pnpm changeset in a PR that changes a package's public behavior, describe the
change, and pick a bump type. Merging the PR opens (or updates) a "Version Packages" PR with the
version bumps and changelog entries applied; merging that PR publishes the affected packages to
npm.
MIT © Oleksii Kyrychenko